:root{--ivory:#fbfaf6;--paper:#fff;--ink:#172521;--muted:#64706b;--green:#174f43;--green-2:#246c5d;--sage:#dfe9e3;--burgundy:#7a3541;--line:#dce2dd;--surface:#f1f4f0;--shadow:0 16px 40px rgba(23,42,35,.08);--serif:"Newsreader",Georgia,serif;--sans:"Libre Franklin",Arial,sans-serif}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--ivory);color:var(--ink);font-family:var(--sans);font-size:16px;line-height:1.7}img{max-width:100%;display:block}a{color:var(--green);text-decoration:none}a:hover{color:var(--burgundy)}h1,h2,h3,h4{font-family:var(--serif);line-height:1.12;color:var(--ink)}h1{font-size:clamp(2.7rem,6vw,5.6rem)}h2{font-size:clamp(2rem,3.5vw,3.2rem)}h3{font-size:1.45rem}p:last-child{margin-bottom:0}.shell{width:min(1320px,calc(100% - 3rem));margin:auto}.narrow{max-width:860px}.section{padding:clamp(4.5rem,8vw,8rem) 0}.surface{background:var(--surface)}.eyebrow{display:block;color:var(--green-2);font:700 .76rem/1.4 "DM Sans",sans-serif;letter-spacing:.15em;text-transform:uppercase;margin-bottom:1rem}.btn{border-radius:4px;padding:.83rem 1.25rem;font-weight:600;min-height:48px;display:inline-flex;align-items:center;gap:.5rem;justify-content:center}.btn-accent{background:var(--green);border:1px solid var(--green);color:#fff}.btn-accent:hover,.btn-accent:focus{background:#0f3a31;color:#fff}.btn-outline{border:1px solid var(--green);color:var(--green);background:transparent}.btn-light{background:#fff;color:var(--green)}.text-link{display:inline-flex;gap:.5rem;align-items:center;font-weight:600;margin-top:1rem}.skip-link{position:fixed;left:1rem;top:-5rem;z-index:9999;background:#fff;padding:1rem}.skip-link:focus{top:1rem}.site-header{position:sticky;top:0;background:rgba(251,250,246,.96);backdrop-filter:blur(12px);border-bottom:1px solid rgba(220,226,221,.8);z-index:100}.navbar{min-height:82px}.navbar-brand{display:flex;align-items:center;gap:.75rem;color:var(--ink)}.navbar-brand strong,.navbar-brand small{display:block}.navbar-brand strong{font:600 1.05rem var(--serif)}.navbar-brand small{font-size:.65rem;color:var(--muted);letter-spacing:.04em}.brand-mark{width:43px;height:43px;display:grid;place-items:center;background:var(--green);color:#fff;font:600 1rem var(--serif)}.navbar-nav{gap:.1rem}.nav-link{font-size:.76rem;color:var(--ink);padding:.7rem .43rem!important;border-bottom:2px solid transparent}.nav-link:hover,.nav-link.active{color:var(--green);border-color:var(--green)}.nav-contact{margin-left:.3rem;padding:.65rem .8rem;min-height:auto;font-size:.78rem}.navbar-toggler{border:0;font-size:1.8rem}.offcanvas{background:var(--ivory)}.offcanvas .nav-link{font-size:1.05rem;padding:.78rem!important}.offcanvas .nav-contact{margin:.8rem 0;width:100%}.messages{padding-top:1rem}.home-hero{padding:clamp(3rem,7vw,7rem) 0;overflow:hidden}.hero-grid{display:grid;grid-template-columns:1.12fr .88fr;gap:clamp(3rem,7vw,7rem);align-items:center}.welcome{font:500 1.25rem var(--serif);margin-bottom:.15rem}.hero-copy h1{margin:.1rem 0;font-size:clamp(3.4rem,6.7vw,6.8rem)}.hero-copy h2{font-size:1.2rem;color:var(--burgundy);margin:.4rem 0}.professional-title{font-weight:600;font-size:1.1rem}.lead{font-size:1.18rem;color:#48534f;max-width:750px}.hero-actions,.link-row,.social-row{display:flex;flex-wrap:wrap;gap:.8rem}.hero-actions{margin:2rem 0}.social-row a{width:42px;height:42px;border:1px solid var(--line);display:grid;place-items:center;background:#fff}.portrait-wrap{position:relative;padding:1.1rem 1.1rem 4.6rem;background:var(--sage);box-shadow:var(--shadow)}.portrait-wrap:before{content:"";position:absolute;width:160px;height:160px;border:1px solid var(--burgundy);right:-35px;top:-35px;z-index:-1}.hero-portrait,.portrait-placeholder{width:100%;aspect-ratio:4/5;object-fit:cover;object-position:center 20%;background:#e8ece8}.portrait-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--muted);gap:1rem;text-align:center;padding:2rem}.portrait-placeholder i{font-size:6rem}.portrait-note{position:absolute;bottom:1rem;left:2.2rem;right:2.2rem}.portrait-note span,.portrait-note strong{display:block}.portrait-note span{font-size:.72rem;text-transform:uppercase;letter-spacing:.12em;color:var(--green)}.mission-section{background:var(--green);color:#fff}.mission-grid{display:grid;grid-template-columns:1fr 4fr;gap:3rem}.mission-section .eyebrow{color:#bcd6cc}.mission-section blockquote{font:500 clamp(2rem,4vw,3.6rem)/1.25 var(--serif);margin:0}.two-column,.bio-grid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(3rem,8vw,8rem);align-items:start}.section-heading{max-width:780px;margin-bottom:3rem}.section-heading h2{margin-bottom:1rem}.section-heading p{color:var(--muted);font-size:1.05rem}.philosophy-card,.values-panel{padding:clamp(2rem,4vw,4rem);background:var(--paper);border-left:4px solid var(--burgundy);box-shadow:var(--shadow)}.philosophy-card p{font:500 clamp(1.6rem,2.8vw,2.5rem)/1.35 var(--serif)}.card-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1.4rem}.expertise-grid{grid-template-columns:repeat(4,1fr)}.professional-card{background:var(--paper);border:1px solid var(--line);border-radius:7px;overflow:hidden;box-shadow:0 5px 18px rgba(23,42,35,.035);transition:transform .2s,box-shadow .2s}.professional-card:hover{transform:translateY(-4px);box-shadow:var(--shadow)}.expertise-card{padding:2rem}.expertise-card>i{font-size:1.8rem;color:var(--green)}.expertise-card h3{margin:1rem 0 .6rem}.expertise-card p{color:var(--muted)}.metrics{background:#e8eee9}.metrics-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:2rem}.metrics-grid div{border-left:1px solid #aebdb5;padding-left:1.5rem}.metrics-grid strong,.metrics-grid span,.metrics-grid small{display:block}.metrics-grid strong{font:600 3rem var(--serif);color:var(--green)}.metrics-grid span{font-weight:600}.metrics-grid small{color:var(--muted)}.publication-list{border-top:1px solid var(--line)}.publication-item{display:grid;grid-template-columns:100px 1fr;gap:2rem;padding:2rem 0;border-bottom:1px solid var(--line)}.publication-year{font:600 1.5rem var(--serif);color:var(--burgundy)}.publication-item h3{font-size:1.7rem;margin:.6rem 0}.authors,.role{color:var(--green);font-weight:600}.badge-soft,.meta span{display:inline-block;background:var(--sage);color:var(--green);font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;padding:.35rem .55rem}.link-row a{font-weight:600}.timeline{max-width:1020px}.timeline article{display:grid;grid-template-columns:200px 1fr;gap:2.5rem;padding:0 0 3rem;position:relative}.timeline article:before{content:"";position:absolute;left:210px;top:8px;bottom:0;border-left:1px solid #acbbb4}.timeline article:after{content:"";position:absolute;width:11px;height:11px;border:3px solid var(--green);background:var(--ivory);border-radius:50%;left:205px;top:7px}.surface .timeline article:after{background:var(--surface)}.timeline article>div:last-child{padding-left:1.5rem}.timeline h2,.timeline h3{margin-top:0}.timeline-date{font-weight:600;color:var(--burgundy)}.card-media,.card-placeholder{display:block;aspect-ratio:16/10;overflow:hidden;background:#e6ece8}.card-media img{width:100%;height:100%;object-fit:cover;transition:transform .25s}.professional-card:hover .card-media img{transform:scale(1.03)}.card-placeholder{display:grid;place-items:center;color:#8aa096;font-size:3rem}.card-body{padding:1.5rem}.meta{display:flex;gap:.6rem;align-items:center;flex-wrap:wrap;color:var(--muted);font-size:.75rem}.card-body h3 a{color:var(--ink)}.testimonial-card{padding:2rem;margin:0}.testimonial-card blockquote{font:500 1.35rem/1.5 var(--serif);margin:0 0 2rem}.testimonial-card figcaption{display:flex;align-items:center;gap:1rem}.testimonial-card img,.avatar-fallback{width:54px;height:54px;border-radius:50%;object-fit:cover}.avatar-fallback{background:var(--sage);display:grid;place-items:center;font:600 1.3rem var(--serif)}.testimonial-card strong,.testimonial-card span{display:block}.testimonial-card span{font-size:.85rem;color:var(--muted)}.cta{background:var(--burgundy);color:#fff;text-align:center}.cta .eyebrow{color:#edcbd1}.cta h2{color:#fff;max-width:900px;margin:0 auto 1rem}.cta p{max-width:730px;margin:0 auto 2rem}.page-hero,.project-detail-header{background:#e6eee8;padding:clamp(4rem,9vw,8rem) 0}.page-hero h1,.project-detail-header h1{margin:.4rem 0}.page-hero p{font-size:1.15rem;color:#4f5c57}.about-portrait{width:100%;aspect-ratio:4/5;object-fit:cover;object-position:center 20%;box-shadow:var(--shadow)}.prose{font-size:1.04rem}.prose p{margin-bottom:1.4rem}.compact-record{padding:1.4rem 0;border-bottom:1px solid var(--line)}.compact-record h3{margin:0}.cv-intro{display:flex;justify-content:space-between;gap:2rem;align-items:center}.cv-layout{display:grid;grid-template-columns:220px 1fr;gap:5rem}.cv-index{position:sticky;top:110px;align-self:start;display:flex;flex-direction:column;border-left:1px solid var(--line)}.cv-index a{padding:.5rem 1rem}.cv-section{padding-bottom:5rem;scroll-margin-top:100px}.skill-list{display:grid;grid-template-columns:repeat(2,1fr);gap:1rem}.skill-list div{padding:1.3rem;border:1px solid var(--line);background:#fff}.skill-list span,.skill-list strong{display:block}.skill-list span{font-size:.7rem;color:var(--burgundy);text-transform:uppercase;letter-spacing:.08em}.filter-bar{display:flex;align-items:end;gap:1rem;flex-wrap:wrap;margin-bottom:3rem;padding:1.5rem;background:#fff;border:1px solid var(--line)}.filter-bar label{display:block;font-weight:600;font-size:.85rem}.filter-bar select{min-width:190px;padding:.75rem;background:#fff;border:1px solid #aeb8b2}.pagination-wrap{display:flex;justify-content:center;gap:2rem;margin-top:3rem}.article-header{padding:6rem 0 3rem}.article-header h1{font-size:clamp(2.8rem,6vw,5rem)}.back-link{display:inline-block;margin-bottom:2rem}.article-cover,.project-cover{max-width:1120px}.article-cover img,.project-cover img{width:100%;max-height:650px;object-fit:cover}.article-body{padding:4rem 0 7rem;font-size:1.12rem}.article-body h2,.article-body h3{margin-top:2.5rem}.project-layout{display:grid;grid-template-columns:280px 1fr;gap:5rem}.project-layout dt{font-size:.75rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.project-layout dd{font-weight:600;margin-bottom:1.2rem}.filter-pills{display:flex;flex-wrap:wrap;gap:.6rem;margin-bottom:2rem}.filter-pills a{padding:.55rem 1rem;border:1px solid var(--line);background:#fff}.filter-pills a.active{background:var(--green);color:#fff}.gallery-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem}.gallery-item{position:relative;border:0;padding:0;background:#111;overflow:hidden;text-align:left}.gallery-item img{width:100%;aspect-ratio:4/3;object-fit:cover;transition:.25s}.gallery-item:hover img{opacity:.78;transform:scale(1.03)}.gallery-item>span{position:absolute;bottom:0;left:0;right:0;padding:2rem 1rem 1rem;color:#fff;background:linear-gradient(transparent,rgba(0,0,0,.75));font-weight:600}.gallery-item small{display:block}.modal-body img{margin:auto;max-height:75vh}.modal-body p{margin-top:1rem}.contact-grid{display:grid;grid-template-columns:.85fr 1.15fr;gap:6rem}.contact-grid address div{display:flex;gap:1rem;margin:1.5rem 0}.contact-grid address i{color:var(--green);font-size:1.5rem}.contact-grid address span,.contact-grid address a,.contact-grid address strong{display:block}.contact-form{padding:2.5rem}.form-field{margin-bottom:1.25rem}.form-field label{display:block;font-weight:600;margin-bottom:.35rem}.form-field input,.form-field textarea{width:100%;padding:.8rem;border:1px solid #aeb8b2;border-radius:3px;background:#fff}.form-field input:focus,.form-field textarea:focus,.filter-bar select:focus{outline:3px solid rgba(36,108,93,.22);border-color:var(--green)}.field-error{color:#9a2336;font-weight:600;margin:.3rem 0}.empty-state{padding:3rem;text-align:center;border:1px dashed #a8b5ae;background:rgba(255,255,255,.5);grid-column:1/-1}.empty-state i{font-size:2rem;color:var(--green)}.error-page{text-align:center;min-height:60vh;display:grid;place-items:center}.site-footer{background:#15251f;color:#c4d0ca;padding:5rem 0 1.5rem}.footer-grid{display:grid;grid-template-columns:2fr 1fr 1fr;gap:4rem}.footer-brand{font:600 2rem var(--serif);color:#fff}.site-footer h2{color:#fff;font-size:1.25rem}.site-footer a,.site-footer span{color:#c4d0ca;display:block}.site-footer .social-row{margin-top:1rem}.site-footer .social-row a{background:transparent}.footer-bottom{display:flex;justify-content:space-between;border-top:1px solid #365047;margin-top:3rem;padding-top:1.5rem;font-size:.8rem}.footer-bottom span{display:inline}.back-top{position:fixed;right:1.3rem;bottom:1.3rem;width:45px;height:45px;border:0;background:var(--green);color:#fff;opacity:0;pointer-events:none;transition:.2s}.back-top.show{opacity:1;pointer-events:auto}
:focus-visible{outline:3px solid #c66a79;outline-offset:3px}
@media(max-width:1199px){.navbar-collapse{display:none!important}.navbar-toggler{display:block}.card-grid,.expertise-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:900px){.hero-grid,.two-column,.bio-grid,.mission-grid,.cv-layout,.project-layout,.contact-grid{grid-template-columns:1fr}.hero-copy{order:1}.portrait-wrap{order:0;max-width:620px;margin:auto;width:100%}.mission-grid{gap:1rem}.metrics-grid{grid-template-columns:repeat(2,1fr)}.cv-index{display:none}.gallery-grid{grid-template-columns:repeat(2,1fr)}.footer-grid{grid-template-columns:1fr 1fr}.footer-grid>div:first-child{grid-column:1/-1}.timeline article{grid-template-columns:160px 1fr}.timeline article:before{left:170px}.timeline article:after{left:165px}.contact-grid{gap:3rem}}
@media(max-width:575px){.shell{width:min(100% - 2rem,1320px)}.section{padding:4rem 0}.home-hero{padding-top:1.5rem}.hero-copy h1{font-size:3.2rem}.hero-actions{display:grid}.portrait-wrap{padding:.7rem .7rem 5.4rem}.portrait-note{left:1.4rem;right:1.4rem}.card-grid,.expertise-grid,.metrics-grid,.gallery-grid,.skill-list,.footer-grid{grid-template-columns:1fr}.footer-grid>div:first-child{grid-column:auto}.publication-item{grid-template-columns:1fr;gap:.5rem}.timeline article{grid-template-columns:1fr;gap:.6rem;padding-left:1.5rem}.timeline article:before{left:3px}.timeline article:after{left:-2px}.timeline article>div:last-child{padding-left:0}.cv-intro,.footer-bottom{align-items:flex-start;flex-direction:column}.filter-bar{align-items:stretch}.filter-bar select{width:100%}.contact-form{padding:1.3rem}.navbar-brand small{display:none}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation:none!important;transition:none!important}}

/* ==========================
   Motion tokens & base polish
========================== */
:root {
  --ease-out: cubic-bezier(.22, 1, .36, 1);
  --ease-standard: cubic-bezier(.4, 0, .2, 1);
  --motion-fast: 180ms;
  --motion-base: 360ms;
  --motion-slow: 680ms;
}

body {
  overflow-x: clip;
}

.btn,
.text-link,
.link-row a {
  position: relative;
  transition: transform var(--motion-fast), color var(--motion-fast),
              background-color var(--motion-fast), border-color var(--motion-fast);
}

.btn:hover {
  transform: translateY(-2px);
}

.btn:active {
  transform: translateY(0) scale(.98);
}

.text-link i,
.link-row a i {
  transition: transform var(--motion-fast) var(--ease-out);
}

.text-link:hover i,
.link-row a:hover i {
  transform: translateX(4px);
}

/* ==========================
   Loader & reading progress
========================== */
.site-loader {
  position: fixed;
  inset: 0;
  z-index: 10000;
  display: grid;
  place-items: center;
  background: var(--ivory);
  opacity: 1;
  visibility: visible;
  transition: opacity 420ms var(--ease-standard), visibility 420ms;
}

.site-loader.is-hidden {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}

.loader-inner {
  text-align: center;
}

.loader-inner p {
  margin-top: 1.2rem;
  color: var(--green);
  font: 600 .74rem "DM Sans", sans-serif;
  letter-spacing: .16em;
  text-transform: uppercase;
}

.loader-mark {
  position: relative;
  width: 92px;
  height: 92px;
  display: grid;
  place-items: center;
  margin: auto;
  border: 1px solid var(--line);
  border-radius: 50%;
  color: var(--green);
  font: 600 1.5rem var(--serif);
}

.loader-mark i {
  position: absolute;
  inset: -1px;
  border: 2px solid transparent;
  border-top-color: var(--burgundy);
  border-right-color: var(--burgundy);
  border-radius: inherit;
  animation: loaderOrbit 1.2s linear infinite;
}

.scroll-progress {
  position: fixed;
  z-index: 10001;
  inset: 0 0 auto;
  height: 3px;
  pointer-events: none;
}

.scroll-progress span {
  display: block;
  width: 100%;
  height: 100%;
  background: var(--burgundy);
  transform: scaleX(0);
  transform-origin: left;
}

@keyframes loaderOrbit {
  to { transform: rotate(360deg); }
}

/* ==========================
   Header & premium navigation
========================== */
.site-header {
  transition: box-shadow var(--motion-base), background-color var(--motion-base);
}

.site-header.is-scrolled {
  background: rgba(251, 250, 246, .9);
  box-shadow: 0 8px 28px rgba(23, 42, 35, .08);
}

.navbar,
.brand-mark {
  transition: min-height var(--motion-base), width var(--motion-base),
              height var(--motion-base), transform var(--motion-base);
}

.site-header.is-scrolled .navbar {
  min-height: 68px;
}

.site-header.is-scrolled .brand-mark {
  transform: scale(.92);
}

.nav-link {
  font-size: .88rem;
}

.menu-trigger {
  position: relative;
  width: 46px;
  height: 46px;
  padding: 0;
  border: 1px solid var(--line);
  border-radius: 50%;
  background: #fff;
}

.menu-trigger span {
  position: absolute;
  left: 13px;
  width: 20px;
  height: 2px;
  background: var(--green);
  transition: transform var(--motion-base) var(--ease-out), opacity var(--motion-fast);
}

.menu-trigger span:nth-child(1) { transform: translateY(-6px); }
.menu-trigger span:nth-child(3) { transform: translateY(6px); }
.menu-trigger.is-open span:nth-child(1) { transform: rotate(45deg); }
.menu-trigger.is-open span:nth-child(2) { opacity: 0; }
.menu-trigger.is-open span:nth-child(3) { transform: rotate(-45deg); }

.mobile-nav {
  width: min(92vw, 420px) !important;
  border-left: 1px solid var(--line) !important;
  border-radius: 22px 0 0 22px;
  box-shadow: -24px 0 60px rgba(23, 42, 35, .18);
}

.mobile-nav .offcanvas-header {
  align-items: flex-start;
  padding: 1.5rem 1.35rem 1rem;
}

.mobile-identity {
  display: flex;
  align-items: center;
  gap: .85rem;
  min-width: 0;
}

.mobile-identity img,
.mobile-identity .brand-mark {
  width: 50px;
  height: 50px;
  flex: 0 0 50px;
  border-radius: 14px;
  object-fit: cover;
}

.mobile-identity h2 {
  margin: 0;
  font-size: 1.2rem;
}

.mobile-identity p {
  margin: .15rem 0 0;
  max-width: 245px;
  color: var(--muted);
  font-size: .72rem;
  line-height: 1.35;
}

.modal-close {
  width: 42px;
  height: 42px;
  flex: 0 0 42px;
  display: grid;
  place-items: center;
  border: 1px solid var(--line);
  border-radius: 50%;
  background: #fff;
  color: var(--ink);
}

.mobile-nav .offcanvas-body {
  display: flex;
  flex-direction: column;
  padding: .25rem 1.15rem 1.25rem;
}

.mobile-nav-group {
  margin-top: 1rem;
}

.mobile-nav-group h3 {
  margin: 0 0 .35rem .8rem;
  color: var(--muted);
  font: 700 .68rem "DM Sans", sans-serif;
  letter-spacing: .14em;
  text-transform: uppercase;
}

.mobile-nav-group a {
  display: grid;
  grid-template-columns: 26px 1fr 20px;
  align-items: center;
  gap: .7rem;
  min-height: 52px;
  padding: .65rem .8rem;
  border-left: 3px solid transparent;
  border-radius: 8px;
  color: var(--ink);
  font-weight: 600;
  opacity: 0;
  transform: translateX(12px);
}

.mobile-nav.show .mobile-nav-group a {
  opacity: 1;
  transform: none;
  transition: opacity 300ms var(--ease-out), transform 300ms var(--ease-out),
              background-color var(--motion-fast);
}

.mobile-nav.show .mobile-nav-group a:nth-of-type(2) { transition-delay: 35ms; }
.mobile-nav.show .mobile-nav-group a:nth-of-type(3) { transition-delay: 70ms; }
.mobile-nav.show .mobile-nav-group a:nth-of-type(4) { transition-delay: 105ms; }
.mobile-nav.show .mobile-nav-group a:nth-of-type(5) { transition-delay: 140ms; }

.mobile-nav-group a.active,
.mobile-nav-group a:hover {
  border-left-color: var(--green);
  background: var(--sage);
  color: var(--green);
}

.mobile-nav-group a > i:last-child {
  transition: transform var(--motion-fast);
}

.mobile-nav-group a:hover > i:last-child {
  transform: translateX(4px);
}

.mobile-contact {
  width: 100%;
  margin-top: 1.4rem;
}

/* ==========================
   Reveals, cards & timelines
========================== */
.js [data-reveal] {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity var(--motion-slow) var(--ease-out) var(--reveal-delay, 0ms),
              transform var(--motion-slow) var(--ease-out) var(--reveal-delay, 0ms);
}

.js [data-reveal="fade-left"] { transform: translateX(-24px); }
.js [data-reveal="fade-right"] { transform: translateX(24px); }
.js [data-reveal="scale"],.js [data-reveal="soft-scale"] { transform: scale(.97); }
.js [data-reveal="image"] { transform: translateY(18px) scale(.975); clip-path:inset(0 0 8% 0); }
.js [data-reveal="clip"] { clip-path:inset(0 0 14% 0); }
.js [data-reveal].is-visible { opacity: 1; transform: none; clip-path:inset(0); }

.professional-card {
  transition: transform var(--motion-base) var(--ease-out),
              box-shadow var(--motion-base), border-color var(--motion-base);
}

.professional-card:hover {
  transform: translateY(-7px);
  border-color: #b4c8be;
}

.card-media img {
  transition: transform 600ms var(--ease-out);
}

.professional-card:hover .card-media img {
  transform: scale(1.055);
}

.timeline::before {
  content: "";
  position: absolute;
  width: 1px;
  background: var(--line);
}

/* ==========================
   Content preview modal
========================== */
.modal-backdrop.show {
  opacity: .72;
  backdrop-filter: blur(5px);
}

.content-modal .modal-dialog {
  max-width: 980px;
}

.content-modal .modal-content {
  overflow: hidden;
  border: 1px solid rgba(255, 255, 255, .25);
  border-radius: 14px;
  box-shadow: 0 34px 90px rgba(9, 20, 16, .28);
}

.content-modal.fade .modal-dialog {
  transform: translateY(18px) scale(.975);
  transition: transform var(--motion-base) var(--ease-out);
}

.content-modal.show .modal-dialog {
  transform: none;
}

.content-modal-bar {
  position: sticky;
  z-index: 3;
  top: 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 1rem 1.25rem;
  border-bottom: 1px solid var(--line);
  background: rgba(255, 255, 255, .94);
  backdrop-filter: blur(10px);
}

.content-modal .modal-body {
  padding: clamp(1.5rem, 5vw, 4.5rem);
}

.preview-article h2,
.preview-publication h2 {
  max-width: 820px;
  margin: 1rem 0;
  font-size: clamp(2.2rem, 5vw, 4.4rem);
}

.preview-cover {
  width: 100%;
  max-height: 520px;
  margin: 2rem 0;
  object-fit: cover;
}

.preview-cover.publication-cover {
  width: min(320px, 100%);
  max-height: 440px;
}

.preview-prose {
  max-width: 760px;
  margin: 2.5rem auto;
  font-size: 1.08rem;
}

.preview-actions,
.detail-actions {
  display: flex;
  flex-wrap: wrap;
  gap: .75rem;
  margin-top: 2rem;
}

.preview-skeleton {
  display: grid;
  gap: .9rem;
}

.skeleton-line,
.skeleton-media {
  display: block;
  overflow: hidden;
  border-radius: 5px;
  background: #e4e9e5;
}

.skeleton-line { width: 100%; height: 17px; }
.skeleton-line.short { width: 24%; }
.skeleton-line.medium { width: 68%; }
.skeleton-line.title { width: 85%; height: 48px; margin: .5rem 0; }
.skeleton-media { height: 260px; margin: 1rem 0; }

.skeleton-line::after,
.skeleton-media::after {
  content: "";
  display: block;
  width: 45%;
  height: 100%;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.65), transparent);
  animation: shimmer 1.25s infinite;
}

