The Bee design system.
Every colour, type size, and component on bee.com.bn resolves to a token defined in app/globals.css. This page renders those tokens live — if it looks right here, it is right everywhere.
Logo
The Bee mark, wordmark, and lockups — downloaded from Figma and shipped as SVGs in /public/brand/. These tiles render the real asset files.
The logo has two parts — the mark (the bee glyph) and the wordmark (“Bee”). The signature pairing is black ink on Bee yellow. Files live in /public/brand/; full guidance is in brand/README.md.
Lockups
bee-logo-horizontal.svgPrimary lockup — light backgrounds
bee-logo-horizontal-yellow.svgAll-yellow — dark backgrounds
bee-logo-pill.svgBlack pill — compact / badge use
App icon
48×48 square, 12px corner radius. For favicons, app tiles, and avatars.
bee-icon-black.svgApp icon — black square
bee-icon-yellow.svgApp icon — yellow square
Mark
The bee glyph alone. A currentColor file (bee-mark.svg) is also provided for theme-following inline use.
bee-mark-black.svgOn light / on yellow
bee-mark-yellow.svgOn dark / black
Wordmark
“Bee” set in a bold geometric sans. Yellow and a currentColor variant also ship.
bee-wordmark-black.svgOn light
bee-wordmark-white.svgOn dark / black
Usage
Clear space: keep free space around the logo equal to at least 25% of the icon height on all sides. Minimum size: 24px icon, 96px-wide horizontal lockup — below that, use the icon only.
Do
- Use bee-logo-horizontal as the default on light surfaces.
- Use the yellow lockup or white wordmark on dark surfaces.
- Keep black ink on yellow — the brand’s signature contrast.
Don’t
- Don’t recolour the mark outside the three brand colours.
- Don’t put yellow ink on white — it fails contrast.
- Don’t stretch, rotate, add shadows, or change the corner radius.
Colour
All colours are named by role. Hex values target WCAG AA against the surfaces they sit on. Light-only system — the dark sections are design moments, not a theme.
Brand — Bee yellow
The real Bee yellow. honey-500 (#FFE048) is the exact brand value; the ramp is built around it. Yellow is a fill colour — black ink sits on it. For yellow-family text or icons on white, only honey-800 clears AA contrast.
--color-brand-honey-50#FFFDECSubtle wash, callout backgrounds
--color-brand-honey-100#FFF7CCHover backgrounds, highlights
--color-brand-honey-200#FFF0A6Light fills
--color-brand-honey-300#FFE978Decorative accents, hover borders
--color-brand-honey-400#FFE45CHover on primary fills
--color-brand-honey-500#FFE048Primary brand — button fills, icon squares
--color-brand-honey-600#E6C42APressed on primary fills
--color-brand-honey-700#B89800Focus ring, deep accent fills
--color-brand-honey-800#7D6700Yellow-family text & icons on white (AA)
--color-brand-honey-900#4A3D00Darkest accent, pressed link text
Surfaces & ink
White-base scheme. The page is a hair-warm white; cards sit a touch brighter with a hairline border; true black is reserved for dark “moment” sections and is the ink colour.
--color-surface-page#FDFDFBDefault page background
--color-surface-raised#FFFFFFCards, modals — pair with a hairline border
--color-surface-dark#0A0A0ADark moment sections — true black
--color-ink#0A0A0AHeadings + primary text, ink on yellow
--color-ink-on-dark#FFFFFFText on --surface-dark
Neutrals
Greys for borders, dividers, and secondary text. Never gray-on-gray for body copy.
--color-neutral-0#FFFFFFCard surfaces, modals
--color-neutral-50#F7F7F5Section backgrounds
--color-neutral-100#EDEDEADividers, subtle surfaces
--color-neutral-300#C9C9C4Borders
--color-neutral-500#7A7A75Secondary text
--color-neutral-700#3D3D3ABody text
--color-neutral-900#1A1A1AHeadings
Semantic
Trimmed to three. There is no warning colour — it collided with honey, so honey itself carries attention. These appear only in real UI states.
--color-success#0F8A4FConfirmations, completed states
--color-danger#C0392BErrors, destructive actions
--color-info#2A6EBBInformational
Typography
Single-family system in Geist Sans. Display defaults to weight 600 — self-assured without shouting. Geist Mono handles rate codes and numerals.
--text-xs12px / 0.75rem · Captions, badges, eyebrow labels
Brunei, in one app.
--text-sm14px / 0.875rem · Secondary body, footnotes
Brunei, in one app.
--text-base16px / 1rem · Body
Brunei, in one app.
--text-lg20px / 1.25rem · Lead paragraphs
Brunei, in one app.
--text-xl25px / 1.5625rem · H4, large body
Brunei, in one app.
--text-2xl31px / 1.9375rem · H3
Brunei, in one app.
--text-3xl39px / 2.4375rem · H2
Brunei, in one app.
--text-4xl49px / 3.0625rem · H1 — interior pages
Brunei, in one app.
--text-5xl61px / 3.8125rem · Hero — desktop
Brunei, in one app.
Spacing
A 4px-base scale. Section rhythm leans on the larger steps; component padding on the smaller ones.
--spacing-14px--spacing-28px--spacing-312px--spacing-416px--spacing-524px--spacing-632px--spacing-748px--spacing-864px--spacing-996px--spacing-10128px
Radius
Cards use md, buttons use pill, hero and feature blocks use lg.
--radius-sm6px · Inputs, small chips--radius-md12px · Cards--radius-lg20px · Hero / feature blocks--radius-pill9999px · Buttons, pillsElevation
Used sparingly — the system leans on colour and spacing more than shadow.
--shadow-smCard resting state--shadow-mdCard hover--shadow-lgModals, popoversComponents
Live instances of the primitives in components/ui and components/marketing — rendered, not screenshotted.
Button
Four variants, three sizes. md is the default; lg for hero CTAs only. Focus ring is always visible.
Eyebrow label
The only place all-caps is allowed. 12px, weight 600, tracking 0.08em, honey-800.
Card
White surface, md radius, sm shadow at rest. Add interactive for the hover lift.
Static card
Resting elevation, no hover behaviour.
Interactive card
Hover to see the 1–2px lift and shadow change.
Motion
Default transition is 200ms ease-out for colour, transform, and opacity. Everything respects prefers-reduced-motion.
Permitted
- Card hover lift (1–2px translate-Y + shadow)
- Button press (0.97 scale on active)
- Stat counter count-up on scroll-into-view
- Hero entrance — fade up 8px, staggered, under 600ms
- Accordion expand/collapse
Forbidden
- Auto-play hero carousels
- Parallax scroll
- Scroll-jacking
- Animation chains over 800ms on load
Accessibility
WCAG 2.1 AA is the floor. Every page must pass this checklist before handoff.
- All interactive elements reachable by keyboard, in a logical order.
- Visible focus indicator on every interactive element.
- Meaningful alt for content images, alt="" for decorative.
- Headings in semantic order — no skipped levels.
- Contrast ≥4.5:1 for body text, ≥3:1 for large text and UI.
- Forms label every input and associate errors with aria-describedby.
- Page language set on <html>. Skip-to-content link is first focusable.
- No content conveyed by colour alone.
Full spec: 03_design_system.md in the project root.