// Gemeinsames, eigenständiges Layout für beide Bewerbungsdokumente. #let accent = rgb("#0395de") #let ink = rgb("#333333") #let dark-ink = rgb("#414141") #let gray-ink = rgb("#3a3a5d") #let rule-ink = rgb("#5d5d5d") #let pale = rgb("#999999") #let today = datetime.today() #let month-names = ( "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember", ) #let today-de = ( str(today.day()) + ". " + month-names.at(today.month() - 1) + " " + str(today.year()) ) #let document-base(body) = { set text(font: "Source Sans Pro", lang: "de", size: 9pt, weight: 300, fill: ink) set par(leading: 0.48em) body } #let name-mark( person, size: 22pt, family: "Roboto", first-weight: 100, first-smallcaps: false, ) = [ #text(font: family, size: size, weight: first-weight, fill: gray-ink)[ #if first-smallcaps { smallcaps(person.first) } else { person.first } ]#h(3pt)#text(font: family, size: size, weight: 700, fill: ink)[#person.last] ] #let fa(glyph) = text(font: "FontAwesome", size: 0.95em)[#glyph] #let cover-header(person) = block(width: 100%)[ #align(center)[ #name-mark(person, size: 32pt) #v(1pt) #text(font: "Source Sans Pro", size: 7.6pt, weight: 400, fill: accent)[ #smallcaps(person.position) ] #v(2pt) #text(font: "Roboto", size: 8pt, weight: 400, style: "italic", fill: pale)[ #person.street, #person.city ] #v(3pt) #text(font: "Roboto", size: 6.8pt, weight: 400, fill: ink)[ #fa("\u{f10b}") #person.mobile #h(7pt)|#h(7pt) #fa("\u{f0e0}") #person.email #h(7pt)|#h(7pt) #fa("\u{f092}") #person.github #h(7pt)|#h(7pt) #fa("\u{f169}") #person.xing ] ] ] #let cv-header(person) = block(width: 100%, below: 22pt)[ #grid( columns: (1fr, 1.8fr, 1fr), column-gutter: 6pt, align: (left, center, right), [ #text(font: "Roboto", size: 8pt, weight: 400, style: "italic", fill: pale)[ #person.street\ #person.city ] ], align(center)[ #name-mark( person, family: "Source Sans Pro", first-weight: 400, first-smallcaps: true, ) #v(2pt) #text(font: "Source Sans Pro", size: 7.6pt, weight: 400, fill: accent)[ #smallcaps("Lebenslauf") ] ], [ #text(font: "Roboto", size: 6.8pt, weight: 400, fill: ink)[ #fa("\u{f10b}") #person.mobile\ #fa("\u{f0e0}") #person.email\ #fa("\u{f169}") #person.xing\ #fa("\u{f092}") #person.github ] ], ) ] #let cv-footer(person) = context grid( columns: (1fr, 1fr, 1fr), align: (left, center, right), text(font: "Source Sans Pro", size: 8pt, weight: 400, fill: pale)[#smallcaps(today-de)], text(font: "Source Sans Pro", size: 8pt, weight: 400, fill: pale)[ #smallcaps(person.first + " " + person.last + " · Lebenslauf") ], text(font: "Source Sans Pro", size: 8pt, weight: 400, fill: pale)[#counter(page).display()], ) #let cover-footer(person) = align(center)[ #text(font: "Source Sans Pro", size: 8pt, fill: pale, weight: 400)[ #smallcaps(person.first + " " + person.last) ] ] #let section(accent-part, rest) = block( width: 100%, above: 8pt, below: 5pt, breakable: false, )[ #grid( columns: (auto, 1fr), column-gutter: 2pt, align: horizon, text(font: "Source Sans Pro", size: 16pt, weight: 700)[ #text(fill: accent)[#accent-part]#text(fill: ink)[#rest] ], line(length: 100%, stroke: 0.9pt + rule-ink), ) ] #let bullet-list(items) = { for item in items { block(width: 100%)[ #grid( columns: (7pt, 1fr), column-gutter: 1pt, [•], item, ) ] v(-5pt) } } #let entry(role, organization, location, period, items) = block( width: 100%, above: 15pt, below: 18pt, breakable: false, )[ #grid( columns: (1fr, auto), column-gutter: 8pt, row-gutter: 9pt, align: (left, right), text(font: "Source Sans Pro", size: 10pt, weight: 700, fill: dark-ink)[#organization], text(font: "Source Sans Pro", size: 9pt, weight: 300, style: "italic", fill: accent)[#location], text(font: "Source Sans Pro", size: 8pt, weight: 400, fill: gray-ink)[#smallcaps(role)], text(font: "Source Sans Pro", size: 8pt, weight: 300, style: "italic", fill: gray-ink)[#period], ) #parbreak() #v(1pt) #block(width: 100%)[ #text(font: "Source Sans Pro", size: 9pt, weight: 300, fill: ink)[#bullet-list(items)] ] ] #let skills(body, above: 16pt, below: 12pt) = block( width: 100%, inset: (top: above, bottom: below), body, ) #let skill(label, value) = grid( columns: (45mm, 1fr), column-gutter: 5mm, align: (right, left), text(font: "Source Sans Pro", size: 10pt, weight: 700, fill: dark-ink)[#label], text(font: "Source Sans Pro", size: 9pt, weight: 300, fill: ink)[#value], )