@keyframes shimmer {
  from { transform: translateX(-110%); }
  to { transform: translateX(260%); }
}

.preview-error {
  padding: 3rem 1rem;
  text-align: center;
}

.preview-error > i {
  color: var(--burgundy);
  font-size: 2.5rem;
}

.citation-block {
  margin: 2rem 0;
  padding: 1.5rem;
  border-left: 3px solid var(--burgundy);
  background: var(--surface);
}

.publication-facts {
  display: grid;
  gap: 1rem;
}

.publication-facts div {
  padding-bottom: .8rem;
  border-bottom: 1px solid var(--line);
}

.publication-facts dt {
  color: var(--muted);
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .08em;
  text-transform: uppercase;
}

.publication-facts dd {
  margin: .25rem 0 0;
}

.publication-detail-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 300px;
  gap: clamp(3rem, 8vw, 7rem);
}

/* ==========================
   Gallery placeholders & forms
========================== */
.gallery-placeholder {
  display: grid;
  place-items: center;
  aspect-ratio: 4 / 3;
  background: linear-gradient(135deg, var(--green), var(--green-2));
  color: rgba(255,255,255,.75);
}

.gallery-placeholder i {
  font-size: 3rem;
}

.form-field input,
.form-field textarea {
  transition: border-color var(--motion-fast), box-shadow var(--motion-fast),
              background-color var(--motion-fast);
}

