---
version: alpha
name: Norse Projects
description: Near-white Scandinavian canvas set in Helvetica Neue Condensed, where the fog-grey wordmark and hairline borders carry the full visual language of a Copenhagen menswear house that treats restraint as philosophy.

colors:
  # Surface / canvas
  background: "#ffffff"          # pure white page ground
  surface: "#eeeeef"             # the dominant pale grey — navigation panels, hover states, secondary zones

  # Ink / text
  ink: "#000000"                 # pure black — headings, body copy, product names
  ink-secondary: "#58595b"       # the site's characteristic warm-dark grey — secondary copy, metadata, logo tint
  on-dark: "#ffffff"             # text and icons reversed onto dark surfaces

  # Brand accent — Norse Projects uses no saturated brand colour; grey IS the accent
  primary: "#58595b"             # grey wordmark / primary interactive colour — used sparingly
  on-primary: "#ffffff"          # white text on primary grey
  primary-container: "#eeeeef"   # tinted panel derived from the surface

  # State / interaction
  text-hover: "#6a6b6d"          # was rgb(106,107,109) hover derivation from dembrandt
  focus-ring: "#58595b"          # grey focus indicator — matches the brand's low-contrast philosophy

  # Borders
  border: "#eeeeef"              # hairline rule at panel edges and nav underlines
  border-input: "#808080"        # 1px solid on form inputs — slightly darker than the panel border

  # Shadow tints
  shadow-soft: "#000000"         # was rgba(0,0,0,0.15) — Google format requires hex; single subtle drop shadow

typography:
  display-hero:
    fontFamily: "Helvetica Neue LT Std, Helvetica Neue, Helvetica, Arial, sans-serif"
    fontSize: 28px
    fontWeight: 400
    lineHeight: 1.20
    letterSpacing: 0.98px
  display:
    fontFamily: "Helvetica Neue LT Std, Helvetica Neue, Helvetica, Arial, sans-serif"
    fontSize: 26px
    fontWeight: 700
    lineHeight: 1.60
    letterSpacing: 0.72px
  heading-section:
    fontFamily: "Helvetica Neue LT Std, Helvetica Neue, Helvetica, Arial, sans-serif"
    fontSize: 18px
    fontWeight: 400
    lineHeight: 1.00
    letterSpacing: 0px
  heading-sub:
    fontFamily: "Helvetica Neue LT Std, Helvetica Neue, Helvetica, Arial, sans-serif"
    fontSize: 16px
    fontWeight: 400
    lineHeight: 1.30
    letterSpacing: 0.56px
  body-large:
    fontFamily: "Helvetica Neue LT Std, Helvetica Neue, Helvetica, Arial, sans-serif"
    fontSize: 16px
    fontWeight: 400
    lineHeight: 1.30
    letterSpacing: 0.56px
  body:
    fontFamily: "Helvetica Neue LT Std, Helvetica Neue, Helvetica, Arial, sans-serif"
    fontSize: 13px
    fontWeight: 400
    lineHeight: 1.60
    letterSpacing: 0.72px
  nav-link:
    fontFamily: "Helvetica Neue LT Std, Helvetica Neue, Helvetica, Arial, sans-serif"
    fontSize: 13px
    fontWeight: 400
    lineHeight: 1.60
    letterSpacing: 0.46px
  button-ui:
    fontFamily: "Helvetica Neue LT Std, Helvetica Neue, Helvetica, Arial, sans-serif"
    fontSize: 18px
    fontWeight: 400
    lineHeight: 1.00
    letterSpacing: 0px
  caption:
    fontFamily: "Helvetica Neue LT Std, Helvetica Neue, Helvetica, Arial, sans-serif"
    fontSize: 12px
    fontWeight: 400
    lineHeight: 1.20
    letterSpacing: 0.72px

spacing:
  xs: 4px
  sm: 8px
  md: 16px
  lg: 24px
  xl: 32px
  2xl: 56px
  3xl: 100px

rounded:
  none: 0px
  pill: 9999px

