/* kavcnik.si — candidate A: editorial graphite
   Schibsted Grotesk for everything readable, IBM Plex Mono only for numbers and metadata. */

/* Self-hosted fonts (OFL). Only the faces in use are declared; the woff2 files under /fonts/ are cached as immutable,
   so a font change means a new file name, not an edited file. */
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/plex-mono-400-normal-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/plex-mono-400-normal-latin.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:"IBM Plex Mono";font-style:normal;font-weight:500;font-display:swap;src:url(../fonts/plex-mono-500-normal-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:500;font-display:swap;src:url(../fonts/plex-mono-500-normal-latin.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:"Schibsted Grotesk";font-style:normal;font-weight:400 900;font-display:swap;src:url(../fonts/schibsted-400-900-normal-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:"Schibsted Grotesk";font-style:normal;font-weight:400 900;font-display:swap;src:url(../fonts/schibsted-400-900-normal-latin.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{
  --bg:#141516;
  --bg-2:#1a1b1d;
  --rule:#2b2d30;
  --rule-2:#3b3d41;
  --fg:#ebe7df;
  --fg-2:#a7a39b;
  --fg-3:#8c8880;
  --accent:#d08a5c;
  --accent-dim:rgba(208,138,92,.12);
  --sans:"Schibsted Grotesk",ui-sans-serif,system-ui,"Helvetica Neue",Arial,sans-serif;
  --mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --gutter:clamp(1.25rem,5vw,5rem);
  --max:1360px;
  --nav-h:4rem;
  --ease:cubic-bezier(.2,.7,.2,1);
}

*,*::before,*::after{box-sizing:border-box}
html{
  background:var(--bg);
  color:var(--fg);
  font:400 1.0625rem/1.55 var(--sans);
  -webkit-text-size-adjust:100%;
  scroll-padding-top:calc(var(--nav-h) + 1.5rem);
}
body{margin:0;min-height:100vh;min-height:100svh;display:flex;flex-direction:column;position:relative;overflow-x:clip}
main{flex:1 0 auto} /* short pages (/writing/, 404): the footer stays at the bottom of the viewport */
img{max-width:100%;height:auto}
b,strong{font-weight:600}
a{color:var(--accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.22em;text-decoration-color:rgba(208,138,92,.45)}
a:hover{text-decoration-color:var(--accent)}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
::selection{background:var(--accent);color:var(--bg)}
.mono{font-family:var(--mono);font-size:.8125rem;letter-spacing:.01em}
.defs{position:absolute;width:0;height:0;overflow:hidden}

/* Language pairs: markup carries both languages, the other one is hidden. */
html[lang="sl"] [data-lang="en"],
html[lang="en"] [data-lang="sl"]{display:none !important}

/* Editorial frame: bounded column, vertical hairlines in the margins on wide screens. */
.frame{width:100%;max-width:var(--max);margin-inline:auto;padding-inline:var(--gutter)}
@media (min-width:1480px){
  body::before,body::after{
    content:"";position:fixed;top:0;bottom:0;width:1px;background:var(--rule);pointer-events:none;z-index:0;
  }
  body::before{left:calc(50% - var(--max) / 2)}
  body::after{right:calc(50% - var(--max) / 2)}
}

.skip{position:absolute;left:var(--gutter);top:-4rem;z-index:40;background:var(--fg);color:var(--bg);padding:.6rem .9rem;text-decoration:none;font-weight:500}
.skip:focus{top:.75rem}

/* ---------- header (semi-sticky: hides on scroll down, returns on scroll up) ---------- */
.top{
  position:sticky;top:0;z-index:20;
  background:rgba(20,21,22,.86);
  -webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);
  border-bottom:1px solid var(--rule);
}
.top.is-hidden{transform:translateY(-100%)}
.top.is-hidden:focus-within{transform:none} /* tabbing into the hidden header always reveals it */
.top > .frame{display:flex;align-items:center;gap:1.5rem;min-height:var(--nav-h);position:relative}
.brand{font-weight:500;letter-spacing:-.01em;color:var(--fg);text-decoration:none;font-size:1.0625rem;margin-right:auto;white-space:nowrap;padding-block:.5rem;margin-block:-.5rem}
.brand:hover{color:var(--fg)}
.nav ul{list-style:none;margin:0;padding:0;display:flex;gap:2rem}
.nav a{color:var(--fg-2);text-decoration:none;font-size:.9375rem;position:relative;padding:.75rem 0;white-space:nowrap} /* ≥44px hit area inside the 4rem header */
.nav a:hover{color:var(--fg)}
.nav a::after{content:"";position:absolute;left:0;right:0;bottom:.45rem;height:1px;background:var(--accent);transform:scaleX(0);transform-origin:left}
.nav a:hover::after,.nav a:focus-visible::after,.nav a[aria-current]::after{transform:scaleX(1)}

.lang{display:inline-flex;align-items:stretch;font-family:var(--mono);font-size:.8125rem;border:1px solid var(--rule)}
.lang button{
  font:inherit;letter-spacing:.04em;background:none;border:0;color:var(--fg-2);
  padding:.6rem .75rem;min-width:2.75rem;min-height:2.75rem;cursor:pointer;line-height:1.2;
}
.lang button + button{border-left:1px solid var(--rule)}
.lang button:hover{color:var(--fg)}
.lang button[aria-pressed="true"]{color:var(--fg);background:var(--rule);box-shadow:inset 0 -2px 0 var(--accent)}
.lang button:focus-visible{outline-offset:-2px}

.menu-btn{
  display:none;align-items:center;gap:.6rem;font:inherit;font-size:.9375rem;color:var(--fg);
  background:none;border:1px solid var(--rule);padding:.5rem .8rem;min-height:2.6rem;cursor:pointer;
}
.menu-ic{position:relative;width:1.1rem;height:.75rem;display:inline-block}
.menu-ic::before,.menu-ic::after{content:"";position:absolute;left:0;right:0;height:1px;background:currentColor}
.menu-ic::before{top:0}
.menu-ic::after{bottom:0}
.top.open .menu-ic::before{top:50%;transform:rotate(45deg)}
.top.open .menu-ic::after{bottom:auto;top:50%;transform:rotate(-45deg)}

@media (max-width:899.98px){
  .menu-btn{display:inline-flex}
  .top .lang{margin-left:auto}
  .brand{margin-right:0}
  .nav{
    position:absolute;left:0;right:0;top:100%;
    background:var(--bg);border-bottom:1px solid var(--rule);
    display:none;
    max-height:calc(100vh - var(--nav-h));max-height:calc(100svh - var(--nav-h));overflow:auto;
  }
  .top.open .nav{display:block}
  .nav ul{flex-direction:column;gap:0;padding:.25rem var(--gutter) 1rem}
  .nav a{display:block;padding:1rem 0;font-size:1.375rem;letter-spacing:-.01em;color:var(--fg);border-top:1px solid var(--rule)}
  .nav li:first-child a{border-top:0}
  .nav a::after{display:none}
  html.menu-open{overflow:hidden}
}

/* ---------- hero ---------- */
.hero{
  position:relative;z-index:1;
  min-height:min(calc(100svh - var(--nav-h)),54rem);
  display:grid;grid-template-rows:1fr auto;
  padding-block:clamp(1.5rem,5vh,5rem) clamp(1rem,2.5vh,2.5rem);
}
.hero-grid{
  align-self:center;
  display:grid;
  grid-template-columns:minmax(0,7fr) minmax(0,5fr);
  grid-template-areas:
    "roles portrait"
    "name portrait"
    "lead portrait"
    "cta portrait";
  column-gap:clamp(2rem,6vw,6rem);
  align-items:end;
}
.roles{
  grid-area:roles;list-style:none;margin:0 0 clamp(1rem,2.5vh,2.25rem);padding:0;
  display:flex;flex-wrap:wrap;gap:.4rem 0;
  font-size:1rem;font-weight:500;letter-spacing:-.005em;color:var(--fg-2);
}
.roles li{display:flex;align-items:center}
.roles li:not(:last-child)::after{content:"";width:1px;height:.9em;background:var(--rule-2);margin:0 .9rem}
.name{
  grid-area:name;
  font-size:clamp(3.5rem,min(10.5vw,19vh),9.5rem);font-weight:600;line-height:.92;letter-spacing:-.035em;
  margin:0 0 clamp(1rem,2.5vh,2.5rem);
}
.lead{
  grid-area:lead;
  font-size:clamp(1.125rem,1.6vw,1.375rem);line-height:1.45;color:var(--fg-2);
  max-width:38ch;margin:0 0 clamp(1.25rem,2.5vh,2rem);
}
.hero-cta{grid-area:cta;margin:0}
.btn{
  display:inline-flex;align-items:center;gap:.75rem;
  color:var(--fg);text-decoration:none;font-weight:500;font-size:.9375rem;white-space:nowrap;
  border:1px solid var(--rule-2);padding:.85rem 1.35rem;
}
.btn .node{width:.5rem;height:.5rem;border-radius:50%;border:1px solid var(--accent);flex:none}
.btn .mono{color:var(--fg-3)}
.btn:hover,.btn:focus-visible{border-color:var(--accent);background:var(--accent-dim)}
.btn:hover .node,.btn:focus-visible .node{background:var(--accent)}
.btn:hover .mono,.btn:focus-visible .mono{color:var(--fg-2)}

/* text CTA (writing, 404) */
.cta{
  display:inline-flex;align-items:baseline;gap:.75rem;
  color:var(--fg);text-decoration:none;font-weight:500;
  border-bottom:1px solid var(--accent);padding:.75rem 0 .35rem;margin-top:-.75rem;
}
.cta .mono{color:var(--fg-3)}
.cta:hover{color:var(--accent)}
.cta:hover .mono{color:var(--fg-2)}

/* Portrait: 1:1 crop uses almost the full source height (~1.02x), corner ticks + figure caption */
.portrait{
  grid-area:portrait;
  margin:0;width:min(100%,360px);justify-self:end;align-self:center;
}
.portrait-frame{position:relative}
.portrait-clip{position:relative;aspect-ratio:1/1;overflow:hidden;background:var(--bg-2);border:1px solid var(--rule)}
.portrait img{
  display:block;width:100%;height:100%;object-fit:cover;object-position:50% 0;
  transform:scale(1.06);transform-origin:50% 18%;
  filter:contrast(1.06) brightness(.94) saturate(.85);
}
.portrait-clip::after{ /* melts the source card's grey gradient into the page */
  content:"";position:absolute;inset:0;pointer-events:none;
  background:
    linear-gradient(to left,rgba(20,21,22,.78) 0%,rgba(20,21,22,.38) 20%,rgba(20,21,22,0) 46%),
    linear-gradient(to bottom,rgba(20,21,22,0) 58%,rgba(20,21,22,.6) 100%),
    radial-gradient(95% 85% at 40% 32%,rgba(20,21,22,0) 38%,rgba(20,21,22,.82) 100%);
}
.tick{position:absolute;width:.75rem;height:.75rem;border:0 solid var(--accent);pointer-events:none}
.tick-tl{left:-.5rem;top:-.5rem;border-width:1px 0 0 1px}
.tick-tr{right:-.5rem;top:-.5rem;border-width:1px 1px 0 0}
.tick-bl{left:-.5rem;bottom:-.5rem;border-width:0 0 1px 1px}
.tick-br{right:-.5rem;bottom:-.5rem;border-width:0 1px 1px 0}
.portrait figcaption{
  display:flex;justify-content:space-between;gap:1rem;margin-top:.9rem;
  font-family:var(--mono);font-size:.75rem;letter-spacing:.02em;color:var(--fg-3);
}

/* Hero foot: a numbered contents line that doubles as the scroll cue */
.hero-foot{
  display:flex;align-items:center;gap:1.25rem;
  margin-top:clamp(1.25rem,4vh,3.5rem);
  font-family:var(--mono);font-size:.8125rem;letter-spacing:.01em;color:var(--fg-3);
}
.cue-line{width:1px;height:2.75rem;background:var(--rule-2);position:relative;overflow:hidden;flex:none}
.cue-line::after{content:"";position:absolute;left:0;top:0;width:100%;height:45%;background:var(--accent);transform:translateY(-100%)}
.toc ol{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:.5rem 2.25rem}
.toc a{color:var(--fg-3);text-decoration:none;white-space:nowrap;display:inline-block;padding-block:.75rem;margin-block:-.75rem}
.toc a:hover{color:var(--fg)}
.toc b{color:var(--accent);font-weight:500;margin-right:.45rem}

/* ---------- sections ---------- */
.sec{border-top:1px solid var(--rule);padding-block:clamp(3rem,8vw,7rem)}
.sec-grid{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);column-gap:clamp(2rem,5vw,5rem);row-gap:2rem}
.sec-head{position:sticky;top:calc(var(--nav-h) + 2rem);align-self:start}
.sh{
  display:flex;align-items:baseline;gap:.85rem;flex-wrap:wrap;
  font-weight:500;line-height:1.05;letter-spacing:-.025em;margin:0;
  font-size:clamp(1.75rem,2.8vw,2.5rem);
}
.idx{font-family:var(--mono);font-size:.8125rem;font-weight:500;letter-spacing:.02em;color:var(--accent);flex:none}
.idx::after{content:"/";color:var(--fg-3);margin-left:.85rem;font-weight:400}
.anchor{ /* revealed on heading hover: a small command-like detail */
  display:inline-block;margin-top:.8rem;font-family:var(--mono);font-size:.75rem;letter-spacing:.02em;
  color:var(--fg-3);text-decoration:none;opacity:0;
}
.sec-head:hover .anchor{opacity:1}
.anchor:hover{color:var(--accent)}
.spec{
  margin:2rem 0 0;font-family:var(--mono);font-size:.8125rem;letter-spacing:.01em;
  display:grid;grid-template-columns:max-content minmax(0,1fr);gap:.45rem 1.5rem;max-width:22rem;
}
.spec dt{color:var(--fg-3);margin:0}
.spec dd{color:var(--fg-2);margin:0}
.h-page{font-size:clamp(3rem,7vw,5.5rem);font-weight:600;letter-spacing:-.035em;line-height:.95;margin:0}
.sec-body{min-width:0}
.prose{max-width:60ch}
.prose p{margin:0 0 1.25em;color:var(--fg-2)}
.prose p:last-child{margin-bottom:0}
.deck{font-size:clamp(1.25rem,1.8vw,1.5rem);line-height:1.35;letter-spacing:-.01em;color:var(--fg) !important;margin:0 0 1.5rem !important}
h1.deck{font-weight:500} /* 404: the small heading beside the big code, same weight as every other heading */
.prose .cta{margin-top:-.25rem} /* .5rem visual gap minus the .75rem hit-area padding */

/* Expertise: numbered phrase rows, key phrase carries the weight */
.areas{list-style:none;margin:0;padding:0;border-top:1px solid var(--rule)}
.areas li{
  position:relative;z-index:0;
  display:grid;grid-template-columns:3.5rem minmax(0,1fr);align-items:baseline;column-gap:1rem;
  padding:1.3rem 0;border-bottom:1px solid var(--rule);
  font-size:clamp(1.125rem,1.7vw,1.5rem);line-height:1.3;letter-spacing:-.012em;color:var(--fg-2);
}
.areas li::before{content:"";position:absolute;left:0;top:-1px;bottom:-1px;width:0;background:var(--accent)}
.areas .n{font-family:var(--mono);font-size:.8125rem;font-weight:400;letter-spacing:.02em;color:var(--fg-3);position:relative}
.areas .area b{font-weight:500;color:var(--fg)}
@media (hover:hover){
  .areas li:hover::before{width:2px}
  .areas li:hover{padding-left:1.1rem}
  .areas li:hover .n{color:var(--accent)}
}

/* Certifications: abbreviation + full name */
.certs{list-style:none;margin:0;padding:0}
.certs li{
  display:grid;grid-template-columns:minmax(8.5rem,10.5rem) minmax(0,1fr);gap:1rem;align-items:baseline;
  padding:1.1rem 0;border-top:1px solid var(--rule);
}
.certs li:last-child{border-bottom:1px solid var(--rule)}
.certs .abbr{font-weight:600;font-size:1.375rem;letter-spacing:-.02em;line-height:1.2}
.certs .full{color:var(--fg-2)}

/* Talks: repeatable pattern, faint PCB motif in the corner */
.sec--wide .sec-grid{grid-template-columns:1fr}
.sec--wide .sec-head{position:static}
.sec--talks{position:relative;overflow:hidden}
.sec--talks .sec-grid{position:relative;z-index:1}
.pcb{
  position:absolute;right:calc(-1 * var(--gutter));bottom:-12%;width:min(48%,620px);aspect-ratio:9/7;
  color:var(--fg);opacity:.09;pointer-events:none;z-index:0;
  -webkit-mask-image:radial-gradient(60% 60% at 60% 60%,#000 20%,transparent 100%);
  mask-image:radial-gradient(60% 60% at 60% 60%,#000 20%,transparent 100%);
}
.pcb .pad{fill:var(--bg);stroke:currentColor}
.pcb .via{fill:currentColor;stroke:none}
.pcb .sig{color:var(--accent)}
.talks{list-style:none;margin:0;padding:0}
.talk{
  display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);column-gap:clamp(2rem,5vw,5rem);
  padding:2rem 0 2.25rem;border-top:1px solid var(--rule);
}
.talks li:last-child .talk{border-bottom:1px solid var(--rule)}
.talk-when{font-family:var(--mono);font-size:.8125rem;letter-spacing:.02em;color:var(--fg-3);line-height:1.8}
.talk-when time{display:block;color:var(--fg);font-size:.9375rem}
.talk-when .rel{display:block;position:relative;padding-left:1rem}
.talk-when .rel::before{content:"";position:absolute;left:0;top:.72em;width:5px;height:5px;border-radius:50%;background:var(--accent)}
.talk-body{max-width:46rem}
.talk h3{
  font-size:clamp(1.625rem,3vw,2.375rem);font-weight:500;line-height:1.12;letter-spacing:-.025em;margin:0 0 1.1rem;
  max-width:30ch;text-wrap:balance;
}
.talk-event{margin:0 0 .9rem;color:var(--fg-2)}
.talk-event[hidden],.talk-event:empty{display:none}
.talk-meta{
  display:grid;grid-auto-flow:column;width:max-content;max-width:100%;
  margin:1.5rem 0 0;font-family:var(--mono);font-size:.75rem;letter-spacing:.02em;
}
.talk-meta > div{padding:.5rem 1.5rem .5rem 1rem;border-left:1px solid var(--rule)}
.talk-meta > div:first-child{border-left:0;padding-left:0}
.talk-meta dt{color:var(--fg-3);margin:0 0 .2rem}
.talk-meta dd{color:var(--fg);margin:0}
.talk-orig{font-size:.9375rem;color:var(--fg-3);margin:1.25rem 0 0;max-width:48ch}

/* Writing: honest empty state + planned topics as intent */
.topics .k{display:block;font-family:var(--mono);font-size:.75rem;letter-spacing:.03em;color:var(--fg-3);margin-bottom:.4rem}
.prose .topics{margin-bottom:2rem}

/* Posts list on /writing/ — ready for the first post */
.posts{list-style:none;margin:0;padding:0}
.post{display:grid;grid-template-columns:minmax(8rem,10rem) minmax(0,1fr);gap:1.5rem;padding:1.75rem 0;border-top:1px solid var(--rule)}
.posts li:last-child .post{border-bottom:1px solid var(--rule)}
.post time{font-family:var(--mono);font-size:.8125rem;letter-spacing:.02em;color:var(--fg-3)}
.post h2{font-size:clamp(1.375rem,2.2vw,1.75rem);font-weight:500;letter-spacing:-.02em;line-height:1.15;margin:0 0 .5rem;max-width:none}
.post h2 a{color:var(--fg);text-decoration:none}
.post h2 a:hover{color:var(--accent)}
.post p{margin:0;color:var(--fg-2)}

/* Contact: the address is the headline */
.contact-note{margin-bottom:2rem !important}
.contact-link{margin:0}
.contact-link a{
  display:inline-block;max-width:100%;
  font-size:clamp(1.625rem,3.2vw,2.5rem);font-weight:500;letter-spacing:-.03em;line-height:1.05;
  color:var(--fg);text-decoration:none;padding-bottom:.12em;overflow-wrap:anywhere;
  background:linear-gradient(var(--accent),var(--accent)) no-repeat 0 100%/0 2px;
}
.contact-link a:hover,.contact-link a:focus-visible{color:var(--accent);background-size:100% 2px}
.contact-link .nb{white-space:nowrap} /* break after in/ (the <wbr>), never at the hyphen */

/* sub-page kicker: "05 / Zapiski" above a page title */
.kicker{display:flex;align-items:baseline;gap:.85rem;margin:0 0 1rem;font-family:var(--mono);font-size:.8125rem;letter-spacing:.02em;color:var(--fg-3)}
.kicker .idx::after{content:none}

/* ---------- footer: title block ---------- */
.foot{border-top:1px solid var(--rule);font-family:var(--mono);font-size:.75rem;letter-spacing:.02em;color:var(--fg-3)}
.tblock{display:grid;grid-template-columns:minmax(0,2fr) repeat(2,minmax(0,1fr)) auto}
.tblock > div{
  padding:1.25rem 1.25rem 1.25rem 0;border-left:1px solid var(--rule);padding-left:1.25rem;
  display:flex;flex-direction:column;gap:.5rem;justify-content:space-between;min-height:5.5rem;
}
.tblock > div:first-child{border-left:0;padding-left:0}
.tblock .k{color:var(--fg-3)}
.tblock .v{color:var(--fg);font-family:var(--sans);font-size:.9375rem;letter-spacing:0;text-decoration:none}
.tblock a.v{align-self:flex-start;padding-block:.6rem;margin-block:-.6rem}
.tblock a.v:hover{color:var(--accent)}
.tblock .lang{align-self:flex-start}
.mark{
  position:relative;justify-content:center;align-items:center;min-width:5.5rem;
  font-family:var(--sans);font-size:1.25rem;font-weight:500;color:var(--fg);letter-spacing:.04em;cursor:default;
}
.mark .egg{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-family:var(--mono);font-size:.6875rem;font-weight:400;letter-spacing:.02em;color:var(--accent);background:var(--bg);opacity:0;
}
.mark:hover .egg{opacity:1}

/* 404 */
.err-code{font-size:clamp(5rem,16vw,11rem);font-weight:600;letter-spacing:-.05em;line-height:.9;margin:0 0 1rem;color:var(--fg)}
.err-path{font-family:var(--mono);font-size:.8125rem;letter-spacing:.01em;color:var(--fg-3);margin:0 0 1.5rem;overflow-wrap:anywhere}
.err-path code{font:inherit;color:var(--fg-2)}
.err-path code:empty::before{content:"/"}

/* ---------- responsive ---------- */
@media (max-width:1099.98px){
  .hero-grid{grid-template-columns:minmax(0,1fr) minmax(220px,38%)}
  .portrait{width:100%}
}
@media (max-width:899.98px){
  .hero{min-height:0}
  .hero-grid{column-gap:clamp(1.75rem,5vw,3rem);align-items:end}
  .name{font-size:clamp(3.25rem,10.5vw,6rem)}
  .roles{font-size:.9375rem}
  .toc li:not(:first-child){display:none} /* on small screens the contents line becomes a plain scroll cue */
  .hero-foot{margin-top:2.5rem}
  .sec-grid{grid-template-columns:1fr}
  .sec-head{position:static}
  .spec{margin-top:1.25rem}
  .talk{grid-template-columns:1fr;row-gap:1rem}
  .talk-when{display:flex;gap:1.25rem;line-height:1.5;align-items:baseline}
  .talk-when time{font-size:.8125rem;color:var(--fg)}
  .talk-when .rel::before{top:.45em}
  .pcb{display:none}
  .post{grid-template-columns:1fr;gap:.5rem}
  .tblock{grid-template-columns:repeat(2,minmax(0,1fr))}
  .tblock > div{border-left:0;padding-left:0;border-top:1px solid var(--rule);min-height:0;gap:.4rem}
  .tblock > div:first-child,.tblock > div:nth-child(2){border-top:0}
  .mark{justify-content:flex-start;align-items:flex-start;min-width:0}
  .mark .egg{justify-content:flex-start}
}
@media (max-width:639.98px){
  .hero-grid{
    grid-template-columns:1fr;
    grid-template-areas:"roles" "name" "portrait" "lead" "cta";
    align-items:start;
  }
  .portrait{justify-self:start;width:min(68%,300px);margin:.75rem 0 2.25rem}
  .name{margin-bottom:1rem}
  .talk-meta{grid-auto-flow:row;grid-template-columns:1fr;width:auto}
  .talk-meta > div{border-left:0;padding:.6rem 0;border-top:1px solid var(--rule);display:flex;justify-content:space-between;gap:1rem}
  .talk-meta > div:first-child{border-top:0}
  .talk-meta dt{margin:0}
  .tblock{grid-template-columns:1fr}
  .tblock > div:nth-child(2){border-top:1px solid var(--rule)}
}
@media (max-width:479.98px){
  .top > .frame{gap:.75rem}
  .brand{font-size:1rem}
  .lang button{padding:.6rem .6rem}
  .menu-btn{padding:.45rem .65rem;gap:.5rem}
  .certs li{grid-template-columns:1fr;gap:.15rem}
  .areas li{grid-template-columns:2.75rem minmax(0,1fr)}
  .roles{flex-direction:column;gap:.15rem} /* three short lines instead of a separator hanging at a wrap */
  .roles li:not(:last-child)::after{display:none}
  .lead{max-width:none}
}
@media (max-width:359.98px){
  .top > .frame{gap:.5rem}
  .brand{font-size:.9375rem}
  .lang button{padding:.6rem .5rem}
  .menu-btn{padding:.45rem .8rem;gap:0} /* icon only; the accessible name is the aria-label */
  .menu-btn > span:not(.menu-ic){display:none}
  .btn{padding:.8rem 1rem;gap:.6rem}
}

/* ---------- motion (only if the visitor allows it) ---------- */
@media (prefers-reduced-motion:no-preference){
  html{scroll-behavior:smooth}
  .top{transition:transform .35s var(--ease)}
  a,.nav a::after,.lang button,.btn,.btn .node,.btn .mono,.cta,.cta .mono,.toc a,.anchor,.mark .egg{transition:color .2s var(--ease),border-color .2s var(--ease),background-color .2s var(--ease),transform .3s var(--ease),text-decoration-color .2s var(--ease),opacity .2s var(--ease)}
  .contact-link a{transition:color .3s var(--ease),background-size .6s var(--ease)}
  .areas li{transition:padding-left .35s var(--ease)}
  .areas li::before{transition:width .2s var(--ease)}
  .areas .n{transition:color .25s var(--ease)}
  .menu-ic::before,.menu-ic::after{transition:top .2s var(--ease),transform .2s var(--ease)}
  /* hero entrance: short stagger so nothing stays hidden for long on a slow device */
  .rise{animation:rise .6s var(--ease) both}
  .name{animation-delay:.04s}
  .portrait{animation-delay:.08s}
  .lead{animation-delay:.12s}
  .hero-cta{animation-delay:.16s}
  .hero-foot{animation-delay:.24s}
  .cue-line::after{animation:cue 2.6s var(--ease) 1s infinite}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none !important;transition:none !important}
  html{scroll-behavior:auto}
  .cue-line::after{transform:translateY(60%)}
}
@keyframes rise{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
@keyframes cue{0%{transform:translateY(-100%)}60%,100%{transform:translateY(240%)}}
