/* resume.jsx — 5 one-column, ATS-safe résumé templates via one themed renderer. All templates: single column, standard fonts, real headings, no tables/graphics columns — so an ATS parser reads them top-to-bottom cleanly. */ const DEFAULT_ORDER = ["experience", "projects", "education", "skills", "certs"]; const TEMPLATES = { classic: { name: "Meridian", badge: "Serif", font: '"Poppins", "Helvetica Neue", Arial, sans-serif', headFont: '"Poppins", "Helvetica Neue", Arial, sans-serif', align: "center", nameSize: 30, nameWeight: 400, nameCase: "none", nameSpace: ".01em", titleStyle: { case: "none", color: "muted", size: 14, weight: 400, italic: true }, contact: { sep: "•", align: "center", accent: false }, sec: { case: "uppercase", size: 12.5, weight: 700, space: ".12em", rule: "full", color: "ink", accent: false, mt: 22 }, body: 13, lh: 1.5, gap: 1, accentName: false, }, modern: { name: "Veritas", badge: "Sans", font: '"Poppins", "Helvetica Neue", Arial, sans-serif', headFont: '"Poppins", "Helvetica Neue", Arial, sans-serif', align: "left", nameSize: 30, nameWeight: 700, nameCase: "none", nameSpace: "-.01em", titleStyle: { case: "none", color: "accent", size: 14.5, weight: 600, italic: false }, contact: { sep: "|", align: "left", accent: true }, sec: { case: "uppercase", size: 12, weight: 700, space: ".13em", rule: "accent", color: "ink", accent: false, mt: 22 }, body: 13, lh: 1.5, gap: 1, accentName: false, }, minimal: { name: "Lumen", badge: "Airy", font: '"Poppins", "Helvetica Neue", Arial, sans-serif', headFont: '"Poppins", "Helvetica Neue", Arial, sans-serif', align: "left", nameSize: 32, nameWeight: 600, nameCase: "none", nameSpace: "-.02em", titleStyle: { case: "none", color: "muted", size: 14, weight: 400, italic: false }, contact: { sep: "·", align: "left", accent: false }, sec: { case: "uppercase", size: 11, weight: 700, space: ".18em", rule: "none", color: "soft", accent: false, mt: 28 }, body: 13, lh: 1.6, gap: 1.25, accentName: false, }, executive: { name: "Prestige", badge: "Refined", font: 'Georgia, "Times New Roman", serif', headFont: 'Georgia, "Times New Roman", serif', align: "center", nameSize: 31, nameWeight: 700, nameCase: "uppercase", nameSpace: ".06em", titleStyle: { case: "uppercase", color: "accent", size: 12, weight: 600, italic: false, space: ".18em" }, contact: { sep: "•", align: "center", accent: false }, sec: { case: "smallcaps", size: 14.5, weight: 700, space: ".02em", rule: "shortAccent", color: "ink", accent: false, mt: 24 }, body: 13, lh: 1.52, gap: 1.05, accentName: false, headerRule: true, }, technical: { name: "Cipher", badge: "Engineer", font: 'Arial, Helvetica, sans-serif', headFont: '"Poppins", "Helvetica Neue", Arial, sans-serif', align: "left", nameSize: 27, nameWeight: 700, nameCase: "none", nameSpace: "-.01em", titleStyle: { case: "none", color: "accent", size: 13.5, weight: 600, italic: false, mono: true }, contact: { sep: "/", align: "left", accent: true, mono: true }, sec: { case: "uppercase", size: 12, weight: 700, space: ".08em", rule: "block", color: "ink", accent: true, mt: 20 }, body: 12.5, lh: 1.5, gap: .9, accentName: false, mono: true, }, novo: { name: "Kova", badge: "Modern", custom: true, defaultAccent: "#E0533D", font: '"Poppins", "Helvetica Neue", Arial, sans-serif', }, slate: { name: "Ashton", badge: "Corporate", custom: true, defaultAccent: "#33414F", font: '"Poppins", "Helvetica Neue", Arial, sans-serif', }, academic: { name: "Scholars", badge: "Academic", defaultAccent: "#333A47", font: '"Poppins", "Helvetica Neue", Arial, sans-serif', headFont: '"Poppins", "Helvetica Neue", Arial, sans-serif', align: "center", nameSize: 30, nameWeight: 400, nameCase: "uppercase", nameSpace: ".1em", titleStyle: { case: "none", color: "muted", size: 13, weight: 400, italic: false }, contact: { sep: "·", align: "center", accent: false }, sec: { case: "none", size: 14.5, weight: 700, space: ".01em", rule: "full", color: "ink", mt: 22 }, body: 13, lh: 1.5, gap: 1, accentName: false, }, cobalt: { name: "Harbor", badge: "Bold", defaultAccent: "#2D7DD2", font: '"Poppins", "Helvetica Neue", Arial, sans-serif', headFont: '"Poppins", "Helvetica Neue", Arial, sans-serif', align: "left", nameSplit: true, nameSize: 31, nameWeight: 800, nameCase: "uppercase", nameSpace: "-.01em", titleStyle: { case: "none", color: "muted", size: 13.5, weight: 600, italic: false }, contact: { sep: "|", align: "left", accent: false, bar: true }, sec: { case: "none", size: 14.5, weight: 700, space: "0", rule: "accent", color: "ink", mt: 20 }, body: 13, lh: 1.5, gap: 1, accentName: false, }, slab: { name: "Forged", badge: "Heavy", defaultAccent: "#1B7FE0", font: '"Poppins", "Helvetica Neue", Arial, sans-serif', headFont: '"Poppins", "Helvetica Neue", Arial, sans-serif', align: "left", nameSize: 31, nameWeight: 800, nameCase: "uppercase", nameSpace: "-.01em", titleStyle: { case: "none", color: "accent", size: 14, weight: 700, italic: false }, contact: { sep: "•", align: "left", accent: true }, sec: { case: "uppercase", size: 16, weight: 800, space: ".02em", rule: "thick", color: "ink", mt: 22 }, body: 13, lh: 1.5, gap: 1, accentName: false, }, indigo: { name: "Dusk", badge: "Minimal", defaultAccent: "#5B5FCF", font: '"Helvetica Neue", Arial, sans-serif', headFont: '"Helvetica Neue", Arial, sans-serif', align: "left", nameSize: 31, nameWeight: 700, nameCase: "none", nameSpace: "-.01em", titleStyle: { case: "none", color: "soft", size: 14.5, weight: 400, italic: false }, contact: { sep: "·", align: "left", accent: false }, sec: { case: "uppercase", size: 12.5, weight: 700, space: ".08em", rule: "none", color: "soft", mt: 24 }, body: 13, lh: 1.5, gap: 1, accentName: false, }, timeline: { name: "Chronicle", badge: "Modern", custom: true, defaultAccent: "#2E8B57", font: '"Poppins", "Helvetica Neue", Arial, sans-serif', }, sidebar: { name: "Verso", badge: "Two-column", custom: true, defaultAccent: "#1FA89F", side: "left", nameColor: "#2b2d33", font: '"Poppins", "Helvetica Neue", Arial, sans-serif', }, split: { name: "Duet", badge: "Two-column", custom: true, defaultAccent: "#E8732A", side: "right", nameColor: "#13296B", font: '"Poppins", "Helvetica Neue", Arial, sans-serif', }, }; function clr(token, accent) { if (token === "accent") return accent; if (token === "muted") return "#444"; if (token === "soft") return "#6b7280"; return "#15171f"; } function SectionTitle({ t, accent, children }) { const s = t.sec; const base = { fontFamily: t.headFont, fontSize: s.size, fontWeight: s.weight, letterSpacing: s.space, textTransform: s.case === "smallcaps" ? "none" : s.case, fontVariant: s.case === "smallcaps" ? "small-caps" : "normal", color: clr(s.color, accent), margin: `${s.mt}px 0 9px`, paddingBottom: 5, lineHeight: 1.1, }; if (s.rule === "full") { base.borderBottom = "1px solid #c9ced6"; } if (s.rule === "thick") { base.borderBottom = "2.5px solid #1c2230"; base.paddingBottom = 6; } if (s.rule === "accent") { base.borderBottom = `2px solid ${accent}`; } if (s.rule === "shortAccent") { return (
{children}
); } if (s.rule === "block") { return (
{children}
); } return
{children}
; } const FONTS = [ { key: "poppins", label: "Poppins", stack: '"Poppins", "Helvetica Neue", Arial, sans-serif', note: "Default" }, { key: "auto", label: "Template default", stack: null }, { key: "arial", label: "Arial", stack: 'Arial, Helvetica, sans-serif' }, { key: "helvetica", label: "Helvetica", stack: '"Helvetica Neue", Helvetica, Arial, sans-serif' }, { key: "calibri", label: "Calibri", stack: 'Calibri, Carlito, "Segoe UI", sans-serif' }, { key: "verdana", label: "Verdana", stack: 'Verdana, Geneva, sans-serif' }, { key: "georgia", label: "Georgia", stack: 'Georgia, "Times New Roman", serif' }, { key: "times", label: "Times New Roman", stack: '"Times New Roman", Times, serif' }, { key: "garamond", label: "Garamond", stack: 'Garamond, "Palatino Linotype", Georgia, serif' }, { key: "ubuntu", label: "Ubuntu", stack: '"Ubuntu", "Segoe UI", Arial, sans-serif', note: "Novoresume" }, { key: "lato", label: "Lato", stack: '"Lato", "Helvetica Neue", Arial, sans-serif' }, { key: "roboto", label: "Roboto", stack: '"Roboto", Arial, sans-serif' }, { key: "opensans", label: "Open Sans", stack: '"Open Sans", "Segoe UI", Arial, sans-serif' }, ]; const FONT_STACKS = Object.fromEntries(FONTS.map((f) => [f.key, f.stack])); window.FONTS = FONTS; const RESUME_ACCENTS = ["#0A0E39", "#1C9BE6", "#34C77F", "#0E7490", "#6D5AE0", "#475569", "#C2410C", "#BE185D", "#111827"]; function NovoResume({ data, accent = "#E0533D", design = {}, sectionOrder = DEFAULT_ORDER }) { const { basics = {}, summary, experience = [], education = [], skills = [], projects = [], certs = [], custom = [], languages = [], activities = [], profdegrees = [], references = [], refsOnRequest } = data; const f = design.scale === "small" ? 0.93 : design.scale === "large" ? 1.09 : 1; const sp = design.spacing === "compact" ? 0.9 : design.spacing === "relaxed" ? 1.14 : 1; const fontOverride = design.font && design.font !== "auto" ? FONT_STACKS[design.font] : null; const font = fontOverride || '"Poppins", "Helvetica Neue", Arial, sans-serif'; const lh = +(1.5 * sp).toFixed(3); const body = 13.2 * f; const STEEL = "#7E94A8"; // skill pills const STEEL_DK = "#2E4A63"; // leading section diamond const LINE = "#C4CDD7"; // divider line + end diamonds const INK = "#2b2d33"; const SUB = "#54565c"; const Dia = ({ s = 9, color = LINE, fill = "none", sw = 1.4 }) => ( ); const SectionHead = ({ children }) => (

{children}

); const Bullet = ({ children }) => (
{children}
); const Bullets = ({ items }) => (items || []).filter(Boolean).map((b, i) => {b}); const contact = [ basics.email && { icon: "mail", text: basics.email }, basics.phone && { icon: "phone", text: basics.phone }, basics.location && { icon: "pin", text: basics.location }, basics.website && { icon: "globe", text: basics.website }, basics.linkedin && { icon: "link", text: basics.linkedin }, ].filter(Boolean); const skillItems = skills.flatMap((g) => g.items || []); const Entry = ({ title, sub, date, children }) => (
{title}
{sub &&
{sub}
} {date &&
{date}
} {children}
); return (
{/* Header */}

{basics.name || "Your Name"}

{basics.title &&
{basics.title}
}
{basics.photo && }
{summary &&

{summary}

} {contact.length > 0 && (
{contact.map((c, i) => (
{c.text}
))}
)} {skillItems.length > 0 && (
Areas of Expertise
{skillItems.map((s, i) => ( {s} ))}
)} {sectionOrder.map(key => { if (key === "experience" && experience.length > 0) return (
Work Experience {experience.map((x, i) => ( ))}
); if (key === "projects" && projects.length > 0) return (
Projects {projects.map((p, i) => ( {p.detail &&
{p.detail}
}
))}
); if (key === "education" && education.length > 0) return (
Education {education.map((e, i) => ( {e.detail &&
{e.detail}
}
))}
); if (key === "certs" && certs.length > 0) return (
Certifications {certs.filter(Boolean).map((c, i) => {c})}
); if (key === "languages" && languages.length > 0) return (
Languages
{languages.filter(l => l.lang).map((l, i) => {l.lang}{l.level ? ` - ${l.level}` : ""})}
); if (key === "activities" && activities.length > 0) return (
Extracurricular Activities {activities.map((a, i) => (
{a.title}{a.org ? ` - ${a.org}` : ""} {a.dates && {a.dates}}
{a.detail &&
{a.detail}
}
))}
); if (key === "profdegrees" && profdegrees.length > 0) return (
Professional Credentials {profdegrees.filter(Boolean).map((c, i) => {c})}
); if (key === "references") return (
References {refsOnRequest || !references.length ? (
Available upon request
) : (
{references.filter(r => r.name).map((r, i) => (
{r.name}
{r.title &&
{r.title}{r.company ? `, ${r.company}` : ""}
} {r.email &&
{r.email}
} {r.phone &&
{r.phone}
}
))}
)}
); return null; })} {custom.filter((c) => (c.heading && c.heading.trim()) || (c.body && c.body.replace(/<[^>]*>/g, "").trim())).map((c) => (
{c.heading || "Section"}
))}
); } function SlateResume({ data, accent = "#33414F", design = {}, sectionOrder = DEFAULT_ORDER }) { const { basics = {}, summary, experience = [], education = [], skills = [], projects = [], certs = [], custom = [], languages = [], activities = [], profdegrees = [], references = [], refsOnRequest } = data; const f = design.scale === "small" ? 0.93 : design.scale === "large" ? 1.09 : 1; const sp = design.spacing === "compact" ? 0.9 : design.spacing === "relaxed" ? 1.14 : 1; const fontOverride = design.font && design.font !== "auto" ? FONT_STACKS[design.font] : null; const font = fontOverride || '"Poppins", "Helvetica Neue", Arial, sans-serif'; const lh = +(1.5 * sp).toFixed(3); const body = 13.2 * f; const PAD = 56; const INK = "#2b2d33"; const SUB = "#54565c"; const META = "#8a8d94"; const contact = [ basics.email && { icon: "mail", text: basics.email }, basics.phone && { icon: "phone", text: basics.phone }, basics.location && { icon: "pin", text: basics.location }, basics.linkedin && { icon: "link", text: basics.linkedin }, basics.website && { icon: "globe", text: basics.website }, ].filter(Boolean); const skillItems = skills.flatMap((g) => g.items || []); const SectionHead = ({ children }) => (

{children}

); const Ring = () => ( ); const Bullets = ({ items }) => (items || []).filter(Boolean).map((b, i) => (
{b}
)); const Entry = ({ title, sub, dateL, dateR, children }) => (
{title}
{sub &&
{sub}
} {(dateL || dateR) && (
{dateL}{dateR}
)} {children}
); return (

{basics.name || "Your Name"}

{basics.title &&
{basics.title}
} {summary &&

{summary}

} {/* Dark full-width contact bar */} {contact.length > 0 && (
{contact.map((c, i) => ( {c.text} ))}
)} {skillItems.length > 0 && (
Skills
{skillItems.map((s, i) =>
{s}
)}
)} {sectionOrder.map(key => { if (key === "experience" && experience.length > 0) return (
Work Experience {experience.map((x, i) => ( ))}
); if (key === "projects" && projects.length > 0) return (
Projects {projects.map((p, i) => ( {p.detail &&
{p.detail}
}
))}
); if (key === "education" && education.length > 0) return (
Education {education.map((e, i) => ( {e.detail &&
{e.detail}
}
))}
); if (key === "certs" && certs.length > 0) return (
Certifications
); if (key === "languages" && languages.length > 0) return (
Languages
{languages.filter(l => l.lang).map((l, i) => {l.lang}{l.level ? ` - ${l.level}` : ""})}
); if (key === "activities" && activities.length > 0) return (
Extracurricular Activities {activities.map((a, i) => (
{a.title}{a.org ? ` - ${a.org}` : ""} {a.dates && {a.dates}}
{a.detail &&
{a.detail}
}
))}
); if (key === "profdegrees" && profdegrees.length > 0) return (
Professional Credentials
); if (key === "references") return (
References {refsOnRequest || !references.length ? (
Available upon request
) : (
{references.filter(r => r.name).map((r, i) => (
{r.name}
{r.title &&
{r.title}{r.company ? `, ${r.company}` : ""}
} {r.email &&
{r.email}
} {r.phone &&
{r.phone}
}
))}
)}
); return null; })} {custom.filter((c) => (c.heading && c.heading.trim()) || (c.body && c.body.replace(/<[^>]*>/g, "").trim())).map((c) => (
{c.heading || "Section"}
))}
); } function makeContact(basics) { return [ basics.phone && { icon: "phone", text: basics.phone }, basics.email && { icon: "mail", text: basics.email }, basics.linkedin && { icon: "link", text: basics.linkedin }, basics.website && { icon: "globe", text: basics.website }, basics.location && { icon: "pin", text: basics.location }, ].filter(Boolean); } function TimelineResume({ data, accent = "#2E8B57", design = {}, sectionOrder = DEFAULT_ORDER }) { const { basics = {}, summary, experience = [], education = [], skills = [], projects = [], certs = [], custom = [], languages = [], activities = [], profdegrees = [], references = [], refsOnRequest } = data; const f = design.scale === "small" ? 0.93 : design.scale === "large" ? 1.09 : 1; const sp = design.spacing === "compact" ? 0.9 : design.spacing === "relaxed" ? 1.14 : 1; const fontOverride = design.font && design.font !== "auto" ? FONT_STACKS[design.font] : null; const font = fontOverride || '"Poppins", "Helvetica Neue", Arial, sans-serif'; const lh = +(1.5 * sp).toFixed(3); const body = 13.2 * f; const PAD = 54, INK = "#2b2d33", SUB = "#54565c", META = "#6b7280"; const contact = makeContact(basics); const skillItems = skills.flatMap((g) => g.items || []); const SectionHead = ({ children }) => (

{children}

); const Bullets = ({ items }) => (items || []).filter(Boolean).map((b, i) => (
{b}
)); const TLItem = ({ dateL, loc, role, org, last, children }) => (
{dateL}
{loc &&
{loc}
}
{!last && }
{role}
{org &&
{org}
} {children &&
{children}
}
); return (

{basics.name || "Your Name"}

{basics.title &&
{basics.title}
} {contact.length > 0 && (
{contact.map((c, i) => ( {c.text} ))}
)}
{basics.photo && }
{summary && (
Summary

{summary}

)} {sectionOrder.map(key => { if (key === "experience" && experience.length > 0) return (
Experience {experience.map((x, i) => ( ))}
); if (key === "education" && education.length > 0) return (
Education {education.map((e, i) => ( {e.detail &&
{e.detail}
}
))}
); if (key === "projects" && projects.length > 0) return (
Projects {projects.map((p, i) => (
{p.name}{p.tech && · {p.tech}}
{p.detail &&
{p.detail}
}
))}
); if (key === "skills" && skillItems.length > 0) return (
Skills
{skillItems.join(", ")}
); if (key === "certs" && certs.length > 0) return (
Certifications
); if (key === "languages" && languages.length > 0) return (
Languages
{languages.filter(l => l.lang).map((l, i) => `${l.lang}${l.level ? ` (${l.level})` : ""}`).join(" · ")}
); if (key === "activities" && activities.length > 0) return (
Extracurricular Activities {activities.map((a, i) => (
{a.title}{a.org ? ` - ${a.org}` : ""}{a.dates ? · {a.dates} : ""}
{a.detail &&
{a.detail}
}
))}
); if (key === "profdegrees" && profdegrees.length > 0) return (
Professional Credentials
); if (key === "references") return (
References {refsOnRequest || !references.length ? (
Available upon request
) : references.filter(r => r.name).map((r, i) => (
{r.name}
{r.title &&
{r.title}{r.company ? `, ${r.company}` : ""}
} {r.email &&
{r.email}
}
))}
); return null; })} {custom.filter((c) => (c.heading && c.heading.trim()) || (c.body && c.body.replace(/<[^>]*>/g, "").trim())).map((c) => (
{c.heading || "Section"}
))}
); } function TwoColResume({ data, accent = "#1FA89F", design = {}, side = "left", nameColor = "#2b2d33", sectionOrder = DEFAULT_ORDER, sidebarSections = DEFAULT_SIDEBAR }) { const { basics = {}, summary, experience = [], education = [], skills = [], projects = [], certs = [], custom = [], languages = [], activities = [], profdegrees = [], references = [], refsOnRequest } = data; const f = design.scale === "small" ? 0.93 : design.scale === "large" ? 1.09 : 1; const sp = design.spacing === "compact" ? 0.9 : design.spacing === "relaxed" ? 1.14 : 1; const fontOverride = design.font && design.font !== "auto" ? FONT_STACKS[design.font] : null; const font = fontOverride || '"Poppins", "Helvetica Neue", Arial, sans-serif'; const lh = +(1.5 * sp).toFixed(3); const body = 12.6 * f; const PAD = 46, SUB = "#54565c", META = "#7c828c"; const contact = makeContact(basics); const skillItems = skills.flatMap((g) => g.items || []); const inSidebar = (id) => sidebarSections.includes(id); const Head = ({ children, small }) => (

{children}

); const Bullets = ({ items }) => (items || []).filter(Boolean).map((b, i) => (
{b}
)); const meta = (txt, icon) => {txt}; const ExpBlock = ({ items }) => items.map((x, i) => (
{x.role}
{x.company}
{meta(`${x.start} - ${x.end}`, "calendar")}{x.location && meta(x.location, "pin")}
)); const Main = (
{summary && (
Summary

{summary}

)} {sectionOrder.filter(id => !inSidebar(id)).map(key => { if (key === "experience" && experience.length > 0) return (
Experience
); if (key === "education" && education.length > 0) return (
Education {education.map((e, i) => (
{e.degree}
{e.school}
{meta(`${e.start} - ${e.end}`, "briefcase")}{e.location && meta(e.location, "pin")}
))}
); if (key === "projects" && projects.length > 0) return (
Projects {projects.map((p, i) => (
{p.name}
{p.detail &&
{p.detail}
}
))}
); if (key === "skills" && skillItems.length > 0) return (
Skills
{skillItems.map((s, i) => (
{s}
))}
); if (key === "certs" && certs.length > 0) return (
Training & Courses {certs.filter(Boolean).map((c, i) =>
{c}
)}
); if (key === "languages" && languages.length > 0) return (
Languages {languages.filter(l => l.lang).map((l, i) =>
{l.lang}{l.level ? ` - ${l.level}` : ""}
)}
); if (key === "activities" && activities.length > 0) return (
Extracurricular Activities {activities.map((a, i) => (
{a.title}{a.org ? ` - ${a.org}` : ""}
{a.dates &&
{a.dates}
} {a.detail &&
{a.detail}
}
))}
); if (key === "profdegrees" && profdegrees.length > 0) return (
Professional Credentials {profdegrees.filter(Boolean).map((c, i) =>
{c}
)}
); if (key === "references") return (
References {refsOnRequest || !references.length ? (
Available upon request
) : references.filter(r => r.name).map((r, i) => (
{r.name}
{r.title &&
{r.title}{r.company ? `, ${r.company}` : ""}
} {r.email &&
{r.email}
}
))}
); return null; })}
); const Side = (
{sectionOrder.filter(id => inSidebar(id)).map(key => { if (key === "skills" && skillItems.length > 0) return (
Skills
{skillItems.map((s, i) => (
{s}
))}
); if (key === "certs" && certs.length > 0) return (
Training & Courses {certs.filter(Boolean).map((c, i) =>
{c}
)}
); if (key === "education" && education.length > 0) return (
Education {education.map((e, i) => (
{e.degree}
{e.school}
{e.start} - {e.end}{e.location ? ` · ${e.location}` : ""}
))}
); if (key === "experience" && experience.length > 0) return (
Experience
); if (key === "projects" && projects.length > 0) return (
Projects {projects.map((p, i) => (
{p.name}
{p.detail &&
{p.detail}
}
))}
); if (key === "languages" && languages.length > 0) return (
Languages {languages.filter(l => l.lang).map((l, i) =>
{l.lang}{l.level ? ` - ${l.level}` : ""}
)}
); if (key === "activities" && activities.length > 0) return (
Extracurricular Activities {activities.map((a, i) => (
{a.title}{a.org ? ` - ${a.org}` : ""}
{a.dates &&
{a.dates}
}
))}
); if (key === "profdegrees" && profdegrees.length > 0) return (
Professional Credentials {profdegrees.filter(Boolean).map((c, i) =>
{c}
)}
); if (key === "references") return (
References {refsOnRequest || !references.length ? (
Available upon request
) : references.filter(r => r.name).map((r, i) => (
{r.name}
{r.title &&
{r.title}
} {r.email &&
{r.email}
}
))}
); return null; })} {custom.filter((c) => (c.heading && c.heading.trim()) || (c.body && c.body.replace(/<[^>]*>/g, "").trim())).map((c) => (
{c.heading || "Section"}
))}
); return (

{basics.name || "Your Name"}

{basics.title &&
{basics.title}
} {contact.length > 0 && (
{contact.map((c, i) => ( {c.text} ))}
)}
{basics.photo && }
{side === "left" ? <>{Side}{Main} : <>{Main}{Side}}
); } const DEFAULT_SIDEBAR = ["skills", "certs", "education"]; function Resume({ data, template = "classic", accent = "#1C9BE6", design = {}, sectionOrder = DEFAULT_ORDER, sidebarSections = DEFAULT_SIDEBAR }) { if (template === "novo") return ; if (template === "slate") return ; if (template === "timeline") return ; if (template === "sidebar" || template === "split") { const cfg = TEMPLATES[template]; return ; } const t0 = TEMPLATES[template] || TEMPLATES.classic; const f = design.scale === "small" ? 0.93 : design.scale === "large" ? 1.09 : 1; const sp = design.spacing === "compact" ? 0.9 : design.spacing === "relaxed" ? 1.14 : 1; const fontOverride = design.font && design.font !== "auto" ? FONT_STACKS[design.font] : null; const t = { ...t0, font: fontOverride || t0.font, headFont: fontOverride || t0.headFont, mono: fontOverride ? false : t0.mono, nameSize: t0.nameSize * f, body: t0.body * f, lh: +(t0.lh * sp).toFixed(3), gap: t0.gap * sp, sec: { ...t0.sec, size: t0.sec.size * f }, titleStyle: { ...t0.titleStyle, size: t0.titleStyle.size * f, mono: fontOverride ? false : t0.titleStyle.mono }, contact: { ...t0.contact, mono: fontOverride ? false : t0.contact.mono }, contactSize: (t0.contact.mono && !fontOverride ? 11.5 : 12.2) * f, }; const { basics = {}, summary, experience = [], education = [], skills = [], projects = [], certs = [], custom = [], languages = [], activities = [], profdegrees = [], references = [], refsOnRequest } = data; const pad = template === "minimal" ? 64 : template === "technical" ? 48 : 56; const g = t.gap; const contactItems = [ basics.location, basics.phone, basics.email, basics.website, basics.linkedin, ].filter(Boolean); const linkColor = t.contact.accent ? accent : clr("ink", accent); const wrapStyle = { fontFamily: t.font, fontSize: t.body, lineHeight: t.lh, color: "#15171f", padding: `${pad}px ${pad}px ${pad + 8}px`, minHeight: 1056, }; const Bullets = ({ items }) => (
    {(items || []).filter(Boolean).map((b, i) => (
  • {b}
  • ))}
); const photo = basics.photo; const avatarRadius = (template === "classic" || template === "executive") ? "50%" : "10px"; const Avatar = photo ? ( ) : null; const Header = () => { const TextBlock = (

{t.nameSplit ? (() => { const parts = (basics.name || "Your Name").split(" "); const last = parts.length > 1 ? parts.pop() : ""; return (<>{parts.join(" ")}{last && {last}}); })() : (basics.name || "Your Name")}

{basics.title && (
{basics.title}
)} {!t.contact.bar && (
{contactItems.map((c, i) => { const isLink = c === basics.email || c === basics.website || c === basics.linkedin; return ( {c} {i < contactItems.length - 1 && {t.contact.sep}} ); })}
)}
); if (t.align === "center") { return (
{Avatar &&
{Avatar}
} {TextBlock} {t.headerRule &&
}
); } return (
{TextBlock} {Avatar}
{t.contact.bar && contactItems.length > 0 && (
{contactItems.map((c, i) => ( {c}{i < contactItems.length - 1 && {t.contact.sep}} ))}
)} {t.headerRule &&
}
); }; const ExpItem = (x, i) => (
{x.role}
{x.start} – {x.end}
{x.company}
{x.location}
); return (
{summary && (
{template === "executive" ? "Profile" : "Summary"}

{summary}

)} {sectionOrder.map(key => { if (key === "experience" && experience.length > 0) return (
Experience {experience.map(ExpItem)}
); if (key === "projects" && projects.length > 0) return (
Projects {projects.map((p, i) => (
{p.name}
{p.tech &&
{p.tech}
}
{p.detail &&
{p.detail}
}
))}
); if (key === "education" && education.length > 0) return (
Education {education.map((e, i) => (
{e.school}
{e.start} – {e.end}
{e.degree}
{e.location}
{e.detail &&
{e.detail}
}
))}
); if (key === "skills" && skills.length > 0) return (
Skills {skills.map((grp, i) => (
{grp.group && ( {grp.group} )} {(grp.items || []).join(" • ")}
))}
); if (key === "certs" && certs.length > 0) return (
Certifications
    {certs.map((c, i) =>
  • {c}
  • )}
); if (key === "languages" && languages.length > 0) return (
Languages
{languages.filter(l => l.lang).map((l, i) => ( {l.lang}{l.level ? ` - ${l.level}` : ""} ))}
); if (key === "activities" && activities.length > 0) return (
Extracurricular Activities {activities.map((a, i) => (
{a.title}{a.org ? ` - ${a.org}` : ""} {a.dates && {a.dates}}
{a.detail &&
{a.detail}
}
))}
); if (key === "profdegrees" && profdegrees.length > 0) return (
Professional Credentials
    {profdegrees.filter(Boolean).map((c, i) =>
  • {c}
  • )}
); if (key === "references") return (
References {refsOnRequest || !references.length ? (

Available upon request

) : (
{references.filter(r => r.name).map((r, i) => (
{r.name}
{r.title &&
{r.title}{r.company ? `, ${r.company}` : ""}
} {r.email &&
{r.email}
} {r.phone &&
{r.phone}
}
))}
)}
); return null; })} {custom.filter(c => (c.heading && c.heading.trim()) || (c.body && c.body.replace(/<[^>]*>/g, "").trim())).map((c) => (
{c.heading || "Section"}
))}
); } Object.assign(window, { Resume, TEMPLATES, FONTS, RESUME_ACCENTS });