/* Jan Streffing, personal site. Hand-written, no framework. */

:root {
  --bg: #f4f6f8;
  --paper: #ffffff;
  --ink: #14202b;
  --ink-2: #3c4c59;
  --ink-3: #5b6b78;
  --line: #e1e7ec;
  --line-2: #c9d4dc;
  --navy: #0e2a3f;
  --navy-2: #1d4a67;
  --ice: #9dc3d9;
  --ice-2: #4f8fb3;
  --link: #0b5f8a;
  --link-hover: #083f5c;
  --amber: #e8a15a;
  --tint: #e6eef3;
  --sidebar-w: 232px;
  --serif: 'Source Serif 4', Georgia, 'Times New Roman', serif;
  --sans: 'IBM Plex Sans', 'Helvetica Neue', Arial, sans-serif;
  --mono: 'IBM Plex Mono', 'SF Mono', Menlo, Consolas, monospace;
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
  margin: 0;
  background: var(--bg);
  color: var(--ink);
  font-family: var(--sans);
  font-size: 16px;
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
}
a { color: var(--link); text-decoration: none; }
a:hover { color: var(--link-hover); text-decoration: underline; }
h1, h2, h3 { font-family: var(--serif); font-weight: 600; margin: 0; letter-spacing: -0.01em; }
p { margin: 0; }
ol, ul { margin: 0; padding: 0; list-style: none; }
img { max-width: 100%; height: auto; }

.mono { font-family: var(--mono); }
.small { font-size: 12px; }
.muted { color: var(--ink-3); }
.eyebrow {
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--ink-3);
}
.skip {
  position: absolute; left: -999px; top: 8px;
  background: var(--paper); padding: 8px 12px; z-index: 10;
}
.skip:focus { left: 8px; }

