/* ============================================================
   Brad O'Haire portfolio - Resume page styles
   Scoped to /resume with an rz- prefix. Reuses the design tokens
   from site.css (--bg, --panel, --panel2, --line, --ink, --muted,
   --dim, --accent, --accent2, --ok, --radius, --maxw). Does NOT
   redefine tokens. Two jobs:
     1) On screen: a clean, recruiter-friendly one-pager that sits
        inside the existing dark chrome (nav + footer + ambient bg).
     2) In print: a self-contained @media print block that hides the
        site chrome and animated background, flips to black-on-white,
        sets sensible margins, and lays the page out to print to one
        or two pages so a recruiter can "Save as PDF".
   ============================================================ */

/* ---- Page shell ---- */
.rz-main{padding-bottom:24px}
.rz-wrap{max-width:880px}

/* The actions row (print button + quick links) sits above the sheet.
   It is screen-only chrome; the print block hides it. */
.rz-actions{display:flex;align-items:center;gap:10px 14px;flex-wrap:wrap;margin:0 0 22px}
.rz-print{display:inline-flex;align-items:center;gap:9px;min-height:44px;padding:11px 18px;border-radius:12px;
  font-weight:600;font-size:14px;cursor:pointer;border:none;color:#0a0b0f;
  background:linear-gradient(90deg,var(--accent),var(--accent2));transition:transform .15s ease,box-shadow .15s ease}
.rz-print:hover{transform:translateY(-1px);box-shadow:0 6px 22px rgba(110,168,254,.28)}
.rz-print:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.rz-print .rz-print-ico{flex:0 0 auto}
.rz-actions .rz-back{display:inline-flex;align-items:center;gap:7px;color:var(--muted);font-size:14px;font-weight:600}
.rz-actions .rz-back:hover{color:var(--ink)}

/* ---- The sheet: a bordered "document" so the screen view reads like a page ---- */
.rz-sheet{background:linear-gradient(180deg,var(--panel),var(--panel2));border:1px solid var(--line);
  border-radius:var(--radius);padding:34px 36px 30px}

/* ---- Masthead: name, headline, contact line ---- */
.rz-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:14px 28px;
  padding-bottom:18px;border-bottom:1px solid var(--line)}
.rz-id{min-width:0}
.rz-name{font-size:clamp(28px,4.6vw,40px);line-height:1.05;letter-spacing:-.6px;margin:0;color:var(--ink)}
.rz-headline{color:var(--muted);font-size:clamp(15px,2vw,17px);margin:8px 0 0;max-width:520px}
.rz-headline b{color:var(--ink);font-weight:600}
.rz-loc{color:var(--dim);font-size:13px;margin:7px 0 0;letter-spacing:.01em}

/* credential chip: scoped, mirrors the home/about cred styling using shared tokens */
.rz-cred{display:inline-flex;align-items:baseline;gap:8px;margin-top:12px;padding:6px 12px;
  border:1px solid var(--line);border-radius:999px;
  background:linear-gradient(180deg,rgba(110,168,254,.07),rgba(157,123,255,.04));
  font-size:.78rem;line-height:1.3;color:var(--ink);max-width:100%}
.rz-cred .rz-cred-dot{flex:none;width:6px;height:6px;border-radius:50%;align-self:center;
  background:linear-gradient(135deg,var(--accent),var(--accent2))}
.rz-cred .rz-cred-name{font-weight:600;letter-spacing:.01em}
.rz-cred .rz-cred-sub{color:var(--dim)}

/* contact line: real channels only, comfortable wrap, generous tap targets */
.rz-contact{list-style:none;display:flex;flex-wrap:wrap;gap:6px 18px;margin:0;padding:0;
  font-size:13.5px;text-align:right;justify-content:flex-end}