.form-field:focus-within label {
  color: var(--green);
}

.button-loader {
  width: 15px;
  height: 15px;
  border: 2px solid rgba(255,255,255,.45);
  border-top-color: #fff;
  border-radius: 50%;
  animation: loaderOrbit .75s linear infinite;
}

/* ==========================
   Responsive & reduced motion
========================== */
@media (max-width: 1399.98px) {
  .navbar-collapse { display: none !important; }
  .navbar-toggler { display: block; }
}

@media (min-width: 1400px) {
  .navbar-toggler { display: none; }
}

@media (max-width: 767px) {
  .navbar { min-height: 64px; }
  .navbar-brand .brand-mark { width: 38px; height: 38px; }
  .brand-copy { min-width: 0; max-width: calc(100vw - 125px); }
  .brand-copy strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .brand-copy small { display: none; }
  .content-modal .modal-dialog { min-height: 100%; margin: 0; }
  .content-modal .modal-content { min-height: 100vh; border-radius: 0; }
  .content-modal .modal-body { padding: 1.5rem 1rem 5rem; }
  .preview-actions { position: sticky; bottom: -1.5rem; margin-inline: -1rem; padding: 1rem; background: rgba(255,255,255,.96); border-top: 1px solid var(--line); }
  .preview-actions .btn { flex: 1 1 180px; }
  .publication-detail-grid { grid-template-columns: 1fr; }
}

