Showcase

Give a project, lesson, or collection a little room to make its case. Pair a recognizable visual with a strong title, a short description, and a clear way in. This is a candidate for the docs site; compare both examples before choosing where to use it. Return to the design workbench.

The Opera Game's final chess position.

An idea, move by move

Follow a brilliant chess game and discover how a few well-placed pieces work together. A working board makes the explanation something you can explore.

Follow the game →

A different story, the same shape

A picture can set a completely different tone without changing the component. The title, prose, and links are ordinary Markdown. Their length determines the height; the component never crops the words to fit a card.

Hokusai's Great Wave above a distant Mount Fuji.

One mountain, three points of view

Look closer at three Hokusai prints. Compare their compositions, then discover how a crop changes the story.

Explore the prints →

Make it yours

Import the component and supply a visual slot. The remaining Markdown becomes the caption. Keep interactive controls in the caption so a card can offer a primary destination and a separate Source link without nesting links.

[@showcase]: ../design-system/showcase.components.md

<showcase-card>
<slot name="visual">

![The final chess position.](./previews/opera-game.svg)

</slot>

## An idea, move by move

Explore an annotated game on a working chess board.

[Follow the game →](./chess/opera-game.demo.md)

</showcase-card>

Paths here assume a Source in the examples folder. Use local paths from the Source that authors each image or link.

The frame

The visual gets a quiet, rounded surface; the caption stays on the page. That separation gives the image presence without turning every paragraph into a box. Both slots accept authored content, including other literate components.

<article class="pmx-showcase">
  <div class="pmx-showcase-visual"><slot name="visual" /></div>
  <div class="pmx-showcase-caption"><slot /></div>
</article>

Flexible columns respond to the space the component actually receives. In a wide Source they sit beside each other; in a narrow column they stack, with the visual first. This also works when Player changes the reading width.

.pmx-showcase {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: clamp(1.5rem, 4vw, 3rem);
  margin-block: 1.5rem;
}
.pmx-showcase-visual {
  flex: 1 1 16rem;
  min-inline-size: 0;
  padding: clamp(1rem, 3vw, 1.75rem);
  border: 1px solid var(--pmx-color-border);
  border-radius: var(--pmx-radius);
  background: var(--pmx-color-surface);
}
.pmx-showcase-caption {
  flex: 1.1 1 18rem;
  min-inline-size: 0;
}

Images retain their full composition. Heading scale and link treatment belong to this pattern; color and typeface come from the active theme. There is no entrance animation to interrupt reading or presentation.

.pmx-showcase-visual img {
  display: block;
  max-inline-size: 100%;
  max-block-size: 24rem;
  inline-size: 100%;
  block-size: auto;
  object-fit: contain;
  border-radius: calc(var(--pmx-radius) / 2);
}
.pmx-showcase-visual > :first-child,
.pmx-showcase-caption > :first-child { margin-block-start: 0; }
.pmx-showcase-visual > :last-child,
.pmx-showcase-caption > :last-child { margin-block-end: 0; }
.pmx-showcase-caption :is(h2, h3) {
  font: 650 clamp(1.5rem, 2.5vw, 2rem)/1.15 var(--pmx-font-heading);
  letter-spacing: -0.025em;
  text-wrap: balance;
}
.pmx-showcase-caption p { text-wrap: pretty; }
.pmx-showcase-caption a:not(.pmx-heading-anchor) {
  display: inline-flex;
  align-items: center;
  min-block-size: 2.75rem;
  text-underline-offset: 0.25em;
}
.pmx-showcase-caption a:focus-visible {
  outline: 2px solid var(--pmx-color-accent);
  outline-offset: 4px;
  border-radius: 2px;
}

Where it fits

Use a showcase when the visual helps a reader choose what to explore. A gallery can repeat it with different content; a guide can use one to introduce its finished result. For a simple list of destinations, use a compact guide link.

To refine this design, change its template or CSS above and inspect both examples. Check a wide page, a narrow column, keyboard links, and Play before using the change across more Sources.