← Visual design
toolshed

Index card (mosaic card)

The signature card pattern used in the stream, library, and kanban. White card, colored bookmark strip, ruled meta bar, and a double-line separator.

The index card is the primary display unit for content across the garden. It draws from physical index cards: a white paper surface, a colored tab strip on the left for category identification, a ruled meta bar, and a body area for the content.

Structure

Every card is a flex row with two areas:

[strip 52px] | [main column]
                [meta bar: label · date · maturity · ai]  ← double-line border-bottom
                [body: title, description]
<article class="mosaic-card mosaic-card--articles">
  <a href="..." class="mosaic-link">
    <div class="mosaic-strip">
      <img src="/images/icons/doc.svg" class="mosaic-doodle-icon" />
    </div>
    <div class="mosaic-main">
      <div class="mosaic-top-meta">...</div>
      <div class="mosaic-body">...</div>
    </div>
  </a>
</article>

The bookmark strip

Left edge, 52px wide, colored by collection. Contains a doodle icon (hand-drawn SVG from /images/icons/). Separated from the main column by a 3px double #B8B0AA border.

Strip colors are soft, desaturated pastels — each a lightened version of the collection’s icon stroke color. They don’t shout; they identify.

The meta bar

.mosaic-top-meta {
  padding: 0.45rem 1rem;
  border-block-end: 4px double rgba(180, 60, 60, 0.3);
}

The double-line bottom border is the ruling of the index card. The color — a washed-out, transparent red — references pencil lines on paper without being literal about it.

Contents: COLLECTION LABEL · DATE · [TENDED DATE] · MATURITY EMOJI · AI LABEL

Right-aligned group: maturity emoji + AI label. Left group: collection, date, tended.

Hover state

.mosaic-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 4px 12px var(--color-shadow);
  border-color: transparent;
}

The card lifts 2px. Border disappears (shadow takes over). 250ms ease transition.

Hero card variant

The pinned/featured card gets:

  • Larger strip (64px)
  • Ruled lines on the main column (repeating blue linear-gradient, every 1.75rem)
  • A rubber stamp: “FEATURED” in red at bottom-right, 10deg rotation, 45% opacity
  • scale(1.01) on hover instead of translate
.mosaic-card--hero .mosaic-main {
  background-image: repeating-linear-gradient(
    to bottom,
    transparent,
    transparent calc(1.75rem - 1px),
    rgba(80, 120, 200, 0.1) calc(1.75rem - 1px),
    rgba(80, 120, 200, 0.1) 1.75rem
  );
}

.mosaic-card--hero::after {
  content: 'FEATURED';
  position: absolute; bottom: 1.1rem; right: 1.6rem;
  font-size: 0.75rem; font-weight: 800; letter-spacing: 0.25em; text-transform: uppercase;
  color: #CC2020; border: 2.5px solid #CC2020;
  padding: 0.35em 0.75em; border-radius: 0.15rem;
  opacity: 0.45; transform: rotate(-10deg);
}

Icon tint

Each collection’s doodle icon is tinted via CSS filter to match its strip color family. Example:

.mosaic-card--field-notes .mosaic-doodle-icon {
  filter: invert(40%) sepia(30%) saturate(600%) hue-rotate(100deg);
}

This lets a single greyscale SVG icon take on any hue without maintaining separate colored assets.

Where used

src/components/MosaicCard.astro — rendered in src/pages/index.astro (stream) and src/pages/library/index.astro (library). The toolshed kanban cards adapt this pattern at a smaller scale.

Mycelium tags, relations & arguments