/* ==========================================================================
   CV TEMPLATE DESIGNS

   Every design is driven from the registry in app_core.js (CV_TEMPLATES).
   The renderer emits identical markup for all of them; only the class on
   #cv-html-rendering changes. So a template is defined here, and here only.

   Three layers, in this order:
     1. Shared theme tokens the base stylesheet already reads as fallbacks.
     2. Shared structure for the layout variants (sidebar, header band).
     3. One block per design.

   Prefer setting tokens over writing new rules — the base stylesheet in
   style.css consumes every --cv-* name used below, so a token-only template
   inherits all the spacing and pagination behaviour for free.

   Sizes are in pt to match style.css, which is authored for print first.
   ========================================================================== */

/* ==========================================================================
   1. SHARED STRUCTURE — sidebar layouts (templates 16, 18, 20, and Pro design 25)

   Template 6 has its own copy of these rules in style.css, written before
   there was more than one sidebar design. It is deliberately not folded in
   here: identical selector specificity means whichever block comes last
   would win, and template 6 is the design most people already have saved.
   ========================================================================== */
.template-16-style .cv-t6-layout,
.template-25-style .cv-t6-layout,
.template-18-style .cv-t6-layout,
.template-20-style .cv-t6-layout {
  display: flex;
  gap: 16pt;
  /* stretch, so the rail runs the full height of the page's content */
  align-items: stretch;
  min-height: 100%;
}
.template-16-style .cv-t6-layout { flex-direction: row-reverse; }
.template-25-style .cv-t6-layout { flex-direction: row-reverse; }

/* The rail bleeds off the outer edge and both ends of the sheet. The sheet
   clips it (overflow: hidden), so it reads as printed to the paper edge. */