.rz-contact li{margin:0}
.rz-contact a,.rz-contact span{display:inline-flex;align-items:center;gap:7px;color:var(--muted);min-height:32px}
.rz-contact a:hover{color:var(--ink)}
.rz-contact .rz-c-key{color:var(--dim);font-weight:600;letter-spacing:.3px}

/* ---- Summary line under the masthead ---- */
.rz-summary{color:var(--muted);font-size:15px;line-height:1.6;margin:18px 0 0;max-width:760px}
.rz-summary b{color:var(--ink);font-weight:600}

/* ---- Body: two columns on wide screens, single column on phones/print ---- */
.rz-body{display:grid;grid-template-columns:1fr;gap:8px 34px;margin-top:8px}
@media (min-width:780px){
  .rz-body{grid-template-columns:1.55fr 1fr}
}

/* section heading inside the sheet */
.rz-sec{padding-top:22px;margin-top:22px;border-top:1px solid var(--line)}
.rz-sec:first-child{border-top:none}
.rz-sec-head{display:flex;align-items:baseline;gap:12px;margin:0 0 14px}
.rz-sec-head h2{font-size:14px;margin:0;letter-spacing:.12em;text-transform:uppercase;color:var(--accent);font-weight:700}
.rz-sec-head .rz-rule{flex:1;height:1px;background:var(--line)}

/* ---- Impact list: the lead, real measured outcomes first ---- */
.rz-impact{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:14px}
.rz-impact li{margin:0;padding:0 0 0 2px}
.rz-impact .rz-imp-top{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.rz-impact .rz-metric{font-size:15px;font-weight:700;font-variant-numeric:tabular-nums;
  background:linear-gradient(90deg,var(--accent),var(--accent2));-webkit-background-clip:text;background-clip:text;color:transparent}
.rz-impact .rz-imp-title{color:var(--ink);font-weight:600;font-size:14.5px}
.rz-impact .rz-imp-body{display:block;color:var(--muted);font-size:14px;line-height:1.55;margin-top:5px;max-width:620px}
.rz-impact .rz-imp-context{color:var(--dim);font-size:12.5px}

/* ---- Generic bulleted block (ventures, open-source) ---- */
.rz-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}
.rz-list li{margin:0;padding:0 0 0 16px;position:relative}
.rz-list li::before{content:"";position:absolute;left:0;top:.55em;width:6px;height:6px;border-radius:2px;
  background:linear-gradient(135deg,var(--accent),var(--accent2))}
.rz-list .rz-li-h{display:block;color:var(--ink);font-weight:600;font-size:14px;margin-bottom:3px}
.rz-list .rz-li-b{display:block;color:var(--muted);font-size:13.5px;line-height:1.5}
.rz-list .rz-li-b a{color:var(--accent);font-weight:600}
.rz-list .rz-li-b a:hover{text-decoration:underline}

/* ---- Experience (deliberately project-led; reads fine empty of dated rows) ---- */
.rz-exp-note{color:var(--muted);font-size:14px;line-height:1.6;margin:0 0 14px;max-width:620px}
.rz-exp-note b{color:var(--ink);font-weight:600}
.rz-exp{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:14px}
.rz-exp li{margin:0}
.rz-exp .rz-exp-role{color:var(--ink);font-weight:600;font-size:14.5px}
.rz-exp .rz-exp-meta{color:var(--dim);font-size:12.5px;margin-top:2px}
.rz-exp .rz-exp-body{color:var(--muted);font-size:14px;line-height:1.55;margin-top:5px;max-width:620px}
/* nested achievement bullets inside a dated experience entry */
.rz-exp-points{list-style:none;margin:7px 0 0;padding:0;display:flex;flex-direction:column;gap:6px;max-width:620px}
.rz-exp-points li{position:relative;margin:0;padding:0 0 0 16px;color:var(--muted);font-size:13.5px;line-height:1.5}
.rz-exp-points li::before{content:"";position:absolute;left:0;top:.52em;width:5px;height:5px;border-radius:2px;
  background:linear-gradient(135deg,var(--accent),var(--accent2))}