components:
  button-primary:
    backgroundColor: "{colors.ink}"
    textColor: "{colors.on-dark}"
    typography: "{typography.button-ui}"
    rounded: "{rounded.pill}"
    padding: 12px 28px
  button-primary-hover:
    backgroundColor: "{colors.primary}"
    textColor: "{colors.on-primary}"
    rounded: "{rounded.pill}"
    padding: 12px 28px

  button-secondary:
    backgroundColor: "{colors.background}"
    textColor: "{colors.ink}"
    typography: "{typography.button-ui}"
    rounded: "{rounded.pill}"
    padding: 12px 28px
  button-secondary-hover:
    backgroundColor: "{colors.surface}"
    textColor: "{colors.ink}"
    rounded: "{rounded.pill}"
    padding: 12px 28px

  button-ghost:
    backgroundColor: "{colors.background}"
    textColor: "{colors.ink}"
    typography: "{typography.nav-link}"
    rounded: "{rounded.none}"
    padding: 0px
  button-ghost-hover:
    textColor: "{colors.ink-secondary}"
    padding: 0px

  card:
    backgroundColor: "{colors.background}"
    textColor: "{colors.ink}"
    rounded: "{rounded.none}"
    padding: 0px
  card-product:
    backgroundColor: "{colors.background}"
    textColor: "{colors.ink}"
    rounded: "{rounded.none}"
    padding: 0px

  input:
    backgroundColor: "{colors.background}"
    textColor: "{colors.ink-secondary}"
    typography: "{typography.body}"
    rounded: "{rounded.none}"
    padding: 0px 0px 0px 16px
  input-focus:
    backgroundColor: "{colors.background}"
    textColor: "{colors.ink}"
    borderColor: "{colors.focus-ring}"
    rounded: "{rounded.none}"
    padding: 0px 0px 0px 16px

  nav-bar:
    backgroundColor: "{colors.background}"
    textColor: "{colors.ink}"
    typography: "{typography.nav-link}"
    padding: 0px 32px

  badge:
    backgroundColor: "{colors.primary-container}"
    textColor: "{colors.ink}"
    typography: "{typography.caption}"
    rounded: "{rounded.none}"
    padding: 4px 8px

  cart-count:
    backgroundColor: "{colors.ink}"
    textColor: "{colors.on-dark}"
    rounded: "{rounded.pill}"
    padding: 2px 6px
---

# Norse Projects Design System

## Overview

Norse Projects is a Copenhagen menswear house founded in 2004 as a skateboarding brand and distilled, over two decades, into one of Scandinavia's most considered casualwear labels. The digital site reflects this trajectory precisely: a pure white canvas (`{colors.background}`) with no chromatic accent, no gradient, no decorative shadow. The palette is three tones — white, the characteristic pale grey surface (`{colors.surface}`), and the fog-grey that tints both the wordmark and the secondary text (`{colors.ink-secondary}`). There is no orange, no teal, no navy blue standing in as a "brand colour." Norse Projects treats grey as the brand colour and grey alone.

Typography is equally deliberate. The site runs on Helvetica Neue LT Std — the condensed variant of the Swiss grotesque, self-hosted as `HelveticaNeueLTStd-Cn.woff2` and `HelveticaNeueLTStd-MdCn.woff2`. The condensed cut tightens the horizontal footprint of each letterform without surrendering legibility: product names, navigation items, and editorial headings all share the same narrow face, producing a column-like rhythm reminiscent of a printed lookbook rather than a website. Letter-spacing is positive throughout — 0.7–1.0px at body scale, creating deliberate air between tightly-tracked condensed characters. Body copy runs at 13px; the display hierarchy tops out at 28px. There are no large typographic gestures.

The third register of the system is its interaction language. Buttons — the most visible interactive artefact — are pill-shaped (`{rounded.pill}`) against a background where every other element is sharp-cornered. This binary is the system's one tension: the capsule button as soft interjection in an otherwise rectilinear environment. Motion is consistent and unhurried: 0.2s ease-in-out for links and hero transitions, 0.15s for card reveals, 0.3s for link underlines. Nothing accelerates, nothing decelerates dramatically. The site moves the way a well-made coat sits on a hanger — without announcing itself.

