Foundations & Tokens

The locked token layer for the whole FinCheqIQ build. Every later phase references these by name — colour, type, space, radius, elevation, motion and the named breakpoint scale. Nothing outside this file introduces a new value.

Component library

Base palette

A cool, desaturated slate canvas so the status palette is the only saturated thing on screen during an eight-hour shift. One brand colour — Deep Harbour — reserved for primary actions, active navigation and focus rings. It never signals a cheque state.

--brand
#0F5E7A · Deep Harbour
--brand-hover
#0C4F68
--brand-tint
#E6F0F4 · active nav
--chrome
#16212C · sidebar
--canvas
#EDF0F4 · app bg
--surface
#FFFFFF · card
--surface-2
#F6F8FA · table head
--ink
#151B22 · body text
--ink-3
#5F6A76 · labels
--line
#DDE3EA · hairline

Status palette — the signature system

Seven families carry every validation, confidence, risk and integration state in the product. Colour is never the only carrier: each family also owns a distinct glyph shape and a left state-cap, so a cheque's state survives a colour-blind reviewer, a monochrome print-out and a glance from across the processing floor.

FamilyShapeToken groupCarries
ValidSolid disc--st-valid-*VALID · APPROVED · ACKNOWLEDGED · HIGH CONFIDENCE MATCH · within limit
ReviewTriangle--st-review-*REVIEW_REQUIRED · MEDIUM CONFIDENCE — REVIEW · limit breach · date exception · potential duplicate
InvalidSquare--st-invalid-*INVALID · REJECTED · LOW CONFIDENCE MATCH · INTEGRATION_FAILED · exact duplicate
ProcessingSpinning ring--st-processing-*PROCESSING · extracting · submitting · RETRY_PENDING
PendingHollow disc--st-pending-*PENDING · received · queued · not started · archived
HoldDiamond--st-hold-*PENDING_EXTERNAL_SYSTEM · pending integration queue · escalated · PROCESSING_ERROR
UnusableHatched bar--st-unusable-*NO USABLE SIGNATURE · SIGNATURE REGION NOT DETECTED · MICR unreadable · NOT_EXTRACTED
Rule for every later phase. A state may only be drawn from these seven families. If a new state appears in a phase, map it onto an existing family — do not introduce an eighth colour.

Typography

IBM Plex Sans Condensed for headings and dense table furniture — it holds column headers at 11px without crowding. IBM Plex Sans for UI prose. IBM Plex Mono, tabular, for every amount, ID, score, count and timestamp so numeric columns align on the decimal.

Headings · --font-head

Manual Review Workbench

30px / 1.16 / 600 / -0.014em · --fs-3xl


Processing Queue

24px · --fs-2xl · page titles

Signature comparison

20px · --fs-xl · section titles

Customer master record

17px · --fs-lg · card titles

UI text · --font-ui

Cheque routed to review: the extracted amount in words does not reconcile with the numeric amount.

15px / 1.5 · --fs-md · body


Dense table cell and helper text sit at 13.5px.

13.5px · --fs-sm


Numerics · --font-mono, tabular
CHQ-2026-0041827OMR 12,450.000
CHQ-2026-0041828OMR 3,900.500
CHQ-2026-0041829OMR 147.250

Space, shape & elevation

A 4px base grid, a radius scale that tops out at 12px so the product reads precise rather than playful, and four elevation steps that pair a border with a shadow — the eye parses a drawer over a table without needing colour to change.

Spacing · 4px base

--sp-14px
--sp-28px
--sp-416px
--sp-624px
--sp-732px
--sp-956px

Radius

--r-sm 4px · badge, tag
--r-md 6px · button, input
--r-lg 8px · card, table
--r-xl 12px · modal, toast

Elevation

--e-1 · card / panel
--e-2 · menu / popover
--e-3 · modal / drawer
--e-4 · toast

Motion

Four durations and three easings. Motion confirms a state change or a spatial relationship — it never delays a reviewer from finishing a cheque, and it never bounces.

TokenValueApplies toTry it
--motion-micro130ms · ease-outHover, focus, checkbox, colour change, inline field error settling in
--motion-standard220ms · ease-in-outTab switch, sidebar rail collapse, meter fill, skeleton → content
--motion-emphasis320ms · ease-entryDrawer and modal entrance; exits run at --dur-exit 180msSee overlays
--dur-status900ms · single pulseA badge changing state. One pulse, never repeated, never a bounce.

Responsive breakpoint scale

Named once here, referenced by name in every later phase. Full responsiveness is a hard requirement of the build, not a finishing pass — every table, grid and editor documents its narrow-width behaviour against this scale.

TokenWidthShell behaviourData-table behaviour
mobile360–599Sidebar → off-canvas drawer (hamburger). Search collapses to an icon. Bank instance ID hides, environment dot stays.Card-per-row transform, or horizontal scroll with a sticky first column
mobile-lg600–767Off-canvas drawer. Search still icon-triggered. KPI cards go two-up.Card-per-row transform
tablet768–1023Off-canvas drawer. Search bar returns inline. Two-column grids.Horizontal scroll, sticky first column, sticky header
tablet-lg1024–1279Sidebar docks as a 64px icon rail with hover tooltips. Three-column grids.Full table, non-critical columns may drop
desktop1280–1535Full 264px sidebar, collapsible to rail and remembered.Full table
desktop-lg1536+Full sidebar, content capped at 1440px so line length stays readable on ops-center displays.Full table with detail drawer opening beside it

Shell at mobile — tap the hamburger

FinCheqIQ 7 NH
Cheque Upload Processing Queue Manual Review
CHQ-2026-0041827Review
AmountOMR 12,450.000
SignatureNo usable sig
CHQ-2026-0041828Valid
AmountOMR 3,900.500

At mobile and mobile-lg the sidebar leaves the layout entirely and returns as an off-canvas drawer using the same --motion-emphasis entrance as every other drawer in the product — one motion vocabulary, not two.

The topbar condenses in a fixed order: the bank instance ID drops first, then the user's name and role, then the search field folds into an icon that expands across the bar on tap. The environment dot and the unread count never drop — they are the two things a reviewer must not lose.

The queue table becomes one card per cheque. Cheque ID, amount and state stay; sortable columns become a filter sheet. This is the transform every later phase reuses at mobile.

Verify at 360390430768102412801920

Roles used across the prototype

Every role the UI can display traces to a requirement that names it. No persona is invented because it seems plausible for a bank — where the documents leave the bank's operating model open, that is stated rather than filled in.

RoleNamed inSees in FinCheqIQ
Branch StaffCheque intake and first-line triage
Processing Center OperatorBatch intake, processing queue, exception triage
Reviewer (Maker)Manual Review Workbench; submits exception decisions
Approver (Checker)Checker Approval; cannot approve their own maker action
System AdministratorUsers, roles, masters, thresholds, integration configuration
AuditorRead-only tamper-evident audit trail
Integration AdministratorIntegration queue, retry policy, reconciliation
Operations ManagerOperational and management reporting
Fraud & Risk ManagementRisk indicator configuration and thresholds
The bank defines its own approval hierarchy and maker-checker role names. Role labels shown in this prototype are the requirement-named roles, not a proposed bank org chart.