@media (max-width: 360px) {
  .shell { width: calc(100% - 1.4rem); }
  .navbar-brand strong { font-size: .92rem; }
  .menu-trigger { width: 42px; height: 42px; }
  .preview-article h2, .preview-publication h2 { font-size: 2rem; }
}

@media (prefers-reduced-motion: reduce) {
  .site-loader { transition-duration: 100ms; }
  .loader-mark i, .skeleton-line::after, .skeleton-media::after, .button-loader { animation: none; }
  [data-reveal] { opacity: 1; transform: none; }
  .mobile-nav-group a { opacity: 1; transform: none; }
}

/* ==============================
   Editorial portrait & section choreography
================================ */
:root {
  --ease-premium: cubic-bezier(.22, 1, .36, 1);
  --motion-medium: 420ms;
  --motion-reveal: 720ms;
  --motion-slow: 950ms;
  --shadow-sm: 0 5px 18px rgba(23,42,35,.04);
  --shadow-md: 0 18px 42px rgba(23,42,35,.10);
  --shadow-lg: 0 30px 80px rgba(23,42,35,.16);
}

.home-hero{position:relative;background:radial-gradient(circle at 82% 35%,rgba(109,145,127,.17),transparent 27%),linear-gradient(rgba(23,79,67,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(23,79,67,.025) 1px,transparent 1px);background-size:auto,42px 42px,42px 42px}
.hero-ambient{position:absolute;right:-8vw;top:12%;width:34vw;aspect-ratio:1;border:1px solid rgba(122,53,65,.14);border-radius:50%;pointer-events:none}
.portrait-stage{position:relative;isolation:isolate;padding:1rem 1rem 5rem;transition:transform var(--motion-medium) var(--ease-premium)}
.portrait-panel{position:absolute;inset:5% -4% 9% 9%;z-index:-2;background:var(--green);transform:translate3d(0,var(--portrait-depth,0),0)}
.portrait-ambient{position:absolute;width:58%;aspect-ratio:1;right:-12%;top:-8%;z-index:-3;border-radius:50%;background:rgba(139,170,152,.32);filter:blur(2px)}
.portrait-frame{position:relative;padding:12px;background:#fffdf7;border:1px solid rgba(23,79,67,.25);box-shadow:var(--shadow-lg)}
.portrait-media{overflow:hidden;aspect-ratio:4/5;background:#e8ece8;transform:translate3d(0,var(--portrait-shift,0),0)}
.portrait-media .hero-portrait{width:100%;height:100%;object-fit:cover;object-position:var(--portrait-x) var(--portrait-y);transform:scale(var(--portrait-zoom));transform-origin:var(--portrait-x) var(--portrait-y)}
.portrait-corner{position:absolute;width:38px;height:38px;border-color:var(--burgundy);border-style:solid;pointer-events:none}.corner-a{left:-7px;top:-7px;border-width:2px 0 0 2px}.corner-b{right:-7px;bottom:-7px;border-width:0 2px 2px 0}
.portrait-credential-card{position:absolute;z-index:3;right:-1.4rem;bottom:.6rem;width:min(86%,390px);padding:1.1rem 1.35rem;background:rgba(255,253,247,.96);border-left:3px solid var(--burgundy);box-shadow:var(--shadow-md);transform:translate3d(0,var(--portrait-depth,0),0)}
.portrait-credential-card span,.portrait-credential-card strong{display:block}.portrait-credential-card span{margin-bottom:.35rem;color:var(--green);font:700 .67rem "DM Sans",sans-serif;letter-spacing:.11em;text-transform:uppercase}.portrait-credential-card strong{font:600 1.05rem/1.35 var(--serif)}
.loader-inner small{display:block;margin-top:.35rem;color:var(--muted);font-size:.62rem;letter-spacing:.08em}
.page-hero{position:relative;overflow:hidden;background:linear-gradient(135deg,#e6eee8,#f2f4ef)}.page-hero:after{content:"";position:absolute;width:360px;height:360px;right:-110px;top:-190px;border:1px solid rgba(122,53,65,.18);border-radius:50%}.page-hero-accent{position:absolute;left:0;bottom:0;width:15%;height:3px;background:var(--burgundy)}
.section-heading[data-reveal="heading"]{overflow:hidden}.section-heading[data-reveal="heading"] .eyebrow{transition-delay:var(--reveal-delay,0ms)}.section-heading[data-reveal="heading"] h2{transition-delay:calc(var(--reveal-delay,0ms) + 60ms)}.section-heading[data-reveal="heading"] p{transition-delay:calc(var(--reveal-delay,0ms) + 150ms)}
.section-heading .eyebrow,.section-heading h2,.section-heading p{transition:opacity var(--motion-reveal) var(--ease-premium),transform var(--motion-reveal) var(--ease-premium)}
.js .section-heading:not(.is-visible) .eyebrow,.js .section-heading:not(.is-visible) h2,.js .section-heading:not(.is-visible) p{opacity:0;transform:translateY(20px)}
.expertise-card>i{display:grid;place-items:center;width:48px;height:48px;border-radius:50%;transition:transform var(--motion-medium) var(--ease-premium),background var(--motion-fast)}.expertise-card:hover>i{transform:translateY(-2px);background:var(--sage)}.expertise-card:before{content:"";display:block;position:absolute;inset:0 100% auto 0;height:2px;background:var(--green);transition:right var(--motion-medium) var(--ease-premium)}.expertise-card{position:relative}.expertise-card:hover:before{right:0}
.publication-item{position:relative;transition:background var(--motion-fast),padding var(--motion-medium)}.publication-item:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:var(--burgundy);transform:scaleX(0);transform-origin:left;transition:transform var(--motion-reveal) var(--ease-premium)}.publication-item.is-visible:after{transform:scaleX(1)}.publication-item:hover{padding-inline:1rem;background:rgba(223,233,227,.35)}.publication-item h3{transition:transform var(--motion-fast)}.publication-item:hover h3{transform:translateX(4px)}
.motion-timeline{position:relative}.motion-timeline:before{content:"";position:absolute;left:210px;top:8px;bottom:0;width:1px;background:#acbbb4;transform:scaleY(0);transform-origin:top;transition:transform 1.1s var(--ease-premium)}.motion-timeline.is-drawn:before{transform:scaleY(1)}.motion-timeline article:before{display:none}.js .motion-timeline article:after{opacity:0;transform:scale(.35);transition:opacity var(--motion-medium),transform var(--motion-medium) var(--ease-premium)}.js .motion-timeline article.is-timeline-visible:after{opacity:1;transform:scale(1)}
.cv-index a{position:relative;transition:color var(--motion-fast),background var(--motion-fast)}.cv-index a.is-active{color:var(--green);background:var(--sage);font-weight:700}.cv-index a.is-active:before{content:"";position:absolute;left:-1px;top:0;bottom:0;width:2px;background:var(--green)}
.gallery-item:after{content:"\f341";position:absolute;right:1rem;top:1rem;color:#fff;font-family:"bootstrap-icons";opacity:0;transform:scale(.8);transition:opacity var(--motion-fast),transform var(--motion-fast)}.gallery-item:hover:after,.gallery-item:focus-visible:after{opacity:1;transform:none}
.gallery-item{border-radius:7px;box-shadow:var(--shadow-sm);transition:transform var(--motion-medium),box-shadow var(--motion-medium)}.gallery-item:hover{transform:translateY(-5px);box-shadow:var(--shadow-md)}
.back-top{border-radius:50%;box-shadow:var(--shadow-md);transform:translateY(12px) scale(.9);transition:opacity var(--motion-fast),transform var(--motion-medium) var(--ease-premium)}.back-top.show{transform:none}.back-top:hover i{display:inline-block;transform:translateY(-2px)}
.site-footer .footer-grid>div{transition-delay:var(--reveal-delay,0ms)}

@media(max-width:900px){
  .portrait-stage{max-width:620px;margin:auto;width:100%}.portrait-credential-card{right:.2rem}.motion-timeline:before{left:170px}
}
@media(max-width:575px){
  .portrait-stage{padding:.6rem .2rem 6rem}.portrait-panel{inset:4% 0 10% 6%}.portrait-credential-card{left:1rem;right:1rem;bottom:.7rem;width:auto}.motion-timeline:before{left:3px}.hero-ambient{display:none}
}
@media(prefers-reduced-motion:reduce){
  .portrait-media,.portrait-panel,.portrait-credential-card{transform:none!important}.motion-timeline:before{transform:scaleY(1)}.js .section-heading:not(.is-visible) .eyebrow,.js .section-heading:not(.is-visible) h2,.js .section-heading:not(.is-visible) p{opacity:1;transform:none}.js [data-reveal]{opacity:1;transform:none;clip-path:none}
}