.template-16-style .cv-t6-sidebar,
.template-25-style .cv-t6-sidebar,
.template-18-style .cv-t6-sidebar,
.template-20-style .cv-t6-sidebar {
  /* Colour is painted by .cv-t6-layout::before. box-sizing keeps padding
     inside the flex basis so long emails wrap instead of spilling into main. */
  flex: 0 0 calc(30% + var(--cv-pad-x, 17mm));
  max-width: calc(30% + var(--cv-pad-x, 17mm));
  box-sizing: border-box;
  min-width: 0;
  position: relative;
  background: transparent;
  color: var(--cv-header-text, #fff);
  margin: calc(var(--cv-pad-y, 18mm) * -1) 0;
  padding: var(--cv-pad-y, 18mm) 12pt;
  overflow-wrap: anywhere;
  word-break: break-word;
}
.template-18-style .cv-t6-sidebar,
.template-20-style .cv-t6-sidebar {
  margin-left: calc(var(--cv-pad-x, 17mm) * -1);
  padding-left: var(--cv-pad-x, 17mm);
}
.template-16-style .cv-t6-sidebar,
.template-25-style .cv-t6-sidebar {
  margin-right: calc(var(--cv-pad-x, 17mm) * -1);
  /* This rail sits on the outer edge, so its text's flush-left side faces
     the divider. With the left-rail split (page margin outside, 12pt inside)
     the block hugged the divider and left a wide empty band at the paper
     edge. Equal padding on both sides centres it; the total gutter is
     unchanged, so the content column is as wide as the other rails'. */
  padding-left: calc((var(--cv-pad-x, 17mm) + 12pt) / 2);
  padding-right: calc((var(--cv-pad-x, 17mm) + 12pt) / 2);
}
.template-16-style .cv-t6-main,
.template-25-style .cv-t6-main,
.template-18-style .cv-t6-main,
.template-20-style .cv-t6-main {
  flex: 1;
  min-width: 0;
}
.template-16-style .cv-t6-sidebar .cv-profile-photo-wrap,
.template-25-style .cv-t6-sidebar .cv-profile-photo-wrap,
.template-18-style .cv-t6-sidebar .cv-profile-photo-wrap,
.template-20-style .cv-t6-sidebar .cv-profile-photo-wrap {
  margin: 0 0 9pt;
}
.template-16-style .cv-t6-sidebar .cv-profile-photo,
.template-25-style .cv-t6-sidebar .cv-profile-photo,
.template-18-style .cv-t6-sidebar .cv-profile-photo,
.template-20-style .cv-t6-sidebar .cv-profile-photo {
  width: 100%;
  max-width: 78pt;
  height: 78pt;
  object-fit: cover;
  display: block;
  margin: 0 auto;
  border: 2px solid rgba(255, 255, 255, 0.35);
}
.template-16-style .cv-t6-sidebar .cv-profile-photo-placeholder,
.template-25-style .cv-t6-sidebar .cv-profile-photo-placeholder,
.template-18-style .cv-t6-sidebar .cv-profile-photo-placeholder,
.template-20-style .cv-t6-sidebar .cv-profile-photo-placeholder {
  width: 78pt;
  height: 78pt;
  margin: 0 auto;
  border: 2px dashed rgba(255, 255, 255, 0.45);
  background: rgba(255, 255, 255, 0.1);
  color: rgba(255, 255, 255, 0.85);
  font-size: calc(7pt * var(--cv-font-scale, 1));
}
.template-16-style .cv-t6-sidebar-name,
.template-25-style .cv-t6-sidebar-name,
.template-18-style .cv-t6-sidebar-name,
.template-20-style .cv-t6-sidebar-name {
  font-family: var(--font-header);
  font-size: calc(15pt * var(--cv-font-scale, 1));
  font-weight: 700;
  line-height: 1.15;
  text-align: left;
  margin-bottom: 3pt;
  color: inherit;
  overflow-wrap: anywhere;
  word-break: break-word;
  max-width: 100%;
  white-space: normal;
}
.template-16-style .cv-t6-sidebar-tagline,
.template-25-style .cv-t6-sidebar-tagline,
.template-18-style .cv-t6-sidebar-tagline,
.template-20-style .cv-t6-sidebar-tagline {
  font-size: calc(8.5pt * var(--cv-font-scale, 1));
  text-align: left;
  opacity: 0.85;
  margin-bottom: 10pt;
  line-height: 1.35;
  overflow-wrap: anywhere;
  word-break: break-word;
  max-width: 100%;
  white-space: normal;
}
.template-16-style .cv-t6-contact,
.template-25-style .cv-t6-contact,
.template-18-style .cv-t6-contact,
.template-20-style .cv-t6-contact {
  font-size: calc(8pt * var(--cv-font-scale, 1));
  line-height: 1.6;
  display: flex;
  flex-direction: column;
  gap: 2pt;
  margin-bottom: 10pt;
  overflow-wrap: anywhere;
  word-break: break-word;
  max-width: 100%;
}
.template-16-style .cv-t6-sidebar .cv-contact-link,
.template-25-style .cv-t6-sidebar .cv-contact-link,
.template-16-style .cv-t6-sidebar .cv-contact-link .cv-contact-text,
.template-25-style .cv-t6-sidebar .cv-contact-link .cv-contact-text,
.template-16-style .cv-t6-sidebar .cv-pdf-link,
.template-25-style .cv-t6-sidebar .cv-pdf-link,
.template-18-style .cv-t6-sidebar .cv-contact-link,
.template-18-style .cv-t6-sidebar .cv-contact-link .cv-contact-text,
.template-18-style .cv-t6-sidebar .cv-pdf-link,
.template-20-style .cv-t6-sidebar .cv-contact-link,
.template-20-style .cv-t6-sidebar .cv-contact-link .cv-contact-text,
.template-20-style .cv-t6-sidebar .cv-pdf-link {
  color: inherit;
  -webkit-text-fill-color: currentColor;
}
.template-16-style .cv-t6-sidebar .cv-contact-label,
.template-25-style .cv-t6-sidebar .cv-contact-label,
.template-18-style .cv-t6-sidebar .cv-contact-label,
.template-20-style .cv-t6-sidebar .cv-contact-label {
  font-weight: 600;
  margin-right: 4px;
}
.template-16-style .cv-t6-contact-line,
.template-25-style .cv-t6-contact-line,
.template-18-style .cv-t6-contact-line,
.template-20-style .cv-t6-contact-line {
  display: block;
  white-space: normal;
  max-width: 100%;
  overflow-wrap: anywhere;
  word-break: break-word;
}
.template-16-style .cv-t6-sidebar .cv-contact-item,
.template-25-style .cv-t6-sidebar .cv-contact-item,
.template-18-style .cv-t6-sidebar .cv-contact-item,
.template-20-style .cv-t6-sidebar .cv-contact-item {
  display: inline-flex;
  align-items: flex-start;
  width: fit-content;
  max-width: 100%;
  white-space: normal;
  overflow-wrap: anywhere;
  word-break: break-word;
}
.template-16-style .cv-t6-sidebar .cv-section,
.template-25-style .cv-t6-sidebar .cv-section,
.template-18-style .cv-t6-sidebar .cv-section,
.template-20-style .cv-t6-sidebar .cv-section {
  margin-bottom: 9pt;
}
.template-16-style .cv-t6-sidebar .section-title,
.template-25-style .cv-t6-sidebar .section-title,
.template-18-style .cv-t6-sidebar .section-title,
.template-20-style .cv-t6-sidebar .section-title {
  color: inherit;
  font-size: calc(8.5pt * var(--cv-font-scale, 1));
  letter-spacing: 0.06em;
  overflow-wrap: normal;
  border-bottom: 1px solid rgba(255, 255, 255, 0.3);
  padding-bottom: 2pt;
  padding-right: 0;
  margin-bottom: 5pt;
}
/* Two narrow columns of skills never read well in a 31% rail — stack them. */
.template-16-style .cv-t6-sidebar .skill-row,
.template-25-style .cv-t6-sidebar .skill-row,
.template-18-style .cv-t6-sidebar .skill-row,
.template-20-style .cv-t6-sidebar .skill-row {
  display: block;
  font-size: calc(8.5pt * var(--cv-font-scale, 1));
  padding-right: var(--skill-actions-space, 68px);
}
.template-16-style .cv-t6-sidebar .skill-cat,
.template-25-style .cv-t6-sidebar .skill-cat,
.template-18-style .cv-t6-sidebar .skill-cat,
.template-20-style .cv-t6-sidebar .skill-cat {
  color: inherit;
  font-size: calc(8.5pt * var(--cv-font-scale, 1));
  display: block;
}
.template-16-style .cv-t6-sidebar .skill-items,
.template-25-style .cv-t6-sidebar .skill-items,
.template-18-style .cv-t6-sidebar .skill-items,
.template-20-style .cv-t6-sidebar .skill-items {
  color: inherit;
  opacity: 0.9;
  font-size: calc(8.5pt * var(--cv-font-scale, 1));
}

/* ==========================================================================
   2. SHARED STRUCTURE — full-bleed header band (template 11)

   The band bleeds past the sheet's 12pt padding with a negative margin, the
   same trick template 8 uses.
   ========================================================================== */
.template-11-style .cv-header {
  background: var(--cv-header-bg);
  color: var(--cv-header-text, #fff);
  margin: calc(var(--cv-pad-y, 18mm) * -1) calc(var(--cv-pad-x, 17mm) * -1) 14pt;
  padding: calc(var(--cv-pad-y, 18mm) * 0.75) var(--cv-pad-x, 17mm) 13pt;
  border-bottom: none;
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
}
.template-11-style .cv-header h1,
.template-11-style .cv-header .tagline,
.template-11-style .cv-contact-row,
.template-11-style .cv-header .cv-contact-link,
.template-11-style .cv-header .cv-contact-link .cv-contact-text,
.template-11-style .cv-header .cv-pdf-link {
  color: inherit;
  -webkit-text-fill-color: currentColor;
}
/* ==========================================================================
   3. THE DESIGNS
   ========================================================================== */

/* ── 9 · Compact ───────────────────────────────────────────────────────────
   For people with a lot of history and one page to put it on. Everything is
   proportionally tighter, so the user's own spacing setting still applies. */
.template-9-style,
.template-9-style .cv-page-sheet {
  --cv-section-title-color: hsl(215 25% 25%);
  --cv-section-rule-color: hsl(215 15% 78%);
  --cv-accent-color: hsl(215 30% 40%);
  --cv-muted-text: hsl(215 12% 45%);
}
.template-9-style .cv-header {
  margin-bottom: 0.6rem;
  padding-bottom: 0.5rem;
}
.template-9-style .cv-header h1 {
  font-size: calc(17pt * var(--cv-font-scale, 1));
  letter-spacing: 0;
  margin-bottom: 0.1rem;
}
.template-9-style .cv-header .tagline {
  font-size: calc(9pt * var(--cv-font-scale, 1));
  margin-bottom: 0.35rem;
}
.template-9-style .cv-contact-row { font-size: calc(8pt * var(--cv-font-scale, 1)); gap: 0 0.5rem; }
.template-9-style .cv-section { margin-bottom: calc(var(--cv-section-gap, 0.9rem) * 0.62); }
.template-9-style .cv-section-head { margin-bottom: 0.3rem; }
.template-9-style .section-title {
  font-size: calc(9.5pt * var(--cv-font-scale, 1));
  letter-spacing: 0.08em;
  padding-bottom: 0.1rem;
  margin-bottom: 0.3rem;
}
.template-9-style .cv-summary {
  font-size: calc(9.5pt * var(--cv-font-scale, 1));
  line-height: 1.45;
  margin-bottom: 0.5rem;
}
.template-9-style .cv-entry-item { margin-bottom: 0.35rem; }
.template-9-style .cv-entry-title { font-size: calc(10pt * var(--cv-font-scale, 1)); }
.template-9-style .cv-entry-subtitle { font-size: calc(9.5pt * var(--cv-font-scale, 1)); font-style: normal; }
.template-9-style .cv-bullet-list { margin-top: 0.12rem; }
.template-9-style .cv-bullet-list li {
  font-size: calc(9.5pt * var(--cv-font-scale, 1));
  line-height: 1.38;
  margin-bottom: 0.05rem;
  padding-left: 0.85em;
}
.template-9-style .cv-bullet-list li::before { content: '\2022'; font-size: calc(9pt * var(--cv-font-scale, 1)); top: 0; }
.template-9-style .skill-row { font-size: calc(9.5pt * var(--cv-font-scale, 1)); line-height: 1.4; }
.template-9-style .skills-table { gap: 0.22rem; }

/* ── 10 · Editorial ────────────────────────────────────────────────────────
   Magazine feel: serif throughout, a large quiet headline, hairline rules. */
.template-10-style,
.template-10-style .cv-page-sheet {
  --cv-section-title-color: hsl(20 15% 25%);
  --cv-section-rule-color: hsl(20 12% 82%);
  --cv-accent-color: hsl(12 55% 45%);
  --cv-muted-text: hsl(20 10% 45%);
  font-family: var(--font-serif);
}
.template-10-style .cv-header {
  text-align: left;
  border-bottom: 1px solid hsl(20 12% 82%);
  padding-bottom: 0.7rem;
}
.template-10-style .cv-header h1 {
  font-family: var(--font-serif);
  font-size: calc(27pt * var(--cv-font-scale, 1));
  font-weight: 500;
  letter-spacing: -0.015em;
  line-height: 1.05;
  margin-bottom: 0.25rem;
}
.template-10-style .cv-header .tagline {
  font-family: var(--font-body);
  font-size: calc(8.5pt * var(--cv-font-scale, 1));
  text-transform: uppercase;
  letter-spacing: 0.16em;
  color: hsl(12 55% 45%);
  margin-bottom: 0.5rem;
}
.template-10-style .cv-contact-row {
  justify-content: flex-start;
  font-family: var(--font-body);
  font-size: calc(8pt * var(--cv-font-scale, 1));
}
.template-10-style .section-title {
  font-family: var(--font-body);
  font-size: calc(8pt * var(--cv-font-scale, 1));
  font-weight: 600;
  letter-spacing: 0.2em;
  border-bottom: none;
  padding-bottom: 0;
  margin-bottom: 0.35rem;
}
.template-10-style .cv-section-head {
  border-top: 2px solid hsl(20 15% 25%);
  padding-top: 0.3rem;
  margin-bottom: 0.45rem;
}
.template-10-style .cv-summary {
  font-size: calc(10.5pt * var(--cv-font-scale, 1));
  line-height: 1.65;
  font-style: italic;
  color: hsl(20 15% 28%);
}
.template-10-style .cv-entry-title { font-family: var(--font-serif); font-size: calc(11pt * var(--cv-font-scale, 1)); font-weight: 600; }
.template-10-style .cv-entry-subtitle { font-family: var(--font-serif); font-size: calc(10pt * var(--cv-font-scale, 1)); }
.template-10-style .cv-entry-date,
.template-10-style .cv-entry-loc {
  font-family: var(--font-body);
  font-size: calc(8pt * var(--cv-font-scale, 1));
  letter-spacing: 0.04em;
}
.template-10-style .cv-bullet-list li::before {
  content: '\2014';
  font-size: calc(8pt * var(--cv-font-scale, 1));
  top: 0;
  color: hsl(12 55% 45%);
}
.template-10-style .cv-bullet-list li { padding-left: 1.2em; }
.template-10-style .skill-cat { font-family: var(--font-body); font-size: calc(9pt * var(--cv-font-scale, 1)); letter-spacing: 0.03em; }

/* ── 11 · Corporate ────────────────────────────────────────────────────────
   Navy band, structured and formal. Reads as safe to a hiring committee. */
.template-11-style,
.template-11-style .cv-page-sheet {
  --cv-header-bg: hsl(215 45% 22%);
  --cv-header-text: #fff;
  --cv-section-title-color: hsl(215 45% 26%);
  --cv-section-rule-color: hsl(215 30% 80%);
  --cv-accent-color: hsl(215 45% 30%);
  --cv-entry-title-color: hsl(215 40% 20%);
  --cv-muted-text: hsl(215 12% 42%);
}
.template-11-style .cv-header h1 {
  font-size: calc(21pt * var(--cv-font-scale, 1));
  letter-spacing: 0.01em;
  margin-bottom: 0.2rem;
}
.template-11-style .cv-header .tagline {
  font-size: calc(9.5pt * var(--cv-font-scale, 1));
  letter-spacing: 0.1em;
  text-transform: uppercase;
  opacity: 0.85;
  margin-bottom: 0.5rem;
}
.template-11-style .cv-contact-row {
  font-size: calc(8pt * var(--cv-font-scale, 1));
  /* Color alpha, not opacity — opacity on this row made the add-contact
     dropdown see-through over the CV body. */
  color: rgba(255, 255, 255, 0.92);
}
.template-11-style .section-title {
  font-size: calc(10pt * var(--cv-font-scale, 1));
  letter-spacing: 0.1em;
  border-bottom: 2px solid var(--cv-section-rule-color);
  padding-bottom: 0.18rem;
}
.template-11-style .cv-entry-title { font-size: calc(10.5pt * var(--cv-font-scale, 1)); }
.template-11-style .cv-entry-subtitle { font-style: normal; font-weight: 600; color: hsl(215 30% 38%); }
.template-11-style .cv-entry-date {
  font-weight: 600;
  color: hsl(215 25% 38%);
}
.template-11-style .cv-bullet-list li::before { content: '\25AA'; top: 0.1em; }
.template-11-style .skill-cat { color: hsl(215 45% 26%); }

/* ── 12 · Timeline ─────────────────────────────────────────────────────────
   A dated rail runs down the dated sections. The rail is drawn per entry, not
   per section, so a section that splits across pages still looks right. */
.template-12-style,
.template-12-style .cv-page-sheet {
  --cv-section-title-color: hsl(190 65% 28%);
  --cv-section-rule-color: hsl(190 30% 82%);
  --cv-accent-color: hsl(190 70% 38%);
  --cv-muted-text: hsl(200 12% 45%);
}
.template-12-style .cv-header h1 { font-size: calc(21pt * var(--cv-font-scale, 1)); }
.template-12-style .cv-header .tagline {
  color: hsl(190 65% 30%);
  letter-spacing: 0.08em;
}
.template-12-style .section-title {
  border-bottom: none;
  padding-bottom: 0;
  font-size: calc(10pt * var(--cv-font-scale, 1));
  letter-spacing: 0.12em;
}
.template-12-style .cv-section-head {
  border-bottom: 1.5px solid var(--cv-section-rule-color);
  padding-bottom: 0.2rem;
}
.template-12-style .cv-section[data-section-id="experience"] .cv-entry-item,
.template-12-style .cv-section[data-section-id="education"] .cv-entry-item,
.template-12-style .cv-section[data-section-id="projects"] .cv-entry-item {
  padding-left: 15pt;
  padding-bottom: 0.15rem;
}
.template-12-style .cv-section[data-section-id="experience"] .cv-entry-item::before,
.template-12-style .cv-section[data-section-id="education"] .cv-entry-item::before,
.template-12-style .cv-section[data-section-id="projects"] .cv-entry-item::before {
  content: '';
  position: absolute;
  left: 2pt;
  top: 4pt;
  width: 6pt;
  height: 6pt;
  border-radius: 50%;
  background: hsl(190 70% 38%);
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
}
.template-12-style .cv-section[data-section-id="experience"] .cv-entry-item::after,
.template-12-style .cv-section[data-section-id="education"] .cv-entry-item::after,
.template-12-style .cv-section[data-section-id="projects"] .cv-entry-item::after {
  content: '';
  position: absolute;
  left: 4.5pt;
  top: 11pt;
  bottom: -2pt;
  width: 1pt;
  background: hsl(190 30% 82%);
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
}
.template-12-style .cv-entry-item:last-child::after { display: none; }
.template-12-style .cv-entry-date {
  font-weight: 600;
  color: hsl(190 65% 30%);
}
.template-12-style .cv-bullet-list li::before { content: '\203A'; font-size: calc(10pt * var(--cv-font-scale, 1)); top: -0.1em; }

/* ── 13 · Bold ─────────────────────────────────────────────────────────────
   Loud name, heavy rules, high contrast. For roles where being noticed is
   the point — brand, sales, creative direction. */
.template-13-style,
.template-13-style .cv-page-sheet {
  --cv-section-title-color: hsl(0 0% 8%);
  --cv-section-rule-color: hsl(0 0% 8%);
  --cv-accent-color: hsl(14 85% 52%);
  --cv-entry-title-color: hsl(0 0% 10%);
  --cv-muted-text: hsl(0 0% 40%);
}
.template-13-style .cv-header {
  text-align: left;
  border-bottom: 3px solid hsl(0 0% 8%);
  padding-bottom: 0.65rem;
}
.template-13-style .cv-header h1 {
  font-size: calc(30pt * var(--cv-font-scale, 1));
  font-weight: 800;
  line-height: 1.02;
  letter-spacing: -0.02em;
  text-transform: uppercase;
  margin-bottom: 0.35rem;
}
.template-13-style .cv-header .tagline {
  font-size: calc(9.5pt * var(--cv-font-scale, 1));
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.16em;
  color: hsl(14 85% 46%);
  margin-bottom: 0.5rem;
}
.template-13-style .cv-contact-row {
  justify-content: flex-start;
  gap: 0 0.8rem;
  font-size: calc(8.5pt * var(--cv-font-scale, 1));
  font-weight: 500;
  color: hsl(0 0% 30%);
}
.template-13-style .section-title {
  font-size: calc(10pt * var(--cv-font-scale, 1));
  font-weight: 800;
  letter-spacing: 0.15em;
  border-bottom: 2px solid hsl(0 0% 8%);
  padding-bottom: 0.18rem;
}
.template-13-style .cv-summary { color: hsl(0 0% 15%); }
.template-13-style .cv-entry-title { font-weight: 800; font-size: calc(10.5pt * var(--cv-font-scale, 1)); }
.template-13-style .cv-entry-subtitle { font-style: normal; font-weight: 600; color: hsl(14 80% 42%); }
.template-13-style .cv-entry-date {
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.07em;
  font-size: calc(7.5pt * var(--cv-font-scale, 1));
  color: hsl(0 0% 42%);
}
.template-13-style .cv-bullet-list li::before {
  content: '';
  width: 4pt;
  height: 4pt;
  background: hsl(14 85% 52%);
  top: 0.45em;
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
}
.template-13-style .skill-cat {
  font-weight: 800;
  text-transform: uppercase;
  font-size: calc(8.5pt * var(--cv-font-scale, 1));
  letter-spacing: 0.06em;
}

/* ── 14 · Classic ──────────────────────────────────────────────────────────
   The conservative one: centred serif, small caps, full-width rules. Reads
   correctly in law, medicine, academia and government. */
.template-14-style,
.template-14-style .cv-page-sheet {
  --cv-section-title-color: hsl(0 0% 12%);
  --cv-section-rule-color: hsl(0 0% 55%);
  --cv-accent-color: hsl(0 0% 25%);
  --cv-muted-text: hsl(0 0% 35%);
  font-family: var(--font-serif);
}
.template-14-style .cv-header {
  border-bottom: 1px solid hsl(0 0% 45%);
  padding-bottom: 0.55rem;
  margin-bottom: 0.9rem;
}
.template-14-style .cv-header h1 {
  font-family: var(--font-serif);
  font-size: calc(21pt * var(--cv-font-scale, 1));
  font-weight: 600;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  margin-bottom: 0.25rem;
}
.template-14-style .cv-header .tagline {
  font-family: var(--font-serif);
  font-size: calc(10pt * var(--cv-font-scale, 1));
  font-style: italic;
  letter-spacing: 0.02em;
}
.template-14-style .cv-contact-row { font-family: var(--font-serif); font-size: calc(9pt * var(--cv-font-scale, 1)); }
.template-14-style .section-title {
  font-family: var(--font-serif);
  font-size: calc(11pt * var(--cv-font-scale, 1));
  font-weight: 600;
  letter-spacing: 0.14em;
  text-align: center;
  border-bottom: 1px solid hsl(0 0% 55%);
  padding-bottom: 0.15rem;
}
.template-14-style .cv-section-head .section-title { padding-right: 112px; }
.template-14-style .cv-summary { text-align: justify; font-size: calc(10pt * var(--cv-font-scale, 1)); }
.template-14-style .cv-entry-title { font-family: var(--font-serif); font-weight: 700; }
.template-14-style .cv-entry-subtitle { font-family: var(--font-serif); }
.template-14-style .cv-entry-date { font-family: var(--font-serif); font-style: italic; font-size: calc(9pt * var(--cv-font-scale, 1)); }
.template-14-style .cv-bullet-list li::before { content: '\2013'; top: 0; font-size: calc(10pt * var(--cv-font-scale, 1)); }
.template-14-style .skill-cat { font-family: var(--font-serif); }

/* ── 15 · Startup ──────────────────────────────────────────────────────────
   Product-company energy: one bright accent, no rules where a colour will
   do the same work. */
.template-15-style,
.template-15-style .cv-page-sheet {
  --cv-section-title-color: hsl(255 70% 55%);
  --cv-section-rule-color: hsl(255 60% 90%);
  --cv-accent-color: hsl(255 70% 58%);
  --cv-entry-title-color: hsl(255 25% 18%);
  --cv-muted-text: hsl(255 8% 45%);
}
.template-15-style .cv-header {
  text-align: left;
  border-bottom: none;
  padding-bottom: 0.4rem;
}
.template-15-style .cv-header h1 {
  font-size: calc(24pt * var(--cv-font-scale, 1));
  font-weight: 800;
  letter-spacing: -0.02em;
  margin-bottom: 0.15rem;
}
.template-15-style .cv-header .tagline {
  font-size: calc(10pt * var(--cv-font-scale, 1));
  font-weight: 600;
  color: hsl(255 70% 55%);
  margin-bottom: 0.45rem;
}
.template-15-style .cv-contact-row {
  justify-content: flex-start;
  font-size: calc(8.5pt * var(--cv-font-scale, 1));
  padding-bottom: 0.5rem;
  border-bottom: 2px solid hsl(255 60% 92%);
}
.template-15-style .section-title {
  font-size: calc(9.5pt * var(--cv-font-scale, 1));
  letter-spacing: 0.14em;
  border-bottom: none;
  padding-bottom: 0;
}
.template-15-style .cv-entry-title { font-size: calc(10.5pt * var(--cv-font-scale, 1)); font-weight: 700; }
.template-15-style .cv-entry-subtitle { font-style: normal; font-weight: 600; color: hsl(255 45% 45%); }
.template-15-style .cv-entry-date {
  display: inline-block;
  width: fit-content;
  max-width: 100%;
  flex: 0 0 auto;
  font-size: calc(8pt * var(--cv-font-scale, 1));
  font-weight: 600;
  color: hsl(255 30% 45%);
  background: hsl(255 60% 96%);
  border-radius: 999px;
  padding: 1pt 6pt;
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
}
.template-15-style .cv-bullet-list li::before { content: '\25CF'; font-size: calc(5pt * var(--cv-font-scale, 1)); top: 0.6em; }
.template-15-style .skill-cat { color: hsl(255 70% 50%); }
.template-15-style .skills-table { gap: 0.3rem; }

/* ── 16 · Portfolio ────────────────────────────────────────────────────────
   Right-hand rail with the portrait, so the reader meets the work first and
   the person second. Charcoal rail keeps colour out of the way of images. */
.template-16-style,
.template-16-style .cv-page-sheet {
  --cv-header-bg: hsl(222 18% 20%);
  --cv-header-text: #fff;
  --cv-section-title-color: hsl(222 18% 22%);
  --cv-section-rule-color: hsl(222 12% 84%);
  --cv-accent-color: hsl(158 55% 38%);
  --cv-entry-title-color: hsl(222 20% 16%);
  --cv-muted-text: hsl(222 8% 45%);
}
.template-16-style .cv-t6-sidebar .cv-profile-photo,
.template-16-style .cv-t6-sidebar .cv-profile-photo-placeholder {
  border-radius: 6pt;
  margin: 0;
}
.template-16-style .cv-t6-sidebar .cv-profile-photo-wrap { margin: 0 0 9pt; }
.template-16-style .cv-t6-sidebar-name,
.template-16-style .cv-t6-sidebar-tagline,
.template-16-style .cv-t6-sidebar .section-title { text-align: left; }
.template-16-style .cv-t6-main .section-title {
  font-size: calc(9.5pt * var(--cv-font-scale, 1));
  letter-spacing: 0.14em;
  border-bottom: none;
  padding-bottom: 0;
}
.template-16-style .cv-t6-main .cv-section-head {
  border-bottom: 1px solid var(--cv-section-rule-color);
  padding-bottom: 0.2rem;
}
.template-16-style .cv-entry-title { font-size: calc(10.5pt * var(--cv-font-scale, 1)); }
.template-16-style .cv-entry-subtitle { font-style: normal; color: hsl(158 45% 32%); font-weight: 600; }
.template-16-style .cv-bullet-list li::before { content: '\25AB'; top: 0.05em; }

/* ── 17 · Monochrome ───────────────────────────────────────────────────────
   No colour at all, so it survives a bad office printer, a photocopier and
   an ATS text extraction with the same result. */
.template-17-style,
.template-17-style .cv-page-sheet {
  --cv-section-title-color: hsl(0 0% 15%);
  --cv-section-rule-color: hsl(0 0% 20%);
  --cv-accent-color: hsl(0 0% 25%);
  --cv-entry-title-color: hsl(0 0% 10%);
  --cv-muted-text: hsl(0 0% 42%);
  --cv-body-text: hsl(0 0% 18%);
}
.template-17-style .cv-header {
  text-align: left;
  border-bottom: 1px solid hsl(0 0% 20%);
  padding-bottom: 0.6rem;
}
.template-17-style .cv-header h1 {
  font-size: calc(19pt * var(--cv-font-scale, 1));
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.template-17-style .cv-header .tagline {
  font-size: calc(9pt * var(--cv-font-scale, 1));
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: hsl(0 0% 40%);
}
.template-17-style .cv-contact-row { justify-content: flex-start; font-size: calc(8pt * var(--cv-font-scale, 1)); letter-spacing: 0.02em; }
.template-17-style .section-title {
  font-size: calc(8.5pt * var(--cv-font-scale, 1));
  font-weight: 700;
  letter-spacing: 0.22em;
  border-bottom: none;
  padding-bottom: 0;
  margin-bottom: 0.3rem;
}
.template-17-style .cv-section-head {
  display: grid;
  grid-template-columns: 1fr;
  border-bottom: 1px solid hsl(0 0% 82%);
  padding-bottom: 0.15rem;
  margin-bottom: 0.45rem;
}
.template-17-style .cv-entry-title { font-size: calc(10pt * var(--cv-font-scale, 1)); font-weight: 700; }
.template-17-style .cv-entry-subtitle { font-style: normal; font-size: calc(9.5pt * var(--cv-font-scale, 1)); }
.template-17-style .cv-entry-date {
  font-size: calc(8pt * var(--cv-font-scale, 1));
  letter-spacing: 0.06em;
  text-transform: uppercase;
}
.template-17-style .cv-bullet-list li::before { content: '\2013'; top: -0.05em; color: hsl(0 0% 35%); }
.template-17-style .skill-cat { text-transform: uppercase; font-size: calc(8.5pt * var(--cv-font-scale, 1)); letter-spacing: 0.06em; }

/* ── 18 · Consultant ───────────────────────────────────────────────────────
   Slate rail plus serif headings in the main column: the register a client
   deliverable is written in. */
.template-18-style,
.template-18-style .cv-page-sheet {
  --cv-header-bg: hsl(205 25% 27%);
  --cv-header-text: #fff;
  --cv-section-title-color: hsl(205 30% 25%);
  --cv-section-rule-color: hsl(205 18% 82%);
  --cv-accent-color: hsl(38 65% 45%);
  --cv-entry-title-color: hsl(205 30% 18%);
  --cv-muted-text: hsl(205 10% 44%);
}
.template-18-style .cv-t6-sidebar-name { font-family: var(--font-serif); font-weight: 600; }
.template-18-style .cv-t6-sidebar .cv-profile-photo-wrap { margin: 0 0 9pt; }
.template-18-style .cv-t6-sidebar .cv-profile-photo,
.template-18-style .cv-t6-sidebar .cv-profile-photo-placeholder { margin: 0; }
.template-18-style .cv-t6-main .section-title {
  font-family: var(--font-serif);
  font-size: calc(11pt * var(--cv-font-scale, 1));
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: none;
  border-bottom: 1px solid var(--cv-section-rule-color);
  padding-bottom: 0.15rem;
}
.template-18-style .cv-t6-main .cv-entry-title { font-family: var(--font-serif); font-size: calc(11pt * var(--cv-font-scale, 1)); }
.template-18-style .cv-t6-main .cv-entry-subtitle { font-style: italic; color: hsl(205 20% 38%); }
.template-18-style .cv-entry-date { font-size: calc(8.5pt * var(--cv-font-scale, 1)); font-weight: 600; color: hsl(38 55% 35%); }
.template-18-style .cv-summary { font-size: calc(10pt * var(--cv-font-scale, 1)); line-height: 1.6; }
.template-18-style .cv-bullet-list li::before { content: '\25B8'; color: hsl(38 65% 45%); }

/* ── 19 · Elegant ──────────────────────────────────────────────────────────
   The expensive one: quiet serif, generous tracking, bronze hairlines.
   Where Classic (14) is conservative, this is boutique — luxury retail,
   hospitality, senior roles where the paper itself should feel considered. */
.template-19-style,
.template-19-style .cv-page-sheet {
  --cv-section-title-color: hsl(35 30% 34%);
  --cv-section-rule-color: hsl(36 28% 78%);
  --cv-accent-color: hsl(36 45% 42%);
  --cv-entry-title-color: hsl(30 14% 16%);
  --cv-muted-text: hsl(30 8% 44%);
  --cv-body-text: hsl(30 10% 22%);
  font-family: var(--font-serif);
}
.template-19-style .cv-header {
  border-bottom: 3px double hsl(36 28% 70%);
  padding-bottom: 0.75rem;
  margin-bottom: 1rem;
}
.template-19-style .cv-header h1 {
  font-family: var(--font-serif);
  font-size: calc(25pt * var(--cv-font-scale, 1));
  font-weight: 500;
  letter-spacing: 0.12em;
  line-height: 1.1;
  margin-bottom: 0.3rem;
}
.template-19-style .cv-header .tagline {
  font-family: var(--font-body);
  font-size: calc(8pt * var(--cv-font-scale, 1));
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.3em;
  color: hsl(36 45% 40%);
  margin-bottom: 0.55rem;
}
.template-19-style .cv-contact-row {
  font-family: var(--font-serif);
  font-size: calc(8.5pt * var(--cv-font-scale, 1));
  letter-spacing: 0.02em;
}
.template-19-style .section-title {
  font-family: var(--font-body);
  font-size: calc(8.5pt * var(--cv-font-scale, 1));
  font-weight: 600;
  letter-spacing: 0.26em;
  color: hsl(35 30% 34%);
  border-bottom: none;
  padding-bottom: 0;
  margin-bottom: 0.35rem;
}
.template-19-style .cv-section-head {
  border-bottom: 1px solid hsl(36 28% 78%);
  padding-bottom: 0.22rem;
  margin-bottom: 0.5rem;
}
.template-19-style .cv-summary {
  font-size: calc(10.5pt * var(--cv-font-scale, 1));
  line-height: 1.65;
  color: hsl(30 12% 26%);
}
.template-19-style .cv-entry-title { font-family: var(--font-serif); font-size: calc(11pt * var(--cv-font-scale, 1)); font-weight: 600; }
.template-19-style .cv-entry-subtitle { font-family: var(--font-serif); font-style: italic; color: hsl(35 25% 36%); }
.template-19-style .cv-entry-date {
  font-family: var(--font-body);
  font-size: calc(8pt * var(--cv-font-scale, 1));
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: hsl(36 40% 38%);
}
.template-19-style .cv-bullet-list li::before {
  content: '\25C6';
  font-size: calc(4.5pt * var(--cv-font-scale, 1));
  top: 0.55em;
  color: hsl(36 45% 45%);
}
.template-19-style .cv-bullet-list li { padding-left: 1.1em; }
.template-19-style .skill-cat { font-family: var(--font-serif); font-weight: 600; }

/* ── 20 · Slate ────────────────────────────────────────────────────────────
   Charcoal rail where the photo is optional, not structural. Everything is
   set left so the rail reads as a deliberate design either way — with a
   portrait it's a masthead, without one nothing looks left out. */
.template-20-style,
.template-20-style .cv-page-sheet {
  --cv-header-bg: hsl(220 18% 16%);
  --cv-header-text: hsl(220 12% 93%);
  --cv-section-title-color: hsl(220 16% 22%);
  --cv-section-rule-color: hsl(220 12% 84%);
  --cv-accent-color: hsl(210 65% 42%);
  --cv-entry-title-color: hsl(220 18% 14%);
  --cv-muted-text: hsl(220 8% 44%);
}
/* The whole rail is left-set, photo included — see the block comment above. */
.template-20-style .cv-t6-sidebar .cv-profile-photo-wrap { margin: 0 0 10pt; }
.template-20-style .cv-t6-sidebar .cv-profile-photo,
.template-20-style .cv-t6-sidebar .cv-profile-photo-placeholder {
  margin: 0;
  border-radius: 5pt;
  border-color: rgba(255, 255, 255, 0.25);
}
.template-20-style .cv-t6-sidebar-name {
  text-align: left;
  font-size: calc(17pt * var(--cv-font-scale, 1));
  font-weight: 800;
  letter-spacing: -0.01em;
  margin-top: 2pt;
}
.template-20-style .cv-t6-sidebar-tagline {
  text-align: left;
  font-size: calc(7.5pt * var(--cv-font-scale, 1));
  text-transform: uppercase;
  letter-spacing: 0.14em;
  opacity: 0.7;
  margin-bottom: 12pt;
}
.template-20-style .cv-t6-sidebar .section-title {
  font-size: calc(7.5pt * var(--cv-font-scale, 1));
  letter-spacing: 0.2em;
  border-bottom: 1px solid rgba(255, 255, 255, 0.18);
}
.template-20-style .cv-t6-main .section-title {
  font-size: calc(9pt * var(--cv-font-scale, 1));
  font-weight: 700;
  letter-spacing: 0.18em;
  border-bottom: none;
  padding-bottom: 0;
}
.template-20-style .cv-t6-main .cv-section-head {
  border-bottom: 2px solid hsl(220 16% 22%);
  padding-bottom: 0.2rem;
  margin-bottom: 0.45rem;
}
.template-20-style .cv-entry-title { font-size: calc(10.5pt * var(--cv-font-scale, 1)); font-weight: 700; }
.template-20-style .cv-entry-subtitle { font-style: normal; font-weight: 600; color: hsl(210 45% 38%); }
.template-20-style .cv-entry-date {
  font-size: calc(8pt * var(--cv-font-scale, 1));
  font-weight: 600;
  letter-spacing: 0.04em;
  color: hsl(220 10% 40%);
}
.template-20-style .cv-bullet-list li::before { content: '\25AA'; top: 0.1em; color: hsl(210 65% 42%); }

/* ==========================================================================
   3b. PRO-EXCLUSIVE DESIGNS (21-25)

   These five are the subscription's designs. Anyone can select them in the
   editor; export and publish need Pro (entitlements.check_template_export).
   Each one is a full visual system — paper, header, type, dates, bullets —
   so a Pro CV is immediately distinguishable from the twenty standard ones.
   ========================================================================== */

/* ── 21 · Prestige ─────────────────────────────────────────────────────────
   Board-level letterhead. Ivory paper, wine ink, a double-rule frame and a
   3:4 portrait. Recruiter-calm at reading distance; unmistakable at thumbnail
   size. Single column so ATS parsers and print both stay faithful. */
.template-21-style,
.template-21-style .cv-page-sheet {
  --paper-bg: hsl(38 36% 96.5%);
  --cv-header-text: hsl(350 38% 16%);
  --cv-name-color: hsl(350 42% 14%);
  --cv-tagline-color: hsl(36 42% 34%);
  --cv-section-title-color: hsl(350 38% 18%);
  --cv-section-rule-color: hsl(36 32% 68%);
  --cv-accent-color: hsl(36 48% 40%);
  --cv-entry-title-color: hsl(350 32% 14%);
  --cv-muted-text: hsl(30 12% 40%);
  --cv-body-text: hsl(24 18% 18%);
  --prestige-rule: hsl(36 46% 42%);
  --prestige-ink: hsl(350 42% 16%);
  font-family: var(--font-serif);
  background: var(--paper-bg);
  color: var(--cv-body-text);
}
.template-21-style.cv-page-sheet::after {
  content: '';
  position: absolute;
  inset: 8pt;
  border: 0.7pt solid var(--prestige-ink);
  outline: 0.55pt solid var(--prestige-rule);
  outline-offset: 2.6pt;
  pointer-events: none;
  z-index: 3;
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
}
.template-21-style .cv-header {
  text-align: left;
  border-bottom: none;
  padding-bottom: 12pt;
  margin-bottom: 14pt;
  position: relative;
}
.template-21-style .cv-header::after {
  content: '';
  display: block;
  height: 0;
  margin-top: 11pt;
  border-top: 0.65pt solid var(--prestige-ink);
  border-bottom: 0.65pt solid var(--prestige-rule);
  padding-top: 2.2pt;
}
.template-21-style .cv-header-with-photo .cv-header-top {
  display: flex;
  align-items: center;
  gap: 16pt;
}
.template-21-style .cv-header-with-photo .cv-profile-photo-wrap {
  flex-shrink: 0;
  margin: 0;
}
.template-21-style .cv-header-with-photo .cv-header-text {
  flex: 1;
  min-width: 0;
  text-align: left;
}
.template-21-style .cv-profile-photo,
.template-21-style .cv-profile-photo-placeholder {
  width: 62pt;
  height: 80pt;
  max-width: 62pt;
  display: block;
  border-radius: 1pt;
  object-fit: cover;
  border: 0.7pt solid var(--prestige-ink);
  outline: 0.55pt solid var(--prestige-rule);
  outline-offset: 2.2pt;
  box-sizing: border-box;
  background: hsl(38 30% 92%);
}
.template-21-style .cv-header-with-photo .cv-profile-photo-wrap {
  /* Room for the offset outline so it never touches the name column. */
  padding: 3pt 3pt 3pt 0;
}
.template-21-style .cv-profile-photo-placeholder {
  border-style: dashed;
  background: hsl(38 30% 92%);
  color: var(--prestige-ink);
  font-size: calc(7pt * var(--cv-font-scale, 1));
}
.template-21-style .cv-header h1 {
  font-family: var(--font-serif);
  font-size: calc(26pt * var(--cv-font-scale, 1));
  font-weight: 600;
  letter-spacing: -0.018em;
  line-height: 1.05;
  color: var(--prestige-ink);
  margin-bottom: 5pt;
}
.template-21-style .cv-header .tagline {
  font-family: var(--font-body);
  font-size: calc(8pt * var(--cv-font-scale, 1));
  font-weight: 600;
  letter-spacing: 0.28em;
  text-transform: uppercase;
  color: var(--prestige-rule);
  margin-bottom: 8pt;
}
.template-21-style .cv-contact-row {
  justify-content: flex-start;
  font-family: var(--font-body);
  font-size: calc(8.2pt * var(--cv-font-scale, 1));
  color: hsl(24 16% 28%);
  gap: 0 0.75rem;
}
.template-21-style .cv-contact-sep { color: var(--prestige-rule); }
.template-21-style .cv-section-head {
  border-bottom: none;
  margin-bottom: 0.5rem;
  padding-bottom: 0;
}
.template-21-style .section-title {
  font-family: var(--font-body);
  font-size: calc(8pt * var(--cv-font-scale, 1));
  font-weight: 700;
  letter-spacing: 0.26em;
  text-transform: uppercase;
  color: var(--prestige-ink);
  border-bottom: none;
  padding-bottom: 0;
  margin-bottom: 0;
}
.template-21-style .section-title::after {
  content: '';
  display: block;
  width: 28pt;
  margin-top: 4pt;
  border-top: 0.55pt solid var(--prestige-rule);
  border-bottom: 0.55pt solid var(--prestige-rule);
  padding-top: 1.5pt;
}
.template-21-style .cv-summary {
  font-size: calc(10.4pt * var(--cv-font-scale, 1));
  line-height: 1.62;
  font-style: italic;
}
.template-21-style .cv-entry-title {
  font-family: var(--font-serif);
  font-size: calc(11.2pt * var(--cv-font-scale, 1));
  font-weight: 700;
}
.template-21-style .cv-entry-subtitle {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  color: hsl(350 22% 28%);
}
.template-21-style .cv-entry-date {
  font-family: var(--font-body);
  font-size: calc(7.6pt * var(--cv-font-scale, 1));
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--prestige-rule);
}
.template-21-style .cv-bullet-list li::before {
  content: '\2013';
  color: var(--prestige-rule);
  font-size: calc(10pt * var(--cv-font-scale, 1));
  top: -0.02em;
}
.template-21-style .skill-cat {
  font-family: var(--font-body);
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  font-size: calc(8pt * var(--cv-font-scale, 1));
}
.template-21-style .skill-dot { border-color: var(--prestige-rule); }
.template-21-style .skill-dot.is-on {
  background: var(--prestige-ink);
  border-color: var(--prestige-ink);
}

/* ── 22 · Clarity ──────────────────────────────────────────────────────────
   The ATS-first standard, done neatly: centred name over a single firm
   rule, one contact line, black ink only, bold small-cap headings on a
   hairline, dates flush right. No photo, no colour block, no second
   column — every parser reads it top to bottom exactly as written. */
.template-22-style,
.template-22-style .cv-page-sheet {
  --cv-header-rule: hsl(0 0% 12%);
  --cv-name-color: hsl(0 0% 8%);
  --cv-tagline-color: hsl(0 0% 28%);
  --cv-section-title-color: hsl(0 0% 10%);
  --cv-section-rule-color: hsl(0 0% 74%);
  --cv-accent-color: hsl(0 0% 20%);
  --cv-entry-title-color: hsl(0 0% 8%);
  --cv-muted-text: hsl(0 0% 38%);
  --cv-body-text: hsl(0 0% 14%);
  font-family: var(--font-body);
  color: var(--cv-body-text);
}
.template-22-style .cv-header {
  text-align: center;
  border-bottom: 1.2pt solid var(--cv-header-rule);
  padding-bottom: 9pt;
  margin-bottom: 13pt;
}
.template-22-style .cv-header h1 {
  font-family: var(--font-header);
  font-size: calc(23pt * var(--cv-font-scale, 1));
  font-weight: 700;
  letter-spacing: 0.005em;
  line-height: 1.1;
  color: var(--cv-name-color);
  margin-bottom: 3pt;
}
.template-22-style .cv-header .tagline {
  font-size: calc(10pt * var(--cv-font-scale, 1));
  font-weight: 500;
  letter-spacing: 0.01em;
  color: var(--cv-tagline-color);
  margin-bottom: 6pt;
}
.template-22-style .cv-contact-row {
  justify-content: center;
  font-size: calc(8.5pt * var(--cv-font-scale, 1));
  color: hsl(0 0% 24%);
  gap: 1.5pt 0.7rem;
}
.template-22-style .cv-contact-sep { color: hsl(0 0% 62%); opacity: 1; }
.template-22-style .cv-section-head {
  border-bottom: 0.8pt solid var(--cv-section-rule-color);
  padding-bottom: 0.16rem;
  margin-bottom: 0.5rem;
}
.template-22-style .section-title {
  font-family: var(--font-header);
  font-size: calc(9pt * var(--cv-font-scale, 1));
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--cv-section-title-color);
  border-bottom: none;
  padding-bottom: 0;
}
.template-22-style .cv-summary {
  font-size: calc(10pt * var(--cv-font-scale, 1));
  line-height: 1.58;
}
.template-22-style .cv-entry-title {
  font-family: var(--font-header);
  font-size: calc(10.5pt * var(--cv-font-scale, 1));
  font-weight: 700;
}
.template-22-style .cv-entry-subtitle {
  font-style: normal;
  font-weight: 600;
  color: hsl(0 0% 22%);
}
.template-22-style .cv-entry-date {
  font-size: calc(8.5pt * var(--cv-font-scale, 1));
  font-weight: 500;
  font-variant-numeric: tabular-nums;
  color: var(--cv-muted-text);
}
.template-22-style .cv-bullet-list li::before {
  content: '\2022';
  color: hsl(0 0% 20%);
  font-size: calc(9pt * var(--cv-font-scale, 1));
  top: 0.05em;
}
.template-22-style .skill-row { grid-template-columns: 26% 1fr; }
.template-22-style .skill-cat { font-weight: 700; color: hsl(0 0% 10%); }
.template-22-style .skill-dot { border-color: hsl(0 0% 30%); }
.template-22-style .skill-dot.is-on { background: hsl(0 0% 20%); border-color: hsl(0 0% 20%); }

/* ── 23 · Ledger ───────────────────────────────────────────────────────────
   The recruiter-standard CV, done properly: name and title on the left,
   contact details stacked on the right, one firm rule beneath, small-cap
   headings on hairlines, dates flush right. Charcoal with a steel accent. */
.template-23-style,
.template-23-style .cv-page-sheet {
  --cv-section-title-color: hsl(220 16% 14%);
  --cv-section-rule-color: hsl(220 10% 84%);
  --cv-accent-color: hsl(214 36% 38%);
  --cv-entry-title-color: hsl(220 16% 12%);
  --cv-muted-text: hsl(220 8% 45%);
  --cv-body-text: hsl(220 14% 20%);
  font-family: var(--font-body);
}
.template-23-style .cv-header {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  /* The contact stack spans both rows; give the name row only its own
     height so the tagline stays tucked under the name. */
  grid-template-rows: auto 1fr;
  column-gap: 18pt;
  align-items: start;
  text-align: left;
  border-bottom: 1.5pt solid hsl(220 16% 14%);
  padding-bottom: 10pt;
  margin-bottom: 13pt;
}
.template-23-style .cv-header h1 {
  grid-column: 1;
  font-family: var(--font-header);
  font-size: calc(24pt * var(--cv-font-scale, 1));
  font-weight: 700;
  letter-spacing: -0.02em;
  line-height: 1.08;
  color: hsl(220 16% 12%);
  margin-bottom: 4pt;
}
.template-23-style .cv-header .tagline {
  grid-column: 1;
  font-size: calc(10pt * var(--cv-font-scale, 1));
  font-weight: 500;
  color: hsl(214 36% 38%);
  letter-spacing: 0.01em;
  margin-bottom: 0;
}
.template-23-style .cv-contact-row {
  grid-column: 2;
  grid-row: 1 / span 2;
  flex-direction: column;
  align-items: flex-end;
  justify-content: flex-start;
  gap: 1.5pt 0;
  font-size: calc(8.3pt * var(--cv-font-scale, 1));
  color: hsl(220 10% 30%);
  text-align: right;
  padding-top: 3pt;
}
.template-23-style .cv-contact-sep { display: none; }
.template-23-style .cv-contact-item { white-space: nowrap; text-align: right; overflow-wrap: normal; }
.template-23-style .cv-contact-add-wrap { align-self: flex-end; }
.template-23-style .cv-section-head {
  border-bottom: 1px solid var(--cv-section-rule-color);
  padding-bottom: 0.18rem;
  margin-bottom: 0.5rem;
}
.template-23-style .section-title {
  font-family: var(--font-header);
  font-size: calc(8.5pt * var(--cv-font-scale, 1));
  font-weight: 700;
  letter-spacing: 0.16em;
  border-bottom: none;
  padding-bottom: 0;
}
.template-23-style .cv-summary {
  font-size: calc(10pt * var(--cv-font-scale, 1));
  line-height: 1.6;
}
.template-23-style .cv-entry-title {
  font-family: var(--font-header);
  font-size: calc(10.5pt * var(--cv-font-scale, 1));
  font-weight: 700;
}
.template-23-style .cv-entry-subtitle {
  font-style: normal;
  font-weight: 500;
  color: hsl(214 36% 36%);
}
.template-23-style .cv-entry-date {
  font-size: calc(8.5pt * var(--cv-font-scale, 1));
  font-weight: 500;
  font-variant-numeric: tabular-nums;
  color: var(--cv-muted-text);
}
.template-23-style .cv-bullet-list li::before {
  content: '\2022';
  color: hsl(214 36% 38%);
  font-size: calc(9pt * var(--cv-font-scale, 1));
  top: 0.05em;
}
.template-23-style .skill-row { grid-template-columns: 26% 1fr; }
.template-23-style .skill-cat { font-weight: 700; color: hsl(220 16% 14%); }
.template-23-style .skill-dot { border-color: hsl(214 36% 38%); }
.template-23-style .skill-dot.is-on { background: hsl(214 36% 38%); }

/* ── 24 · Summit ───────────────────────────────────────────────────────────
   A soft grey header panel, charcoal type, forest-green accents. Single
   column, dates flush right, skills in a clean table. The quiet, modern
   standard for operations, finance, healthcare and technical roles. */
.template-24-style,
.template-24-style .cv-page-sheet {
  --cv-section-title-color: hsl(160 38% 26%);
  --cv-section-rule-color: hsl(160 18% 84%);
  --cv-accent-color: hsl(160 40% 32%);
  --cv-entry-title-color: hsl(210 18% 13%);
  --cv-muted-text: hsl(210 8% 45%);
  --cv-body-text: hsl(210 14% 20%);
  font-family: var(--font-body);
}
.template-24-style .cv-header {
  background: hsl(210 18% 96%);
  text-align: left;
  border-bottom: 2pt solid hsl(160 40% 32%);
  margin: calc(var(--cv-pad-y, 18mm) * -1) calc(var(--cv-pad-x, 17mm) * -1) 16pt;
  padding: calc(var(--cv-pad-y, 18mm) * 0.72) var(--cv-pad-x, 17mm) 14pt;
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
}
.template-24-style .cv-header h1 {
  font-family: var(--font-header);
  font-size: calc(24pt * var(--cv-font-scale, 1));
  font-weight: 700;
  letter-spacing: -0.02em;
  line-height: 1.08;
  color: hsl(210 18% 13%);
  margin-bottom: 4pt;
}
.template-24-style .cv-header .tagline {
  font-size: calc(10pt * var(--cv-font-scale, 1));
  font-weight: 600;
  color: hsl(160 40% 30%);
  letter-spacing: 0.01em;
  margin-bottom: 8pt;
}
.template-24-style .cv-contact-row {
  justify-content: flex-start;
  font-size: calc(8.3pt * var(--cv-font-scale, 1));
  color: hsl(210 10% 32%);
  gap: 2pt 0.7rem;
}
.template-24-style .cv-contact-sep { color: hsl(160 40% 32%); opacity: 0.55; }
.template-24-style .cv-section-head {
  border-bottom: 1px solid var(--cv-section-rule-color);
  padding-bottom: 0.2rem;
  margin-bottom: 0.5rem;
}
.template-24-style .section-title {
  font-family: var(--font-header);
  font-size: calc(9pt * var(--cv-font-scale, 1));
  font-weight: 700;
  letter-spacing: 0.14em;
  border-bottom: none;
  padding-bottom: 0;
}
.template-24-style .cv-summary {
  font-size: calc(10pt * var(--cv-font-scale, 1));
  line-height: 1.6;
}
.template-24-style .cv-entry-title {
  font-family: var(--font-header);
  font-size: calc(10.6pt * var(--cv-font-scale, 1));
  font-weight: 700;
}
.template-24-style .cv-entry-subtitle {
  font-style: normal;
  font-weight: 600;
  color: hsl(160 38% 28%);
}
.template-24-style .cv-entry-date {
  font-size: calc(8.4pt * var(--cv-font-scale, 1));
  font-weight: 500;
  color: var(--cv-muted-text);
}
.template-24-style .cv-bullet-list li::before {
  content: '\2022';
  color: hsl(160 40% 32%);
  font-size: calc(9pt * var(--cv-font-scale, 1));
  top: 0.05em;
}
.template-24-style .skill-row { grid-template-columns: 26% 1fr; }
.template-24-style .skill-cat { font-weight: 700; color: hsl(210 18% 16%); }
.template-24-style .skill-dot { border-color: hsl(160 40% 32%); }
.template-24-style .skill-dot.is-on { background: hsl(160 40% 32%); }

/* ── 25 · Meridian ─────────────────────────────────────────────────────────
   A warm sand rail on the right with dark ink — the light-rail counterpart
   to Slate's charcoal — and a terracotta accent. The photo is optional:
   the rail reads as a designed column either way. */
.template-25-style,
.template-25-style .cv-page-sheet {
  --cv-header-bg: hsl(36 42% 92%);
  --cv-header-text: hsl(24 22% 18%);
  --cv-section-title-color: hsl(24 22% 18%);
  --cv-section-rule-color: hsl(30 25% 80%);
  --cv-accent-color: hsl(18 62% 42%);
  --cv-entry-title-color: hsl(24 22% 14%);
  --cv-muted-text: hsl(24 10% 44%);
  --cv-body-text: hsl(24 16% 20%);
  font-family: var(--font-body);
}
.template-25-style .cv-t6-sidebar .cv-profile-photo-wrap {
  width: 78pt;
  max-width: 100%;
  margin: 2pt 0 12pt;
}
.template-25-style .cv-t6-sidebar .cv-profile-photo,
.template-25-style .cv-t6-sidebar .cv-profile-photo-placeholder {
  width: 78pt;
  max-width: 78pt;
  height: 78pt;
  object-fit: cover;
  display: block;
  margin: 0;
  box-sizing: border-box;
  border-radius: 8pt;
  border: 1px solid hsl(30 25% 70%);
  box-shadow: 0 0 0 3pt hsl(36 42% 92%), 0 0 0 4pt hsl(30 25% 78%);
}
.template-25-style .cv-t6-sidebar .cv-profile-photo-placeholder {
  border-style: dashed;
  background: hsl(36 35% 88%);
  color: hsl(24 20% 30%);
  font-size: calc(8pt * var(--cv-font-scale, 1));
}
.template-25-style .cv-t6-sidebar .cv-profile-photo-placeholder svg,
.template-25-style .cv-t6-sidebar .cv-profile-photo-placeholder i[data-lucide] {
  width: 22px;
  height: 22px;
}
.template-25-style .cv-t6-sidebar-name {
  font-family: var(--font-serif);
  font-size: calc(17pt * var(--cv-font-scale, 1));
  font-weight: 700;
  line-height: 1.12;
  text-align: left;
  margin-bottom: 4pt;
}
.template-25-style .cv-t6-sidebar-tagline {
  font-size: calc(7.5pt * var(--cv-font-scale, 1));
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.16em;
  color: hsl(18 62% 42%);
  opacity: 1;
  text-align: left;
  margin-bottom: 12pt;
}
.template-25-style .cv-t6-sidebar .section-title {
  font-size: calc(7.5pt * var(--cv-font-scale, 1));
  font-weight: 700;
  letter-spacing: 0.2em;
  color: hsl(24 22% 22%);
  border-bottom: 1px solid hsl(30 25% 72%);
  padding-bottom: 3pt;
  margin-bottom: 6pt;
}
.template-25-style .cv-t6-sidebar .cv-contact-label { color: hsl(18 62% 42%); }
.template-25-style .cv-t6-sidebar .skill-cat { font-weight: 700; }
.template-25-style .cv-t6-sidebar .skill-items { opacity: 0.85; }
.template-25-style .cv-t6-sidebar .skill-dot { border-color: hsl(18 62% 42%); }
.template-25-style .cv-t6-sidebar .skill-dot.is-on { background: hsl(18 62% 42%); }
.template-25-style .cv-t6-main .cv-section-head {
  border-bottom: 1px solid hsl(30 25% 80%);
  padding-bottom: 0.18rem;
  margin-bottom: 0.5rem;
}
.template-25-style .cv-t6-main .section-title {
  font-family: var(--font-serif);
  font-size: calc(12.5pt * var(--cv-font-scale, 1));
  font-weight: 600;
  letter-spacing: 0;
  text-transform: none;
  color: hsl(24 22% 16%);
  border-bottom: none;
  padding-bottom: 0;
}
.template-25-style .cv-summary {
  font-size: calc(10pt * var(--cv-font-scale, 1));
  line-height: 1.62;
}
.template-25-style .cv-entry-title {
  font-size: calc(10.5pt * var(--cv-font-scale, 1));
  font-weight: 700;
}
.template-25-style .cv-entry-subtitle {
  font-style: normal;
  font-weight: 600;
  color: hsl(18 62% 40%);
}
.template-25-style .cv-entry-date {
  font-size: calc(8pt * var(--cv-font-scale, 1));
  font-weight: 500;
  color: hsl(24 10% 40%);
}
.template-25-style .cv-bullet-list li::before {
  content: '\2022';
  color: hsl(18 62% 42%);
  font-size: calc(9pt * var(--cv-font-scale, 1));
  top: 0.05em;
}
.template-25-style .cv-t6-main .skill-cat { font-weight: 700; }

/* ── 26 · Marigold ──────────────────────────────────────────────────────────
   A white page with a pale-yellow contact strip across the top, a large
   black name with the summary under it and a round portrait on the right,
   then two columns: skills and education on the left, work history on the
   right. Section headings sit on solid yellow highlight blocks.
   Markup: renderSplitHead / renderSplitAside (`head: true` in CV_TEMPLATES). */
.template-26-style,
.template-26-style .cv-page-sheet {
  --mg-yellow: hsl(46 92% 72%);
  --mg-yellow-soft: hsl(48 90% 84%);
  --mg-ink: hsl(220 10% 10%);
  --cv-header-bg: transparent;
  --cv-header-text: var(--mg-ink);
  --cv-section-title-color: var(--mg-ink);
  --cv-section-rule-color: transparent;
  --cv-accent-color: var(--mg-ink);
  --cv-entry-title-color: var(--mg-ink);
  --cv-muted-text: hsl(220 6% 42%);
  --cv-body-text: hsl(220 8% 22%);
  font-family: var(--font-body);
}
/* No coloured rail: the columns sit on white. */
.cv-page-sheet.template-26-style .cv-t6-layout::before { display: none; }
.template-26-style .cv-t6-layout {
  flex-wrap: wrap;
  align-items: flex-start;
  column-gap: 20pt;
  row-gap: 0;
}
.cv-page-sheet.template-26-style .cv-t6-sidebar {
  flex: 0 0 36%;
  max-width: 36%;
  margin: 0;
  padding: 0;
  color: var(--cv-body-text);
}
.cv-page-sheet.template-26-style .cv-t6-main { flex: 1 1 0; min-width: 0; }

/* Header: strip, then name + summary beside the photo, then a yellow rule. */
.template-26-style .cv-t6-head {
  flex: 0 0 100%;
  order: -1;
  margin-bottom: 10pt;
  padding-bottom: 10pt;
  border-bottom: 2pt solid var(--mg-yellow-soft);
}
.template-26-style .cv-t6-head-strip {
  margin: calc(var(--cv-pad-y, 18mm) * -1) calc(var(--cv-pad-x, 17mm) * -1) 14pt;
  padding: 7pt var(--cv-pad-x, 17mm);
  background: var(--mg-yellow);
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
}
.template-26-style .cv-t6-head-strip .cv-contact-row {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: 4pt 16pt;
  margin: 0;
  font-size: calc(8.5pt * var(--cv-font-scale, 1));
  font-weight: 500;
  color: var(--mg-ink);
}
.template-26-style .cv-t6-head-strip .cv-contact-sep { display: none; }
.template-26-style .cv-t6-head-strip .cv-contact-item {
  display: inline-flex;
  align-items: center;
  gap: 4pt;
}
.template-26-style .cv-t6-head-strip .cv-contact-item::before {
  content: '';
  flex: none;
  width: 9pt;
  height: 9pt;
  background: center / contain no-repeat;
}
.template-26-style .cv-contact-item:has([data-field="phone"])::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231d1d1f' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.9v3a2 2 0 0 1-2.2 2 19.8 19.8 0 0 1-8.6-3.1 19.5 19.5 0 0 1-6-6A19.8 19.8 0 0 1 2.1 4.2 2 2 0 0 1 4.1 2h3a2 2 0 0 1 2 1.7c.1.9.4 1.8.7 2.7a2 2 0 0 1-.5 2.1L8 9.8a16 16 0 0 0 6 6l1.3-1.3a2 2 0 0 1 2.1-.4c.9.3 1.8.6 2.7.7a2 2 0 0 1 1.7 2z'/%3E%3C/svg%3E"); }
.template-26-style .cv-contact-item:has([data-field="email"])::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231d1d1f' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='2' y='4' width='20' height='16' rx='2'/%3E%3Cpath d='m22 7-10 6L2 7'/%3E%3C/svg%3E"); }
.template-26-style .cv-contact-item:has([data-field="location"])::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231d1d1f' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 10c0 6-8 12-8 12S4 16 4 10a8 8 0 0 1 16 0z'/%3E%3Ccircle cx='12' cy='10' r='3'/%3E%3C/svg%3E"); }
.template-26-style .cv-contact-item:has([data-field="linkedin"])::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%231d1d1f'%3E%3Cpath d='M4.98 3.5a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5zM3 9.75h4V21H3zM9.5 9.75h3.8v1.6h.06c.53-1 1.83-2.05 3.77-2.05 4.03 0 4.77 2.65 4.77 6.1V21h-4v-5c0-1.2-.02-2.73-1.66-2.73-1.67 0-1.92 1.3-1.92 2.64V21h-4z'/%3E%3C/svg%3E"); }
.template-26-style .cv-contact-item:has([data-field="website"])::before,
.template-26-style .cv-contact-item:has([data-field="github"])::before,
.template-26-style .cv-contact-custom::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231d1d1f' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10 13a5 5 0 0 0 7.5.5l3-3a5 5 0 0 0-7-7l-1.7 1.7'/%3E%3Cpath d='M14 11a5 5 0 0 0-7.5-.5l-3 3a5 5 0 0 0 7 7l1.7-1.7'/%3E%3C/svg%3E"); }
.template-26-style .cv-t6-head-main {
  display: flex;
  align-items: center;
  gap: 18pt;
}
.template-26-style .cv-t6-head-text { flex: 1 1 auto; min-width: 0; }
.template-26-style .cv-t6-head h1 {
  font-family: var(--font-header);
  font-size: calc(26pt * var(--cv-font-scale, 1));
  font-weight: 800;
  letter-spacing: -0.01em;
  line-height: 1.1;
  color: var(--mg-ink);
  margin: 0 0 2pt;
}
.template-26-style .cv-t6-head .tagline {
  font-size: calc(10pt * var(--cv-font-scale, 1));
  font-weight: 600;
  color: var(--mg-ink);
  margin: 0 0 5pt;
}
.template-26-style .cv-t6-head .tagline:empty { display: none; }
.template-26-style .cv-t6-head .cv-summary {
  font-size: calc(9pt * var(--cv-font-scale, 1));
  line-height: 1.55;
  color: var(--cv-body-text);
}
.template-26-style .cv-t6-head .cv-profile-photo-wrap { flex: none; margin: 0; }
.template-26-style .cv-t6-head .cv-profile-photo,
.template-26-style .cv-t6-head .cv-profile-photo-placeholder {
  width: 84pt;
  height: 84pt;
  border-radius: 50%;
  object-fit: cover;
  display: block;
}
.template-26-style .cv-t6-head .cv-profile-photo-placeholder {
  /* Icon and label as one centred group, not two rows spread over the circle. */
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4pt;
  border: 1.5px dashed hsl(46 50% 60%);
  background: hsl(48 90% 96%);
  color: hsl(40 30% 35%);
  font-size: calc(7pt * var(--cv-font-scale, 1));
}

/* Section headings: bold black text on a solid yellow block. */
.template-26-style .cv-section-head {
  border: none;
  padding: 0;
  margin-bottom: 8pt;
}
.template-26-style .section-title {
  display: inline-block;
  font-family: var(--font-header);
  font-size: calc(11pt * var(--cv-font-scale, 1));
  font-weight: 800;
  letter-spacing: 0;
  text-transform: none;
  color: var(--mg-ink);
  background: var(--mg-yellow);
  border: none;
  padding: 4pt 10pt;
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
}
/* The shared rail rule zeroes a heading's right padding; the highlight needs it. */
.template-26-style .cv-t6-sidebar .cv-section-head .section-title {
  padding-right: 10pt;
}
.template-26-style .cv-t6-sidebar .cv-section { margin-bottom: 14pt; }

/* Entries */
.template-26-style .cv-entry-title {
  font-size: calc(9.5pt * var(--cv-font-scale, 1));
  font-weight: 600;
  color: var(--mg-ink);
}
.template-26-style .cv-entry-subtitle {
  font-style: normal;
  font-weight: 600;
  color: var(--mg-ink);
}
.template-26-style .cv-entry-date {
  font-size: calc(8.5pt * var(--cv-font-scale, 1));
  font-weight: 400;
  color: var(--cv-muted-text);
}
.template-26-style .cv-bullet-list li {
  font-size: calc(8.8pt * var(--cv-font-scale, 1));
  color: var(--cv-body-text);
}
.template-26-style .cv-bullet-list li::before {
  content: '\2022';
  color: var(--mg-ink);
  font-size: calc(9pt * var(--cv-font-scale, 1));
  top: 0.05em;
}
/* Skills in the left column read as a plain bulleted list. */
.template-26-style .cv-t6-sidebar .skill-row { display: block; padding: 0; margin: 0 0 6pt; }
.template-26-style .cv-t6-sidebar .skill-cat {
  display: block;
  font-weight: 700;
  color: var(--mg-ink);
  margin-bottom: 1pt;
}
.template-26-style .cv-t6-sidebar .skill-items {
  font-size: calc(8.8pt * var(--cv-font-scale, 1));
  color: var(--cv-body-text);
  line-height: 1.6;
}
.template-26-style .cv-t6-sidebar .skill-dot { border-color: var(--mg-ink); }
.template-26-style .cv-t6-sidebar .skill-dot.is-on { background: var(--mg-ink); }

/* ── 27 · Harbor ───────────────────────────────────────────────────────────
   Navy band carrying the name, a round portrait overlapping its bottom edge,
   contacts beside the portrait, the summary full width, then two columns
   split by a hairline: experience on the left, highlights (skills) and
   education on the right. Markup: renderBandHead (`head: 'band'`). */
.template-27-style,
.template-27-style .cv-page-sheet {
  --hb-navy: hsl(221 52% 26%);
  --hb-ink: hsl(220 14% 14%);
  --cv-header-bg: transparent;
  --cv-header-text: var(--hb-ink);
  --cv-section-title-color: var(--hb-navy);
  --cv-section-rule-color: transparent;
  --cv-accent-color: var(--hb-navy);
  --cv-entry-title-color: var(--hb-ink);
  --cv-muted-text: hsl(220 8% 40%);
  --cv-body-text: hsl(220 10% 20%);
  font-family: var(--font-body);
}
.cv-page-sheet.template-27-style .cv-t6-layout::before { display: none; }
.template-27-style .cv-t6-layout { flex-wrap: wrap; align-items: stretch; column-gap: 0; row-gap: 0; }
.cv-page-sheet.template-27-style .cv-t6-main {
  flex: 1 1 0;
  min-width: 0;
  padding-right: 16pt;
}
.cv-page-sheet.template-27-style .cv-t6-sidebar {
  order: 2;
  flex: 0 0 38%;
  max-width: 38%;
  margin: 0;
  padding: 0 0 0 16pt;
  border-left: 1px solid hsl(220 10% 78%);
  color: var(--cv-body-text);
}
/* The hairline is the right column's border, so that column stretches to
   the end of whichever column is longer: the line runs the full length of
   the two-column block and stops with the content, never at the paper edge.
   Rows pack to the top (align-content) so the layout's page-filling
   min-height does not stretch the line down into the empty bottom margin.
   Pagination measures children, not boxes, so the stretch is safe there. */
.cv-page-sheet.has-sidebar.template-27-style .cv-t6-layout { align-content: flex-start; }
.cv-page-sheet.has-sidebar.template-27-style .cv-t6-sidebar { align-self: stretch; }
/* A page whose right column has nothing in it (the continuation pages, once
   skills and education fit on page 1) drops the column and its line, and
   the left column's sections use the full width of the page. */
.cv-page-sheet.has-sidebar.template-27-style .cv-t6-sidebar:not(:has(*)) { display: none; }
.cv-page-sheet.has-sidebar.template-27-style .cv-t6-layout:has(> .cv-t6-sidebar:not(:has(*))) > .cv-t6-main {
  padding-right: 0;
}
.template-27-style .cv-t6-head {
  flex: 0 0 100%;
  order: -1;
  margin-bottom: 14pt;
  padding-bottom: 14pt;
  border-bottom: 1px solid hsl(220 10% 78%);
}
.template-27-style .cv-t6-head-band {
  margin: calc(var(--cv-pad-y, 18mm) * -1) calc(var(--cv-pad-x, 17mm) * -1) 0;
  padding: calc(var(--cv-pad-y, 18mm) * 0.7) var(--cv-pad-x, 17mm) 12pt calc(var(--cv-pad-x, 17mm) + 112pt);
  background: var(--hb-navy);
  color: #fff;
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
}
.template-27-style .cv-t6-head h1 {
  font-family: var(--font-header);
  font-size: calc(24pt * var(--cv-font-scale, 1));
  font-weight: 800;
  line-height: 1.1;
  color: #fff;
  -webkit-text-fill-color: currentColor;
  margin: 0;
}
.template-27-style .cv-t6-head .tagline {
  font-size: calc(9.5pt * var(--cv-font-scale, 1));
  font-weight: 500;
  color: rgba(255, 255, 255, 0.85);
  margin-top: 2pt;
}
.template-27-style .cv-t6-head .tagline:empty { display: none; }
.template-27-style .cv-t6-head-under {
  display: flex;
  align-items: flex-start;
  gap: 14pt;
  min-height: 46pt;
}
.template-27-style .cv-t6-head-under .cv-profile-photo-wrap {
  flex: none;
  /* Pulled up so the portrait straddles the band's bottom edge. */
  margin: -58pt 0 0 6pt;
  position: relative;
  z-index: 2;
}
.template-27-style .cv-t6-head .cv-profile-photo,
.template-27-style .cv-t6-head .cv-profile-photo-placeholder {
  width: 92pt;
  height: 92pt;
  border-radius: 50%;
  object-fit: cover;
  display: block;
  border: 3pt solid #fff;
  box-sizing: border-box;
  background: hsl(220 30% 94%);
}
.template-27-style .cv-t6-head .cv-profile-photo-placeholder {
  /* Icon and label as one centred group, not two rows spread over the circle. */
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4pt;
  color: hsl(220 20% 40%);
  font-size: calc(7pt * var(--cv-font-scale, 1));
}
.template-27-style .cv-t6-head-under .cv-contact-row {
  margin: 8pt 0 0;
  padding-left: 8pt;
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-start;
  text-align: left;
  gap: 2pt 18pt;
  font-size: calc(9pt * var(--cv-font-scale, 1));
  color: var(--hb-ink);
}
.template-27-style .cv-t6-head-under .cv-contact-sep { display: none; }
.template-27-style .cv-t6-head .cv-summary {
  margin-top: 12pt;
  font-size: calc(9pt * var(--cv-font-scale, 1));
  line-height: 1.6;
  color: var(--cv-body-text);
}
.template-27-style .cv-section-head { border: none; padding: 0; margin-bottom: 7pt; }
.template-27-style .section-title {
  font-family: var(--font-header);
  font-size: calc(14pt * var(--cv-font-scale, 1));
  font-weight: 800;
  letter-spacing: 0;
  text-transform: none;
  color: var(--hb-navy);
  border: none;
  padding: 0;
}
.template-27-style .cv-t6-sidebar .cv-section { margin-bottom: 14pt; }
.template-27-style .cv-entry-title { font-size: calc(9.5pt * var(--cv-font-scale, 1)); font-weight: 700; color: var(--hb-ink); }
.template-27-style .cv-entry-subtitle { font-style: normal; font-weight: 600; color: var(--hb-ink); }
/* Employer names in capitals, as in a store-manager CV; schools stay as written. */
.template-27-style [data-section-id="experience"] .cv-entry-subtitle { font-weight: 700; text-transform: uppercase; font-size: calc(8.5pt * var(--cv-font-scale, 1)); }
.template-27-style .cv-entry-date { font-size: calc(8.5pt * var(--cv-font-scale, 1)); color: var(--cv-muted-text); }
.template-27-style .cv-bullet-list li { font-size: calc(8.8pt * var(--cv-font-scale, 1)); color: var(--cv-body-text); }
.template-27-style .cv-bullet-list li::before {
  content: '\2022';
  color: var(--hb-ink);
  font-size: calc(9pt * var(--cv-font-scale, 1));
  top: 0.05em;
}
.template-27-style .cv-t6-sidebar .skill-row { display: block; padding: 0; margin: 0 0 6pt; }
.template-27-style .cv-t6-sidebar .skill-cat { display: block; font-weight: 700; color: var(--hb-ink); margin-bottom: 1pt; }
.template-27-style .cv-t6-sidebar .skill-items { font-size: calc(8.8pt * var(--cv-font-scale, 1)); color: var(--cv-body-text); line-height: 1.6; }
.template-27-style .cv-t6-sidebar .skill-dot { border-color: var(--hb-navy); }
.template-27-style .cv-t6-sidebar .skill-dot.is-on { background: var(--hb-navy); }

/* ── 28 · Sunline ──────────────────────────────────────────────────────────
   Yellow header band with a marker line and three dots down its left edge
   (one per header line), uppercase black name, `#` between contacts; one
   column below with heavy uppercase headings on a grey rule, and each job's
   title, company and dates on a single line. */
.template-28-style,
.template-28-style .cv-page-sheet {
  --sl-yellow: hsl(46 90% 66%);
  --sl-ink: hsl(0 0% 6%);
  --cv-header-bg: var(--sl-yellow);
  --cv-header-text: var(--sl-ink);
  --cv-section-title-color: var(--sl-ink);
  --cv-section-rule-color: hsl(0 0% 62%);
  --cv-accent-color: var(--sl-ink);
  --cv-entry-title-color: var(--sl-ink);
  --cv-muted-text: hsl(0 0% 34%);
  --cv-body-text: hsl(0 0% 22%);
  font-family: var(--font-body);
}
.template-28-style .cv-header {
  position: relative;
  background: var(--sl-yellow);
  color: var(--sl-ink);
  margin: calc(var(--cv-pad-y, 18mm) * -1) calc(var(--cv-pad-x, 17mm) * -1) 14pt;
  padding: calc(var(--cv-pad-y, 18mm) * 0.75) var(--cv-pad-x, 17mm) 14pt calc(var(--cv-pad-x, 17mm) + 14pt);
  border-bottom: none;
  text-align: left;
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
}
/* The marker line, from the band's top edge down to the last header line. */
.template-28-style .cv-header::before {
  content: '';
  position: absolute;
  left: calc(var(--cv-pad-x, 17mm) - 2pt);
  top: 0;
  bottom: 22pt;
  width: 1.4pt;
  background: var(--sl-ink);
}
.template-28-style .cv-header h1,
.template-28-style .cv-header .tagline,
.template-28-style .cv-header .cv-contact-row { position: relative; }
.template-28-style .cv-header h1::before,
.template-28-style .cv-header .tagline::before,
.template-28-style .cv-header .cv-contact-row::before {
  content: '';
  position: absolute;
  /* Centred on the marker line, level with the first line of text. */
  left: -18.3pt;
  top: 0.5lh;
  width: 6pt;
  height: 6pt;
  margin-top: -3pt;
  border-radius: 50%;
  background: var(--sl-ink);
}
.template-28-style .cv-header .tagline:empty::before { display: none; }
.template-28-style .cv-header h1 {
  font-family: var(--font-header);
  font-size: calc(19pt * var(--cv-font-scale, 1));
  font-weight: 900;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--sl-ink);
  margin: 0 0 3pt;
  line-height: 1.15;
}
.template-28-style .cv-header .tagline {
  font-size: calc(11pt * var(--cv-font-scale, 1));
  font-weight: 500;
  letter-spacing: 0;
  text-transform: none;
  color: hsl(0 0% 18%);
  margin: 0 0 6pt;
}
.template-28-style .cv-contact-row {
  font-size: calc(8.8pt * var(--cv-font-scale, 1));
  color: var(--sl-ink);
  justify-content: flex-start;
}
.template-28-style .cv-contact-row .cv-contact-sep { font-size: 0; margin: 0 5pt; }
.template-28-style .cv-contact-row .cv-contact-sep::after {
  content: '#';
  font-size: calc(8.8pt * var(--cv-font-scale, 1));
  font-weight: 700;
}
.template-28-style .cv-summary {
  font-size: calc(9pt * var(--cv-font-scale, 1));
  line-height: 1.6;
  color: var(--cv-body-text);
}
.template-28-style .cv-section-head { margin-bottom: 7pt; }
.template-28-style .section-title {
  font-family: var(--font-header);
  font-size: calc(14pt * var(--cv-font-scale, 1));
  font-weight: 900;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--sl-ink);
  border-bottom: 1.5px solid var(--cv-section-rule-color);
  padding-bottom: 3pt;
}
/* "Title | Company, City | Dates" on one line. */
.template-28-style .cv-entry-header {
  display: block;
  font-size: calc(9pt * var(--cv-font-scale, 1));
  color: var(--sl-ink);
  margin-bottom: 2pt;
}
.template-28-style .cv-entry-header > div:first-child,
.template-28-style .cv-entry-header > div:first-child > div,
.template-28-style .cv-entry-header .cv-entry-date { display: inline; }
.template-28-style .cv-entry-title { font-size: inherit; font-weight: 600; color: var(--sl-ink); }
.template-28-style .cv-entry-subtitle,
.template-28-style .cv-entry-loc,
.template-28-style .cv-entry-date {
  font-size: inherit;
  font-style: normal;
  font-weight: 400;
  color: var(--sl-ink);
}
.template-28-style .cv-entry-subtitle:not(:empty)::before,
.template-28-style .cv-entry-date:not(:empty)::before { content: ' | '; white-space: pre; }
.template-28-style .cv-entry-loc:not(:empty)::before { content: ', '; white-space: pre; }
.template-28-style .cv-bullet-list li { font-size: calc(8.8pt * var(--cv-font-scale, 1)); color: var(--cv-body-text); }
.template-28-style .cv-bullet-list li::before {
  content: '\2022';
  color: var(--sl-ink);
  font-size: calc(9pt * var(--cv-font-scale, 1));
  top: 0.05em;
}
.template-28-style .skill-cat { font-weight: 600; color: var(--sl-ink); }

