<!-- Protocore Design System — Logo -->
# Logo

- **Category:** Media (`media`)
- **Slug:** `media/logo`
- **Status:** stable
- **Platforms:** web
- **Import:** `import { Logo } from "@protocore/pds";`
- **Docs:** https://pds.protocore.io/components/media/logo

> The Protocore faceted-core mark, with an optional mono wordmark.

## When to use it

**Logo** is the Protocore brand mark — use it in the top bar, footer, auth screens, and empty states that need brand presence. Mark-only for tight chrome (a collapsed sidebar, a favicon-adjacent slot); the full `wordmark` lockup where there's room to breathe. It represents **the product/brand**, distinct from **Avatar** (a person or account) and **LineArt** (ambient imagery). For a scrolling wall of *third-party* logos, feed marks into **LogoMarquee** instead of stamping many Logos by hand.

## Props

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `className` | `string` | no | — | — |
| `label` | `string` | no | `Protocore` | Accessible label for the mark. |
| `size` | `enum` | no | `md` | Mark height: sm 20 · md 24 · lg 30. |
| `style` | `CSSProperties` | no | — | — |
| `wordmark` | `boolean` | no | `false` | Render the wordmark text beside the mark. |
| `wordmarkText` | `string` | no | `Protocore` | Wordmark text. |

## Examples

### Basics

The faceted-core mark on its own, as inline SVG. It fills via `currentColor`, so it inherits ink from its container — no color prop needed.

```tsx
import { Logo } from "@protocore/pds";

export default function Demo() {
  return <Logo />;
}
```

### With wordmark

Set `wordmark` to render the mono wordmark beside the mark (the full brand lockup). Override the text with `wordmarkText` for a sub-brand. Because the mark is `currentColor`, setting `color` retints the whole lockup.

```tsx
import { Logo, VStack } from "@protocore/pds";

export default function Demo() {
  return (
    <VStack gap={5} align="start">
      {/* The full brand lockup */}
      <Logo wordmark />
      {/* Custom wordmark text for a sub-brand */}
      <Logo wordmark wordmarkText="Protocore Ledger" />
      {/* The mark tints via currentColor — set color on a parent to recolor
          the whole lockup (mark + wordmark) */}
      <div style={{ color: "var(--pds-accent)" }}>
        <Logo wordmark />
      </div>
    </VStack>
  );
}
```

## Do & don't

**Do**

- Let the mark inherit `currentColor` — set `color` on a parent to retint it.
- Use the mark alone in tight spaces and the full `wordmark` lockup where there's room.
- Keep a clear-space margin around the lockup so it reads cleanly.
- Rely on the built-in `label` (default "Protocore") for the accessible name.

**Don't**

- Don't recolor the mark with a hardcoded hex — use theme tokens via `color`.
- Don't use Logo to represent a person or account; that's Avatar.
- Don't stretch or set a non-uniform scale on the SVG — resize via `size`.
- Don't hand-roll a row of Logos for a partner wall; use LogoMarquee.

## Accessibility

**Notes**

- The wrapper is `role="img"` with an `aria-label` (default "Protocore"); override `label` if the context needs a different name.
- The inner `<svg>` is `aria-hidden` and `focusable="false"` so it isn't announced twice or tab-focused in older browsers.
- The mark fills via `currentColor`, so it inverts with the theme and follows the surrounding text contrast automatically.
- Server-safe and non-interactive — it carries no `"use client"` directive and never enters the tab order.

## Related

`logo-marquee`, `line-art`, `avatar`, `icon`

---

© Protocore. All rights reserved. Use of the Protocore Design System requires prior written authorization from Protocore (contact@protocore.io). These machine-readable materials must not be ingested into ML-training datasets or derivative design systems. See https://pds.protocore.io/legal/
