/* Generated by scripts/sync-resume.mjs from /Users/brandon/Documents/resume on 2026-10-08.
   Do not edit here -- change the source and re-run `npm run sync-resume`.

   Selectors are scoped under .resume because the source stylesheet was written
   for a standalone page and sets body, p, and h1-h3 globally, while this page
   also carries the site's navigation, footer, and table art. */
/* ---------------------------------------------------------------
   Design tokens
   --------------------------------------------------------------- */
:root{
  --ink:        #1c1c1c;   /* primary text            */
  --ink-soft:   #4a4a4a;   /* secondary text          */
  --ink-mute:   #6f6f6f;   /* dates, labels           */
  --rule:       #d8d8d8;   /* hairlines               */
  --rule-soft:  #e8e8e8;
  --pipe:       #b5b5b5;   /* inline separators       */

  --sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue",
          Arial, "Liberation Sans", sans-serif;

  --page-w:    8.5in;
  --page-h:    11in;
  --page-pad:  0.5in;

  --fs-name:   24pt;
  --fs-h2:     11pt;
  --fs-h3:     12pt;
  --fs-body:   10pt;
  --fs-small:  9.2pt;

  --lh-body:   1.42;
}

/* ---------------------------------------------------------------
   Reset / base
   --------------------------------------------------------------- */
.resume, .resume *{ box-sizing: border-box; }

.resume{
  margin: 0;
  padding: 0;
}