/* ── 29 · Linen ────────────────────────────────────────────────────────────
   A soft grey rail on the left with a large round portrait, the name in
   light uppercase, a letter-spaced title, then Contact (with icons) and the
   Profile (summary) under centred, ruled headings. The white main column
   carries letter-spaced uppercase headings over a short rule, and entries as
   title then "Company | Year". Markup: railSummary in CV_TEMPLATES. */
.template-29-style,
.template-29-style .cv-page-sheet {
  --ln-rail: hsl(0 0% 95%);
  --ln-ink: hsl(0 0% 16%);
  --cv-header-bg: var(--ln-rail);
  --cv-header-text: var(--ln-ink);
  --cv-section-title-color: var(--ln-ink);
  --cv-section-rule-color: var(--ln-ink);
  --cv-accent-color: var(--ln-ink);
  --cv-entry-title-color: var(--ln-ink);
  --cv-muted-text: hsl(0 0% 45%);
  --cv-body-text: hsl(0 0% 40%);
  font-family: var(--font-body);
}
.cv-page-sheet.template-29-style .cv-t6-sidebar {
  flex: 0 0 calc(34% + var(--cv-pad-x, 17mm));
  max-width: calc(34% + var(--cv-pad-x, 17mm));
  margin: calc(var(--cv-pad-y, 18mm) * -1) 0 calc(var(--cv-pad-y, 18mm) * -1) calc(var(--cv-pad-x, 17mm) * -1);
  padding: calc(var(--cv-pad-y, 18mm) * 0.9) 16pt var(--cv-pad-y, 18mm) calc(var(--cv-pad-x, 17mm) * 0.8);
  color: var(--ln-ink);
  text-align: center;
}
.cv-page-sheet.template-29-style .cv-t6-layout::before { width: calc(34% + var(--cv-pad-x, 17mm)); }
.cv-page-sheet.template-29-style .cv-t6-main { flex: 1 1 0; min-width: 0; padding-left: 6pt; }
.template-29-style .cv-t6-sidebar .cv-profile-photo-wrap { margin: 0 auto 16pt; }
.template-29-style .cv-t6-sidebar .cv-profile-photo,
.template-29-style .cv-t6-sidebar .cv-profile-photo-placeholder {
  width: 122pt;
  max-width: 100%;
  height: 122pt;
  border-radius: 50%;
  object-fit: cover;
  display: block;
  margin: 0 auto;
  border: none;
}
.template-29-style .cv-t6-sidebar .cv-profile-photo-placeholder {
  /* Icon and label as one centred group, not two rows spread over the circle. */
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4pt;
  background: #fff;
  border: 1.5px dashed hsl(0 0% 75%);
  color: hsl(0 0% 40%);
  font-size: calc(7pt * var(--cv-font-scale, 1));
}
.template-29-style .cv-t6-sidebar-name {
  font-family: var(--font-header);
  font-size: calc(22pt * var(--cv-font-scale, 1));
  font-weight: 300;
  letter-spacing: 0.06em;
  line-height: 1.12;
  text-transform: uppercase;
  text-align: center;
  color: var(--ln-ink);
  padding-bottom: 5pt;
  border-bottom: 1px solid var(--ln-ink);
  margin-bottom: 9pt;
}
.template-29-style .cv-t6-sidebar-tagline {
  font-size: calc(8pt * var(--cv-font-scale, 1));
  font-weight: 400;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  text-align: center;
  color: hsl(0 0% 32%);
  margin-bottom: 22pt;
}
/* Rail headings: centred, letter-spaced, a rule underneath. */
.template-29-style .cv-t6-contact::before,
.template-29-style .cv-t6-sidebar .section-title {
  display: block;
  font-family: var(--font-header);
  font-size: calc(9.5pt * var(--cv-font-scale, 1));
  font-weight: 400;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  text-align: center;
  color: var(--ln-ink);
  border: none;
  border-bottom: 1px solid var(--ln-ink);
  padding: 0 0 4pt;
  margin: 0 0 11pt;
}
.template-29-style .cv-t6-contact::before { content: 'Contact'; }
.template-29-style .cv-t6-sidebar .cv-section-head { border: none; padding: 0; margin: 0; }
.template-29-style .cv-t6-contact { margin-bottom: 22pt; text-align: left; padding: 0 6pt; }
.template-29-style .cv-t6-contact-line .cv-contact-item {
  display: inline-flex;
  align-items: center;
  gap: 9pt;
  font-size: calc(8pt * var(--cv-font-scale, 1));
  color: hsl(0 0% 30%);
  margin-bottom: 6pt;
}
.template-29-style .cv-t6-contact-line .cv-contact-item::before {
  content: '';
  flex: none;
  width: 10pt;
  height: 10pt;
  background: center / contain no-repeat;
  /* Any link without its own icon (Behance, a portfolio...) gets the screen. */
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23333' %3E%3Cpath d='M3 4h18a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1h-7v2h3v2H7v-2h3v-2H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1z'/%3E%3C/svg%3E");
}
.template-29-style .cv-contact-item:has([data-field="phone"])::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23333' %3E%3Cpath d='M6.6 10.8a15.2 15.2 0 0 0 6.6 6.6l2.2-2.2a1 1 0 0 1 1-.25 11.4 11.4 0 0 0 3.6.57 1 1 0 0 1 1 1V20a1 1 0 0 1-1 1A17 17 0 0 1 3 4a1 1 0 0 1 1-1h3.5a1 1 0 0 1 1 1c0 1.25.2 2.45.57 3.57a1 1 0 0 1-.25 1z'/%3E%3C/svg%3E"); }
.template-29-style .cv-contact-item:has([data-field="email"])::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23333' %3E%3Cpath d='M3 5h18a1 1 0 0 1 1 1v.4l-10 6.2L2 6.4V6a1 1 0 0 1 1-1zm-1 3.7 10 6.2 10-6.2V18a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1z'/%3E%3C/svg%3E"); }
.template-29-style .cv-contact-item:has([data-field="website"])::before,
.template-29-style .cv-contact-item:has([data-field="github"])::before,
.template-29-style .cv-contact-custom::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23333' %3E%3Cpath d='M3 4h18a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1h-7v2h3v2H7v-2h3v-2H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1z'/%3E%3C/svg%3E"); }
.template-29-style .cv-contact-item:has([data-field="location"])::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23333' %3E%3Cpath d='M12 3 2 11h3v9h5v-6h4v6h5v-9h3z'/%3E%3C/svg%3E"); }
.template-29-style .cv-contact-item:has([data-field="linkedin"])::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23333' %3E%3Cpath d='M4.98 3.5a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5zM3 9.75h4V21H3zM9.5 9.75h3.8v1.6h.06c.53-1 1.83-2.05 3.77-2.05 4.03 0 4.77 2.65 4.77 6.1V21h-4v-5c0-1.2-.02-2.73-1.66-2.73-1.67 0-1.92 1.3-1.92 2.64V21h-4z'/%3E%3C/svg%3E"); }
.template-29-style .cv-t6-sidebar .cv-section { margin-bottom: 20pt; }
.template-29-style .cv-t6-sidebar .cv-summary {
  font-size: calc(8pt * var(--cv-font-scale, 1));
  line-height: 1.6;
  text-align: left;
  color: var(--cv-body-text);
  padding: 0 6pt;
}
.template-29-style .cv-t6-sidebar .skill-row { display: block; text-align: left; padding: 0 6pt; margin: 0 0 6pt; }
.template-29-style .cv-t6-sidebar .skill-cat { display: block; font-weight: 600; color: var(--ln-ink); }
.template-29-style .cv-t6-sidebar .skill-items { font-size: calc(8pt * var(--cv-font-scale, 1)); color: var(--cv-body-text); }
.template-29-style .cv-t6-sidebar .skill-dot { border-color: var(--ln-ink); }
.template-29-style .cv-t6-sidebar .skill-dot.is-on { background: var(--ln-ink); }

