Appearance

System reference

The rules that connect identity, interface behavior, and product journeys.
@bubbasfw/ui · Foundation 0.5.0 · Brand 1.0.0
Brand Studio supplies an immutable public-safe foundation release. The package vendors that release and verifies its source identity, file rights, checksums, semantic roles and contrast before building. Consumers pin the package or a platform adapter at build time.

Hierarchy and layout

One page title. Put the task, its current state, and its main action first. Use 1200 px maximum page width and 720 px reading width, with 16/24/32 px gutters. Reflow at 640 and 960 px; inspect 320 px, typical phone, tablet, and desktop. Keep long reading comfortable and tables scrollable within their own region.

Space and shape

Use the 4 px baseline: 4, 8, 12, 16, 24, 32, 48, 64. Group related controls with 8–12 px, content with 16–24 px, sections with 32–64 px. Controls use 4 px corners; independent panels use 12 px. Reserve cards for information that belongs together.

Motion

Feedback takes 140 ms. Motion confirms a real change and never delays the task. Honor reduced motion: remove transitions, animated transforms, parallax, and decorative movement. Shared overlays appear without forced animation and Skeleton stays still. Essential progress remains labeled.

Color and appearance

Use semantic roles for UI and original brand inks for identity. Light information surfaces and neutral charcoal dark surfaces share the same hierarchy. Brand blue and navy belong to illustration and bounded campaign treatments. Red marks the primary action; gold is a small accent. Offer Light/Dark/System in tools and native apps; fixed marketing compositions are deliberate.

Focus and keyboard

Every action works with keyboard and pointer. Use a visible 2 px focus outline with 2 px separation and at least 3:1 contrast. Preserve a logical order. Radio groups and tabs use one tab stop plus arrow/Home/End navigation; dialogs trap focus, close with Escape, and return to their actual trigger. Never hide focus as decoration.

Targets and text

Targets are 48 px by default and never smaller than 44 × 44 px. Support native text scaling and browser zoom; avoid fixed content heights and truncated essential copy. Body text and labels meet 4.5:1; meaningful boundaries meet 3:1. White small text on bright blue fails the body-text requirement: use black or a solid information surface.

Host font contract

Load the licensed font in the app, then set ThemeProvider fontFamily to its registered native name or loaded web CSS family. Shared headings, buttons, form labels/hints/errors, choice labels, inputs and modal content resolve this scoped default. Native Views do not inherit font family. Nested providers inherit it; explicit text/input style.fontFamily overrides it. Text variant="code" retains monospace. Omission preserves existing host/platform defaults. The npm package contains no font binary; app-owned raw native text and navigation still need explicit styles.

Names and semantics

Use a button for an action and a link for a destination. Icon actions need an accessible name. Visible labels remain present for fields. FormField connects labels, hints, errors, required and disabled states. Use headings in order; meaningful images get plain alt text and decorative artwork stays out of the accessible name.

States and feedback

Show default, hover, pressed, keyboard focus, selected, disabled, busy, invalid, and read only where relevant. Busy actions block duplicate submission. Disabled explains a prerequisite when needed. Loading names the work; empty offers a next step; errors preserve user input and provide recovery; offline identifies saved content and unavailable actions. Status always has text, not color alone.

Forms and decisions

Keep input labels visible, instructions beside the relevant field, and validation specific. Retain values after failure. Ask for confirmation for consequential destructive actions with a named object and a clear consequence. Dialog and Sheet remain focused tasks; longer flows deserve a page. Toast is supplementary feedback, never the only record of an important outcome.

Honest data

A known zero is zero. Missing stays unknown; stale identifies its saved time/source; failed retrieval is unavailable; ended offers stay ended. Published hours and reported Open/Closed are separate. Retail and case prices are separate. A design example is sample content and establishes no current business fact.

Platform behavior

Shared package components use React Native primitives and NativeWind. Native apps retain safe areas, status bars, hardware back, system input and existing platform navigation. Existing web apps may use their own semantic HTML adapter with the same pinned foundations. Consumers own routing, data, authorization, persistence and device acceptance.

Contribution and reuse

Find the component, task pattern and real consumer example first. Extend the shared implementation for a repeated need, integrate the requesting app, then update the catalog, source contracts, examples, and behavior checks. Preserve compatible APIs. A preview note proposes a change; it does not approve identity or release software.

Acceptance belongs to the journey

Check the actual product with pointer and keyboard, light/dark/system, phone and desktop, long content, missing data, request failure and offline recovery. Native bundles and a passing web build do not prove installed iOS/Android interaction or assistive technology support. Record the exact source/package identity beside the evidence.