/* TALOS Cultural Heritage concept
   Warm, scholarly, welcoming.
*/

:root{
  --paper:#f4efe4;
  --paper-light:#fbf8f1;
  --paper-deep:#ebe1d0;
  --ink:#1d2430;
  --muted:#655f56;
  --terracotta:#a8492e;
  --terracotta-dark:#7f3423;
  --olive:#4f5137;
  --verdigris:#2f5d52;
  --oxblood:#7a2f3a;
  --line:rgba(75,55,38,.18);
  --white:#fffdf8;
  --serif:"Literata", Georgia, "Times New Roman", serif;
  --sans:"Source Sans 3", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  --max:1380px;
  --shadow:0 20px 50px rgba(61,43,26,.10);
  --footer:#3b241c;
}

*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  margin:0;
  color:var(--ink);
  background:
    radial-gradient(circle at 18% 5%, rgba(168,73,46,.05), transparent 27rem),
    linear-gradient(180deg,var(--paper-light),var(--paper));
  font-family:var(--sans);
  font-size:17px;
  line-height:1.58;
  -webkit-font-smoothing:antialiased;
}
body::before{
  content:"";
  position:fixed; inset:0; pointer-events:none; z-index:100;
  opacity:.22;
  background-image:
    repeating-linear-gradient(0deg, rgba(88,63,38,.018) 0 1px, transparent 1px 4px);
  mix-blend-mode:multiply;
}
a{color:inherit;text-decoration:none}
button{font:inherit}
img{display:block;max-width:100%}
.container{width:min(calc(100% - 64px),var(--max));margin-inline:auto}
.skip-link{position:absolute;left:12px;top:-100px;background:var(--ink);color:white;padding:.7rem 1rem;z-index:1000}
.skip-link:focus{top:12px}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
:focus-visible{outline:3px solid rgba(168,73,46,.45);outline-offset:4px}

.utility{border-bottom:1px solid var(--line);font-size:.78rem}
.utility-inner{height:36px;display:flex;align-items:center;justify-content:space-between}
.utility-actions{display:flex;align-items:center;gap:16px}
.plain-button{border:0;background:transparent;padding:0;width:20px;height:20px;color:inherit}
.plain-button svg{fill:none;stroke:currentColor;stroke-width:1.6}

.masthead{min-height:118px;display:flex;align-items:center;justify-content:space-between;gap:32px}
.brand{display:flex;align-items:center;gap:15px;min-width:max-content}
.brand-mark{width:56px;height:56px;color:var(--terracotta)}
.brand-mark svg{width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:1.5}
.brand-name{display:flex;flex-direction:column;line-height:1}
.brand-name strong{font:500 1.42rem/1 var(--serif);letter-spacing:.12em}
.brand-name small{margin-top:7px;font-size:.60rem;letter-spacing:.31em}
.brand-subtitle{border-left:1px solid var(--line);padding-left:18px;font:400 .78rem/1.35 var(--serif);color:#35302a}
.primary-nav{display:flex;align-items:center;gap:25px;font-size:.88rem;font-weight:500}
.primary-nav>a:not(.tools-button){position:relative}
.primary-nav>a:not(.tools-button)::after{
  content:"";position:absolute;left:0;right:100%;bottom:-7px;height:1px;background:var(--terracotta);transition:.2s ease
}
.primary-nav>a:hover::after{right:0}
.tools-button{border:1px solid rgba(168,73,46,.5);padding:10px 15px;text-transform:uppercase;letter-spacing:.06em;font-size:.72rem;color:var(--terracotta-dark)}
.menu-toggle{display:none;border:0;background:none;padding:8px}
.menu-toggle span:not(.sr-only){display:block;width:24px;height:1px;background:currentColor;margin:6px 0}

.hero{
  position:relative;
  overflow:hidden;
  border-top:1px solid rgba(255,255,255,.7);
  border-bottom:1px solid var(--line);
  background:var(--paper-light);
}

.hero::before{
  content:"";
  position:absolute;
  inset:0;
  background:
    radial-gradient(circle at 12% 30%, rgba(168,73,46,.055), transparent 26rem),
    radial-gradient(circle at 78% 40%, rgba(79,81,55,.035), transparent 30rem);
  pointer-events:none;
}

.hero::after{
  content:"";
  position:absolute;
  top:0;
  right:0;
  bottom:0;
  width:58%;
  background:
    linear-gradient(
      90deg,
      var(--paper-light) 0%,
      rgba(251,248,241,.86) 12%,
      rgba(251,248,241,.52) 28%,
      rgba(251,248,241,.18) 50%,
      rgba(251,248,241,0) 72%
    ),
    url("../assets/background.png");
  background-size:cover;
  background-position:center;
  background-repeat:no-repeat;
  opacity:.78;
  filter:none;
  pointer-events:none;
}

.hero-wash{
  display:none;
}

.hero-grid{
  position:relative;
  z-index:2;
  min-height:540px;
  display:grid;
  grid-template-columns:minmax(0, 1fr);
  align-items:center;
}

.hero-copy{
  padding:82px 0 88px;
  max-width:720px;
}

.eyebrow,.section-kicker{
  text-transform:uppercase;
  letter-spacing:.16em;
  font-size:.72rem;
  font-weight:600;
  color:var(--terracotta);
  margin:0 0 16px;
}

.hero h1{
  font:500 clamp(3.3rem,5.2vw,6.3rem)/.95 var(--serif);
  letter-spacing:-.045em;
  color:var(--terracotta-dark);
  margin:0 0 25px;
}

.hero h2{
  font:400 clamp(1.55rem,2vw,2.2rem)/1.27 var(--serif);
  margin:0 0 24px;
  color:#26231f;
  max-width:650px;
}

.hero-text{
  max-width:650px;
  color:#4f4942;
  margin:0;
  font-size:1.03rem;
  line-height:1.7;
}

.hero-actions{
  display:flex;
  align-items:center;
  gap:34px;
  margin-top:36px;
}

.btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  padding:13px 21px;
  border:1px solid transparent;
  text-transform:uppercase;
  letter-spacing:.07em;
  font-size:.76rem;
  font-weight:600;
}

.btn-primary{
  background:var(--terracotta);
  color:#fffaf1;
  box-shadow:0 8px 24px rgba(122,52,35,.13);
}

.btn-primary:hover{
  background:var(--terracotta-dark);
}

.text-link{
  display:inline-flex;
  align-items:center;
  gap:11px;
  color:var(--terracotta-dark);
  font-weight:600;
  border-bottom:1px solid rgba(168,73,46,.28);
  padding-bottom:3px;
}

.text-link span{
  transition:transform .2s;
}

.text-link:hover span{
  transform:translateX(4px);
}