/* Main column headings: letter-spaced uppercase over a short rule. */
.template-29-style .cv-t6-main .cv-section-head { border: none; padding: 0; margin-bottom: 12pt; }
.template-29-style .cv-t6-main .section-title {
  display: inline-block;
  min-width: 62%;
  font-family: var(--font-header);
  font-size: calc(10pt * var(--cv-font-scale, 1));
  font-weight: 400;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ln-ink);
  border: none;
  border-bottom: 1px solid var(--ln-ink);
  padding: 0 0 4pt 8pt;
}
.template-29-style .cv-t6-main .cv-section { margin-bottom: 18pt; }
.template-29-style .cv-t6-main .cv-entry-item { padding-left: 14pt; margin-bottom: 12pt; }
/* Entry: the role, then "Company | Year" in small bold grey. */
.template-29-style .cv-t6-main .cv-entry-header { display: block; margin-bottom: 4pt; }
.template-29-style .cv-t6-main .cv-entry-header > div:first-child { display: block; }
.template-29-style .cv-t6-main .cv-entry-title {
  font-size: calc(10pt * var(--cv-font-scale, 1));
  font-weight: 500;
  color: var(--ln-ink);
}
.template-29-style .cv-t6-main .cv-entry-subtitle,
.template-29-style .cv-t6-main .cv-entry-loc,
.template-29-style .cv-t6-main .cv-entry-date {
  display: inline;
  font-size: calc(7.8pt * var(--cv-font-scale, 1));
  font-style: normal;
  font-weight: 600;
  color: hsl(0 0% 40%);
}
.template-29-style .cv-t6-main .cv-entry-loc:not(:empty)::before { content: ', '; white-space: pre; }
.template-29-style .cv-t6-main .cv-entry-date:not(:empty)::before { content: '  |  '; white-space: pre; }
.template-29-style .cv-t6-main .cv-entry-header > div:first-child,
.template-29-style .cv-t6-main .cv-entry-header > div:first-child + .cv-entry-date { display: inline; }
.template-29-style .cv-t6-main .cv-entry-title { display: block; }
/* Education's class of degree / concentration gets its own line above
   "School, City | dates": inline, its long hint wrapped and "(optional)" was
   left glued to the school's name. */
