#let primary_colour = rgb("#ea2e2e") // vivid purple #let link_colour = rgb("#78b9c4") // blue #set text(font: "Poppins") #let icon(name, shift: 1.5pt) = { box( baseline: shift, height: 10pt, image("icons/" + name + ".svg") ) h(3pt) } #let findMe(services) = { set text(8pt) let icon = icon.with(shift: 2.5pt) services.map(service => { icon(service.name) if "display" in service.keys() { link(service.link)[#{service.display}] } else { link(service.link) } }).join(h(10pt)) [ ] } #let term(period, location) = { text(9pt)[#icon("calendar") #period #h(1fr) #icon("location") #location] } #let birth(date, age) = { text(size: 9pt, weight: "bold")[#icon("calendar") #date #h(1fr) #age] } #let date(period) = { text(9pt)[#icon("calendar") #period] } #let max_rating = 5 #let skill(name, rating) = { let done = false let i = 1 name h(1fr) while (not done){ let colour = rgb("#c0c0c0") // grey if (i <= rating){ colour = primary_colour } box(circle( radius: 4pt, fill: colour )) if (max_rating == i){ done = true } else { // no spacing on last h(2pt) } i += 1 } [\ ] } #let styled-link(dest, content) = emph(text( fill: link_colour, link(dest, content) )) #let quartz( name: "", links: (), tagline: [], first, second, ) = { set document( title: name + "'s CV", author: name, ) set text(11pt) set page( margin: (x: 40pt, y: 40pt), ) show heading.where( level: 2 ): it => text( fill: primary_colour, [ #{it.body} #v(-7pt) #line(length: 100%, stroke: 1pt + primary_colour) ] ) show heading.where( level: 3 ): it => text(it.body) show heading.where( level: 4 ): it => text( fill: primary_colour, it.body ) [= #name] findMe(links) tagline grid( columns: (1.1fr, 2fr), gutter: 15pt, first, second, ) }