.resume{
  background: #fff;
  color: var(--ink);
  font-family: var(--sans);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

.resume p{ margin: 0; }

.resume h1, .resume h2, .resume h3{
  margin: 0;
  font-weight: 600;
}

/* ---------------------------------------------------------------
   Page container (mirrors the printed page on screen)
   --------------------------------------------------------------- */
.resume .page{
  width: var(--page-w);
  max-width: 100%;
  margin: 24px auto;
  padding: var(--page-pad);
  background: #fff;
}

/* ---------------------------------------------------------------
   Masthead
   --------------------------------------------------------------- */
.resume .masthead{
  padding-bottom: 12px;
  border-bottom: 2px solid var(--ink);
  margin-bottom: 16px;
}

.resume .masthead h1{
  font-size: var(--fs-name);
  letter-spacing: 0.06em;
  line-height: 1.1;
  text-transform: uppercase;
}

.resume .contact{
  margin-top: 7px;
  font-size: var(--fs-small);
  color: var(--ink-soft);
  letter-spacing: 0.02em;
}

.resume .contact > *{ vertical-align: middle; }

.resume .contact a{
  color: var(--ink-soft);
  text-decoration: none;
  border-bottom: 1px solid var(--rule);
}

.resume .contact a:hover{ color: var(--ink); }

.resume .contact .sep{
  margin: 0 8px;
  color: var(--pipe);
}

.resume .contact .metro{
  color: var(--ink-mute);
}



/* ---------------------------------------------------------------
   Sections
   --------------------------------------------------------------- */
.resume .section{ margin-bottom: 16px; }

.resume .section-title{
  font-size: var(--fs-h2);
  letter-spacing: 0.13em;
  text-transform: uppercase;
  color: var(--ink);
  padding-bottom: 4px;
  margin-bottom: 10px;
  border-bottom: 1px solid var(--rule);
}

.resume .summary{
  color: var(--ink-soft);
  text-align: justify;
  hyphens: auto;
}

/* ---------------------------------------------------------------
   Jobs
   --------------------------------------------------------------- */
.resume .job{ margin-bottom: 13px; }
.resume .job:last-child{ margin-bottom: 0; }

.resume .job-head{
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  /* On a full-width page the dates sit to the right of the title. When the
     page is too narrow for both, the dates move to a line of their own
     instead of running past the right edge. Nothing wraps on paper. */
  flex-wrap: wrap;
  gap: 16px;
  margin-bottom: 5px;
}

.resume .job-role h3{
  font-size: var(--fs-h3);
  line-height: 1.25;
}

.resume .job-role .location{
  font-weight: 400;
  color: var(--ink-mute);
}

.resume .pipe{
  color: var(--pipe);
  /* symmetric so the pipe sits centered in the gap on both sides */
  margin: 0 2px;
}

.resume .job-title{
  font-size: var(--fs-body);
  color: var(--ink-soft);
  margin-top: 1px;
}

.resume .job-dates{
  /* Allowed to shrink and to wrap. flex:0 0 auto together with
     white-space:nowrap kept this box at its content width no matter how narrow
     the page was, which is what pushed the widest date range past the right
     edge of a phone. */
  flex: 0 1 auto;
  font-size: var(--fs-small);
  color: var(--ink-mute);
  letter-spacing: 0.02em;
}

.resume .job-dates .note{
  display: inline-block;
  margin-left: 4px;
  font-style: italic;
}

/* ---------------------------------------------------------------
   Bullet lists
   --------------------------------------------------------------- */
.resume .bullets{
  margin: 0;
  padding: 0;
  list-style: none;
}

.resume .bullets li{
  position: relative;
  padding-left: 14px;
  margin-bottom: 4px;
  break-inside: avoid;
  page-break-inside: avoid;
}

.resume .bullets li:last-child{ margin-bottom: 0; }

.resume .bullets li::before{
  content: "";
  position: absolute;
  left: 2px;
  top: 0.58em;
  width: 4px;
  height: 4px;
  background: var(--ink-mute);
  border-radius: 50%;
}

/* ---------------------------------------------------------------
   Technical expertise: taxonomy style, category then members
   --------------------------------------------------------------- */
.resume .expertise{ margin: 0; }

.resume .expertise-row{
  display: block;
  padding: 5px 0 5px 14px;
  text-indent: -14px;      /* first line hangs left, wraps indent */
}

.resume .expertise-row:first-child{ padding-top: 0; }
.resume .expertise-row:last-child{ padding-bottom: 0; }

.resume .expertise-row dt{
  display: inline;
  font-size: var(--fs-body);
  font-weight: 600;
  color: var(--ink);
}

/* The arrow is real text in the markup (not CSS generated content) so that
   PDF/HTML text extractors and screen readers see it. */
.resume .expertise-row .arrow{
  color: var(--pipe);
  font-weight: 400;
}

.resume .expertise-row dd{
  display: inline;
  margin: 0;
  font-size: var(--fs-body);
  line-height: 1.42;
  color: var(--ink-soft);
}

/* ---------------------------------------------------------------
   Compact entries (early career, education)
   --------------------------------------------------------------- */
.resume .entry{ margin-bottom: 8px; }
.resume .entry:last-child{ margin-bottom: 0; }

.resume .entry-head{
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  /* The affiliation is meant to sit opposite the degree or the role. A long
     one ("New York University, Courant Institute of Mathematical Sciences")
     cannot fit beside it on a narrow page, so it takes a line of its own. */
  flex-wrap: wrap;
  gap: 16px;
}

.resume .entry-role{
  font-weight: 600;
}

.resume .entry-meta{
  /* Same as .job-dates: flex:0 0 auto with white-space:nowrap held the
     affiliation at its full content width, and the longest one ("New York
     University, Courant Institute of Mathematical Sciences") is wider than a
     phone. */
  flex: 0 1 auto;
  font-size: var(--fs-small);
  color: var(--ink-mute);
  text-align: right;
}

.resume .entry-body{
  margin-top: 2px;
  color: var(--ink-soft);
}

/* ---------------------------------------------------------------
   Screen: show a page edge when the viewport is tall enough
   --------------------------------------------------------------- */
@media screen{
  .resume{ background: #f2f2f2; }
  .resume .page{
    min-height: var(--page-h);
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.14);
  }
}

/* ---------------------------------------------------------------
   Print / PDF
   --------------------------------------------------------------- */
@page{
  size: Letter;
  margin: var(--page-pad);
}

@media print{
  .resume{ background: #fff; }

  /* Keep links looking like plain text in the PDF */
  .resume a{ color: inherit; text-decoration: none; }
  .resume .contact a{ border-bottom: 0; }

  .resume .page{
    width: auto;
    max-width: none;
    margin: 0;
    padding: 0;
    min-height: 0;
    box-shadow: none;
  }

  /* Keep headings glued to their content */
  .resume .section-title, .resume .job-head, .resume .entry-head{
    break-after: avoid;
    page-break-after: avoid;
  }

  /* Add this class to any section to start it on a fresh page */
  .resume .page-break{
    break-before: page;
    page-break-before: always;
  }

  /* Keep jobs intact across page breaks; bullets never split */
  .resume .job, .resume .entry, .resume .expertise-row{
    break-inside: avoid;
    page-break-inside: avoid;
  }

  .resume .bullets li{
    break-inside: avoid;
    page-break-inside: avoid;
  }
}

/* The resume sits over the table-art backdrop rather than on one of its own, so
   the standalone design's desk background, paper background, and page-edge
   shadow are dropped. */
.resume { background: transparent; }
.resume .page { background: transparent; box-shadow: none; }
