Files
vue-journal-layer/app/assets/css/journal-tokens.css
Jakub Zych 289d031201 feat!: render the post page on the shared SEO layer with one H1 in both Journal H1 modes (tracer)
- extend vue-seo-layer (link dependency during development) and drop
  @nuxtjs/seo: the page head, canonical and the one JSON-LD graph come
  from the CMS resolve answer; the post's own title, excerpt and image
  apply only while there is no CMS answer
- remove the journal sitemap source and the copied shared purge route,
  library and plugin (the SEO layer serves POST /api/__site__/cache/purge);
  the deprecated POST /api/__journal__/cache/purge keeps working
- post title is h1 while the Journal API reports content_h1_to_h2 on
  (or absent) and p.journal-post__title while off; journal.postTitleTag
  ('auto' | 'h1' | 'p') overrides it; body h1 headings are demoted to h2
  while the setting is on (gateJournalHtml/sanitizeJournalHtml demoteH1)
- journal.breadcrumbs option and post-title CSS tokens
- smoke harness: count=, header=, noheader= and resolves lines; the
  fixture API also answers the SEO resolve and site endpoints

BREAKING CHANGE: the layer no longer installs @nuxtjs/seo (no
nuxt-site-config, nuxt-schema-org, robots or sitemap module, no
/api/__sitemap__/journal source, no useSiteConfig()); apps take their
head, sitemaps and robots from the SEO plugin through vue-seo-layer.
2026-11-04 13:37:11 +01:00

46 lines
2.1 KiB
CSS

/* Journal design tokens. Every visual value in the layer comes from these.
An app overrides any of them in its own CSS, e.g. on :root:root. */
:root {
/* Colour */
--journal-color-text: #1f2328; /* body text */
--journal-color-muted: #59636e; /* dates, meta, captions */
--journal-color-bg: #ffffff; /* page background */
--journal-color-surface: #f6f8fa; /* cards, quotes, code blocks */
--journal-color-border: #d1d9e0; /* card and table borders, rules */
--journal-color-link: #0969da; /* links */
--journal-color-link-hover: #0550ae; /* hovered links */
--journal-color-accent: #0969da; /* current page, focus ring */
--journal-color-on-accent: #ffffff; /* text on the accent colour */
--journal-color-mark: #fff8c5; /* search term highlight */
--journal-shadow-dropdown: 0 8px 24px rgb(0 0 0 / 0.12); /* search suggestions */
/* Type */
--journal-font-body: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; /* body copy */
--journal-font-heading: var(--journal-font-body); /* headings */
--journal-font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; /* code */
--journal-font-size-base: 1.0625rem; /* body size */
--journal-line-height: 1.7; /* body leading */
--journal-post-title-size: 2em; /* post title, h1 or p (browser h1 look) */
--journal-post-title-weight: 700; /* post title weight */
--journal-post-title-line-height: 1.2; /* post title leading */
/* Spacing scale */
--journal-space-1: 0.25rem; /* hairline gaps */
--journal-space-2: 0.5rem; /* inline gaps */
--journal-space-3: 1rem; /* paragraph gap */
--journal-space-4: 1.5rem; /* card padding */
--journal-space-5: 2.5rem; /* section gap */
--journal-space-6: 4rem; /* page padding */
/* Radii */
--journal-radius-sm: 4px; /* code, tags */
--journal-radius-md: 8px; /* cards, images */
--journal-radius-lg: 16px; /* featured image */
/* Layout */
--journal-content-width: 46rem; /* reading column */
--journal-wide-width: 72rem; /* listings */
--journal-card-min: 16rem; /* narrowest card in a grid */
--journal-image-ratio: 1200 / 630; /* featured image crop */
}