Introduce one-page career resume alongside the full BP resume, unify brand color across templates, and update monorepo docs and gitignore. Co-authored-by: Cursor <cursoragent@cursor.com>
161 lines
3.7 KiB
Plaintext
161 lines
3.7 KiB
Plaintext
#import "theme.typ": *
|
|
#import "decor.typ": section-tech-id, tech-label
|
|
|
|
#let underline-accent(body) = underline(
|
|
body,
|
|
stroke: underline-stroke,
|
|
offset: underline-offset,
|
|
evade: true,
|
|
)
|
|
|
|
#let heading-number(it) = {
|
|
if it.numbering != none {
|
|
counter(heading).display(it.numbering)
|
|
h(heading-number-gap)
|
|
}
|
|
}
|
|
|
|
#let report-heading-numbering(..nums) = {
|
|
let n = nums.pos()
|
|
if n.len() == 1 {
|
|
numbering("1.", n.first())
|
|
} else if n.len() == 2 {
|
|
numbering("1.1", n.at(0), n.at(1))
|
|
} else {
|
|
numbering("1.1.1", ..n)
|
|
}
|
|
}
|
|
|
|
#let grelin-h1(it) = block(
|
|
width: 100%,
|
|
above: space-chapter,
|
|
below: space-block,
|
|
)[
|
|
#grid(
|
|
columns: (auto, 1fr),
|
|
column-gutter: 8pt,
|
|
align: horizon,
|
|
context section-tech-id(..counter(heading).get()),
|
|
box(width: 100%, fill: color-accent-surface, inset: (x: 8pt, y: 4pt))[
|
|
#text(font: heading-font, size: size-h1, weight: "black", fill: color-ink)[
|
|
#heading-number(it)
|
|
#it.body
|
|
]
|
|
],
|
|
)
|
|
]
|
|
|
|
#let grelin-h2(it) = block(width: 100%, above: space-section, below: space-inline)[
|
|
#grid(
|
|
columns: (auto, 1fr),
|
|
column-gutter: 8pt,
|
|
align: horizon,
|
|
box(width: 3pt, height: 1em, fill: color-ink),
|
|
text(font: heading-font, size: size-h2, weight: "bold", fill: color-ink)[
|
|
#heading-number(it)
|
|
#it.body
|
|
],
|
|
)
|
|
]
|
|
|
|
#let grelin-h3(it) = block(width: 100%, above: space-block, below: space-micro)[
|
|
#grid(
|
|
columns: (auto, 1fr),
|
|
column-gutter: 6pt,
|
|
align: horizon,
|
|
tech-label("///", size: 6.5pt),
|
|
text(font: heading-font, size: size-h3, weight: "bold", fill: color-ink)[
|
|
#heading-number(it)
|
|
#it.body
|
|
],
|
|
)
|
|
]
|
|
|
|
#let grelin-image(it) = block(
|
|
width: 100%,
|
|
above: space-figure-before,
|
|
below: space-figure-after,
|
|
)[
|
|
#align(center)[
|
|
#box(width: image-max-width, stroke: 1pt + color-ink)[
|
|
#set image(width: 100%, fit: "contain")
|
|
#it
|
|
]
|
|
]
|
|
]
|
|
|
|
#let grelin-table(it) = block(
|
|
width: 100%,
|
|
above: space-figure-before,
|
|
below: space-figure-after,
|
|
)[
|
|
#it
|
|
]
|
|
|
|
#let grelin-figure(it) = block(
|
|
width: 100%,
|
|
above: space-figure-before,
|
|
below: space-figure-after,
|
|
)[
|
|
#align(center)[
|
|
#set image(width: image-max-width, fit: "contain")
|
|
#set text(size: size-caption, fill: color-caption)
|
|
#it
|
|
]
|
|
]
|
|
|
|
#let grelin-blockquote(it) = block(
|
|
width: 100%,
|
|
above: space-block,
|
|
below: space-block,
|
|
inset: (left: blockquote-inset),
|
|
stroke: (left: blockquote-stroke),
|
|
fill: white,
|
|
)[
|
|
#set par(leading: leading-body, justify: true)
|
|
#set text(fill: color-quote)
|
|
#it
|
|
]
|
|
|
|
#let grelin-inline-code(it) = box(
|
|
fill: code-inline-fill,
|
|
inset: code-inline-inset,
|
|
stroke: 0.8pt + color-ink,
|
|
)[
|
|
#set text(font: mono-font, size: size-body, fill: color-code-inline)
|
|
#it
|
|
]
|
|
|
|
#let apply-report-styling(body) = {
|
|
set heading(numbering: report-heading-numbering)
|
|
set text(size: size-table)
|
|
set table(
|
|
stroke: (x, y) => (
|
|
top: if y == 0 { 1.5pt + color-ink } else { none },
|
|
bottom: if y == 0 { 0.8pt + color-ink } else { none },
|
|
),
|
|
inset: table-inset,
|
|
align: (col, row) => if col == 0 { left + horizon } else { center + horizon },
|
|
fill: (col, row) => {
|
|
if row == 0 {
|
|
table-header-fill
|
|
} else if calc.rem(row, 2) == 0 {
|
|
table-zebra-fill
|
|
} else {
|
|
white
|
|
}
|
|
},
|
|
)
|
|
show heading.where(level: 1): grelin-h1
|
|
show heading.where(level: 2): grelin-h2
|
|
show heading.where(level: 3): grelin-h3
|
|
show image: grelin-image
|
|
show table.cell: set text(fill: table-data-text)
|
|
show table.cell.where(y: 0): set text(weight: "bold", fill: color-ink)
|
|
show table: grelin-table
|
|
show figure: grelin-figure
|
|
show quote.where(block: true): grelin-blockquote
|
|
show raw.where(block: false): grelin-inline-code
|
|
body
|
|
}
|