**Key Characteristics:**
- Pure white canvas (`{colors.background}`) with no chromatic brand accent — grey (`{colors.ink-secondary}`) IS the brand colour
- Helvetica Neue LT Std Condensed self-hosted — narrower letterforms producing a column-like typographic rhythm
- Positive letter-spacing at body sizes (0.46–0.98px) compensates for the condensed cut's compressed inter-glyph spacing
- Pill-shaped buttons (`{rounded.pill}`) as the system's single shape contrast — every other surface is flat-cornered (`{rounded.none}`)
- Three-tone ink system: pure black (`{colors.ink}`), fog-grey (`{colors.ink-secondary}`), and white (`{colors.on-dark}`) — no mid-range chromatic values
- Product photography edge-to-edge, no card shadow, no border radius — the image is the product card
- The single drop shadow in the system is on the shopping cart modal overlay: `rgba(0,0,0,0.15) 0px 0px 30px 0px`
- Tailwind CSS with arbitrary values (`top-[117px]`) alongside Headless UI components — utilitarian assembly, no design-system dogma
- Thirteen breakpoints from 600px to 1600px — exceptionally fine-grained responsive tuning
- Motion durations cluster at 0.2s (dominant), 0.15s (card layer), 0.3s (link hover) — all ease-in-out, no spring or overshoot

## Colors

### Surface & Canvas
- **White** (`{colors.background}`): The unbroken page canvas. No warm tint, no off-white — the photography needs a neutral stage.
- **Pale Grey** (`{colors.surface}`): The system's secondary surface — nav panels, hover fill states, alternate zones. Barely perceptible as grey; reads as a tissue-paper lift above white.

### Ink / Text
- **Black** (`{colors.ink}`): Headlines, product names, primary navigation labels, prices. The workhorse of the hierarchy.
- **Fog Grey** (`{colors.ink-secondary}`): Secondary copy, metadata, the wordmark itself. This grey — not navy, not charcoal — is the brand's own grey, derived from the condensed logo form. Used for supporting information and the icon system.
- **White-on-Dark** (`{colors.on-dark}`): Text and icons on black fills (primary button labels, cart-count badges).

### Brand Accent
- **Fog Grey** (`{colors.primary}`): Norse Projects has no saturated accent. The primary interactive colour is the same fog grey as the wordmark — it surfaces on hover states and as the interactive echo of the brand name itself.

### State & Interaction
- **Text Hover** (`{colors.text-hover}`): A slightly lighter derivation of fog grey, applied when a link or interactive element is hovered.
- **Focus Ring** (`{colors.focus-ring}`): The keyboard focus indicator inherits the same grey — low-contrast by design, matching the brand's quiet interaction language.

### Borders
- **Panel Border** (`{colors.border}`): Hairline rules at 1px, in the same pale grey as the surface. Structure is implied, not stated.
- **Input Border** (`{colors.border-input}`): Form fields step up to mid-grey `#808080` — just enough contrast to read as a field boundary without adding weight.

### Shadow Tints
- **Soft Drop** (`{colors.shadow-soft}`): Approximates `rgba(0,0,0,0.15)` — used once, on the cart modal, as the system's single depth signal. Converted to opaque hex per the Google format; the actual deployed value is `rgba(0,0,0,0.15)`. /* was rgba(0,0,0,0.15) — Google format requires hex */

## Typography

### Font Family
- **Primary**: `Helvetica Neue LT Std`, self-hosted in Condensed and Medium Condensed cuts, with fallbacks: `Helvetica Neue, Helvetica, Arial, sans-serif`
- **No secondary typeface**: The entire system — display, body, navigation, UI labels — runs in a single condensed grotesque. Variety comes from size and positive letter-spacing, not from a second face.
- **OpenType features**: No variable font detected. Two static weights — the regular Condensed cut (mapped to 400) and Medium Condensed (mapped to 700). No decorative feature-settings.

### Hierarchy

The complete type scale lives in the `typography:` token block. Reference tokens directly.

| Token | Use |
|---|---|
| `display-hero` | 28px / 400 — editorial headlines, campaign titles, hero overlays |
| `display` | 26px / 700 — section banners, category headers, promo cards |
| `heading-section` | 18px / 400 — UI section labels, section openers |
| `heading-sub` | 16px / 400 — sub-section labels, feature copy |
| `body-large` | 16px / 400 — product detail lead copy, editorial paragraphs |
| `body` | 13px / 400 — standard body text, product descriptions, cart line items |
| `nav-link` | 13px / 400 — primary navigation, secondary nav, footer links |
| `button-ui` | 18px / 400 — button labels (condensed; intentionally light weight) |
| `caption` | 12px / 400 — fine print, badge labels, size notation |

