rspace-online/modules/pubs/typst/lib/series-style.typ

73 lines
1.6 KiB
Plaintext

// Series Style — shared typography and visual identity
// This file defines the consistent "look" across all rPubs publications.
// Change this to rebrand the entire series.
#let series-fonts = (
body: "New Computer Modern",
heading: "New Computer Modern Sans",
mono: "New Computer Modern Mono",
)
#let series-colors = (
accent: rgb("#2d4a3e"),
muted: rgb("#666666"),
rule: rgb("#cccccc"),
cover-bg: rgb("#1a1a2e"),
cover-fg: rgb("#e0e0e0"),
)
#let apply-series-style(body) = {
set text(
font: series-fonts.body,
size: 9pt,
lang: "en",
)
set par(
leading: 0.7em,
spacing: 0.9em,
justify: true,
)
set heading(numbering: none)
show heading.where(level: 1): it => {
set text(font: series-fonts.heading, size: 14pt, weight: "bold", fill: series-colors.accent)
v(1em)
it
v(0.5em)
}
show heading.where(level: 2): it => {
set text(font: series-fonts.heading, size: 11pt, weight: "bold", fill: series-colors.accent)
v(0.8em)
it
v(0.3em)
}
show heading.where(level: 3): it => {
set text(font: series-fonts.heading, size: 10pt, weight: "semibold")
v(0.6em)
it
v(0.2em)
}
show raw: set text(font: series-fonts.mono, size: 7.5pt)
show raw.where(block: true): it => {
set par(justify: false)
block(
fill: rgb("#f5f5f5"),
inset: 8pt,
radius: 2pt,
width: 100%,
it,
)
}
show link: set text(fill: series-colors.accent)
body
}
#let series-rule() = {
line(length: 100%, stroke: 0.5pt + series-colors.rule)
}
#let series-separator() = {
v(0.5em)
align(center, text(fill: series-colors.muted, size: 8pt)[· · ·])
v(0.5em)
}