# Needle Brand System > Needle interfaces are calm, precise, compact, and easy to work in. Use a soft green stage, crisp white work surfaces, dark readable text, restrained shadows, and green accents that support the task. ## Files - brand.json: Full brand specification — colors, typography, logos, principles, dimensions, and page types. - brand-recipes.json: UI patterns such as header pill, card, footer, and code block. - brand.css: CSS file with @font-face declarations, semantic tokens under :root{}, grouped component anatomy variables such as `--header-tool-row-*`, `--layout-workbench-shell-*`, `--control-segmented-track-*`, `--control-slider-*`, `--tag-*`, and `--user-profile-*`, plus classes such as `.header-tool`, `.segmented-control`, `.pane`, `.stage`, `.property-row`, `.check-row`, `.color-row`, `.tag`, `.user-profile`, and `.footer-area`. Include it with . ## Conventions CSS variables follow semantic role paths. Join groups with hyphens and convert camelCase to kebab-case. Example: palette.roles.surface.pageElevated → --surface-page-elevated. Typography roles use the same pattern with a type- prefix. brand-recipes.json lists the UI patterns. Each pattern names the roles it uses and includes the build instruction in `llmInstruction`. Font files are relative to brand.css. Every family with a `file` field gets an @font-face in brand.css. If `fontStyle` is set, the @font-face uses it. Reuse the classes from brand.css before writing custom CSS: `.header-tool`, `.header-tool-leading`, `.header-tool-title-group`, `.header-tool-actions`, `.header-tool-status`, `.header-tool-button`, `.status-strip`, `.status-strip-item`, `.status-strip-label`, `.workbench-shell`, `.workbench-grid`, `.stage`, `.stage-toolbar`, `.stage-canvas`, `.stage-footer`, `.pane`, `.pane-head`, `.pane-body`, `.segmented-control`, `.property-list`, `.property-row`, `.property-row-head`, `.check-row`, `.color-row`, `.color-field`, `.color-field-button`, `.color-popover`, `.tag-list`, `.tag`, `.tag-segmented`, `.tag-segmented-label`, `.tag-segmented-meta`, `.list`, `.list-row`, `.user-profile`, `.user-profile-logo`, `.user-profile-identity`, `.user-profile-avatar`, `.user-profile-card`, `.user-profile-card-row`, `.user-profile-card-actions`, `.header-pill-shell`, `.header-pill`, `.header-pill-brand`, `.header-pill-nav`, `.header-pill-actions`, `.header-pill-dropdown`, `.footer-area`, `.footer-area-main`, `.footer-area-brand`, and `.footer-area-column`. Matching `--*-*` variables follow the same structure. ## Shell Selection Choose the information architecture first, then the shell: - one dominant work surface with dense operational chrome -> `header-tool` - browsing, docs, marketing, or lighter management -> `header-pill` - use `footer-area` only when the page genuinely ends like a website - dense operational pages do not end with a marketing footer ## Shell HTML Canonical shells: `workbench` ```html
...
...
``` `management` ```html
...
...
``` `docs` ```html
...
...
``` `marketing` ```html
...
...
``` ## Component HTML Reuse these classes from a local copy of brand.css: `header-tool` ```html
Needle
Current Tool current file / current context
Ready
``` `segmented-control` ```html
``` `property-row` ```html
1.10
``` `check-row` ```html
``` `color-row` ```html
``` `user-profile` ```html ``` Use the same segmented control everywhere. Use property, check, and color rows directly in technical panes. Use user-profile for account identity, not page titles. Do not box controls individually. ## Build Order - Start with the primary task, object, and surface. - Choose a page type after the information architecture is clear. - Ship a local copy of `brand.css`, or copy the rules you need into the app stylesheet. - Copy the real logo assets into the app bundle. - Reuse the core classes from `brand.css` for `header-tool`, `segmented-control`, `pane`, `stage`, `property-row`, `check-row`, `color-row`, `tag`, and `user-profile` before adding page-specific CSS. - Use `header-tool` for dense operational pages. Use `header-pill` for marketing, docs, browsing, and lighter management pages. - Use the footer only on marketing and docs pages. Workbench shells do not end with a marketing footer in the first viewport. - Use a stage only when the user needs space to inspect or manipulate a result. - Keep presets and controls close to the thing they affect. - Follow the grouped component structure in `brand.css` when building headers, workbench shells, stage surfaces, panes, segmented controls, property rows, sliders, enum switches, and boolean rows. - Use the live branding site only as a reference while generating. Do not ship a page that links to localhost brand files at runtime. - Use compact operational chrome for tools: short titles, inline status, one dominant work surface, and compact side panels. - Put long explanations in docs, onboarding, help drawers, or empty states instead of persistent tool chrome. ## Hard Rules Hard rules: - The finished page is self-contained. - Use one header family per page. - Dense operational pages use `header-tool`; browsing, docs, marketing, and lighter management pages use `header-pill`. - If you copied brand.css, do not redeclare `--surface-*`, `--text-*`, `--accent-*`, or `--border-*`. - Reuse the canonical segmented control, property rows, check rows, and color rows. - Do not append `footer-area` to dense operational pages. ## Common Patterns Common patterns: - A three-pane workbench is common when a visual result needs a large stage. - A two-column layout is common when the task is result plus settings. - One continuous inspector is common when the task is mostly configuration or review. - Management pages often use rows, tables, or compact cards instead of a stage. ## Component Anatomy Variables - `--header-tool-row-*`, `--header-tool-leading-*`, `--header-tool-title-group-*`, `--header-tool-actions-*`: Compact operational header for dense viewers, editors, inspectors, and focused studios. Hierarchy: `header-tool > leading + modes + actions`. - `--status-strip-*`, `--status-strip-item-*`: Optional inline operational readout for runtime, counts, warnings, and selection. Hierarchy: `status-strip > status-item[]`. - `--layout-workbench-shell-*`, `--layout-workbench-grid-*`: Viewport-first shell for tools with one dominant stage and compact side panes. Hierarchy: `workbench-shell > header-tool + optional status-strip + workbench-grid`. - `--surface-stage-*`: Central work surface with stage toolbar, canvas, and footer metadata. Hierarchy: `stage > stage-toolbar + stage-canvas + stage-footer`. - `--surface-stage-toolbar-*`: Compact row at the top of the stage for mode switches and direct stage actions. Hierarchy: `stage-toolbar > controls + meta`. - `--surface-stage-canvas-*`: Neutral or dark central canvas for the actual visual work. Hierarchy: `stage-canvas > scene`. - `--surface-stage-footer-*`: Compact bottom row for metrics, selection facts, and stage-level summaries. Hierarchy: `stage-footer > label + metrics`. - `--pane-*`, `--pane-head-*`, `--pane-body-*`: Pane shell plus its head/body split for inspectors and side panels. Hierarchy: `pane > pane-head + pane-body`. - `--control-segmented-track-*`, `--control-segmented-segment-*`: Joined viewer-style segment row with one border system shared across the whole control. Hierarchy: `segmented-track > segment[]`. - `--control-property-list-*`, `--control-property-row-*`, `--control-property-row-head-*`, `--control-property-row-label-*`, `--control-property-row-value-*`: Continuous property pane plus the label/value row anatomy used before sliders, enums, and checks. Hierarchy: `property-list > property-row > property-row-head`. - `--control-slider-track-*`, `--control-slider-thumb-*`: Real range input styling for technical rows. Hierarchy: `property-row > input[type=range]`. - `--control-check-row-*`, `--control-check-box-*`: Compact boolean row with a technical check box, not a phone-style switch. Hierarchy: `check-row > label + input[type=checkbox]`. - `--control-color-row-*`, `--control-color-swatch-*`, `--control-color-input-*`, `--control-color-popover-*`: One-line color row with a field trigger; detailed color and alpha controls live in a popover. Hierarchy: `color-row > label + color-field > color-field-button + color-popover`. - `--tag-*`: Compact status chip for viewer and cloud surfaces, including optional split metadata. Hierarchy: `tag-list > tag[] or tag-segmented > tag-segmented-label + tag-segmented-meta`. - `--list-row-*`: Dense rows for presets, uploads, warnings, and asset lists. Hierarchy: `list > list-row[]`. - `--user-profile-shell-*`, `--user-profile-avatar-*`, `--user-profile-card-*`: Cloud-style account identity for header pills, account menus, and profile summary panels. Hierarchy: `user-profile > logo + identity + avatar; user-profile-card > head + rows + actions`. - `--header-pill-shell-*`, `--header-pill-nav-*`, `--header-pill-actions-*`: Floating marketing/docs header with brand, navigation, and CTA cluster. Hierarchy: `header-pill-shell > brand + nav + actions`. - `--footer-marketing-shell-*`, `--footer-marketing-main-*`, `--footer-marketing-column-*`: Marketing/docs footer with brand summary, columns, and one legal row. Hierarchy: `footer-marketing-shell > footer-marketing-main + footer-marketing-legal`. ## Content Economy - Keep tool titles short. - In workbench headers, the tool name and current context read before the brand. - Pane headers should not restate their own role. - Helper text is short and local. - Long explanation belongs in docs, onboarding, help, or empty states. ## Anti-Patterns - Do not use a hero header in a workbench. - Do not use `header-pill` inside dense editors, inspectors, or technical panes. - Do not add a four-up KPI card row under the header by default. - Do not mirror the left and right sidebars. - Do not use gradients in normal panes, segmented controls, or workbench buttons. - Do not use multiple slider styles in one tool. - Do not mix multiple button radii in the same control row. - Do not box sliders, toggles, or small metrics in their own mini-cards. - Do not append a page-level footer strip to a workbench. - Do not redefine the core brand.css component classes.