### Principles
- **Single condensed face**: Helvetica Neue LT Std in its condensed variant gives horizontal economy without density. The narrowed letterforms let more product information sit in a given width.
- **Positive letter-spacing as counterweight**: The condensed cut compresses inter-glyph space; positive tracking (0.46–0.98px at body scales) restores readability and gives the text its characteristic open-air Nordic feel.
- **Low-weight display**: The hero runs at 400 weight — not bold, not light. Norse Projects does not shout headlines; the condensed form does the emphasis work that weight would do elsewhere.
- **Small base body**: 13px body copy is a confident choice — it signals editorial restraint and trusts the photography to carry the page weight. It reads cleanly at the letter-spacings used.
- **No uppercase styling in body or nav**: Labels are sentence case. The system's austerity comes from whitespace and condensed letterforms, not from ALL-CAPS signalling.

## Layout

### Spacing System
The complete spacing scale is in the `spacing:` token block. Base unit: 8px, with the prominent values being `{spacing.2xl}` (56px) for inter-section rhythm and `{spacing.3xl}` (100px) for major editorial breathing room.

Norse Projects' spacing is generous at the section level and compressed at the component level — a lookbook in CSS. Product tiles sit close together; the space between collections and editorial zones is wide and unhurried.

### Grid & Container
- Max content width: approximately 1400px (matching the uppermost breakpoint)
- Product grids: four-column desktop, reflow to two on tablet, single column on mobile — photography fills each cell edge-to-edge
- Navigation: full-width, flat bar with horizontal padding; beneath it, a 1px `{colors.border}` hairline

### Whitespace Philosophy
- **Lookbook rhythm**: sections are separated by large vertical gaps (`{spacing.2xl}` to `{spacing.3xl}`), evoking the pacing of a printed seasonal catalogue
- **Tile compression**: product tiles are tight, photography abutting — the garment fills the frame and the eye moves across the grid without textural interruption
- **Typography as whitespace**: the condensed face and small body size leave the page feeling airy even at moderate padding values

## Elevation & Depth

| Level | Treatment | Use |
|---|---|---|
| Flat (Level 0) | No shadow; no border | The total default — page canvas, product tiles, navigation, buttons at rest |
| Hairline (Level 1) | `1px solid {colors.border}` | Panel edges, nav bottom rule, tab list underline |
| Input Field (Level 2) | `1px solid {colors.border-input}` | Form input field boundaries |
| Modal Overlay (Level 3) | `rgba(0,0,0,0.15) 0px 0px 30px 0px` | Cart modal — the system's single drop shadow |

**Shadow Philosophy**: Norse Projects is essentially flat. The system has one shadow token, used in a single location — the cart/modal overlay — where the brand accepts a gentle blur to lift the panel above the page. Every other surface: no shadow, no elevation. The product photography provides all visual weight; the chrome refuses to compete with it. This is not minimalism as trend; it is Scandinavian functional restraint applied to interface design.

## Shapes

The complete radius scale is in the `rounded:` token block.

| Token | Value | Use |
|---|---|---|
| `none` | 0px | Every structural surface — cards, inputs, badges, images, panels |
| `pill` | 9999px | Buttons and the cart-count indicator — the system's one soft element |

Norse Projects operates a strict binary radius system. Sharp corners everywhere, capsule buttons as the sole exception. The pill button floats in the page like a carefully chosen material detail — a leather toggle on a wax-canvas jacket. The contrast is not incidental; it is the one visual gesture the system permits itself.

## Components

The complete component spec lives in the `components:` token block.

### Button Variants

- **`button-primary`** — Black fill (`{colors.ink}`), white label at 18px condensed Helvetica, pill shape (`{rounded.pill}`), 12px 28px padding. The "Add to Cart" and "Shop" CTA. On hover, the fill softens to fog grey (`{colors.primary}`) — a grey-on-grey transition that signals interaction without announcing it.
- **`button-secondary`** — White fill, black label, pill shape — a contained secondary action. On hover, the background fills to pale grey (`{colors.surface}`).
- **`button-ghost`** — Transparent, black text, zero padding — inline tertiary actions and breadcrumb-style navigation links.

### Cards

- **`card-product`** — Zero padding, no radius, no shadow, no border. Product photography fills the tile edge-to-edge. Product name in `{typography.nav-link}` immediately below, price alongside. The tile is the photograph.