/* ---- Skills as chips ---- */
.rz-skills{display:flex;flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none}
.rz-skills li{margin:0;font-size:12.5px;color:var(--muted);border:1px solid var(--line);
  border-radius:999px;padding:5px 12px;background:var(--panel2)}

/* ---- Open-to line: muted, matches site.css .open-to intent ---- */
.rz-open{color:var(--muted);font-size:13.5px;line-height:1.55;margin:0;max-width:620px}
.rz-open b{color:var(--ink);font-weight:600}

/* ---- Sidebar wrapper so the right column groups read as a unit ---- */
.rz-aside{display:flex;flex-direction:column}

/* ---- Narrow phones: keep everything inside a 375px viewport ---- */
@media (max-width:480px){
  .rz-sheet{padding:22px 16px 20px}
  .rz-contact{text-align:left;justify-content:flex-start}
  .rz-head{align-items:flex-start}
}

/* ---- Reduced motion: drop the button transitions ---- */
@media (prefers-reduced-motion:reduce){
  .rz-print{transition:none}
  .rz-print:hover{transform:none;box-shadow:none}
}

/* ============================================================
   PRINT  ( Save as PDF )
   Goal: a clean two-page document. Strip the dark chrome and the
   animated/fixed canvas, flip to black ink on white, set page margins,
   and keep the two-column body (left: impact + experience; right:
   skills, certs, education, open source) so the real history stays to
   two pages. Everything is forced visible so a failed/!run reveal
   observer can never hide content on the printed page.
   ============================================================ */