.template-29-style .cv-t6-main .cv-entry-subtitle[data-field^="education."][data-field$=".subtitle"] {
  display: block;
}
.template-29-style .cv-bullet-list li {
  font-size: calc(8.5pt * var(--cv-font-scale, 1));
  color: var(--cv-body-text);
}
.template-29-style .cv-bullet-list li::before {
  content: '\2022';
  color: hsl(0 0% 50%);
  font-size: calc(8pt * var(--cv-font-scale, 1));
  top: 0.05em;
}

/* ── 30 · Atelier ──────────────────────────────────────────────────────────
   A light grey sheet. The name in widely spaced bold capitals, one word per
   line; the tagline and website between two hairlines. Left column: About
   me (summary), a labelled Contact list and Skills with dot levels. Right
   column: Experience, Education and the rest, each entry split into a small
   left part (role, dates) and a right part (company, description). Every
   heading carries a circled line icon over a hairline.
   Markup: renderNameHead + `rail` in CV_TEMPLATES. */
.template-30-style,
.template-30-style .cv-page-sheet {
  --at-ink: hsl(0 0% 14%);
  --at-rule: hsl(0 0% 72%);
  --cv-header-bg: transparent;
  --cv-header-text: var(--at-ink);
  --cv-section-title-color: var(--at-ink);
  --cv-section-rule-color: var(--at-rule);
  --cv-accent-color: var(--at-ink);
  --cv-entry-title-color: var(--at-ink);
  --cv-muted-text: hsl(0 0% 45%);
  --cv-body-text: hsl(0 0% 42%);
  font-family: var(--font-body);
}
.cv-page-sheet.template-30-style {
  background: hsl(0 0% 96.5%);
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
}
.cv-page-sheet.template-30-style .cv-t6-layout::before { display: none; }
.template-30-style .cv-t6-layout { flex-wrap: wrap; align-items: flex-start; column-gap: 22pt; row-gap: 0; }
.cv-page-sheet.template-30-style .cv-t6-sidebar {
  flex: 0 0 31%;
  max-width: 31%;
  margin: 0;
  padding: 0;
  color: var(--cv-body-text);
}
.cv-page-sheet.template-30-style .cv-t6-main { flex: 1 1 0; min-width: 0; }

