docs/guides/using-custom-css.mdx
The Custom CSS panel lets you write your own CSS rules to change how your resume looks in the live preview (and exports).
In the resume builder, open the right sidebar and select Custom CSS (the CSS section).
Your CSS is injected into the preview and most top-level selectors are automatically prefixed with:
.resume-preview-containerThat means:
.page { ... } effectively becomes .resume-preview-container .page { ... }h2 { ... } becomes .resume-preview-container h2 { ... }body { ... } becomes .resume-preview-container body { ... } (which usually matches nothing, because body is not inside the preview container)@media / @supports blocksRules that start with at-rules (like @media print { ... }) are not automatically scoped. If you want to keep those rules limited to the resume preview, you should manually prefix selectors inside at-rules with .resume-preview-container.
Example:
/* Normal rules: rely on auto-scoping */
.page a {
text-decoration: none;
}
/* At-rules: manually scope selectors */
@media print {
.resume-preview-container .page a {
text-decoration: none;
}
}
Keep each rule's selector on one line, for example:
.page-section-experience .section-item-title {
font-weight: 700;
}
Avoid splitting a selector across multiple lines unless you've confirmed it behaves as expected.
In the Custom CSS editor, type a . (dot). You'll get suggestions for commonly-used class selectors, including:
.page, .page-content, .page-header, .page-basics, .page-main, .page-sidebar, .page-picture.page-section, .section-content.page-section-experience, .page-section-education, .page-section-projects, etc..section-item, .section-item-header, .section-item-title, .section-item-description, .section-item-metadata, .section-item-website, etc..experience-item, .skills-item, .profiles-item, etc..template-azurill, .template-onyx, .template-gengar, etc.If you're not sure where to start, these are usually safe:
.page (the resume page container).page-section (each resume section).section-item (each item inside a section).page-picture (profile picture container)To apply styles only on one template, prefix with the template wrapper:
.template-azurill .page-header {
gap: 12pt;
}
Each page has a class like .page-0, .page-1, etc.
.page-0 .page-header {
margin-bottom: 6pt;
}
Custom sections include a dynamic class: .page-section-<sectionId>.
.page-section-custom {
border-top: 1pt solid color-mix(in srgb, var(--page-text-color) 15%, transparent);
padding-top: 6pt;
}
If you need the exact <sectionId>, use your browser devtools on the resume preview to inspect the section element.
The preview sets a number of CSS variables you can reuse or override:
--page-width, --page-height--page-sidebar-width--page-text-color, --page-primary-color, --page-background-color--page-body-font-family, --page-body-font-size, --page-body-line-height, --page-body-font-weight, --page-body-font-weight-bold--page-heading-font-family, --page-heading-font-size, --page-heading-line-height, --page-heading-font-weight, --page-heading-font-weight-bold--page-margin-x, --page-margin-y--page-gap-x, --page-gap-yExample (tighten spacing without changing your layout settings):
.page {
--page-margin-x: 10pt;
--page-margin-y: 10pt;
--page-gap-y: 6pt;
}
.page-section > h6 {
margin-bottom: 2pt;
font-weight: 800;
letter-spacing: 0.02em;
text-transform: uppercase;
}
.page-section {
padding-bottom: 8pt;
border-bottom: 1pt solid color-mix(in srgb, var(--page-text-color) 12%, transparent);
}
.page-section:last-child {
border-bottom: none;
}
.section-item-metadata {
font-size: calc(var(--page-body-font-size) * 0.9pt);
opacity: 0.75;
}
.section-item-description {
opacity: 0.95;
}
.section-item-description ul {
margin-left: 12pt;
padding-left: 0;
}
.section-item-description li {
margin: 2pt 0;
}
.section-item-website a {
display: inline-block;
padding: 3pt 9pt;
border-radius: 999pt;
border: 2pt solid color-mix(in srgb, var(--page-primary-color) 45%, transparent);
text-decoration: none;
}
.page-picture {
display: none;
}
.page-header {
gap: 6pt;
padding-bottom: 6pt;
}
.basics-headline {
opacity: 0.8;
}
.skills-item-name {
font-weight: 700;
}
.skills-item-proficiency {
margin-top: 1pt;
}
.skills-item-keywords {
display: block;
opacity: 0.85;
}
.page-section-profiles {
background: color-mix(in srgb, var(--page-primary-color) 10%, transparent);
border-radius: 8pt;
padding: 8pt 12pt;
}
.page, .page-section, and .section-item instead of body.@media rules affect the whole app / don't applyAt-rules aren't auto-scoped. Prefix selectors inside them with .resume-preview-container as shown above.