Design System

OWLS Design System

Component Library & Style Guide — Phase 1: New Skin / Visual Refresh

Mona Sans | Fluent UI Icons | Current State Reference

color Color System
Gray Scale — Cool Blue-Gray (anchored on #CED2D8, HSL 216/11%)

Bootstrap-convention 50-950 scale. Used for text, backgrounds, borders, UI chrome. Preserves the cool blue undertone of the OWLS heading color.

50
#F7F7F8
100
#EFF0F1
200
#DEE0E2
300
#D0D3D8
anchor
400
#B0B6BF
500
#8891A0
600
#647081
label
700
#495260
800
#303640
900
#191E24
950
#0F1115
Accent Scale — Coral Pink (anchored on #FF5073, HSL 348/100%)

Bootstrap-convention 50-950 scale. Used for brand accent, header, highlights, CTAs. 500 is the base OWLS secondary color.

50
#FAF5F6
100
#F6E4E8
200
#F1C6CE
300
#ED97A8
400
#F4718B
500
#FF5073
base
600
#F91F4B
700
#D50B34
800
#A00D2A
900
#6E0C20
950
#430A15
Indigo Scale — Navy→Periwinkle (anchored on #6372C0, HSL 230/42%)

Bootstrap-convention 50-950 scale. Near-triadic pairing (118°) with the coral accent. Used for functional UI — primary CTAs (indigo-700), focus rings (indigo-500 @ 20% alpha), links, and cool-tone neutrals. The mid-tones dip slightly in saturation (39–42%) for a "professional / grown up" feel; the dark end spikes to 70–100% saturation to give navy shades weight. Blue appears ~5-8% darker in measured L% than coral at matching steps — this compensates for the Helmholtz-Kohlrausch perceptual brightness bias so the two scales feel tonally balanced.

50
#F4F6FB
100
#E8ECF7
200
#C0C9E7
300
#98A5D7
400
#7F8DCC
500
#6372C0
base
600
#4C5CAC
700
#344598
CTA
800
#212F7D
900
#111D62
950
#000B47
Semantic roles: indigo-700 → primary CTA bg (WCAG AAA on white text) · indigo-800 → CTA hover · indigo-900 → CTA active/pressed · indigo-500 → focus-ring outline (4.18:1 vs white) · indigo-500 @ 20% α → focus-ring box-shadow · indigo-50 / 100 → subtle hover / selected-row bg
Functional Colors
Action/Orange
#FF8C42
Info/Indigo
indigo-600
Validation
#D50B34
Success
#34AD6C
Warning
#FFC107
text_font Typography
Type Scale
Heading 1 — 1.75rem / 28px --owls-font-size-h1
Heading 2 — 1.25rem / 20px --owls-font-size-h2
Heading 3 / Section — 1rem / 16px --owls-font-size-h3
Body — 0.875rem / 14px --owls-font-size-base
Small / Labels — 0.75rem / 12px --owls-font-size-sm
Large Text — 1.125rem / 18px --owls-font-size-lg
Field Labels
Field Label — Help Tooltip on Hover

Transcript: "when we hover over a field, the label of the field, it pops up with information about that field". Add data-help="…" to any .owls-field-label and hovering it reveals the help text as a dark tooltip above the label. Use for per-field guidance that's too long for a visible placeholder.

Hover either label to see the tooltip.

Field Label — Validation Error on Hover

Transcript: "field has highlighted the label as highlighted red. And when you hover over it, it gives you what the error". Add .has-error + data-error="…" to the .owls-field-group wrapper. The label text turns red; hovering it shows the error message as a red tooltip. The input itself gets the existing .is-invalid class for the red border.

Hover either red label to see the error message.

navigation Header / Top Navigation
Charcoal Header Bar

Full-width charcoal bar (48px tall). Logo + welcome text on the left, muted-gray action buttons on the right. The logo is OWL + a coral <span class="owls-logo-accent">S</span>. Header buttons use .owls-btn-header (default muted icon) with optional data-icon-color variants, and .owls-btn-header-danger for the log-out variant that turns coral on hover.

Welcome Anthony
cursor_click Buttons
Primary Actions

The primary CTA is .btn-owls-primary (indigo). Use it for serious brand actions — "Generate Policy", "Save", "Commit", "Sign In". Orange (.btn-owls-action) is the legacy bright-action color, kept for compatibility; prefer indigo for new work. Green is reserved for Search/Confirm. Blue is used sparingly for Info. Danger is red.

Button Group (as seen in header)
Inline Action Buttons
Disabled State
Section-level Search Button (pattern)

Transcript: "certain sections of the screen you can search just using the fields in there… like this one here is a client information search". The pattern is a section-scoped search that queries only the fields inside one form section, not the whole screen. Place the green search button (from above) as a right-aligned action row at the top of the .owls-section-card-body (see §9 Section Card). No new component needed.

person Client Information

The "Client Information Search" button is scoped to the client fields in this section only, not the whole screen. Placement: first action row of the section body, right-aligned.

form Form Fields
Text Input
Clearable input
Required field marker
Field rule markers (OWLS-specific)
Orange = dependency Blue = rule-calculated
Select / Dropdown

Native <select> is kept as the accessible baseline. Use the styled .owls-dropdown component when visual polish matters (sparingly — filter rows, modals, form fields where brand consistency is visible).

Native select (accessible baseline)
Styled dropdown (.owls-dropdown)
checkmarkActive
checkmarkPending
checkmarkCancelled
checkmarkArchived (disabled)
Motor
checkmarkMotor Accident
checkmarkMotor Theft
Property
checkmarkFire / Allied Perils
checkmarkFlood
checkmarkBurglary
checkmarkAscend Insurance Brokers
checkmarkCape Point Advisors
checkmarkDrakensberg Risk
checkmarkNaledi Partners (JHB)
checkmarkProtea Brokerage Services
checkmarkVeldt Underwriters
checkmarkLiability
checkmarkFire
checkmarkTheft
checkmarkFlood
checkmarkPersonal Accident
Autocomplete (inline type-to-filter)

Transcript: "autocompletes filter based on what you're typing". Unlike .owls-dropdown[data-searchable] (which opens on click), autocomplete opens as the user types and highlights matching substrings. Use for long free-form lists like brokers, policyholders, and product codes.

Date Field & Calendar

Text input with calendar icon is the collapsed state. Click opens the .owls-calendar popover. The calendar is also usable inline (no input) for schedulers and range pickers.

Collapsed (input only)
calendar_ltr
calendar_ltr
Calendar states
Single date (inline)
April 2026
Mo
Tu
We
Th
Fr
Sa
Su
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
Date range
April 2026
Mo
Tu
We
Th
Fr
Sa
Su
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
Popover (shown open)
calendar_ltr
April 2026
Mo
Tu
We
Th
Fr
Sa
Su
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
Password

Standard <input type="password"> wrapped with an optional show/hide toggle. Click the eye icon to reveal the value.

Display-only Field

Static text in a field layout — used for computed values, descriptions, and informational rows. Transcript: "a field that displays text".

POL-2026-001-0472
R 2,480.00
Not yet calculated
Checkbox
Textarea
Segmented Control

White-pill-on-gray-track pattern for field-level selectors. Active option lifts with shadow. Use for mutually exclusive choices within a form.

Chip Toggles

Fixed 30px height, coral outline selection. No size change on toggle. Used for multi-select options like additional covers.

Search Banner

Dashed-border card for search-first entry flows. Contains icon, title, description, and CTA button.

search
Find an existing client
Search by ID, passport, or name to auto-fill details.
Premium Summary

Label/value list for fee breakdowns. Total row emphasized with background and larger font.

Base PremiumR 2,100.00
Admin FeeR 150.00
SASRIAR 30.00
Commission (12.5%)R 262.50
Monthly Total R 2,480.00
document Section Cards

Collapsible section cards with monochrome icon chips, progress fractions, and chevron toggles. Shadow elevation on hover. Icon turns pink on header hover.

document Policy 5 / 5
Example Sub-group
money Policy Premium 3 / 7

Section content here. Click header to collapse.

list Sidebar Navigation

Collapsible tree nav with search filter input. Pink highlight on selected item. Parent categories toggle open/closed.

table Grid / Table
Standard Grid with Filter Row
Policy No. arrow_sort Client Name arrow_sort Status Premium Inception Date Cancellation Date Actions
POL-001 John Smith Active R 1,250.00 2026-01-15 -
POL-002 Sarah Johnson Pending R 2,100.00 2026-02-01 -
POL-003 Michael Williams Cancelled R 950.00 2025-06-10 2026-03-01
POL-004 Emma Davis Error R 0.00 2026-03-20 -
POL-005 David Brown Active R 3,400.00 2025-11-01 -
document Cards
Plan Cards
Plan A — Basic Cover

Basic coverage plan with standard benefits and premium structure.

R 450 / month
Plan B — Enhanced Popular

Enhanced coverage with additional riders and lower excess.

R 850 / month
Plan C — Comprehensive

Full coverage plan with all benefits and priority support.

R 1,200 / month
Section Card (collapsible, Fluent icon + ± toggle)

The dominant pattern for grouping related fields on a hero screen. White header bar with a coral Fluent icon on the left, title in the middle, animated +/- toggle on the right. Click anywhere on the header to collapse/expand. Section-level actions (Client Information Search, Add, Export, etc.) live inside the body as the first row — NOT in the header.

person Client Information

Click either header to toggle collapse/expand. The +/- control is two CSS spans — the horizontal line is always visible (the minus), the vertical line rotates 90° and fades out when expanded, leaving just the minus; when collapsed it rotates back to 0° and appears, forming a plus.

Card Radio Group

Transcript: "different cards for each of the sections to say, that's my selection… essentially radio button groups, but as cards". Click a card to select it. Keyboard accessible: Tab to focus, Space/Enter to select.

checkmark
Basic Cover

Third-party only

R 480/mo
checkmark
Standard

Third-party, fire & theft

R 1,200/mo
checkmark
Comprehensive

Full cover with extras

R 2,480/mo
warning Alerts & Validation
error_circle Validation error: Please complete all required fields before submitting.
checkmark_circle Policy POL-001 saved successfully.
warning This policy has amendments pending review.
info 3 tasks have been escalated to you.
comment Tooltips
Hover over me info    
window Modal
Confirm Amendment dismiss

Are you sure you want to apply this amendment to policy POL-001?

warning This action cannot be undone.
System Status Overlay

Transcript: "this pop up or overlay… just indicating what the system is currently doing". Full-page busy indicator with a spinner and a status message. Shown during long-running operations (search, KYC lookup, policy generation). Closes automatically when the operation completes — no dismiss control.

Inline preview (what the overlay looks like)

Searching KYC databases…

This can take up to 10 seconds

Generating policy…

Please wait — do not navigate away

Popup Search Panel

Transcript: "when I click search it now then shows me all the valid options that I can select from. I double click that and it loads down to the bottom screen". The distinctive OWLS search pattern: click a Search button → panel opens with filter input + results list → double-click a result → panel closes and the detail loads into the underlying screen.

Selected:
checkmark_circle Badges & Status
Active Pending Cancelled In Progress
emoji Iconography

20px Regular weight, ligature web font. Usage: <i class="fluent-icons-20">icon_name</i>

searchsearch savesave printprint sign_outsign_out documentdocument calendar_ltrcalendar_ltr infoinfo error_circleerror_circle checkmark_circlecheckmark_circle warningwarning settingssettings peoplepeople mailmail data_bar_verticaldata_bar_vertical arrow_sortarrow_sort dismissdismiss listlist infoinfo
ruler Spacing & Density
Spacing Scale (4px base unit)
xs
4px
sm
8px
md
12px
lg
16px
xl
24px
2xl
32px
Component Spacing
ElementPaddingMargin / GapToken
Label to input-0 0 4px 0--space-xs
Field input4px 8px-xs / sm
Field group-0 0 12px 0--space-md
Field row (horiz. group)-gap: 8px--space-sm
Section heading8px 12px24px 0 16px 0sm md / xl lg
Button6px 16px-~sm lg
Button icon gap-margin-right: 4px--space-xs
Card16px0 0 12px 0--space-lg / md
Grid cell5px 8px-~xs sm
Alert10px 16px0 0 12px 0~sm lg / md
Alert icon gap-margin-right: 6px~xs
Modal body24px---space-xl
Sidebar item6px 16px-~sm lg
Sidebar icon gap-margin-right: 6px~xs
Grouping Rules
RelationshipSpacingToken
Label to its input4px below--space-xs
Related fields in a row8px gap--space-sm
Between field groups (rows)12px below--space-md
Section heading to first field16px below--space-lg
Between sections24px above heading--space-xl
Between major page areas32px--space-2xl
textbox Input Group

Wraps an .owls-field-input with an inline text prefix and/or suffix (e.g. R for Rand currency, % for percentages). Add .has-prefix and/or .has-suffix to the wrapper to reserve padding on the input. Prefix/suffix spans are pointer-event transparent so clicks still focus the input. Used throughout the Policy Quote screen (7 currency inputs alone).

Currency prefix (R)
R
R
Percentage suffix (%)
%
%
Unit prefix (KG)
KG
dock_panel_bottom Sticky Action Bar

Fixed footer bar docked to the viewport bottom. Icon-only buttons with tooltips on the left, separator, progress bar + count, then stacked total + primary CTA on the right. Uses .owls-action-bar (fixed), .btn-owls-icon-only for compact buttons, .owls-action-bar-separator, .owls-action-bar-progress, and .owls-action-bar-total.

Static example
45%
Total R 2,480.00