/* Header */
.template-30-style .cv-t6-head { flex: 0 0 100%; order: -1; margin: 4pt 0 18pt; }
.template-30-style .cv-t6-head h1 {
  max-width: min-content;            /* one word per line */
  font-family: var(--font-header);
  font-size: calc(30pt * var(--cv-font-scale, 1));
  font-weight: 700;
  letter-spacing: 0.42em;
  line-height: 1.15;
  text-transform: uppercase;
  color: var(--at-ink);
  margin: 0 0 14pt;
  white-space: normal;
}
.template-30-style .cv-t6-head-row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 12pt;
  padding: 6pt 0;
  border-top: 1px solid var(--at-rule);
  border-bottom: 1px solid var(--at-rule);
}
.template-30-style .cv-t6-head .tagline,
.template-30-style .cv-t6-head-site {
  font-size: calc(7.5pt * var(--cv-font-scale, 1));
  font-weight: 500;
  letter-spacing: 0.38em;
  text-transform: uppercase;
  color: var(--at-ink);
  margin: 0;
}
.template-30-style .cv-t6-head-site { color: hsl(0 0% 62%); letter-spacing: 0.3em; }

/* Headings: a circled icon, the title, a hairline under the whole head. */
.template-30-style .cv-section { margin-bottom: 18pt; }
.template-30-style .cv-section-head {
  border-bottom: 1px solid var(--at-rule);
  padding: 0 0 5pt;
  margin-bottom: 10pt;
}
.template-30-style .section-title {
  display: flex;
  align-items: center;
  gap: 8pt;
  font-family: var(--font-header);
  font-size: calc(11pt * var(--cv-font-scale, 1));
  font-weight: 500;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--at-ink);
  border: none;
  padding: 0;
  margin: 0;
}
.template-30-style .section-title::before {
  content: '';
  flex: none;
  width: 17pt;
  height: 17pt;
  box-sizing: border-box;
  border: 1.4px solid var(--at-ink);
  border-radius: 50%;
  background: center / 58% no-repeat url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23333' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z'/%3E%3Cpath d='M14 3v5h5M9 13h6M9 17h6'/%3E%3C/svg%3E");
}
.template-30-style [data-section-id="summary"] > .cv-section-head .section-title::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23333' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='8' r='4'/%3E%3Cpath d='M4 21a8 8 0 0 1 16 0'/%3E%3C/svg%3E"); }
.template-30-style [data-section-id="contact"] > .cv-section-head .section-title::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23333' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='14' rx='2'/%3E%3Ccircle cx='9' cy='11' r='2'/%3E%3Cpath d='M14 10h4M14 14h4M6 16c.5-1.3 1.6-2 3-2s2.5.7 3 2'/%3E%3C/svg%3E"); }
.template-30-style [data-section-id="skills"] > .cv-section-head .section-title::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23333' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3Cpath d='M12 2v3M12 19v3M4.2 4.2l2.1 2.1M17.7 17.7l2.1 2.1M2 12h3M19 12h3M4.2 19.8l2.1-2.1M17.7 6.3l2.1-2.1'/%3E%3C/svg%3E"); }
.template-30-style [data-section-id="experience"] > .cv-section-head .section-title::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23333' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='7' width='18' height='13' rx='2'/%3E%3Cpath d='M8 7V5a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2M3 13h18'/%3E%3C/svg%3E"); }
.template-30-style [data-section-id="education"] > .cv-section-head .section-title::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23333' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 10l10-5 10 5-10 5z'/%3E%3Cpath d='M6 12v5c3 2 9 2 12 0v-5'/%3E%3C/svg%3E"); }
.template-30-style [data-section-id="projects"] > .cv-section-head .section-title::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23333' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'/%3E%3C/svg%3E"); }
.template-30-style [data-section-id="awards"] > .cv-section-head .section-title::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23333' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='9' r='6'/%3E%3Cpath d='M9 14.5 8 22l4-2 4 2-1-7.5'/%3E%3C/svg%3E"); }