### Inputs

- **`input`** — White background, 1px solid border in `{colors.border-input}` mid-grey, no radius, left padding for the email field. Placeholder text in fog grey (`{colors.ink-secondary}`). Focus state intensifies the border to `{colors.focus-ring}` — no glow, no fill change.

### Navigation

- **`nav-bar`** — White, flat, borderless above. A 1px `{colors.border}` hairline sits at the bottom edge. Wordmark centered or left; navigation links at `{typography.nav-link}`, right-aligned utility icons. The bar is invisible as chrome — it is presence without weight.

### Badges

- **`badge`** — Pale grey (`{colors.primary-container}`) fill, black caption, no radius, tight padding. Used for product status tags ("New", "Sale") where the brand's quiet register extends even to promotional signals.
- **`cart-count`** — Pill-shaped (`{rounded.pill}`) black fill, white count numeral — the system's most emphatic UI element, intentionally.

## Do's and Don'ts

### Do
- Keep the canvas pure white (`{colors.background}`) — any tint reads as dirt against the product photography's neutral grounds
- Use Helvetica Neue LT Std Condensed throughout — the narrow face is not interchangeable with the standard Helvetica Neue cut
- Apply positive letter-spacing (0.46–0.98px) at body and navigation scales to compensate for the condensed letterform
- Use `{colors.ink-secondary}` fog grey for the wordmark, metadata, icons, and secondary labels — never a saturated colour
- Keep all structural surfaces at zero radius (`{rounded.none}`) — cards, inputs, badges, images
- Reserve the pill shape (`{rounded.pill}`) exclusively for buttons and the cart-count badge
- Let product photography run edge-to-edge in tiles with no border, no shadow, no radius
- Use the single drop shadow (`rgba(0,0,0,0.15) 0px 0px 30px 0px`) only on modal overlays — never on cards or navigation

### Don't
- Don't introduce a chromatic brand colour — no navy, no earthy terracotta, no subtle warm accent. Grey is the accent.
- Don't add border-radius to cards, inputs, or badges — the binary system (none / pill) is load-bearing
- Don't substitute standard Helvetica Neue for the condensed variant — the letterform proportions are central to the brand's typographic rhythm
- Don't use bold weight (700) for body copy or navigation — 400 weight at condensed cut is the correct voice; bold is for structural emphasis only
- Don't add drop shadows to product tiles or navigation — the page is flat; the cart modal is the system's one depth exception
- Don't increase the display-hero beyond 28px — Norse Projects deliberately caps its typographic gesture; large display type breaks the editorial register
- Don't use unsaturated grey tones other than `{colors.ink-secondary}` and `{colors.surface}` — the palette is precisely calibrated; additional greys dilute the system's tension
- Don't use uppercase for button labels or navigation — sentence case is mandatory; ALL-CAPS reads as a different brand register entirely

---

## Responsive Behavior

### Breakpoints

| Name | Width | Key Changes |
|---|---|---|
| Mobile S | <600px | Single-column product stack; hamburger navigation; display-hero scales to ~18px |
| Mobile | 600–750px | Transitional layout; two-column product preview; nav still collapsed |
| Tablet S | 750–1000px | Two-column product grid; nav partially visible; editorial sections stack |
| Tablet | 1000–1150px | Three-column grid; full navigation bar visible |
| Desktop | 1150–1400px | Four-column grid; full editorial layout; hero at 28px |
| Wide Desktop | >1400px | Maximum container width (~1400px); generous inter-section padding |

Norse Projects uses thirteen distinct breakpoints — an exceptionally granular responsive strategy that tunes the layout at every 150–200px increment rather than making three coarse jumps. The result is a site that reflows without visible snaps.

### Touch Targets
- Primary pill buttons: 12px vertical padding on 18px type = approximately 42px tap height — meets the 44px target closely
- Navigation links in mobile drawer: full-row touch targets at minimum 44px height
- Product tile: the entire tile is interactive — photography and label combined as one target

### Collapsing Strategy
- **Navigation**: horizontal bar collapses to a hamburger icon at 767px; the drawer opens with the same white-and-grey identity
- **Product grid**: four-column → two-column at tablet → single column on mobile; photography maintains edge-to-edge treatment at all sizes
- **Hero type**: display-hero (28px) scales down to approximately 18px on mobile — the condensed face holds legibility at small sizes because its letterforms are compact by design
- **Spacing**: inter-section gaps compress from `{spacing.3xl}` to `{spacing.xl}` on mobile; tiles remain tight throughout

