/* Sticky bar with section tabs, intro with photo, two panels (Work: autonomous driving, Research: MPC), papers, code, CV. */
/* Fonts are self-hosted (latin subsets, SIL OFL 1.1, see fonts/OFL.txt): no requests to Google. */
@font-face { font-family:"Newsreader"; font-style:normal; font-weight:500 600; font-display:swap; src:url(fonts/newsreader.woff2) format("woff2"); unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family:"Newsreader"; font-style:italic; font-weight:500 600; font-display:swap; src:url(fonts/newsreader-italic.woff2) format("woff2"); unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family:"Instrument Sans"; font-style:normal; font-weight:400 600; font-stretch:100%; font-display:swap; src:url(fonts/instrument-sans.woff2) format("woff2"); unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family:"JetBrains Mono"; font-style:normal; font-weight:400 500; font-display:swap; src:url(fonts/jetbrains-mono.woff2) format("woff2"); unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }

:root { --paper:#f3f5f7; --card:#ffffff; --ink:#111a22; --muted:#5a6773; --line:#d9e0e6; --accent:#0b6e99; --signal:#c2561a; --bar:60px;
  --display:"Newsreader",Georgia,serif; --body:"Instrument Sans","Segoe UI",Roboto,Arial,sans-serif; --mono:"JetBrains Mono",ui-monospace,Menlo,monospace; }
@media (prefers-color-scheme: dark) { :root { --paper:#0d1318; --card:#141c22; --ink:#e7edf1; --muted:#97a6b2; --line:#26323b; --accent:#5fb6dc; --signal:#f08a4b; color-scheme:dark; } }
@media (prefers-reduced-motion: no-preference) { html { scroll-behavior:smooth; } }
* { box-sizing:border-box; }
body { margin:0; background:var(--paper); color:var(--ink); font:17px/1.6 var(--body); }
a { color:var(--accent); text-underline-offset:3px; }
a:focus-visible { outline:2px solid var(--accent); outline-offset:3px; border-radius:6px; }
strong, b { font-weight:600; }
.wrap { max-width:1080px; margin:0 auto; padding-inline:22px; }
.mono { font-family:var(--mono); font-size:13px; color:var(--muted); }

/* Sticky bar: translucent and blurred, hairline once scrolled (tools/site/nav.js); tabs are pills, the current one is marked. */
.bar { position:sticky; top:0; z-index:50; background:color-mix(in srgb, var(--paper) 78%, transparent);
  -webkit-backdrop-filter:saturate(1.6) blur(14px); backdrop-filter:saturate(1.6) blur(14px);
  border-bottom:1px solid transparent; transition:border-color .2s; }
.bar.scrolled { border-bottom-color:var(--line); }
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))) { .bar { background:var(--paper); } }
.bar nav { display:flex; justify-content:space-between; align-items:center; gap:16px; height:var(--bar); }
.brand { display:inline-flex; align-items:center; gap:10px; min-width:0; color:var(--ink); text-decoration:none; font:500 13px/1 var(--mono); }
.brand img { width:28px; height:28px; border-radius:50%; object-fit:cover; flex:none; }
.tabs { display:flex; gap:4px; }
.tabs a { padding:7px 14px; border-radius:999px; color:var(--muted); font:500 15px/1.2 var(--body); text-decoration:none; white-space:nowrap;
  transition:color .15s, background-color .15s; }
.tabs a:hover { color:var(--ink); background:color-mix(in srgb, var(--ink) 6%, transparent); }
.tabs a[aria-current="true"] { color:var(--accent); background:color-mix(in srgb, var(--accent) 14%, transparent); }
.tabs a:focus-visible, .brand:focus-visible { outline-offset:1px; border-radius:999px; }
section, footer { scroll-margin-top:calc(var(--bar) - 1px); }

.intro { display:flex; justify-content:space-between; align-items:center; gap:20px 28px; flex-wrap:wrap; padding-block:36px 34px; }
.me { display:flex; align-items:center; gap:24px; min-width:0; }
.avatar { width:124px; height:124px; flex:none; border-radius:50%; object-fit:cover; background:var(--card);
  box-shadow:0 0 0 1px var(--line), 0 8px 24px rgba(0,0,0,.10); }
.intro h1 { font:600 clamp(36px,5.6vw,62px)/1.04 var(--display); margin:0; letter-spacing:-.015em; text-wrap:balance; }
.cta { display:flex; gap:12px; flex-wrap:wrap; }
.duo { display:grid; grid-template-columns:1fr 1fr; gap:22px; padding-bottom:64px; }
.panel { background:var(--card); border:1px solid var(--line); border-radius:14px; padding:24px; min-width:0; display:flex; flex-direction:column; }
.panel .eyebrow { margin-bottom:4px; }
/* Animations never play by themselves: the canvas shows one still frame and .anim-play starts it (tools/site/anim/core.js). */
.panel .anim { position:relative; width:100%; max-width:340px; margin:8px auto 18px; }
.panel .anim canvas { display:block; width:100%; aspect-ratio:1/1; }
.anim-play { position:absolute; right:0; bottom:0; width:44px; height:44px; display:grid; place-items:center; padding:0;
  border:0; background:none; color:var(--muted); cursor:pointer; -webkit-tap-highlight-color:transparent; }
