mentivenus/copilot/skills/openartifacts-publish/themes/research-memo.md

research-memo

Research memo

Use for dense analyst-style reports: pricing comparisons, technical evaluations, research write-ups. Read top to bottom, scanned for numbers. The identity is “research memo, set properly”: serif for everything you read, monospace for everything you compare, one petrol-teal accent that never competes with the semantic colors. No third typeface. No pure mid-grey. No em dashes in copy.

Tokens

Define every color on bare :root, redefine only tokens in the two dark blocks, reference tokens from components and never literals, and give body an explicit token background. Dark is not an inversion: the accent lightens and the semantic trio desaturates.

:root {
  --ground: #f2f4f4; --paper: #fbfcfc;
  --ink: #141d21; --ink-soft: #47585e; --ink-faint: #7a8b91;
  --rule: #d3dcdd; --rule-soft: #e4eaea;
  --accent: #0d5f66; --accent-soft: #e0eded;
  --warn: #8a5407; --warn-soft: #f6ecd9;
  --stop: #97231d; --stop-soft: #f7e4e2;
  --go: #17603e; --go-soft: #e0efe6;
  --serif: "Iowan Old Style", "Charter", "Palatino Linotype", Palatino, Georgia, ui-serif, serif;
  --mono: ui-monospace, "SF Mono", SFMono-Regular, "Cascadia Mono", Menlo, Consolas, monospace;
  --measure: 68ch; --pad: clamp(1.15rem, 4vw, 2.75rem);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --ground: #0e1518; --paper: #141d21;
    --ink: #e4ecec; --ink-soft: #a3b5b8; --ink-faint: #6e8287;
    --rule: #27363a; --rule-soft: #1d2a2e;
    --accent: #5fbfc2; --accent-soft: #14302f;
    --warn: #e0ac5c; --warn-soft: #2d2415;
    --stop: #e8877f; --stop-soft: #33201e;
    --go: #6cc394; --go-soft: #14291f;
  }
}
:root[data-theme="dark"] { /* repeat the dark tokens above verbatim */ }
body { background: var(--ground); color: var(--ink); font-family: var(--serif); margin: 0; }

System font stacks only: a linked webfont fails silently to a default. Avoid Inter and Space Grotesk.

Type

Serif carries prose and headings. Mono carries every label, table, number, caption, chip, and stat. Uppercase labels always take positive letter-spacing; display sizes take tight negative tracking.

Role Size Notes
h1 clamp(2.1rem, 1.35rem + 3.5vw, 3.6rem) line-height 1.03, tracking -0.022em, weight 600
h2 clamp(1.45rem, 1.2rem + 1.1vw, 1.95rem) line-height 1.15, tracking -0.014em
h3 1.12rem weight 600
Standfirst clamp(1.08rem, 1rem + 0.4vw, 1.28rem) line-height 1.5, --ink-soft
Body clamp(1rem, 0.97rem + 0.16vw, 1.075rem) line-height 1.62
Eyebrow mono 0.685rem tracking 0.15em, uppercase
Table body mono 0.795rem tabular-nums
Table head mono 0.665rem tracking 0.07em, uppercase, weight 500
Stat numeral mono 1.85rem tracking -0.03em, line-height 1

Headings get text-wrap: balance, paragraphs text-wrap: pretty. Cap prose at max-width: var(--measure); never cap tables or charts.

Layout

One centered column, max-width: 60rem, padding: 0 var(--pad) 6rem. The wrapper is display: flex; flex-direction: column; gap: 3.25rem; each section is a flex column with gap: 1.15rem. Spacing comes from gap, never per-element margins. Wide content sits in a .scroller with overflow-x: auto so the body never scrolls sideways.

Components

Always

font-variant-numeric: tabular-nums on columnar numerals; a visible :focus-visible outline in the accent with outline-offset: 3px; a prefers-reduced-motion block that removes animation and transition; one selector per spacing rule so type and element selectors never fight.