.text-link.small{
  font-size:.76rem;
  text-transform:uppercase;
  letter-spacing:.08em;
  border-bottom:0;
}

/* The old right-side manuscript/annotation block is intentionally hidden.
   The papyri is now used as a subtle atmospheric background across the hero. */
.hero-art,
.manuscript-frame,
.annotation,
.ann-1,
.ann-2,
.ann-3{
  display:none;
}

.intro-strip{border-bottom:1px solid var(--line);background:rgba(255,253,248,.52)}
.intro-inner{min-height:72px;display:flex;align-items:center;gap:24px}
.ornament{color:var(--terracotta);font-size:1.35rem}
.intro-inner p{margin:0;flex:1;font-family:var(--serif);font-size:1.05rem}
.intro-inner a{font-size:.88rem;color:var(--terracotta-dark)}

.section{padding:70px 0}
.section-heading{display:flex;align-items:end;justify-content:space-between;gap:30px;margin-bottom:28px}
.section-heading h2{font:500 clamp(2rem,3vw,3rem)/1.05 var(--serif);margin:0;letter-spacing:-.025em}
.section-heading .section-kicker{margin-bottom:9px}

.research-intro{
  max-width:64ch;
  margin:0 0 34px;
  font-family:var(--serif);
  font-size:1.05rem;
  line-height:1.6;
  color:#4f4942;
}

/* Research areas — compact humanities catalogue.
   grid-auto-flow:column keeps every card on a single row; the cards shrink
   rather than wrapping. */
.research-grid{
  counter-reset:research-area;
  display:grid;
  grid-auto-flow:column;
  grid-auto-columns:minmax(0,1fr);
  border-top:1px solid var(--line);
  border-bottom:1px solid var(--line);
  background:transparent;
}
.research-card{
  counter-increment:research-area;
  min-height:178px;
  padding:24px 22px 22px;
  border-right:1px solid var(--line);
  background:transparent;
  transition:background .2s ease;
}
.research-card:last-child{border-right:0}
.research-card:hover{background:rgba(255,253,248,.38);transform:none}
.line-icon{
  display:block;
  margin:0 0 19px;
  color:var(--terracotta);
  font-size:0;
  line-height:1;
}
.line-icon::before{
  content:counter(research-area,decimal-leading-zero);
  font:600 .68rem/1 var(--sans);
  letter-spacing:.14em;
}
.research-card h3{
  font:500 1.05rem/1.23 var(--serif);
  margin:0 0 10px;
  color:var(--ink);
}
.research-card p{
  margin:0;
  color:var(--muted);
  font-size:.79rem;
  line-height:1.45;
}

