Files
cv/server/cv_template.html

127 lines
3.8 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
/* ==========================================================================
* ATS-SAFE CV TEMPLATE
* Rules enforced by this stylesheet:
* - Single column. No floats, no tables, no absolute positioning.
* Multi-column layouts are the #1 cause of scrambled ATS text extraction.
* - No headers/footers, no text boxes, no images, no icons.
* - Standard, machine-recognisable section headings.
* - Standard fonts only (Helvetica/Arial), ligatures disabled so that
* Dompdf does not emit glyphs that break text copy-out.
* - Contact details and URLs are PLAIN TEXT, not anchor-wrapped labels:
* many parsers read the visible text, not the href.
* ========================================================================== */
body {
font-family: Helvetica, Arial, sans-serif;
font-variant-ligatures: none;
font-feature-settings: "liga" 0, "clig" 0;
letter-spacing: 0;
text-rendering: geometricPrecision;
/* Density values are injected by generate_cv.php, which renders, measures
the real page count, and tightens these until the CV fits two pages. */
font-size: {{FONT_SIZE}};
color: #1a1a1a;
line-height: {{LINE_HEIGHT}};
margin: 0;
padding: {{PAGE_PADDING}};
}
h1 {
font-size: 20pt;
color: #111;
margin: 0 0 4px 0;
letter-spacing: 0.5px;
font-weight: bold;
}
.headline {
font-size: 11.5pt;
font-weight: bold;
color: #333;
margin: 0 0 6px 0;
}
.contact {
font-size: 9.5pt;
color: #333;
line-height: 1.55;
margin-bottom: 14px;
padding-bottom: 10px;
border-bottom: 1.5px solid #222;
}
h2 {
font-size: 11pt;
font-weight: bold;
color: #111;
border-bottom: 1px solid #bbb;
margin: 16px 0 7px 0;
padding-bottom: 3px;
text-transform: uppercase;
letter-spacing: 0.6px;
}
p { margin: 0 0 6px 0; text-align: left; }
.job { margin-bottom: 11px; }
/* Each field on its own line, in reading order. No float, no table.
A parser walking the DOM gets: title, then employer/location, then dates. */
.job-title { font-weight: bold; font-size: 10.5pt; color: #111; margin: 0; }
.job-company { font-size: 10pt; color: #222; margin: 1px 0 0 0; }
.job-dates { font-size: 9.5pt; color: #444; margin: 1px 0 3px 0; }
ul { margin: 3px 0 7px 0; padding-left: 17px; }
li { margin-bottom: 3px; text-align: left; }
.skill-line { margin: 0 0 4px 0; }
.label { font-weight: bold; }
/* Headline metrics on one line. As separate bullets they cost four lines to
say what one says, and the master CV's four-column band would extract as
scrambled text in an ATS. */
.metrics { margin: 0 0 5px 0; }
</style>
</head>
<body>
<h1>{{FULL_NAME}}</h1>
<div class="headline">{{JOB_HEADLINE}}</div>
<div class="contact">{{CONTACT_BLOCK}}</div>
<h2>Professional Summary</h2>
<p>{{TAILORED_SUMMARY}}</p>
<h2>Key Achievements</h2>
{{ACHIEVEMENTS_BLOCK}}
<h2>Technical Skills</h2>
<p class="skill-line"><span class="label">Core Focus for This Role:</span> {{DYNAMIC_SKILLS}}</p>
{{SKILLS_BLOCK}}
<h2>Professional Experience</h2>
{{EXPERIENCE_BLOCK}}
<h2>Open Source</h2>
{{OPENSOURCE_BLOCK}}
<!-- Certifications sit inside Education rather than claiming a heading of
their own: they are data-analytics certificates on a mobile engineering
CV, so a dedicated section would draw the eye to the least relevant
content on the page. -->
<h2>Education</h2>
{{EDUCATION_BLOCK}}
{{CERTIFICATIONS_BLOCK}}
<h2>Additional Information</h2>
<p class="skill-line"><span class="label">Languages:</span> {{LANGUAGES}}</p>
<p class="skill-line"><span class="label">Location:</span> {{LOCATION}}</p>
<p class="skill-line"><span class="label">Availability:</span> {{AVAILABILITY}}</p>
</body>
</html>