/* ---------- Sidebar ---------- */
.sidebar {
  position: fixed;
  top: 0; left: 0; bottom: 0;
  width: var(--sidebar-w);
  padding: 40px 28px;
  background: var(--navy);
  color: #dbe6ee;
  display: flex;
  flex-direction: column;
  gap: 36px;
}
.sidebar-top { display: flex; flex-direction: column; gap: 14px; align-items: flex-start; }
.portrait {
  width: 88px; height: 88px;
  border-radius: 50%;
  object-fit: cover;
  border: 2px solid var(--ice-2);
  display: block;
}
.sidebar-name { font-family: var(--serif); font-size: 22px; font-weight: 600; color: #fff; line-height: 1.2; }
.sidebar-role { font-size: 13px; color: var(--ice); line-height: 1.4; }
.nav { display: flex; flex-direction: column; gap: 12px; font-family: var(--mono); font-size: 14px; }
.nav a { color: var(--ice); }
.nav a:hover, .nav a.active { color: #fff; text-decoration: none; }
.nav .num { display: inline-block; width: 2.2em; }
.sidebar-links { margin-top: auto; display: flex; gap: 14px; }
.sidebar-links a { color: var(--ice); display: inline-flex; }
.sidebar-links a:hover { color: #fff; }

/* ---------- Main ---------- */
main { margin-left: var(--sidebar-w); min-width: 0; }
.section { padding: 0 72px 64px; }
.section h2 {
  font-size: 30px;
  display: flex; align-items: baseline; gap: 16px;
  margin-bottom: 28px;
}
.section h2 .h2-link { margin-left: auto; font-weight: 400; font-family: var(--mono); }
#models { padding-top: 64px; }

/* Hero */
.hero {
  padding: 64px 72px 48px;
  background: var(--paper);
  border-bottom: 1px solid var(--line);
  display: flex; flex-direction: column; gap: 40px;
}
.hero-grid {
  display: grid;
  grid-template-columns: minmax(0, 480px) minmax(0, 1fr);
  gap: 56px;
  align-items: center;
}
.hero-text { display: flex; flex-direction: column; gap: 20px; }
.hero h1 { font-size: 44px; line-height: 1.12; text-wrap: balance; }
.hero p { color: var(--ink-2); }
.chips { display: flex; flex-wrap: wrap; gap: 8px; }
.chips li {
  font-family: var(--mono); font-size: 12px;
  padding: 4px 9px;
  border: 1px solid var(--line-2); border-radius: 3px;
  color: var(--ink-2);
}
.hero-figure { margin: 0; display: flex; flex-direction: column; gap: 10px; align-items: center; min-width: 0; }
.hero-figure img { width: 100%; max-width: 560px; display: block; }
.hero-figure .diagram { width: 100%; max-width: 560px; height: auto; display: block; }
.hero-figure .diagram a.cmp:hover rect, .hero-figure .diagram a.cmp:focus rect { stroke: var(--link); stroke-width: 2.5; }
.hero-figure figcaption { font-family: var(--mono); font-size: 12px; color: var(--ink-3); }

/* Timeline */
.timeline { display: flex; flex-direction: column; gap: 12px; }
.timeline-head { display: flex; justify-content: space-between; align-items: baseline; gap: 16px; flex-wrap: wrap; color: var(--ink-3); }
.timeline-bar { height: 2px; background: linear-gradient(90deg, var(--ice-2) 0%, var(--ice) 45%, var(--amber) 100%); }
.epochs { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 20px; }
.epochs li { display: flex; flex-direction: column; gap: 4px; }
.epoch-t { font-family: var(--mono); font-size: 14px; }
.epoch-n { font-size: 13px; color: var(--ink-2); }
.epoch-m { font-size: 12px; color: var(--ink-3); }
.tag {
  align-self: flex-start;
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.06em; text-transform: uppercase;
  padding: 2px 6px; border-radius: 2px;
}
.tag.done { background: var(--tint); color: var(--ink-2); }
.tag.planned { border: 1px solid var(--line-2); color: var(--ink-3); }
.tag.running { background: var(--link); color: #fff; }

/* What-I-do strip */
.strip {
  display: grid; grid-template-columns: repeat(6, minmax(0, 1fr));
  padding: 0 72px;
  background: var(--paper);
  border-bottom: 1px solid var(--line);
}
.strip div { padding: 20px 16px; border-right: 1px solid var(--line); font-size: 14px; color: var(--ink-2); }
.strip div:first-child { padding-left: 0; }
.strip div:last-child { padding-right: 0; border-right: 0; }

/* Cards */
.cards { display: grid; gap: 24px; }
.cards.two { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.cards.three { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
.card {
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: 4px;
  padding: 28px;
  display: flex; flex-direction: column; gap: 12px;
}
.card h3 { font-size: 22px; }
.card p { color: var(--ink-2); }
.card .links { display: flex; gap: 18px; font-size: 14px; flex-wrap: wrap; }
.card.sw { padding: 20px; gap: 8px; color: var(--ink-2); font-size: 14px; }
.card.sw:hover { text-decoration: none; border-color: var(--ice-2); }
.card.sw .name { font-size: 14px; font-weight: 500; color: var(--ink); }
.card.sw .repo-meta { margin-top: auto; padding-top: 6px; color: var(--ink-3); }

/* Projects table */
.table { background: var(--paper); border: 1px solid var(--line); border-radius: 4px; }
.row {
  display: grid;
  grid-template-columns: 88px 80px 180px minmax(0, 1fr) 200px;
  gap: 24px;
  padding: 20px 28px;
  border-bottom: 1px solid var(--line);
  align-items: center;
}
.row:last-child { border-bottom: 0; }
.row > span:nth-child(4) { color: var(--ink-2); font-size: 15px; }
.plogo {
  display: flex; align-items: center; justify-content: center;
  width: 88px; height: 48px;
  background: #ffffff; border: 1px solid var(--line); border-radius: 4px;
  overflow: hidden;
}
.plogo img { max-width: 76px; max-height: 36px; width: auto; height: auto; display: block; }
.plogo.wide img { max-width: 80px; }
.plogo.text {
  font-family: var(--mono); font-size: 13px; font-weight: 500; line-height: 1.1;
  letter-spacing: 0.04em; text-align: center; color: var(--navy);
  background: var(--tint); border-color: transparent;
}
.role { font-size: 12px; color: var(--ink-3); }
.role.pi { color: var(--link); font-weight: 500; }
.meta { font-size: 12px; color: var(--ink-3); }

/* Publications */
.eyebrow.sub { padding: 0 0 8px; }
.pubs + .eyebrow.sub { padding-top: 20px; }
.pubs { display: flex; flex-direction: column; gap: 10px; }
.pub { display: grid; grid-template-columns: 64px minmax(0, 1fr); gap: 20px; align-items: baseline; }
.pub.card { padding: 14px 18px; gap: 20px; display: grid; }
.pubs.plain .pub { padding: 0 18px; }
.pub a { color: var(--ink); }
.pub a:hover { color: var(--link); }
.pub .venue { display: block; font-size: 14px; color: var(--ink-3); }
.year { font-size: 13px; color: var(--ink-3); }
.year.hl { color: var(--link); }
.orcid { margin-top: 24px; }
.orcid summary { cursor: pointer; color: var(--link); }
.orcid .status { color: var(--ink-3); padding: 8px 0; }
.orcid .pubs { margin-top: 12px; }

/* CV */
.cv { display: grid; grid-template-columns: minmax(0, 1fr) 400px; gap: 56px; padding-top: 56px; padding-bottom: 72px; background: var(--paper); border-top: 1px solid var(--line); }
.cv > div { display: flex; flex-direction: column; gap: 20px; }
.cv p { color: var(--ink-2); }
.cv .contact { font-size: 15px; line-height: 1.7; }
.cv-list { border-left: 2px solid var(--line-2); padding-left: 20px; display: flex; flex-direction: column; gap: 14px; }
.cv-list li { display: grid; grid-template-columns: 96px minmax(0, 1fr); gap: 12px; font-size: 14px; }
.cv-list .mono { font-size: 12px; color: var(--ink-3); }

.footer { padding: 24px 72px; color: var(--ink-3); border-top: 1px solid var(--line); }

/* ---------- Responsive ---------- */
@media (max-width: 1200px) {
  .hero-grid { grid-template-columns: minmax(0, 1fr); }
  .hero-figure img { max-width: 620px; }
  .epochs { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .strip { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .strip div { padding: 16px; border-bottom: 1px solid var(--line); }
  .strip div:nth-child(3n) { border-right: 0; }
  .strip div:nth-child(n+4) { border-bottom: 0; }
  .strip div:first-child, .strip div:nth-child(4) { padding-left: 0; }
  .strip div:last-child { padding-right: 16px; }
  .cards.three { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .row { grid-template-columns: 88px 80px 150px minmax(0, 1fr); }
  .row .meta { grid-column: 4; }
  .cv { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 900px) {
  :root { --sidebar-w: 0px; }
  .sidebar {
    position: static;
    width: auto;
    padding: 24px 24px 20px;
    gap: 20px;
  }
  .sidebar-top { flex-direction: row; align-items: center; gap: 16px; flex-wrap: wrap; }
  .sidebar-top .portrait { width: 64px; height: 64px; }
  .sidebar-name { font-size: 20px; }
  .sidebar-role br { display: none; }
  .sidebar-role span + span::before { content: " · "; }
  .nav { flex-direction: row; flex-wrap: wrap; gap: 8px 18px; font-size: 13px; }
  .nav .num { display: none; }
  .sidebar-links { margin-top: 0; }
  main { margin-left: 0; }
  .hero, .section, .strip, .footer { padding-left: 24px; padding-right: 24px; }
  .hero { padding-top: 40px; }
  .hero h1 { font-size: 32px; }
  .section h2 { font-size: 26px; flex-wrap: wrap; }
  .section h2 .h2-link { margin-left: 0; width: 100%; }
  .epochs { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .strip { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .strip div { border-right: 0; border-bottom: 1px solid var(--line); padding-left: 0; }
  .strip div:nth-child(n+4) { border-bottom: 1px solid var(--line); }
  .strip div:nth-last-child(-n+2) { border-bottom: 0; }
  .cards.two, .cards.three { grid-template-columns: minmax(0, 1fr); }
  .row { grid-template-columns: 88px minmax(0, 1fr); gap: 6px 16px; padding: 16px 20px; align-items: baseline; }
  .row > *, .row .meta { grid-column: 2; }
  .row .plogo { grid-column: 1; grid-row: 1 / span 4; align-self: start; }
  .pub, .pub.card { grid-template-columns: 52px minmax(0, 1fr); gap: 12px; }
  .pubs.plain .pub { padding: 0; }
}

/* ---------- Dark mode (follows the system setting) ---------- */
@media (prefers-color-scheme: dark) {
  :root {
    --bg: #0f171e;
    --paper: #151f28;
    --ink: #e6edf3;
    --ink-2: #b7c4cf;
    --ink-3: #8798a6;
    --line: #243240;
    --line-2: #34475a;
    --link: #7fc4e6;
    --link-hover: #b6e0f3;
    --tint: #1f2f3d;
  }
  .sidebar { background: #0a1c2b; }
  .tag.running { color: #0f171e; }
  .hero-figure img { background: #ffffff; border-radius: 6px; padding: 10px; }
  .diagram { background: #ffffff; border-radius: 6px; padding: 10px; }
  .card.sw:hover { border-color: var(--link); }
  .plogo { border-color: transparent; }
  .plogo.text { color: var(--ink); }
}

@media print {
  .sidebar { position: static; background: none; color: var(--ink); }
  main { margin-left: 0; }
  .orcid { display: none; }
}