@media print{
  /* page geometry: a comfortable but efficient margin so the denser, real
     history lands on two pages rather than spilling a few lines onto a third */
  @page{margin:12mm}

  html,body{background:#fff !important;color:#111 !important}

  /* kill the site chrome + the injected ambient canvas + screen-only actions */
  nav,footer,.skip-link,#ambient-bg,#hero-canvas,#data-echo,.rz-actions{display:none !important}

  /* the ambient bg is injected as a fixed canvas; belt and suspenders */
  canvas{display:none !important}

  main,.rz-main{padding:0 !important;margin:0 !important}
  /* zero any trailing whitespace that can spill a blank trailing page */
  section,.wrap,.rz-wrap{padding-bottom:0 !important;margin-bottom:0 !important}
  .rz-sheet>*:last-child,.rz-aside>*:last-child{margin-bottom:0 !important;padding-bottom:0 !important}

  /* the sheet becomes the page: no border, no shadow, no fill */
  .rz-sheet{background:#fff !important;border:none !important;border-radius:0 !important;
    padding:0 !important;box-shadow:none !important}

  /* force every progressive-reveal element fully visible (no opacity:0 left over) */
  .reveal{opacity:1 !important;transform:none !important}

  /* keep the two-column body on paper: with the real, denser history a single
     column spills to ~4 pages, so the document keeps its left (impact +
     experience) / right (skills, certs, education, open source) split, which
     balances column heights and lands the resume on two pages. */
  .rz-body{display:grid !important;grid-template-columns:1.5fr 1fr !important;gap:0 26px !important}
  .rz-aside{margin-top:0 !important}

  /* black-on-white type; flatten the gradient text fills to solid ink */
  .rz-name,.rz-headline b,.rz-impact .rz-imp-title,.rz-list .rz-li-h,
  .rz-exp .rz-exp-role,.rz-summary b,.rz-open b,.rz-exp-note b{color:#111 !important}
  .rz-headline,.rz-summary,.rz-impact .rz-imp-body,.rz-list .rz-li-b,
  .rz-exp .rz-exp-body,.rz-exp-points li,.rz-exp-note,.rz-open{color:#333 !important}
  .rz-cred .rz-cred-sub,.rz-impact .rz-imp-context,.rz-contact .rz-c-key,
  .rz-exp .rz-exp-meta,.rz-loc{color:#555 !important}

  /* metric + section headings: solid dark, no transparent gradient clip */
  .rz-metric,.rz-impact .rz-metric{-webkit-text-fill-color:#111 !important;color:#111 !important;
    background:none !important}
  .rz-sec-head h2{color:#111 !important}

  /* links: plain ink, show nothing as "clickable blue" on paper */
  .rz-list .rz-li-b a,.rz-contact a{color:#111 !important;text-decoration:none !important}

  /* borders/rules to light grey so they read as quiet dividers in print */
  .rz-head,.rz-sec,.rz-sec-head .rz-rule{border-color:#ccc !important;background-color:transparent}
  .rz-sec-head .rz-rule{background:#ccc !important}

  /* chips + cred + dots: outline only, no dark fills bleeding ink */
  .rz-skills li,.rz-cred{background:none !important;border:1px solid #bbb !important;color:#222 !important}
  .rz-cred .rz-cred-dot,.rz-list li::before,.rz-exp-points li::before{background:#555 !important}

  /* avoid awkward breaks: keep headings with their content, don't split list items.
     The Experience section and its long lead entry are allowed to flow across a
     page break (they are too tall to force whole), but each role heading stays
     glued to the start of its bullets, and no single bullet splits mid-line. */
  .rz-sec{break-inside:avoid;page-break-inside:avoid}
  .rz-sec-exp{break-inside:auto;page-break-inside:auto}
  .rz-sec-head{break-after:avoid;page-break-after:avoid}
  .rz-impact li,.rz-list li{break-inside:avoid;page-break-inside:avoid}
  .rz-exp>li{break-inside:auto;page-break-inside:auto}
  .rz-exp .rz-exp-role{break-after:avoid;page-break-after:avoid}
  .rz-exp .rz-exp-meta{break-after:avoid;page-break-after:avoid}
  .rz-exp-points li{break-inside:avoid;page-break-inside:avoid}

  /* columns size to their own content (no equal-height stretch) so the
     full-width "Open to" sits directly under the taller column */
  .rz-body{align-items:start !important}

  /* tighten vertical rhythm and type so the denser content stays to two pages */
  .rz-sec{padding-top:8px;margin-top:8px}
  .rz-summary{margin-top:8px;font-size:12px;line-height:1.4}
  .rz-head{padding-bottom:9px}
  .rz-name{font-size:28px;line-height:1.02}
  .rz-headline{font-size:12.5px;margin-top:4px}
  .rz-loc{margin-top:3px;font-size:12px}
  .rz-cred{margin-top:6px;padding:4px 10px;font-size:.72rem}
  .rz-sec-head{margin-bottom:7px}
  .rz-sec-head h2{font-size:12.5px}
  /* body copy a touch smaller in print; keeps lines tight without hurting legibility */
  .rz-impact .rz-imp-body,.rz-exp-points li,.rz-list .rz-li-b{font-size:11.5px;line-height:1.38}
  .rz-impact .rz-imp-title{font-size:13px}
  .rz-impact .rz-metric{font-size:13px}
  .rz-exp .rz-exp-role{font-size:13px}
  .rz-exp .rz-exp-meta{font-size:11.5px}
  .rz-list .rz-li-h{font-size:12.5px}
  .rz-impact{gap:7px}
  .rz-impact li .rz-imp-body{margin-top:2px}
  .rz-exp{gap:8px}
  .rz-exp-points{gap:3px;margin-top:4px}
  .rz-list{gap:6px}
  .rz-skills{gap:5px}
  .rz-skills li{font-size:10.5px;padding:3px 8px}
  .rz-open{font-size:11.5px;line-height:1.4}
  /* the contact line sits left under the name in print so it does not strand on the right */
  .rz-contact{justify-content:flex-start;text-align:left;gap:3px 14px;font-size:11.5px}
  .rz-contact a,.rz-contact span{min-height:0}
}