### Image Behavior
- Product photography fills the tile at every breakpoint — no border-radius, no shadow, no padding. The image-to-tile relationship is 1:1 at all sizes.
- Campaign editorial imagery: full-width at desktop, stacked on mobile with headline text below rather than overlaid.

---

## Agent Prompt Guide

### Quick Color Reference
- Background: `{colors.background}`
- Primary text: `{colors.ink}`
- Brand grey / wordmark: `{colors.ink-secondary}`
- Secondary surface / hover: `{colors.surface}`
- Button label (on black): `{colors.on-dark}`
- Input border: `{colors.border-input}`
- Panel hairline: `{colors.border}`

### Example Component Prompts

- "Create a Norse Projects hero section on white (`{colors.background}`). Headline at 28px Helvetica Neue LT Std Condensed, weight 400, letter-spacing 0.98px, line-height 1.20, in black (`{colors.ink}`). Below it, a pill-shaped CTA button — black fill (`{colors.ink}`), white 18px Helvetica Neue Condensed label, no letter-spacing on the label, 12px top/bottom and 28px left/right padding, 9999px radius (`{rounded.pill}`). On hover, the button fill transitions to fog grey (`{colors.primary}`) over 0.2s ease-in-out."
- "Build a product tile for Norse Projects with zero padding, zero radius, and no shadow. The product photograph fills the tile edge-to-edge (`{rounded.none}`). Directly below the image: 13px Helvetica Neue LT Std Condensed, weight 400, letter-spacing 0.46px, line-height 1.60, product name in black (`{colors.ink}`), then the price in the same scale. No card chrome — the tile IS the photograph."
- "Design a Norse Projects navigation bar: white background (`{colors.background}`), flat, no shadow, with a 1px bottom rule in pale grey (`{colors.border}`). Left or center: the Norse Projects wordmark in fog grey (`{colors.ink-secondary}`). Navigation links at 13px Helvetica Neue LT Std Condensed, weight 400, letter-spacing 0.46px, sentence case, in black (`{colors.ink}`). Cart count badge: black pill (`{rounded.pill}`) with white numeral. On link hover, colour transitions to `{colors.text-hover}` over 0.2s ease-in-out."
- "Create a Norse Projects email input: white background, 1px solid mid-grey border (`{colors.border-input}`), zero radius (`{rounded.none}`), left padding 16px, 13px Helvetica Neue Condensed placeholder in fog grey (`{colors.ink-secondary}`). On focus: border steps to focus-ring grey (`{colors.focus-ring}`) — no glow, no fill change, no box-shadow."
- "Design a product status badge — pale grey fill (`{colors.primary-container}`), black 12px Helvetica Neue Condensed caption, zero radius (`{rounded.none}`), 4px 8px padding. Reads 'New Arrival' in sentence case. The badge should not compete visually with the product; it signals status without accent colour."

### Iteration Guide

1. Start on pure white (`{colors.background}`). If the canvas has any tint or warmth, reset it — the product photography requires a neutral ground.
2. Set every text element in Helvetica Neue LT Std Condensed. If you used standard Helvetica Neue, replace it — the proportions are different and the brand register collapses.
3. Apply positive letter-spacing at body and navigation scales (0.46–0.98px). Condensed letterforms need tracking to breathe.
4. The only chromatic accent in the system is fog grey (`{colors.ink-secondary}`). If you reached for a colour — any colour — remove it. Grey is the accent.
5. Buttons are pills (`{rounded.pill}`). Everything else is zero radius (`{rounded.none}`). If anything else is rounded, fix it.
6. Product photography has no shadow, no border, no padding, no radius. It runs edge-to-edge. Any chrome on the image breaks the system.
7. The single drop shadow in the system belongs on modal overlays only: `rgba(0,0,0,0.15) 0px 0px 30px 0px`. Cards, nav, and tiles are flat.

---

## Attribution

Independent design analysis from [Design Swatches](https://designmd.santiagoalonso.com) by [Santiago Alonso](https://santiagoalonso.com). Based on publicly observable interface patterns. Not affiliated with or endorsed by Norse Projects. Brand names and trademarks belong to their respective owners.