/* Left column */
.template-30-style .cv-t6-sidebar .cv-summary {
  font-size: calc(7.6pt * var(--cv-font-scale, 1));
  line-height: 1.6;
  text-align: justify;
  color: var(--cv-body-text);
}
.template-30-style .cv-t6-contact { text-align: left; }
.template-30-style .cv-t6-contact-line { margin-bottom: 7pt; }
.template-30-style .cv-t6-contact-line .cv-contact-item {
  display: block;
  font-size: calc(7.6pt * var(--cv-font-scale, 1));
  font-weight: 600;
  color: var(--at-ink);
}
.template-30-style .cv-t6-contact-line .cv-contact-item::before {
  display: block;
  font-weight: 700;
  color: var(--at-ink);
}
.template-30-style .cv-contact-item:has([data-field="location"])::before { content: 'Address:'; }
.template-30-style .cv-contact-item:has([data-field="phone"])::before { content: 'Mobile:'; }
.template-30-style .cv-contact-item:has([data-field="email"])::before { content: 'Email:'; }
.template-30-style .cv-contact-item:has([data-field="website"])::before { content: 'Website:'; }
.template-30-style .cv-contact-item:has([data-field="linkedin"])::before { content: 'LinkedIn:'; }
.template-30-style .cv-contact-item:has([data-field="github"])::before { content: 'GitHub:'; }
.template-30-style .cv-contact-custom .cv-contact-label { display: block; font-weight: 700; }
.template-30-style .cv-contact-custom .cv-contact-label::after { content: ':'; }
.template-30-style .cv-contact-custom .cv-contact-custom-sep { display: none; }
.template-30-style .cv-t6-sidebar .skill-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 2pt 8pt;
  margin: 0 0 7pt;
}
.template-30-style .cv-t6-sidebar .skill-cat {
  font-size: calc(7.6pt * var(--cv-font-scale, 1));
  font-weight: 700;
  text-transform: uppercase;
  color: var(--at-ink);
}
.template-30-style .cv-t6-sidebar .skill-items {
  order: 3;
  flex: 0 0 100%;
  font-size: calc(7.4pt * var(--cv-font-scale, 1));
  color: var(--cv-body-text);
}
.template-30-style .cv-t6-sidebar .skill-level { order: 2; display: inline-flex; gap: 3pt; }
.template-30-style .cv-t6-sidebar .skill-dot {
  width: 6.5pt;
  height: 6.5pt;
  border: 1px solid hsl(0 0% 62%);
  background: transparent;
}
.template-30-style .cv-t6-sidebar .skill-dot.is-on { background: hsl(0 0% 70%); border-color: hsl(0 0% 70%); }

/* Right column: each entry in two parts. */
.template-30-style .cv-t6-main .cv-entry-item {
  display: grid;
  grid-template-columns: 30% 1fr;
  grid-auto-flow: row dense;
  column-gap: 12pt;
  margin-bottom: 14pt;
}
.template-30-style .cv-t6-main .cv-entry-header,
.template-30-style .cv-t6-main .cv-entry-header > div:first-child { display: contents; }
.template-30-style .cv-t6-main .cv-entry-item > :not(.cv-entry-header):not(.cv-entry-actions) { grid-column: 2; }
/* The bullets span the left part's date and location rows, so those sit
   under the role instead of below the last bullet. */
