Files
libra/docs/ux-design.md
T
Naser Mansour a8316cfc82 Reconcile pipeline docs with manual commits made outside the pipeline (Jan 2026)
Checked all 21 manual commits between abde8698 and 147231f (pre-dating
today's takeover) against the newly-built docs/tasks/ and docs/ux-design.md.
Two real conflicts found and fixed:

- Scholarship Aspiration section (task 16-6) was built, then fully removed
  from /about in production (commit e8c1730, 2026-01-11) — task title and
  ux-design.md corrected to say REMOVED, do not re-implement.
- Two-factor authentication was disabled in config/fortify.php at client
  request (commit f8d9133, 2026-01-17) — CLAUDE.md and ux-design.md
  corrected to say the 2FA code path is dormant, not live.

Everything else in that range (copy edits, mail/SMTP fixes, autorefresh bug
fixes, footer brand wording, php-fpm production notes already captured in
CLAUDE.md) doesn't contradict anything in the pipeline docs — no edit needed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-27 22:08:08 +03:00

138 lines
9.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# UX / Design Reference — Libra Law Firm
Retrospective documentation of the design system as it is currently **built and live**. This
is not a proposal — it describes what shipped, so a dev/QA agent picking up a new task can match
existing patterns rather than invent new ones. Synthesized from `docs/brand.md`, epics 9/10/12/13/14/16,
and the root `CLAUDE.md`.
## Brand colors (current — source of truth: `docs/brand.md`)
The palette has changed twice since the original PRD. **Use the values below**, from `docs/brand.md`,
for any new work — they are the most recent and match what Epic 12 shipped.
| Token | Hex | Usage |
|---|---|---|
| Primary — Dark Forest Green | `#2D3624` | Header/footer backgrounds |
| CTA — Warm Gold | `#A68966` | Buttons, links, accents |
| Background — Warm Cream | `#F4F1EA` | Main page background |
| Text — Forest Green | `#2D322A` | Headings, body text |
| Card — Pure White | `#FFFFFF` | Card backgrounds |
| Active — Olive Green | `#4A5D23` | Active states, language toggle |
| Primary Light | `#3D4634` | Primary hover state |
| CTA Hover | `#8A7555` | Button hover state |
| CTA Light | `#C4A882` | Light accents |
| Active Hover | `#5A7030` | Active-state hover |
| Deep Black | `#1A1A1A` | Logo artwork, headline emphasis |
**History (do not use these for new work, they are superseded):**
- Epic 1 / PRD / Epic 9 originally specified **Navy Blue `#0A1F44` + Gold `#D4AF37`**.
- Epic 10 ("Brand Color Refresh") replaced that with **Charcoal `#4A4A42` + Warm Gray `#C9C4BA`**.
- Epic 12 ("Branding Refresh") replaced *that* with the **Dark Forest Green + Warm Gold** palette
above, which is what `docs/brand.md` documents and what is currently live. Epic 9's own stories
(button/form/card specs) still reference the original Navy+Gold hex values — treat those as
structural/pattern guidance only (border-radius, padding, states) and substitute the current
hex values from the table above.
## Typography
- **Arabic:** Cairo or Tajawal (Google Fonts), weights Light 300 / Regular 400 / SemiBold 600 / Bold 700.
- **English:** Montserrat or Lato, same weight set.
- `docs/brand.md` additionally suggests a serif (Playfair Display / Libre Baskerville) for the
organization name/headline treatment and an italic serif for taglines, with a sans body
(Source Sans Pro / Open Sans / Inter) — this is brand-identity guidance; the app itself
implements the Cairo/Tajawal + Montserrat/Lato pairing from Epic 9.2.
- **Hierarchy:** H1 Bold 2.5rem/40px · H2 SemiBold 2rem/32px · H3 SemiBold 1.5rem/24px ·
Body Regular 1rem/16px · Small Regular 0.875rem/14px.
- Line height: 1.6 body, 1.3 headings.
- `font-display: swap`, critical fonts preloaded, loaded via Google Fonts + Tailwind `font-family`
config with `@font-face` fallbacks.
## Layout system
- Container max-width: **1200px**.
- Card padding: 24px; card border-radius: 8px; card shadow `0 2px 8px rgba(0,0,0,0.1)`, with a
subtle lift + shadow increase on hover.
- Button padding 12px 24px, border-radius 6px; input/textarea padding 12px 16px, border-radius 6px,
textarea min-height 120px.
- **Breakpoints:** Mobile `<576px` · Tablet `576–991px` · Desktop `992–1199px` · Large Desktop `>=1200px`.
Mobile-first: single-column + collapsible sections on mobile, two-column/collapsible sidebar on
tablet, full multi-column grid + sidebars on desktop. Touch targets >= 44px. Tables scroll
horizontally on small screens; calendar and forms must remain usable on mobile.
- Transitions are short and subtle: button hover 150ms ease, card hover 200ms ease, modal
open/close 200ms, all under 300ms — and must respect `prefers-reduced-motion` (no auto-playing
animations).
## Component patterns (Epic 9 stories 9.4–9.7)
- **Buttons:** primary = CTA-gold background / dark text, hover to CTA-hover; secondary =
transparent with gold border + gold text, hover fills gold with dark text; disabled = flat gray
background/text, no hover, `cursor: not-allowed`; danger = solid red (`#E74C3C`) with white text.
Loading state shows a spinner; all buttons have a visible focus state. Built by extending Flux UI's
button component with Tailwind component classes.
- **Forms:** inputs/textareas/selects share consistent border + radius, gold border on focus;
selects and checkboxes/radios are custom-styled (not native) with gold accents on
checked/selected state; labels are SemiBold with a `*` required indicator; errors show a red
border plus a message rendered directly below the field. Built on Flux UI form components with
explicit RTL alignment handling.
- **Cards/containers:** off-white/cream background, optional gold top/left accent border for
featured or important cards; dashboard stat cards add a gold-accented icon, a large number, and
a trend indicator; list cards use consistent item spacing and clear click targets. Implemented as
a reusable Blade card component with variant props.
- **Navigation/footer:** fixed-top nav, brand-primary background, logo left on desktop / centered
on mobile, gold link text with an active-link indicator, styled language toggle, and a full-width
slide/dropdown mobile menu (Alpine.js) with 44px+ touch targets. Footer shares the brand-primary
background and carries logo + firm info, contact details, Terms/Privacy links, and copyright; it
stays pinned to the bottom of short pages (sticky footer).
## Bilingual / RTL–LTR rules
- Arabic is primary and renders RTL; English is secondary, LTR. `dir="rtl"` is set on `<html>` for
Arabic; layout uses Tailwind's RTL support and logical properties (`start`/`end` rather than
`left`/`right`) so components flip automatically rather than needing per-direction overrides.
- In RTL: text aligns right, navigation mirrors (logo moves to the right), form labels sit on the
right, directional icons/arrows flip, and margins/paddings swap sides.
- Switching language must not break layout — calendars and tables must render correctly in both
directions, and every component is expected to be tested in both.
- All user-facing strings live in language files (`ar`/`en`); there is no hardcoded UI copy.
## Key page layouts
- **Home** (Epic 14): Navigation → Hero (tagline + intro + CTA buttons, Warm Cream background) →
About (Huda Armouche's photo + bio) → Services (4 cards: Consultations, Representation,
Litigation, Contracts) → Values (6 icon cards) → Latest Posts (3 most recent published posts,
pulled live via `Post::where('status','published')->latest()->take(3)->get()`, with a "View All"
link) → Footer (phone + address + links). Sections alternate between Warm Cream and White
backgrounds; CTAs use Warm Gold.
- **About Us** (Epic 16, new page at `/about`): Navigation → Hero (title + identity statement) →
Vision & Mission (three-fold: For Itself / For Society / For Diaspora, card layout) → Values
(6 core values: Integrity, Justice, Knowledge, Women's Empowerment, Professionalism, Social
Innovation) → Goals (7 goals, numbered/scannable) → Legal Services (grouped by category:
consultations, litigation, family law, business services) → Footer. (A Scholarship Aspiration
section was built under this epic but removed from `/about` entirely on 2026-01-11 at Naser's
request — do not re-add without confirming; see `docs/tasks/16-6.md`.)
- **Auth pages** (Epic 13 — login, forgot/reset password, confirm-password, email verify): the
2FA challenge page exists in code but is currently dormant — 2FA has been disabled in production
since 2026-01-17 (see root `CLAUDE.md` Authentication section). Split-screen layout. Left panel: Dark Forest Green (`#2D3624`) background with the
LIBRA logo centered. Right panel: Warm Cream background with a subtle SVG botanical/geometric
background pattern (low-opacity brand colors) behind the form. On mobile, only the form side
shows, with the logo displayed above it. The language toggle's `light` variant was darkened
(`text-primary` instead of `text-body/70`) specifically for visibility on this light panel,
without changing its appearance on the dark public-nav background.
- **Dashboards** (Epics 6 admin / 7 client): standard authenticated-app shell — nav/sidebar +
content area using the same card, button, and table components as the rest of the app. Admin
dashboard emphasizes stat cards, Chart.js analytics, and data tables with export actions; client
dashboard is read-mostly (consultations, timelines, profile) with a single primary action
(submit new booking) and a booking-limit indicator.
## Accessibility (WCAG AA — Epic 9.10)
- Color contrast: body text >= 4.5:1, large text (18px+ bold or 24px+ regular) >= 3:1, UI elements
(buttons, borders, icons) >= 3:1. The gold-on-dark-forest-green and text-on-cream combinations
must be verified against these ratios whenever a color changes.
- Focus indicators must be visible (a gold outline), never conveyed by color change alone.
- Full keyboard navigation: every interactive element reachable, logical tab order, a skip-to-main-content
link.
- Screen readers: correct heading hierarchy (h1 > h2 > h3), alt text on all images, ARIA labels
where needed, form labels programmatically associated with their fields.
- Motion: respect `prefers-reduced-motion`; no auto-playing animations.