Skip to content

Commit 00f0b44

Browse files
committed
Remove outdated CV PDF files and enhance Typst CV layout with full-bleed experiences section
1 parent e4f6b5f commit 00f0b44

File tree

10 files changed

+57
-5
lines changed

10 files changed

+57
-5
lines changed

dist/pdf/cv-en-dark.pdf

-166 Bytes
Binary file not shown.

dist/pdf/cv-en-light.pdf

-176 Bytes
Binary file not shown.

dist/pdf/cv-fr-dark.pdf

-69 Bytes
Binary file not shown.

dist/pdf/cv-fr-light.pdf

-82 Bytes
Binary file not shown.

dist/pdf/cv-fr.pdf

-61.5 KB
Binary file not shown.

dist/pdf/short/cv-en-dark.pdf

-59.5 KB
Binary file not shown.

dist/pdf/short/cv-en-light.pdf

-60.5 KB
Binary file not shown.

dist/pdf/short/cv-fr-dark.pdf

-60.8 KB
Binary file not shown.

dist/pdf/short/cv-fr-light.pdf

-61.7 KB
Binary file not shown.

typst/cv.typ

Lines changed: 57 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
page-fill : rgb("#121620"),
2727
section-fill : rgb("#171d2e"), // glass-bg dark ≈ rgba(255,255,255,0.03) over #121620
2828
section-stroke: rgb("#252d42"), // glass-border dark ≈ rgba(255,255,255,0.1)
29+
exp-fill : rgb("#191d27"), // full-bleed experiences bg (dark) — from style-pdf.css
2930
text : rgb("#e0e0e0"),
3031
heading : rgb("#ffffff"),
3132
h1 : rgb("#ffffff"),
@@ -40,6 +41,7 @@
4041
page-fill : rgb("#e3ebf4"), // --pdf-page-margin-color
4142
section-fill : rgb("#ffffff"), // --pdf-page-bg
4243
section-stroke: rgb("#ccd6e4"), // glass-border light ≈ rgba(255,255,255,0.4) over #e3ebf4
44+
exp-fill : rgb("#ffffff"), // full-bleed experiences bg (light) — white band on grey page
4345
text : rgb("#1a1a1c"),
4446
heading : rgb("#1a1a1c"),
4547
h1 : rgb("#1a1a1c"),
@@ -58,9 +60,30 @@
5860
// PAGE & BASE TEXT SETUP
5961
// =============================================================================
6062
#set page(
61-
paper : "a4",
62-
margin: (x: 8mm, y: 8mm),
63-
fill : t.page-fill,
63+
paper : "a4",
64+
margin : (x: 8mm, y: 8mm),
65+
fill : t.page-fill,
66+
// Paint exp-fill into the top/bottom margins on pages where the experiences
67+
// section appears, so the band is seamless across page breaks.
68+
background: context {
69+
let pg = here().page()
70+
let ss = query(<exp-bleed-start>)
71+
let es = query(<exp-bleed-end>)
72+
if ss.len() == 0 or es.len() == 0 { return }
73+
let s-loc = ss.first().location()
74+
let e-loc = es.first().location()
75+
let sp = s-loc.page()
76+
let ep = e-loc.page()
77+
if pg < sp or pg > ep { return }
78+
let sy = s-loc.position().y
79+
let ey = e-loc.position().y
80+
let top-y = if pg == sp { sy } else { 0mm }
81+
let bot-y = if pg == ep { ey } else { 297mm }
82+
if bot-y <= top-y { return }
83+
place(left + top, dy: top-y,
84+
rect(width: 210mm, height: bot-y - top-y, fill: t.exp-fill)
85+
)
86+
},
6487
)
6588

6689
#set text(
@@ -130,6 +153,35 @@
130153
]
131154
}
132155

156+
// ── Full-bleed experiences box (edge-to-edge, no card border) ──────────────────
157+
// pad(x: -8mm) expands the available width by 2×8mm = full A4 width.
158+
// block(width: 100%) then fills that full width.
159+
// inset x = 8mm (compensate the margin expansion) + 11pt (regular content padding).
160+
#let exp-bleed-box(title: "", body) = {
161+
// Metadata markers let the page background context know where this section
162+
// starts/ends so it can paint exp-fill into the top/bottom margin areas,
163+
// producing a continuous band across the page break.
164+
[#metadata("s") <exp-bleed-start>]
165+
pad(x: -8mm)[
166+
#block(
167+
width : 100%,
168+
fill : t.exp-fill,
169+
inset : (x: 8mm + 11pt, top: 10pt, bottom: 5pt),
170+
above : 6pt,
171+
below : 0pt,
172+
breakable: true,
173+
)[
174+
#section-heading(title)
175+
#v(8pt)
176+
#body
177+
]
178+
]
179+
[#metadata("e") <exp-bleed-end>]
180+
// Force a visible non-collapsible gap in page-fill colour before next section.
181+
// A block() is immune to Typst's paragraph-spacing collapse, unlike v().
182+
block(height: 10pt, width: 100%, above: 0pt, below: 0pt)
183+
}
184+
133185
// ── Contact card (blue background, no stroke) ─────────────────────────────────
134186
#let contact-box(body) = {
135187
block(
@@ -185,7 +237,7 @@
185237
// ── HEADER — Name + Tagline ───────────────────────────────────────────────────
186238
#block(below: 10pt)[
187239
#text(
188-
size : 25pt,
240+
size : 21pt,
189241
weight : "extrabold",
190242
fill : t.h1,
191243
tracking: 0.8pt,
@@ -236,7 +288,7 @@
236288
]
237289

238290
// ── EXPERIENCES ─────────────────────────────────────────────────────────────────────────────────
239-
#section-box(title: d.titles.experiences)[
291+
#exp-bleed-box(title: d.titles.experiences)[
240292

241293
// ── Experience 1 : Fractional CTO (special structure) ──────────────────────
242294
#let exp0 = d.experiences.at(0)

0 commit comments

Comments
 (0)