.projects-section{padding-top:30px}
.project-layout{display:grid;grid-template-columns:1fr 1fr;gap:2px;background:var(--line);border:1px solid var(--line)}
.project-feature{position:relative;min-height:430px;color:white;overflow:hidden}
.project-feature img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:saturate(.7)}
.project-overlay{position:absolute;inset:0;background:linear-gradient(90deg,rgba(37,32,24,.80),rgba(37,32,24,.18) 75%)}
.project-copy{position:absolute;inset:auto auto 35px 35px;max-width:340px;z-index:2}
.project-copy span,.project-small span{font-size:.68rem;text-transform:uppercase;letter-spacing:.08em;color:#e2c5aa}
.project-copy h3{font:500 2rem/1.15 var(--serif);margin:8px 0}
.project-copy p{margin:0 0 15px;color:#f6eee5}
.project-copy small{display:block;margin-bottom:17px}
.project-copy a{font-size:.8rem;border-bottom:1px solid rgba(255,255,255,.5)}
.project-stack{display:grid;grid-template-rows:1fr 1fr;gap:2px}
.project-small{display:grid;grid-template-columns:44% 1fr;background:#f4ebdd;min-height:214px;overflow:hidden}
.project-small img{width:100%;height:100%;object-fit:cover;filter:saturate(.72)}
.project-small>div{padding:26px}
.project-small span{color:var(--terracotta)}
.project-small h3{font:500 1.45rem/1.15 var(--serif);margin:7px 0 9px}
.project-small p{margin:0;color:#5f574f;font-size:.87rem}
.project-small small{display:block;margin-top:13px}
.project-small-row{display:grid;grid-template-columns:1fr 1fr;gap:2px}
.project-small.compact{display:block;position:relative}
.project-small.compact img{position:absolute;inset:0;width:100%;height:100%;opacity:.22}
.project-small.compact>div{position:relative;z-index:1}

.tools-section{padding-top:34px}
.tools-grid{display:grid;grid-template-columns:repeat(6,1fr);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.tool-item{text-align:center;padding:30px 18px;border-right:1px solid var(--line);min-height:155px}
.tool-item:last-child{border-right:0}
.tool-item>span{display:block;color:var(--terracotta);font:400 1.85rem/1 var(--serif);margin-bottom:15px}
.tool-item strong{display:block;font:500 .96rem/1.15 var(--serif);margin-bottom:7px}
.tool-item small{color:var(--muted);font-size:.74rem}
.tool-item:hover{background:rgba(255,253,248,.55)}

.news-section{padding-top:35px}
.news-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
.news-card{padding:22px;border:1px solid var(--line);background:rgba(255,253,248,.54);min-height:205px}
.news-card .news-type{font-size:.67rem;text-transform:uppercase;letter-spacing:.1em;color:var(--terracotta);font-weight:600}
.news-card time{float:right;font-size:.68rem;color:var(--muted)}
.news-card h3{font:500 1.14rem/1.25 var(--serif);margin:21px 0 10px}
.news-card p{font-size:.82rem;color:var(--muted);margin:0}

/* About — set like a page from a book rather than a promo block.
   Olive on paper, so the section breathes against the terracotta elsewhere. */
.about-panel{
  border-top:1px solid var(--line);
  border-bottom:1px solid var(--line);
  background:rgba(255,253,248,.45);
}
.about-grid{
  padding:84px 0 88px;
  display:grid;
  grid-template-columns:minmax(0,.32fr) minmax(0,1fr);
  gap:0 60px;
  align-items:start;
}
.about-margin{border-right:1px solid var(--line);padding-right:34px}
.about-tally{display:flex;gap:5px;margin:0 0 26px}
.about-tally i{width:1px;height:22px;background:var(--olive);opacity:.65}
.about-tally i:nth-child(2){height:28px}
.about-note{
  margin:0 0 22px;
  font-family:var(--serif);
  font-size:.84rem;
  line-height:1.5;
  color:var(--muted);
}
.about-body h2{
  font:400 clamp(2.1rem,3.4vw,3.4rem)/1.12 var(--serif);
  letter-spacing:-.02em;
  color:var(--olive);
  margin:0 0 32px;
  text-indent:-.06em;
}
.about-body p{
  max-width:60ch;
  margin:0 0 18px;
  font-family:var(--serif);
  font-size:1.06rem;
  line-height:1.72;
  color:#3d382f;
}
.about-body p:first-of-type::first-letter{
  float:left;
  font:400 3.4rem/.82 var(--serif);
  color:var(--terracotta);
  padding:6px 10px 0 0;
}

.site-footer{background:var(--footer);color:#f6efe4;padding-top:50px}
.footer-grid{display:grid;grid-template-columns:1.5fr .8fr .8fr 1.25fr .9fr;gap:40px;padding-bottom:45px}
.footer-brand p{color:#d9d5c8;font-size:.82rem;max-width:230px}
.brand.mini .brand-mark{color:#dba78c;width:44px;height:44px}
.brand.mini .brand-name strong{font-size:1.1rem}
.site-footer h3{font:500 .82rem/1 var(--sans);text-transform:uppercase;letter-spacing:.1em;margin:4px 0 18px}
.site-footer a,.site-footer p{display:block;color:#d9d5c8;font-size:.82rem;margin:6px 0}
.uoc-block{display:flex;align-items:center;gap:14px;font-family:var(--serif)}
.uoc-block img{width:52px;height:52px;border-radius:50%;object-fit:cover;filter:sepia(.25) saturate(.8)}
.footer-bottom{border-top:1px solid rgba(255,255,255,.16);min-height:58px;display:flex;align-items:center;justify-content:space-between;font-size:.73rem;color:#d1cbbc}
.footer-bottom div{display:flex;gap:25px}
.footer-bottom a{display:inline;margin:0}

@media (max-width:1160px){
  .brand-subtitle{display:none}
  .primary-nav{gap:16px;font-size:.82rem}
  .research-grid{grid-auto-flow:column;grid-auto-columns:minmax(170px,1fr);overflow-x:auto;scrollbar-width:thin}
  .tools-grid{grid-template-columns:repeat(3,1fr)}
  .tool-item:nth-child(3){border-right:0}
  .tool-item:nth-child(-n+3){border-bottom:1px solid var(--line)}
  .footer-grid{grid-template-columns:1.4fr 1fr 1fr}
}
@media (max-width:900px){
  .container{width:min(calc(100% - 36px),var(--max))}
  .masthead{min-height:92px}
  .menu-toggle{display:block;margin-left:auto}
  .primary-nav{position:absolute;z-index:20;left:18px;right:18px;top:128px;background:var(--paper-light);border:1px solid var(--line);box-shadow:var(--shadow);padding:24px;display:none;flex-direction:column;align-items:flex-start}
  .primary-nav.open{display:flex}
  .hero-grid{grid-template-columns:1fr}
  .hero-copy{padding:68px 0 72px}
  .hero h1{font-size:clamp(3.3rem,11vw,5.5rem)}
  .hero::after{
    width:72%;
    opacity:.64;
    background-position:60% center;
  }
  .project-layout{grid-template-columns:1fr}
  .news-grid{grid-template-columns:repeat(2,1fr)}
  .about-grid{grid-template-columns:1fr;gap:34px}
  .about-margin{border-right:0;border-bottom:1px solid var(--line);padding:0 0 26px}
  .about-tally{margin-bottom:18px}
  .footer-grid{grid-template-columns:1fr 1fr}
}
@media (max-width:620px){
  body{font-size:16px}
  .utility{display:none}
  .masthead{min-height:86px}
  .brand-mark{width:45px;height:45px}
  .brand-name strong{font-size:1.17rem}
  .primary-nav{top:86px}
  .hero-grid{min-height:auto}
  .hero-copy{padding:54px 0 58px}
  .hero h1{font-size:3.2rem}
  .hero h2{font-size:1.35rem}
  .hero-text{font-size:.98rem}
  .hero-actions{align-items:flex-start;flex-direction:column;gap:20px}
  .hero::after{
    width:100%;
    opacity:.42;
    background-position:center;
  }
  .intro-inner{padding:18px 0;align-items:flex-start;flex-wrap:wrap;gap:10px}
  .intro-inner p{flex-basis:calc(100% - 40px)}
  .intro-inner a{margin-left:40px}
  .section{padding:52px 0}
  .section-heading{align-items:flex-start}
  .section-heading .text-link{display:none}
  .research-grid{grid-auto-flow:column;grid-auto-columns:minmax(165px,1fr);margin-right:-18px;padding-right:18px}
  .research-card{min-height:166px;padding:21px 18px 19px}
  .project-feature{min-height:385px}
  .project-small{grid-template-columns:1fr}
  .project-small img{height:135px}
  .project-small-row{grid-template-columns:1fr}
  .project-small.compact{min-height:235px}
  .project-small.compact img{height:100%}
  .tools-grid{grid-template-columns:1fr 1fr}
  .tool-item:nth-child(odd){border-right:1px solid var(--line)}
  .tool-item:nth-child(even){border-right:0}
  .tool-item:nth-child(-n+4){border-bottom:1px solid var(--line)}
  .news-grid{grid-template-columns:1fr}
  .footer-grid{grid-template-columns:1fr}
  .about-grid{padding:58px 0 62px;gap:26px}
  .about-body h2{margin-bottom:24px}
  .footer-bottom{padding:18px 0;align-items:flex-start;gap:15px;flex-direction:column}
  .footer-bottom div{flex-wrap:wrap}
}

@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{transition:none!important;animation:none!important}
}

/* Image provenance note — quiet but present for licensed prototype imagery. */
.image-credits {
  width: 100%;
  max-width: none;
  overflow-x: auto;
  padding-block: 1rem;
}

.image-credits small {
  display: block;
  white-space: nowrap;
  font-size: 0.72rem;
  line-height: 1.4;
}

.image-credits a {
  display: inline;
}

.image-credits{
  border-top:1px solid rgba(255,255,255,.12);
  padding:14px 0 4px;
  color:#bcb6a8;
  font-size:.7rem;
  line-height:1.45;
}

/* Functional institutional header */
.utility{min-height:54px}
.utility-inner{height:54px}
.uoc-link{display:inline-flex;align-items:center;gap:9px;height:46px;padding:3px 0;font:500 .78rem/1 var(--serif);letter-spacing:.02em}
.uoc-link img{width:32px;height:32px;border-radius:50%;object-fit:cover}
.uoc-wordmark{white-space:nowrap}
.utility-actions{gap:20px}
.language-switch{display:flex;align-items:center;gap:7px;color:var(--muted)}
.language-button{appearance:none;border:0;background:transparent;color:var(--muted);padding:5px 2px;font:600 .75rem/1 var(--sans);letter-spacing:.08em;cursor:pointer}
.language-button.active,.language-button:hover{color:var(--terracotta-dark)}
.language-button.active{border-bottom:1px solid currentColor}
.plain-button{cursor:pointer}

/* Site search */
.search-dialog[hidden]{display:none}
.search-dialog{position:fixed;inset:0;z-index:1000;display:grid;place-items:start center;padding:9vh 20px 20px}
.search-backdrop{position:absolute;inset:0;background:rgba(27,25,21,.55);backdrop-filter:blur(3px)}
.search-panel{position:relative;z-index:1;width:min(760px,100%);max-height:82vh;overflow:auto;background:var(--paper-light);border:1px solid rgba(96,67,41,.22);box-shadow:0 30px 90px rgba(31,24,18,.28);padding:34px}
.search-panel-top{display:flex;align-items:flex-start;justify-content:space-between;gap:30px;margin-bottom:24px}
.search-panel h2{font:500 clamp(2rem,4vw,3rem)/1 var(--serif);margin:0;color:var(--terracotta-dark)}
.search-close{appearance:none;border:0;background:transparent;color:var(--ink);font:300 2.2rem/1 var(--sans);cursor:pointer;padding:0 4px}
.search-field{height:58px;display:flex;align-items:center;gap:14px;background:#fffdf8;border:1px solid var(--line);padding:0 18px}
.search-field svg{width:21px;fill:none;stroke:var(--terracotta);stroke-width:1.7;flex:none}
.search-field input{border:0;outline:0;background:transparent;width:100%;font:400 1.05rem var(--sans);color:var(--ink)}
.search-field input::placeholder{color:#8c8378}
.search-hint{font-size:.82rem;color:var(--muted);margin:10px 0 5px}
.search-results{margin-top:18px;border-top:1px solid var(--line)}
.search-result{display:block;padding:17px 2px;border-bottom:1px solid var(--line)}
.search-result small{display:block;text-transform:uppercase;letter-spacing:.1em;color:var(--terracotta);font-size:.64rem;margin-bottom:4px}
.search-result strong{display:block;font:500 1.08rem var(--serif)}
.search-result span{display:block;color:var(--muted);font-size:.82rem;margin-top:4px}
.search-empty{padding:22px 0;color:var(--muted)}
body.search-open{overflow:hidden}

@media(max-width:620px){
  .utility{display:block;min-height:50px}
  .utility-inner{height:50px}
  .uoc-link img{width:30px;height:30px}
  .uoc-wordmark{font-size:.72rem}
  .search-dialog{padding-top:4vh}
  .search-panel{padding:24px 20px}
}

/* ============================================================
   INTERIOR PAGES
   Shared components used by lab / research / people / projects /
   open-science / training / news / contact.
   ============================================================ */

/* Current page in the main nav — pins the hover underline open. */
.primary-nav a.is-current{color:var(--terracotta-dark)}
.primary-nav>a.is-current:not(.tools-button)::after{right:0}

/* Interior page banner — the hero's quieter sibling. No papyrus. */
.page-header{border-bottom:1px solid var(--line);background:var(--paper-light)}
.breadcrumb{display:flex;align-items:center;gap:9px;padding:18px 0 0;font-size:.72rem;text-transform:uppercase;letter-spacing:.1em;color:var(--muted)}
.breadcrumb a{color:var(--terracotta)}
/* No max-width here: .container sets margin-inline:auto, so capping the
   width would centre the whole block instead of aligning it left with the
   rest of the page. Cap the text inside instead. */
.page-header-inner{padding:60px 0 54px}
.page-header-inner > *{max-width:780px}
.page-header h1{
  font:500 clamp(2.6rem,4.4vw,4.4rem)/1.02 var(--serif);
  letter-spacing:-.035em;
  color:var(--terracotta-dark);
  margin:0 0 20px;
}
.page-header p{
  margin:0;
  max-width:62ch;
  font-family:var(--serif);
  font-size:1.06rem;
  line-height:1.68;
  color:#4f4942;
}

/* Generic reading column. */
.prose{max-width:66ch;font-family:var(--serif);font-size:1.03rem;line-height:1.7;color:#3d382f}
.prose h3{font:500 1.35rem/1.25 var(--serif);margin:34px 0 12px;color:var(--ink)}
.prose p{margin:0 0 16px}
.prose ul{margin:0 0 16px;padding-left:1.1rem}
.prose li{margin:0 0 7px}
.section-lede{max-width:64ch;margin:0 0 34px;font-family:var(--serif);font-size:1.05rem;line-height:1.65;color:#4f4942}

/* Record list — projects, publications, courses, news archive. */
.record-list{border-top:1px solid var(--line)}
.record{
  display:grid;
  grid-template-columns:minmax(0,.2fr) minmax(0,1fr) minmax(0,.2fr);
  gap:26px;
  padding:26px 2px;
  border-bottom:1px solid var(--line);
  align-items:start;
  transition:background .2s ease;
}
.record:hover{background:rgba(255,253,248,.5)}
.record-meta{font-size:.71rem;text-transform:uppercase;letter-spacing:.09em;color:var(--terracotta);font-weight:600}
.record h3{font:500 1.2rem/1.25 var(--serif);margin:0 0 8px}
.record p{margin:0;color:var(--muted);font-size:.87rem}
.record-aside{font-family:var(--serif);font-size:.82rem;color:var(--muted);text-align:right}

/* People — text left, small portrait bottom-right, on a filled card. */
.people-groups{display:grid;gap:56px}
.people-group h2{font:500 1.6rem/1.2 var(--serif);margin:0 0 5px}
.people-group>p{margin:0 0 26px;color:var(--muted);font-size:.88rem}

.people-grid{
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  gap:22px;
  background:none;
  border:0;
}
.person{
  display:grid;
  grid-template-columns:minmax(0,1fr) 88px;
  gap:14px;
  align-items:end;
  padding:22px 22px 0;
  background:var(--paper-deep);
  border:0;
}
.person-body{padding-bottom:22px;min-width:0}
.person h3{font:600 1.05rem/1.25 var(--sans);margin:0 0 9px;color:var(--ink)}
.person h3 a:hover{color:var(--terracotta-dark)}
.person-role{
  display:block;
  margin-bottom:5px;
  font:400 .82rem/1.35 var(--sans);
  color:#4a453d;
}
.person-unit{
  display:block;
  margin-top:8px;
  font:400 .78rem/1.4 var(--sans);
  color:var(--muted);
}
.person-meta{list-style:none;margin:13px 0 0;padding:0}
.person-meta li{display:flex;align-items:center;gap:8px;margin-bottom:5px;font-size:.76rem}
.person-meta svg{width:13px;height:13px;flex:none;color:var(--terracotta);opacity:.85}
.person-meta a{color:var(--terracotta-dark);text-decoration:underline;text-underline-offset:2px}
.person-meta a:hover{color:var(--ink)}

.person-portrait{
  width:88px;
  aspect-ratio:2/3;
  align-self:end;
  margin:0;
  background:#ded3c1;
  border:0;
  overflow:hidden;
}
.person-portrait img{
  width:100%;height:100%;
  object-fit:cover;
  object-position:center 20%;
  filter:grayscale(1) contrast(1.04);
  transition:filter .25s ease;
}
.person:hover .person-portrait img{filter:grayscale(0)}
.person-noimg{display:grid;place-items:center;height:100%;color:var(--muted)}

/* Contact. */
.contact-layout{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1fr);gap:56px;align-items:start}
.contact-block{margin-bottom:30px}
.contact-block h3{font:500 .8rem/1 var(--sans);text-transform:uppercase;letter-spacing:.1em;color:var(--terracotta);margin:0 0 10px}
.contact-block p{margin:0;font-family:var(--serif);line-height:1.6}
.contact-form{border:1px solid var(--line);background:rgba(255,253,248,.6);padding:32px}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.form-field{display:block;margin-bottom:18px}
.form-field span{display:block;margin-bottom:7px;font-size:.73rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}
.form-field input,.form-field select,.form-field textarea{
  width:100%;
  border:1px solid var(--line);
  background:var(--white);
  padding:12px 13px;
  font:400 .95rem var(--sans);
  color:var(--ink);
}
.form-field textarea{min-height:132px;resize:vertical}
.map-frame{
  margin-top:44px;
  border:1px solid var(--line);
  aspect-ratio:16/7;
  background:var(--paper-deep);
  display:grid;
  place-items:center;
  color:var(--muted);
  font-size:.78rem;
}

/* Skeleton markers — delete these rules once the pages are filled in. */
.todo{
  display:block;
  margin:0 0 14px;
  border:1px dashed rgba(168,73,46,.45);
  background:rgba(168,73,46,.045);
  color:var(--terracotta-dark);
  padding:10px 13px;
  font:400 .78rem/1.45 var(--sans);
}

@media (max-width:1160px){
  .people-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media (max-width:900px){
  .page-header-inner{padding:50px 0 44px}
  .people-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .contact-layout{grid-template-columns:1fr;gap:38px}
  .record{grid-template-columns:1fr;gap:10px}
  .record-aside{text-align:left}
}
@media (max-width:620px){
  .people-grid{grid-template-columns:1fr}
  .form-row{grid-template-columns:1fr}
  .contact-form{padding:24px 20px}
  .page-header-inner{padding:40px 0 36px}
}

/* ============================================================
   TOOLS PORTAL & DOCUMENTATION
   ============================================================ */

.tools-button.is-current{background:var(--terracotta);border-color:var(--terracotta);color:#fffaf1}

/* Portal index — richer than the homepage .tool-item strip. */
.portal-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:var(--line);border:1px solid var(--line)}
.portal-card{
  background:var(--paper-light);
  padding:30px 28px 28px;
  display:flex;
  flex-direction:column;
  gap:11px;
  transition:background .2s ease;
}
.portal-card:hover{background:var(--white)}
.portal-mark{font:400 1.9rem/1 var(--serif);color:var(--terracotta)}
/* Logo variant. Height is fixed so cards line up; width follows the
   artwork's own ratio, so non-square logos aren't squashed. */
img.portal-mark{
  height:40px;
  width:auto;
  max-width:130px;
  object-fit:contain;
}

/* Logo centred in its card. The card is a flex column, so margin-inline
   auto is what centres it — text-align won't move a block-level image. */
/* 72px tall, but the negative top margin pulls 26px of that back into
   the card's own top padding — so it still occupies 46px of layout and
   the card height is unchanged. */
.portal-logo,
.sparql_logo{
  display:block;
  height:72px;
  width:auto;
  max-width:150px;
  margin:-26px auto 0;
  object-fit:contain;
}
.portal-card h3{font:500 1.2rem/1.2 var(--serif);margin:0}
.portal-abbr{font-size:.68rem;text-transform:uppercase;letter-spacing:.11em;color:var(--muted)}
.portal-card p{margin:0;flex:1;font-size:.85rem;line-height:1.5;color:var(--muted)}
.portal-actions{display:flex;flex-wrap:wrap;gap:16px;align-items:center;padding-top:6px;font-size:.72rem;text-transform:uppercase;letter-spacing:.07em}
.portal-actions a{color:var(--terracotta-dark);border-bottom:1px solid rgba(168,73,46,.35);padding-bottom:2px}

/* Documentation page: contents / body / launch rail. */
.docs-layout{display:grid;grid-template-columns:minmax(0,.24fr) minmax(0,1fr) minmax(0,.26fr);gap:44px;align-items:start}
.docs-toc{position:sticky;top:24px;border-right:1px solid var(--line);padding-right:22px}
.docs-toc h2{font:500 .75rem/1 var(--sans);text-transform:uppercase;letter-spacing:.1em;color:var(--muted);margin:0 0 15px}
.docs-toc ol{list-style:none;counter-reset:toc;margin:0;padding:0}
.docs-toc li{counter-increment:toc;margin:0 0 9px}
.docs-toc a{font-size:.86rem;color:#4f4942}
.docs-toc a::before{content:counter(toc,decimal-leading-zero);margin-right:9px;font:600 .65rem/1 var(--sans);letter-spacing:.1em;color:var(--terracotta)}
.docs-toc a:hover{color:var(--terracotta-dark)}

.docs-body{max-width:70ch}
.docs-body>section{padding:0 0 38px}
.docs-body h2{font:500 1.6rem/1.2 var(--serif);margin:0 0 14px;color:var(--ink)}
.docs-body h3{font:500 1.12rem/1.25 var(--serif);margin:26px 0 10px}
.docs-body p,.docs-body li{font-family:var(--serif);font-size:1rem;line-height:1.68;color:#3d382f}
.docs-body p{margin:0 0 14px}
.docs-body ul,.docs-body ol{margin:0 0 16px;padding-left:1.2rem}
.docs-body li{margin:0 0 7px}

.docs-aside{position:sticky;top:24px;display:grid;gap:20px}
.launch-card{border:1px solid var(--line);background:rgba(255,253,248,.7);padding:22px}
.launch-card h2{font:500 .75rem/1 var(--sans);text-transform:uppercase;letter-spacing:.1em;color:var(--terracotta);margin:0 0 14px}
.launch-card .btn{width:100%;margin-bottom:13px}
.launch-card small{display:block;color:var(--muted);font-size:.71rem;line-height:1.45}

.meta-table{width:100%;border-collapse:collapse;font-size:.8rem}
.meta-table th,.meta-table td{text-align:left;padding:8px 0;border-bottom:1px solid var(--line);vertical-align:top}
.meta-table th{width:44%;font:600 .69rem/1.4 var(--sans);text-transform:uppercase;letter-spacing:.07em;color:var(--muted)}
.meta-table td{font-family:var(--serif);color:#3d382f}

code{font:400 .86em/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;background:rgba(75,55,38,.07);padding:2px 5px;border-radius:2px}
pre{
  margin:0 0 16px;
  padding:16px 18px;
  background:#2b2c22;
  color:#eae4d6;
  overflow:auto;
  border-left:3px solid var(--terracotta);
  font:400 .82rem/1.6 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
}
pre code{background:none;padding:0;color:inherit;font-size:1em}

.callout{border-left:3px solid var(--olive);background:rgba(79,81,55,.06);padding:14px 18px;margin:0 0 18px}
.callout p{margin:0;font-size:.93rem}
.callout strong{color:var(--olive)}

@media (max-width:1160px){
  .portal-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .docs-layout{grid-template-columns:minmax(0,.3fr) minmax(0,1fr);gap:36px}
  .docs-aside{grid-column:1/-1;position:static;display:grid;grid-template-columns:1fr 1fr;gap:20px}
}
@media (max-width:900px){
  .docs-layout{grid-template-columns:1fr;gap:30px}
  .docs-toc{position:static;border-right:0;border-bottom:1px solid var(--line);padding:0 0 20px}
  .docs-toc ol{columns:2;column-gap:26px}
}
@media (max-width:620px){
  .portal-grid{grid-template-columns:1fr}
  .docs-aside{grid-template-columns:1fr}
  .docs-toc ol{columns:1}
}

/* Figures inside documentation pages. */
.docs-figure{margin:0 0 26px}
.docs-figure img{
  width:100%;
  height:auto;
  border:1px solid var(--line);
  background:var(--white);
}
.docs-figure figcaption{
  margin-top:9px;
  font:400 .78rem/1.5 var(--sans);
  color:var(--muted);
}
.docs-figure figcaption b{color:var(--terracotta-dark);font-weight:600}


/* Long identifiers — graph IRIs, endpoint URLs. Breaks anywhere so a
   150-character IRI can't blow out the column. */
.iri{
  display:block;
  margin:0 0 16px;
  padding:11px 13px;
  background:rgba(75,55,38,.06);
  border-left:3px solid var(--terracotta);
  font:400 .82rem/1.55 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  word-break:break-all;
  color:var(--ink);
}

/* Record list laid out in columns rather than stacked rows.
   Add .record-grid alongside .record-list. */
.record-list.record-grid{
  display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));
  border-top:1px solid var(--line);
}
.record-grid .record{
  display:block;
  padding:22px 26px 24px 0;
  border-right:1px solid var(--rule-soft,rgba(75,55,38,.09));
  border-bottom:1px solid var(--line);
}
.record-grid .record:nth-child(3n){border-right:0;padding-right:0}
.record-grid .record-meta{display:block;margin-bottom:10px}
.record-grid .record h3{font-size:1.1rem}
.record-grid .record-aside{
  display:block;
  margin-top:11px;
  text-align:left;
  font-size:.78rem;
}

@media (max-width:1000px){
  .record-list.record-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .record-grid .record:nth-child(3n){border-right:1px solid rgba(75,55,38,.09);padding-right:26px}
  .record-grid .record:nth-child(2n){border-right:0;padding-right:0}
}
@media (max-width:620px){
  .record-list.record-grid{grid-template-columns:minmax(0,1fr)}
  .record-grid .record{border-right:0!important;padding-right:0!important}
}


/* Contact page additions. */
.social-row{display:flex;flex-wrap:wrap;gap:9px;margin-top:6px}
.social-row a{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:42px;
  height:42px;
  border:1px solid var(--line);
  background:var(--white);
  color:var(--terracotta-dark);
  transition:background .18s ease,border-color .18s ease;
}
.social-row a:hover{background:var(--terracotta);border-color:var(--terracotta);color:#fffaf1}
.social-row svg{width:19px;height:19px;fill:currentColor;display:block}
.contact-block a{color:var(--terracotta-dark);border-bottom:1px solid rgba(168,73,46,.3)}
.contact-block .role{
  display:block;
  margin-top:3px;
  font:400 .78rem/1.45 var(--sans);
  color:var(--muted);
}


/* Contact form consent controls. */
.form-check{
  display:flex;
  align-items:flex-start;
  gap:11px;
  margin:0 0 13px;
  font:400 .85rem/1.5 var(--sans);
  color:var(--ink);
  cursor:pointer;
}
.form-check input{
  flex:none;
  width:17px;
  height:17px;
  margin-top:2px;
  accent-color:var(--terracotta);
}
.form-check a{color:var(--terracotta-dark);border-bottom:1px solid rgba(168,73,46,.35)}
.form-consent{
  margin:6px 0 20px;
  padding-top:18px;
  border-top:1px solid var(--line);
}
.form-error{
  margin:0 0 14px;
  font:400 .82rem/1.5 var(--sans);
  color:var(--terracotta-dark);
  min-height:1px;
}
.form-error:not(:empty){
  padding:9px 12px;
  background:rgba(168,73,46,.07);
  border-left:3px solid var(--terracotta);
}
.btn[aria-disabled="true"]{opacity:.45}


/* reCAPTCHA v2 renders a fixed 304px-wide iframe. Scale it down rather than
   letting it overflow the form on narrow screens. */
.recaptcha-wrap{margin:4px 0 18px}
@media (max-width:400px){
  .recaptcha-wrap{transform:scale(.86);transform-origin:0 0;height:66px}
}


/* Embedded map. aspect-ratio keeps it proportional without JS. */
.map-embed{
  margin-top:34px;
  border:1px solid var(--line);
  background:var(--paper-deep);
  aspect-ratio:16/7;
  overflow:hidden;
}
.map-embed iframe{display:block;width:100%;height:100%;border:0}
.map-links{
  display:flex;
  flex-wrap:wrap;
  gap:10px;
  margin-top:14px;
}
.map-links a{
  display:inline-flex;
  align-items:center;
  gap:7px;
  border:1px solid var(--line);
  background:var(--white);
  padding:9px 14px;
  font:500 .78rem/1 var(--sans);
  color:var(--terracotta-dark);
}
.map-links a:hover{border-color:rgba(168,73,46,.45)}
@media (max-width:620px){
  .map-embed{aspect-ratio:4/3}
}


/* Social icons in the dark footer. */
.site-footer .social-row{margin-top:16px;gap:8px}
.site-footer .social-row a{
  width:36px;height:36px;
  border-color:rgba(255,255,255,.24);
  background:transparent;
  color:#e8dfd4;
  margin:0;
}
.site-footer .social-row a:hover{background:var(--terracotta);border-color:var(--terracotta);color:#fffaf1}
.site-footer .social-row svg{width:16px;height:16px}
.footer-bottom div{flex-wrap:wrap}

/* Sitemap page. */
.sitemap-grid{
  display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));
  gap:38px 40px;
}
.sitemap-group h2{font:500 1.05rem/1.2 var(--serif);margin:0 0 12px;color:var(--terracotta-dark)}
.sitemap-group ul{list-style:none;margin:0;padding:0;border-top:1px solid var(--line)}
.sitemap-group li{border-bottom:1px solid var(--rule-soft,rgba(75,55,38,.09))}
.sitemap-group a{display:block;padding:9px 2px;font-size:.9rem;color:var(--ink)}
.sitemap-group a:hover{color:var(--terracotta-dark)}
@media (max-width:900px){.sitemap-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:620px){.sitemap-grid{grid-template-columns:1fr}}


/* Newsletter signup. */
.newsletter{
  border:1px solid var(--line);
  background:var(--paper-light);
  padding:38px 40px 34px;
  display:grid;
  grid-template-columns:minmax(0,.85fr) minmax(0,1fr);
  gap:40px;
  align-items:start;
}
.newsletter h2{font:500 1.7rem/1.2 var(--serif);margin:6px 0 12px;letter-spacing:-.02em}
.newsletter p{margin:0 0 10px;color:var(--muted);font-size:.9rem;line-height:1.6}
.newsletter-form .form-row{grid-template-columns:1fr auto;gap:12px;align-items:end}
.newsletter-form .form-field{margin-bottom:14px}
.newsletter-form .btn{white-space:nowrap;height:45px}
.newsletter-status{
  margin:12px 0 0;
  font:400 .84rem/1.5 var(--sans);
  min-height:1px;
}
.newsletter-status:not(:empty){
  padding:10px 13px;
  background:rgba(168,73,46,.07);
  border-left:3px solid var(--terracotta);
  color:var(--terracotta-dark);
}
.newsletter-status.is-ok:not(:empty){
  background:rgba(79,81,55,.09);
  border-left-color:var(--olive);
  color:#3c3f2a;
}
@media (max-width:900px){
  .newsletter{grid-template-columns:1fr;gap:26px;padding:30px 26px}
}
@media (max-width:620px){
  .newsletter-form .form-row{grid-template-columns:1fr}
  .newsletter-form .btn{width:100%}
}


/* Photo credit. */
.image-credit {
  margin-top: 0.5rem;
  font-size: 0.75rem;
  color: #6b6760;
}
.image-credit a {
  /* the footer sets a/p to display:block so the column links stack;
     the credit needs its links back on the same line */
  display: inline;
  margin: 0;
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 2px;
}
.image-credit a:hover {
  color: #342f29;
}


/* Paired actions inside a record row. */
.record-actions{display:flex;flex-wrap:wrap;gap:9px;margin-top:15px}
.btn-small{
  display:inline-flex;
  align-items:center;
  gap:6px;
  padding:9px 15px;
  border:1px solid var(--terracotta);
  font:600 .72rem/1 var(--sans);
  letter-spacing:.06em;
  text-transform:uppercase;
  white-space:nowrap;
}
.btn-small.solid{background:var(--terracotta);color:#fffaf1}
.btn-small.solid:hover{background:var(--terracotta-dark);border-color:var(--terracotta-dark)}
.btn-small.ghost{background:transparent;color:var(--terracotta-dark)}
.btn-small.ghost:hover{background:rgba(168,73,46,.09)}
@media (max-width:620px){
  .record-actions{flex-direction:column;align-items:stretch}
  .btn-small{justify-content:center}
}


/* Tool logo inside a record row. */
.record-logo{
  float:right;
  height:38px;
  width:auto;
  max-width:45%;
  /* negative top margin lets it grow upward into the card padding, so the
     taller logo doesn't push the heading down */
  margin:-14px 0 6px 14px;
  object-fit:contain;
}


/* Tool logo beside the page title. */
.page-header-inner.has-logo{
  max-width:none;
  display:grid;
  grid-template-columns:minmax(0,780px) auto;
  gap:44px;
  align-items:center;
}
.page-header-logo{
  justify-self:end;
  height:68px;
  width:auto;
  max-width:180px;
  object-fit:contain;
}
@media (max-width:1000px){
  .page-header-logo{height:56px;max-width:140px}
}
@media (max-width:760px){
  .page-header-inner.has-logo{grid-template-columns:minmax(0,1fr);gap:22px}
  .page-header-logo{justify-self:start;height:56px;order:-1}
}


/* Per-tool logo sizing. The OTV wordmark is wide and low; the SPARQL mark
   is compact, so equal heights read as unequal sizes. */
.record-logo.logo-otv{height:28px}
.record-logo.logo-sparql{height:50px}
.page-header-logo.logo-otv{height:50px;max-width:150px}
.page-header-logo.logo-sparql{height:86px;max-width:210px}
@media (max-width:1000px){
  .page-header-logo.logo-otv{height:42px}
  .page-header-logo.logo-sparql{height:66px}
}


/* Text Analyzer mark — near-square, sized between OTV and SPARQL. */
.record-logo.logo-ta{height:42px}
.page-header-logo.logo-ta{height:74px;max-width:95px}
@media (max-width:1000px){
  .page-header-logo.logo-ta{height:56px}
}


/* RDF Graph Viewer mark — near-square. */
.record-logo.logo-rdf{height:42px}
.page-header-logo.logo-rdf{height:76px;max-width:100px}
@media (max-width:1000px){
  .page-header-logo.logo-rdf{height:58px}
}


/* KGE logo — wide title graphic. */
.page-header-logo.logo-kge{height:62px;max-width:190px}
@media (max-width:1000px){.page-header-logo.logo-kge{height:48px}}


/* In-page jump bar. Sticks under the masthead so the section list stays
   reachable however far down the page you are. */
.page-nav{
  position:sticky;
  top:0;
  z-index:30;
  border-bottom:1px solid var(--line);
  background:rgba(251,248,241,.94);
  backdrop-filter:blur(6px);
}
.page-nav-inner{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:26px;
  min-height:52px;
  padding:10px 0;
}
.page-nav strong{
  font:600 .66rem/1 var(--sans);
  letter-spacing:.15em;
  text-transform:uppercase;
  color:var(--muted);
}
.page-nav a{
  font:500 .85rem/1 var(--sans);
  color:var(--ink);
  padding:5px 0;
  border-bottom:1px solid transparent;
}
.page-nav a:hover{color:var(--terracotta-dark);border-bottom-color:rgba(168,73,46,.45)}

/* Anchored sections must clear the sticky bar when jumped to. */
.section[id]{scroll-margin-top:70px}

@media (max-width:620px){
  .page-nav-inner{gap:16px;min-height:46px}
  .page-nav strong{display:none}
  .page-nav a{font-size:.8rem}
}


/* Projects page: sticky index on the left, project bodies in the middle,
   each project's Info card on the right. */
.projects-layout{
  display:grid;
  grid-template-columns:minmax(0,.2fr) minmax(0,1fr);
  gap:48px;
  align-items:start;
}
.projects-nav{
  position:sticky;
  top:24px;
  border-right:1px solid var(--line);
  padding-right:22px;
}
.projects-nav h2{
  font:500 .75rem/1 var(--sans);
  text-transform:uppercase;
  letter-spacing:.1em;
  color:var(--muted);
  margin:0 0 15px;
}
.projects-nav ol{list-style:none;counter-reset:proj;margin:0;padding:0}
.projects-nav li{counter-increment:proj;margin:0 0 11px}
.projects-nav a{display:block;font-size:.88rem;line-height:1.35;color:#4f4942}
.projects-nav a::before{
  content:counter(proj,decimal-leading-zero);
  margin-right:9px;
  font:600 .65rem/1 var(--sans);
  letter-spacing:.1em;
  color:var(--terracotta);
}
.projects-nav a:hover{color:var(--terracotta-dark)}
.projects-nav .nav-note{
  margin:18px 0 0;
  font:400 .76rem/1.5 var(--sans);
  color:var(--muted);
}

.projects-main{min-width:0;display:grid;gap:62px}
.project-entry{scroll-margin-top:26px}
.project-entry>.section-heading{margin-bottom:24px}
.project-split{
  display:grid;
  grid-template-columns:minmax(0,1fr) minmax(0,270px);
  gap:38px;
  align-items:start;
}
.project-split .docs-body{max-width:none}
.project-info{position:sticky;top:24px;display:grid;gap:20px}

@media (max-width:1100px){
  .projects-layout{grid-template-columns:minmax(0,1fr);gap:32px}
  .projects-nav{
    position:static;
    border-right:0;
    border-bottom:1px solid var(--line);
    padding:0 0 20px;
  }
  .projects-nav ol{display:flex;flex-wrap:wrap;gap:8px 26px}
  .projects-nav li{margin:0}
  .project-entry{scroll-margin-top:20px}
}
@media (max-width:900px){
  .project-split{grid-template-columns:minmax(0,1fr);gap:26px}
  .project-info{position:static;grid-template-columns:1fr 1fr}
}
@media (max-width:620px){
  .project-info{grid-template-columns:1fr}
}


/* Collapsible publication years. Native <details>, so no JavaScript and it
   stays keyboard-operable. */
.pub-year{border-bottom:1px solid var(--line)}
.pub-year:first-of-type{border-top:1px solid var(--line)}
.pub-year>summary{
  display:flex;
  align-items:baseline;
  gap:14px;
  padding:16px 2px;
  cursor:pointer;
  list-style:none;
  transition:background .15s ease;
}
.pub-year>summary::-webkit-details-marker{display:none}
.pub-year>summary:hover{background:rgba(255,253,248,.6)}
.pub-year>summary::before{
  content:"+";
  flex:none;
  width:20px;
  font:400 1.25rem/1 var(--sans);
  color:var(--terracotta);
  transform:translateY(1px);
}
.pub-year[open]>summary::before{content:"\2212"}
.pub-year .pub-label{font:500 1.2rem/1.2 var(--serif);color:var(--ink)}
.pub-year .pub-count{
  font:600 .68rem/1 var(--sans);
  letter-spacing:.09em;
  text-transform:uppercase;
  color:var(--muted);
}
.pub-year .pub-note{
  flex:1;
  text-align:right;
  font:400 .8rem/1.4 var(--sans);
  color:var(--muted);
}
.pub-year .record-list{border-top:0;margin-bottom:14px}
.pub-year .record:last-child{border-bottom:0}
@media (max-width:700px){
  .pub-year .pub-note{display:none}
}


/* Homepage tool strip: logo instead of a typographic glyph. */
.tools-grid{grid-template-columns:repeat(7,1fr)}
.tool-item img{
  height:34px;
  width:auto;
  max-width:80%;
  margin:0 auto 14px;
  object-fit:contain;
}
@media (max-width:1160px){
  .tools-grid{grid-template-columns:repeat(4,1fr)}
  .tool-item:nth-child(4){border-right:0}
  .tool-item:nth-child(-n+4){border-bottom:1px solid var(--line)}
}
@media (max-width:620px){
  .tools-grid{grid-template-columns:1fr 1fr}
  .tool-item img{height:28px}
}

.initial {
  position: relative;
  float: left;
  width: 4.6rem;
  height: 4.9rem;
  margin: 0.15rem 0.8rem 0.15rem 0;
  display: grid;
  place-items: center;
  border: 1px solid rgba(127, 52, 35, 0.35);
  background:
    linear-gradient(135deg, rgba(168, 73, 46, 0.08), transparent 60%),
    var(--paper-deep, #ebe1d0);
  color: var(--terracotta, #a8492e);
  box-shadow: 0 5px 14px rgba(58, 36, 22, 0.12);
}

.initial span {
  position: static;
  font-family: var(--serif);
  font-size: 3.4rem;
  font-weight: 500;
  line-height: 1;
}

.lab-page-header {
  padding: 28px 0 64px;
  background: var(--paper-light, #fbf8f1);
}

.lab-page-header .breadcrumb {
  margin: 0 0 38px;
}

.lab-header-layout {
  display: grid;
  grid-template-columns: minmax(0, 0.8fr) minmax(480px, 1.2fr);
  align-items: center;
  gap: clamp(40px, 6vw, 80px);
}

.lab-header-copy > p:last-child {
  max-width: 42ch;
  margin: 0;
  font: 400 clamp(1.05rem, 1.6vw, 1.28rem)/1.65 var(--serif);
  color: var(--muted, #655f56);
}

.lab-header-media {
  width: 100%;
}

.lab-header-media img {
  display: block;
  width: 100%;
  height: clamp(260px, 29vw, 390px);
  object-fit: cover;
  object-position: center;
  border-radius: 2px;
  box-shadow: 0 18px 42px rgba(58, 36, 22, .16);
}

@media (max-width: 900px) {
  .lab-header-layout {
    grid-template-columns: 1fr;
    gap: 34px;
  }

  .lab-header-media {
    width: 100%;
  }

  .lab-header-media img {
    height: clamp(240px, 58vw, 380px);
  }
}