.anim-play::before { content:""; position:absolute; inset:5px; border-radius:50%; background:var(--card);
  border:1px solid var(--line); transition:border-color .15s; }
.anim-play svg { position:relative; width:17px; height:17px; display:block; }
.anim-play:hover { color:var(--ink); }
.anim-play:hover::before { border-color:var(--muted); }
.anim-play:focus-visible { outline:none; }
.anim-play:focus-visible::before { outline:2px solid var(--accent); outline-offset:2px; }
.panel p { margin:0 0 16px; font-size:17.5px; color:var(--ink); }
.more { margin-top:auto; font-weight:600; text-decoration:none; }
.more::after { content:" ↓"; }
.points { margin:16px 0 0; padding-left:18px; } .points li { margin:6px 0; }
section h3 { font:600 24px/1.2 var(--display); margin:44px 0 18px; }
section h2 + h3 { margin-top:0; }
.btn { display:inline-block; padding:11px 18px; border-radius:8px; font-weight:600; text-decoration:none; border:1px solid var(--line); color:var(--ink); background:var(--card); }
.btn.primary { background:var(--ink); color:var(--paper); border-color:var(--ink); }
section { padding-block:56px; border-top:1px solid var(--line); }
.eyebrow { font:500 12px/1 var(--mono); letter-spacing:.14em; text-transform:uppercase; color:var(--signal); margin-bottom:12px; }
h2 { font:600 36px/1.1 var(--display); margin:0 0 22px; text-wrap:balance; }
.pubs { list-style:none; padding:0; margin:0; display:grid; gap:18px; }
.pubs li { display:grid; gap:2px; }
.venue { font:500 12px var(--mono); color:var(--signal); }
.pubs a { font:500 20px/1.3 var(--display); color:var(--ink); text-decoration:none; }
.pubs a:hover { color:var(--accent); }
.authors { color:var(--muted); font-size:15px; }
.projs { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr)); gap:18px; }
.proj { border:1px solid var(--line); border-radius:12px; padding:20px; background:var(--card); min-width:0; }
.proj h3 { margin:0 0 6px; font:600 20px var(--display); } .proj h3 a { color:var(--ink); }
.proj p { margin:0 0 10px; color:var(--muted); font-size:15.5px; }
.proj .mono { overflow-wrap:anywhere; }

/* CV: a rail on the left (dates, labels), the entries on the right; the same content as the CV PDFs. */
.rows { list-style:none; padding:0; margin:0; display:grid; gap:24px; max-width:920px; }
.rows > li { display:grid; grid-template-columns:172px minmax(0,1fr); gap:2px 24px; align-items:baseline; }
.when { font:13px/1.6 var(--mono); color:var(--muted); }
.rows h4 { margin:0; font:600 18px/1.35 var(--body); }
.rows .org { color:var(--muted); font-size:15.5px; }
.rows .points { margin:8px 0 0; }
.rows .points li { margin:4px 0; }
#cv .rows + h3 { margin-top:48px; }
.jobs { gap:30px; }
.abroad { list-style:none; padding:0; margin:0; display:grid; gap:2px; }
.awards { max-width:920px; margin:0; padding-left:18px; display:grid; gap:8px; }
.awards > li > strong { color:var(--ink); }
footer { padding-block:40px 60px; border-top:1px solid var(--line); display:flex; justify-content:space-between; gap:16px; flex-wrap:wrap; color:var(--muted); }

@media (max-width:760px) {
  :root { --bar:54px; }
  .wrap { padding-inline:16px; }
  .brand { display:none; }
  /* one row of tabs that scrolls sideways instead of wrapping; it reaches the screen edges */
  .tabs { flex:1; min-width:0; overflow-x:auto; overscroll-behavior-x:contain; scrollbar-width:none; margin-inline:-16px; padding-inline:16px; }
  .tabs a { padding-inline:11px; }   /* tighter pills so all four still fit on a 360px screen */
  .tabs::-webkit-scrollbar { display:none; }
  .intro { padding-block:26px 28px; }
  .me { gap:16px; }
  .avatar { width:84px; height:84px; }
  .intro h1 { font-size:34px; }
  .duo { grid-template-columns:1fr; } .panel .anim { max-width:280px; }
  .rows > li { grid-template-columns:minmax(0,1fr); gap:2px; }
}