.template-30-style .cv-t6-main .cv-entry-item > .cv-bullet-list { grid-row-end: span 3; margin-top: 0; }
.template-30-style .cv-t6-main .cv-entry-title,
.template-30-style .cv-t6-main .cv-entry-subtitle,
.template-30-style .cv-t6-main .cv-entry-loc,
.template-30-style .cv-t6-main .cv-entry-date {
  font-size: calc(7.2pt * var(--cv-font-scale, 1));
  font-style: normal;
  line-height: 1.5;
  text-transform: uppercase;
  text-align: left;
  margin: 0;
}
/* Experience: role and dates on the left, company on the right. */
.template-30-style .cv-t6-main .cv-entry-title { grid-column: 1; grid-row: 1; font-weight: 600; color: hsl(0 0% 30%); }
.template-30-style .cv-t6-main .cv-entry-date { grid-column: 1; grid-row: 2; font-weight: 500; color: hsl(0 0% 30%); }
.template-30-style .cv-t6-main .cv-entry-loc { grid-column: 1; grid-row: 3; font-weight: 400; color: var(--cv-muted-text); }
.template-30-style .cv-t6-main .cv-entry-subtitle { grid-column: 2; font-weight: 600; color: var(--at-ink); font-size: calc(7.8pt * var(--cv-font-scale, 1)); }
.template-30-style .cv-t6-main [data-section-id="experience"] .cv-entry-subtitle { grid-row: 1; }
/* Education: school and dates on the left, the qualification on the right. */
.template-30-style .cv-t6-main [data-section-id="education"] .cv-entry-subtitle[data-field$=".institution"] { grid-column: 1; grid-row: 1; font-size: calc(7.2pt * var(--cv-font-scale, 1)); color: hsl(0 0% 30%); }
.template-30-style .cv-t6-main [data-section-id="education"] .cv-entry-title { grid-column: 2; grid-row: 1; font-size: calc(7.8pt * var(--cv-font-scale, 1)); color: var(--at-ink); }
.template-30-style .cv-t6-main [data-section-id="education"] .cv-entry-subtitle[data-field$=".subtitle"] { text-transform: none; font-weight: 400; color: var(--cv-muted-text); }
.template-30-style .cv-t6-main .cv-bullet-list,
.template-30-style .cv-t6-main .cv-entry-desc,
.template-30-style .cv-t6-main .cv-entry-item p {
  font-size: calc(7.4pt * var(--cv-font-scale, 1));
  line-height: 1.55;
  color: var(--cv-body-text);
  text-align: justify;
}
.template-30-style .cv-t6-main .cv-bullet-list li { font-size: inherit; }
.template-30-style .cv-bullet-list li::before {
  content: '\2022';
  color: hsl(0 0% 55%);
  font-size: calc(7.5pt * var(--cv-font-scale, 1));
  top: 0.05em;
}


/* ── Contact icons: one per link type ───────────────────────────────────
   Website, GitHub, X, Behance, Dribbble and custom links each get their own
   mark (brand marks from Simple Icons, CC0) instead of one shared icon. */
.template-26-style .cv-contact-item:has([data-field="website"])::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231d1d1f' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M2 12h20'/%3E%3Cpath d='M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z'/%3E%3C/svg%3E"); }
.template-26-style .cv-contact-item:has([data-field="github"])::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%231d1d1f'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E"); }
.template-26-style .cv-contact-item:has([data-field="twitter"])::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%231d1d1f'%3E%3Cpath d='M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z'/%3E%3C/svg%3E"); }
.template-26-style .cv-contact-item:has([data-field="behance"])::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%231d1d1f'%3E%3Cpath d='M16.969 16.927a2.561 2.561 0 0 0 1.901.677 2.501 2.501 0 0 0 1.531-.475c.362-.235.636-.584.779-.99h2.585a5.091 5.091 0 0 1-1.9 2.896 5.292 5.292 0 0 1-3.091.88 5.839 5.839 0 0 1-2.284-.433 4.871 4.871 0 0 1-1.723-1.211 5.657 5.657 0 0 1-1.08-1.874 7.057 7.057 0 0 1-.383-2.393c-.005-.8.129-1.595.396-2.349a5.313 5.313 0 0 1 5.088-3.604 4.87 4.87 0 0 1 2.376.563c.661.362 1.231.87 1.668 1.485a6.2 6.2 0 0 1 .943 2.133c.194.821.263 1.666.205 2.508h-7.699c-.063.79.184 1.574.688 2.187ZM6.947 4.084a8.065 8.065 0 0 1 1.928.198 4.29 4.29 0 0 1 1.49.638c.418.303.748.711.958 1.182.241.579.357 1.203.341 1.83a3.506 3.506 0 0 1-.506 1.961 3.726 3.726 0 0 1-1.503 1.287 3.588 3.588 0 0 1 2.027 1.437c.464.747.697 1.615.67 2.494a4.593 4.593 0 0 1-.423 2.032 3.945 3.945 0 0 1-1.163 1.413 5.114 5.114 0 0 1-1.683.807 7.135 7.135 0 0 1-1.928.259H0V4.084h6.947Zm-.235 12.9c.308.004.616-.029.916-.099a2.18 2.18 0 0 0 .766-.332c.228-.158.411-.371.534-.619.142-.317.208-.663.191-1.009a2.08 2.08 0 0 0-.642-1.715 2.618 2.618 0 0 0-1.696-.505h-3.54v4.279h3.471Zm13.635-5.967a2.13 2.13 0 0 0-1.654-.619 2.336 2.336 0 0 0-1.163.259 2.474 2.474 0 0 0-.738.62 2.359 2.359 0 0 0-.396.792c-.074.239-.12.485-.137.734h4.769a3.239 3.239 0 0 0-.679-1.785l-.002-.001Zm-13.813-.648a2.254 2.254 0 0 0 1.423-.433c.399-.355.607-.88.56-1.413a1.916 1.916 0 0 0-.178-.891 1.298 1.298 0 0 0-.495-.533 1.851 1.851 0 0 0-.711-.274 3.966 3.966 0 0 0-.835-.073H3.241v3.631h3.293v-.014ZM21.62 5.122h-5.976v1.527h5.976V5.122Z'/%3E%3C/svg%3E"); }
.template-26-style .cv-contact-item:has([data-field="dribbble"])::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%231d1d1f'%3E%3Cpath d='M12 24C5.385 24 0 18.615 0 12S5.385 0 12 0s12 5.385 12 12-5.385 12-12 12zm10.12-10.358c-.35-.11-3.17-.953-6.384-.438 1.34 3.684 1.887 6.684 1.992 7.308 2.3-1.555 3.936-4.02 4.395-6.87zm-6.115 7.808c-.153-.9-.75-4.032-2.19-7.77l-.066.02c-5.79 2.015-7.86 6.025-8.04 6.4 1.73 1.358 3.92 2.166 6.29 2.166 1.42 0 2.77-.29 4-.814zm-11.62-2.58c.232-.4 3.045-5.055 8.332-6.765.135-.045.27-.084.405-.12-.26-.585-.54-1.167-.832-1.74C7.17 11.775 2.206 11.71 1.756 11.7l-.004.312c0 2.633.998 5.037 2.634 6.855zm-2.42-8.955c.46.008 4.683.026 9.477-1.248-1.698-3.018-3.53-5.558-3.8-5.928-2.868 1.35-5.01 3.99-5.676 7.17zM9.6 2.052c.282.38 2.145 2.914 3.822 6 3.645-1.365 5.19-3.44 5.373-3.702-1.81-1.61-4.19-2.586-6.795-2.586-.825 0-1.63.1-2.4.285zm10.335 3.483c-.218.29-1.935 2.493-5.724 4.04.24.49.47.985.68 1.486.08.18.15.36.22.53 3.41-.43 6.8.26 7.14.33-.02-2.42-.88-4.64-2.31-6.38z'/%3E%3C/svg%3E"); }
.template-26-style .cv-t6-head-strip .cv-contact-custom::before, .template-26-style .cv-contact-custom::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231d1d1f' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71'/%3E%3Cpath d='M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71'/%3E%3C/svg%3E"); }
.template-29-style .cv-contact-item:has([data-field="website"])::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23333' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M2 12h20'/%3E%3Cpath d='M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z'/%3E%3C/svg%3E"); }
.template-29-style .cv-contact-item:has([data-field="github"])::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23333'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E"); }
.template-29-style .cv-contact-item:has([data-field="twitter"])::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23333'%3E%3Cpath d='M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z'/%3E%3C/svg%3E"); }
.template-29-style .cv-contact-item:has([data-field="behance"])::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23333'%3E%3Cpath d='M16.969 16.927a2.561 2.561 0 0 0 1.901.677 2.501 2.501 0 0 0 1.531-.475c.362-.235.636-.584.779-.99h2.585a5.091 5.091 0 0 1-1.9 2.896 5.292 5.292 0 0 1-3.091.88 5.839 5.839 0 0 1-2.284-.433 4.871 4.871 0 0 1-1.723-1.211 5.657 5.657 0 0 1-1.08-1.874 7.057 7.057 0 0 1-.383-2.393c-.005-.8.129-1.595.396-2.349a5.313 5.313 0 0 1 5.088-3.604 4.87 4.87 0 0 1 2.376.563c.661.362 1.231.87 1.668 1.485a6.2 6.2 0 0 1 .943 2.133c.194.821.263 1.666.205 2.508h-7.699c-.063.79.184 1.574.688 2.187ZM6.947 4.084a8.065 8.065 0 0 1 1.928.198 4.29 4.29 0 0 1 1.49.638c.418.303.748.711.958 1.182.241.579.357 1.203.341 1.83a3.506 3.506 0 0 1-.506 1.961 3.726 3.726 0 0 1-1.503 1.287 3.588 3.588 0 0 1 2.027 1.437c.464.747.697 1.615.67 2.494a4.593 4.593 0 0 1-.423 2.032 3.945 3.945 0 0 1-1.163 1.413 5.114 5.114 0 0 1-1.683.807 7.135 7.135 0 0 1-1.928.259H0V4.084h6.947Zm-.235 12.9c.308.004.616-.029.916-.099a2.18 2.18 0 0 0 .766-.332c.228-.158.411-.371.534-.619.142-.317.208-.663.191-1.009a2.08 2.08 0 0 0-.642-1.715 2.618 2.618 0 0 0-1.696-.505h-3.54v4.279h3.471Zm13.635-5.967a2.13 2.13 0 0 0-1.654-.619 2.336 2.336 0 0 0-1.163.259 2.474 2.474 0 0 0-.738.62 2.359 2.359 0 0 0-.396.792c-.074.239-.12.485-.137.734h4.769a3.239 3.239 0 0 0-.679-1.785l-.002-.001Zm-13.813-.648a2.254 2.254 0 0 0 1.423-.433c.399-.355.607-.88.56-1.413a1.916 1.916 0 0 0-.178-.891 1.298 1.298 0 0 0-.495-.533 1.851 1.851 0 0 0-.711-.274 3.966 3.966 0 0 0-.835-.073H3.241v3.631h3.293v-.014ZM21.62 5.122h-5.976v1.527h5.976V5.122Z'/%3E%3C/svg%3E"); }
.template-29-style .cv-contact-item:has([data-field="dribbble"])::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23333'%3E%3Cpath d='M12 24C5.385 24 0 18.615 0 12S5.385 0 12 0s12 5.385 12 12-5.385 12-12 12zm10.12-10.358c-.35-.11-3.17-.953-6.384-.438 1.34 3.684 1.887 6.684 1.992 7.308 2.3-1.555 3.936-4.02 4.395-6.87zm-6.115 7.808c-.153-.9-.75-4.032-2.19-7.77l-.066.02c-5.79 2.015-7.86 6.025-8.04 6.4 1.73 1.358 3.92 2.166 6.29 2.166 1.42 0 2.77-.29 4-.814zm-11.62-2.58c.232-.4 3.045-5.055 8.332-6.765.135-.045.27-.084.405-.12-.26-.585-.54-1.167-.832-1.74C7.17 11.775 2.206 11.71 1.756 11.7l-.004.312c0 2.633.998 5.037 2.634 6.855zm-2.42-8.955c.46.008 4.683.026 9.477-1.248-1.698-3.018-3.53-5.558-3.8-5.928-2.868 1.35-5.01 3.99-5.676 7.17zM9.6 2.052c.282.38 2.145 2.914 3.822 6 3.645-1.365 5.19-3.44 5.373-3.702-1.81-1.61-4.19-2.586-6.795-2.586-.825 0-1.63.1-2.4.285zm10.335 3.483c-.218.29-1.935 2.493-5.724 4.04.24.49.47.985.68 1.486.08.18.15.36.22.53 3.41-.43 6.8.26 7.14.33-.02-2.42-.88-4.64-2.31-6.38z'/%3E%3C/svg%3E"); }
.template-29-style .cv-t6-contact-line .cv-contact-custom::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23333' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71'/%3E%3Cpath d='M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71'/%3E%3C/svg%3E"); }
.template-30-style .cv-contact-item:has([data-field="twitter"])::before { content: 'X:'; }
.template-30-style .cv-contact-item:has([data-field="behance"])::before { content: 'Behance:'; }
.template-30-style .cv-contact-item:has([data-field="dribbble"])::before { content: 'Dribbble:'; }

/* ==========================================================================
   4. CROSS-TEMPLATE REFINEMENTS

   Applied to every design, new and old. These are the details that separate
   a CV that looks generated from one that looks typeset.
   ========================================================================== */

/* Keep section headings with the content that follows. Entries may split
   across sheets at bullet boundaries (handled in paginateCV); within a single
   sheet, still avoid awkward mid-line breaks on compact rows. */
.cv-section-head,
.section-title { break-after: avoid; page-break-after: avoid; }
.skill-row,
.award-row { break-inside: avoid; page-break-inside: avoid; }
.cv-entry-header { break-after: avoid; page-break-after: avoid; }
.cv-entry-item.is-continued-entry .cv-entry-header { break-inside: avoid; page-break-inside: avoid; }

/* Long URLs, emails and skill lists must wrap rather than widen the sheet. */
.cv-contact-item,
.cv-entry-title,
.cv-entry-subtitle { overflow-wrap: anywhere; }

/* Bullets used to sit slightly high against multi-line text in every design. */
.cv-bullet-list li::before { line-height: inherit; }

/* Colour blocks print as colour, not as white, in every design that has one. */
.cv-t6-sidebar,
.cv-header-with-photo .cv-header-top {
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
}

/* Hyphenation off: hyphenated job titles read as typos to a recruiter. */
.cv-entry-title,
.cv-entry-subtitle,
.section-title,
.cv-header h1 { hyphens: none; }

/* ==========================================================================
   SKILL PROFICIENCY DOTS (optional, per category)
   Set levels are part of the CV: they print, publish, and export. The unset
   picker is editor chrome and lives in ribbon.css.
   ========================================================================== */
.skill-level {
  grid-column: 2;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  margin-top: 3px;
  line-height: 1;
}
.skill-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  border: 1px solid var(--cv-body-text, var(--paper-ink, #201f1e));
  opacity: 0.35;
  box-sizing: border-box;
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
}
.skill-dot.is-on {
  background: var(--cv-body-text, var(--paper-ink, #201f1e));
  opacity: 0.85;
}
/* Sidebar rails set their own ink colour; the dots follow it. */
.cv-t6-sidebar .skill-dot { border-color: currentColor; }
.cv-t6-sidebar .skill-dot.is-on { background: currentColor; }
