:root{
  --bg:#f3ede2;
  --bg-card:#faf6ee;
  --bg-sunken:#ece3d2;
  --line:#ddd0b8;
  --text:#2e2820;
  --text-dim:#6e6250;
  --text-faint:#a1937b;
  --accent:#9c6b3e;
  --accent-dim:#c79b6c;
  --max:1160px;
}
*{box-sizing:border-box;}
html{scroll-behavior:smooth;}
body{margin:0;background:var(--bg);color:var(--text);font-family:'Inter',sans-serif;-webkit-font-smoothing:antialiased;line-height:1.6;}
::selection{background:var(--accent);color:#faf6ee;}
a{color:inherit;}
img{max-width:100%;}
.wrap{max-width:var(--max);margin:0 auto;padding:0 40px;}
@media (max-width:700px){.wrap{padding:0 22px;}}
.mono{font-family:'JetBrains Mono',monospace;}
.eyebrow{font-size:11.5px;letter-spacing:.24em;text-transform:uppercase;color:var(--accent);font-weight:600;}
h1,h2,h3{font-family:'Fraunces',serif;font-weight:400;margin:0;color:var(--text);}
h2{font-size:clamp(30px,4vw,44px);font-style:italic;letter-spacing:-.01em;font-weight:400;}
header{position:sticky;top:0;z-index:50;background:rgba(243,237,226,.92);backdrop-filter:blur(14px);border-bottom:1px solid var(--line);}
nav.wrap{display:flex;align-items:center;justify-content:space-between;height:76px;}
.brand{font-family:'Fraunces',serif;font-style:italic;font-size:19px;letter-spacing:.01em;text-decoration:none;color:var(--text);}
.brand span{color:var(--accent);}
.navlinks{display:flex; gap:24px; font-size:11.5px; letter-spacing:.08em; text-transform:uppercase; font-weight:500; flex-wrap:wrap; justify-content:flex-end;}
.navlinks a{color:var(--text-dim);text-decoration:none;transition:color .2s;padding-bottom:4px;border-bottom:1px solid transparent;}
.navlinks a:hover{color:var(--text);}
.navlinks a.current{color:var(--accent);border-bottom-color:var(--accent);}
.navlinks a:focus-visible, a:focus-visible, button:focus-visible, summary:focus-visible{outline:1px solid var(--accent);outline-offset:4px;}
.navtoggle{display:none;background:none;border:1px solid var(--line);border-radius:2px;padding:8px 12px;color:var(--text);font-size:11px;letter-spacing:.1em;text-transform:uppercase;}
@media (max-width:760px){
  .navlinks{display:none;position:absolute;top:76px;left:0;right:0;background:var(--bg);border-bottom:1px solid var(--line);flex-direction:column;gap:0;padding:8px 22px 18px;}
  .navlinks.open{display:flex;}
  .navlinks a{padding:13px 0;border-bottom:1px solid var(--line);}
  .navtoggle{display:block;}
}
.pagehero{padding:80px 0 56px;border-bottom:1px solid var(--line);}
.pagehero h1{font-size:clamp(34px,5vw,58px);letter-spacing:-.01em;font-style:italic;}
.pagehero p{color:var(--text-dim);margin-top:18px;max-width:58ch;font-size:16px;}
section{padding:104px 0;border-bottom:1px solid var(--line);}
.section-head{display:flex;justify-content:space-between;align-items:baseline;gap:24px;margin-bottom:52px;flex-wrap:wrap;}
.section-head p{color:var(--text-dim);font-size:14.5px;max-width:40ch;margin:0;}
.btnrow{display:flex;gap:34px;margin-top:34px;flex-wrap:wrap;font-size:13px;letter-spacing:.04em;align-items:center;}
.btnrow a{text-decoration:none;color:var(--text-dim);border-bottom:1px solid var(--line);padding-bottom:3px;transition:color .2s,border-color .2s;}
.btnrow a:hover{color:var(--text);border-color:var(--text-dim);}
.btnrow a.primary{color:var(--accent);border-color:var(--accent-dim);font-family:'Fraunces',serif;font-style:italic;font-size:15px;}
.btnrow a.primary:hover{border-color:var(--accent);}
.trace{border:1px solid var(--line);border-radius:2px;font-size:13px;background:var(--bg-card);}
.trace-head{padding:16px 22px;border-bottom:1px solid var(--line);color:var(--text-faint);font-size:11px;letter-spacing:.2em;text-transform:uppercase;}
.trace-body{padding:22px 22px 24px;}
.trace{overflow:hidden;}
.trace-line{display:flex;justify-content:space-between;gap:14px;padding:11px 16px;border-bottom:1px solid var(--line);opacity:0;animation:fadeIn .6s forwards;}
.trace-line:last-child{border-bottom:none;}
.trace-line .k{color:var(--text-faint);font-size:11px;letter-spacing:.08em;text-transform:uppercase;padding-top:2px;flex-shrink:0;}
.trace-line .v{color:var(--text);text-align:right;font-family:'Fraunces',serif;font-style:italic;font-size:14px;white-space:normal;word-break:break-word;min-width:0;overflow-wrap:break-word;}
.trace-line .v.hi{color:var(--accent);}
@keyframes fadeIn{to{opacity:1;}}
.trace-line:nth-child(1){animation-delay:.1s;}
.trace-line:nth-child(2){animation-delay:.32s;}
.trace-line:nth-child(3){animation-delay:.54s;}
.trace-line:nth-child(4){animation-delay:.76s;}
.trace-line:nth-child(5){animation-delay:.98s;}
.trace-line:nth-child(6){animation-delay:1.2s;}
@media (prefers-reduced-motion: reduce){.trace-line{animation:none;opacity:1;}html{scroll-behavior:auto;}}
.stat-row{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;margin-top:40px;background:var(--line);}
@media (max-width:700px){.stat-row{grid-template-columns:1fr;}}
.stat{padding:28px 24px;background:var(--bg);}
.stat .num{font-family:'Fraunces',serif;font-style:italic;font-weight:400;font-size:34px;color:var(--accent);}
.stat .lbl{font-size:11px;color:var(--text-faint);text-transform:uppercase;letter-spacing:.14em;margin-top:8px;}
.about-body{display:grid;grid-template-columns:1fr 1fr;gap:64px;}
@media (max-width:800px){.about-body{grid-template-columns:1fr;}}
.about-body p{color:var(--text-dim);font-size:16px;}
.about-body strong{color:var(--text);font-weight:500;}
.tl-item{position:relative;padding:34px 0;border-top:1px solid var(--line);}
.tl-item:first-child{border-top:none;padding-top:0;}
.tl-item .when{font-size:11px;color:var(--accent);text-transform:uppercase;letter-spacing:.18em;}
.tl-item h3{font-size:24px;margin-top:12px;font-style:italic;}
.tl-item .org{color:var(--text-dim);font-size:14px;margin-top:4px;font-weight:500;}
.tl-item ul{margin:16px 0 0;padding-left:0;list-style:none;color:var(--text-dim);font-size:15px;}
.tl-item li{margin-bottom:10px;padding-left:18px;position:relative;}
.tl-item li::before{content:"—";position:absolute;left:0;color:var(--text-faint);}
.filter-row{display:flex;gap:0;flex-wrap:wrap;margin-bottom:44px;border-bottom:1px solid var(--line);}
.filter-btn{font-size:12px;letter-spacing:.1em;text-transform:uppercase;background:none;border:none;color:var(--text-faint);padding:10px 20px 12px 0;margin-right:24px;cursor:pointer;border-bottom:1px solid transparent;margin-bottom:-1px;transition:.2s;}
.filter-btn:hover{color:var(--text-dim);}
.filter-btn.active{color:var(--accent);border-bottom-color:var(--accent);}
.proj-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--line);}
@media (max-width:800px){.proj-grid{grid-template-columns:1fr;}}
.card{border:none;border-radius:0;background:var(--bg);padding:30px 30px 10px;}
.card summary{list-style:none;cursor:pointer;display:flex;justify-content:space-between;align-items:flex-start;gap:12px;}
.card summary::-webkit-details-marker{display:none;}
.card summary .plus{color:var(--text-faint);font-size:20px;flex-shrink:0;transition:transform .25s;font-family:'Fraunces',serif;}
.card[open] summary .plus{transform:rotate(45deg);color:var(--accent);}
.card h3{font-size:20px;margin-bottom:8px;font-style:italic;}
.card .tagline{color:var(--text-dim);font-size:14px;margin:0;}
.card .tags{display:flex;flex-wrap:wrap;gap:8px;margin:18px 0 20px;}
.card .tags span{font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--text-faint);border:1px solid var(--line);padding:4px 9px;}
.card .evidence{border-top:1px solid var(--line);margin-top:8px;padding:18px 0 20px;font-size:13.5px;}
.card .evidence .row{display:flex;gap:14px;margin-bottom:12px;align-items:flex-start;}
.card .evidence .row .k{color:var(--accent);min-width:60px;flex-shrink:0;font-size:11px;text-transform:uppercase;letter-spacing:.1em;padding-top:2px;}
.card .evidence .row .v{color:var(--text-dim);line-height:1.6;}
.more-list{display:grid;grid-template-columns:1fr;gap:0;}
.more-item{border-top:1px solid var(--line);padding:22px 0;}
.more-item:first-child{border-top:none;}
.more-item .cat{font-size:11px;text-transform:uppercase;letter-spacing:.16em;color:var(--accent);margin-bottom:8px;font-weight:500;}
.more-item p{margin:0;color:var(--text-dim);font-size:14.5px;}
.more-item b{color:var(--text);font-weight:500;}
.skill-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);}
@media (max-width:900px){.skill-grid{grid-template-columns:repeat(2,1fr);}}
.skill-cat{background:var(--bg);padding:26px 26px 20px;}
.skill-cat .cat-name{font-size:11px;color:var(--accent);text-transform:uppercase;letter-spacing:.16em;margin-bottom:16px;font-weight:500;}
.skill-cat ul{list-style:none;margin:0;padding:0;font-size:14px;color:var(--text-dim);}
.skill-cat li{padding:6px 0;border-bottom:1px solid var(--line);}
.skill-cat li:last-child{border-bottom:none;}
.pub-card{border:1px solid var(--line);border-radius:0;background:var(--bg-card);padding:34px;margin-bottom:1px;}
.pub-card .eyebrow{margin-bottom:14px;display:block;}
.pub-card h3{font-size:22px;margin-bottom:10px;font-style:italic;}
.pub-card p{color:var(--text-dim);font-size:15px;margin:0 0 8px;}
.cert-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:0 24px;margin-top:14px;}
@media (max-width:700px){.cert-grid{grid-template-columns:1fr;}}
.cert-grid div{font-size:14px;color:var(--text-dim);padding:11px 0;border-bottom:1px solid var(--line);}
.cert-grid b{color:var(--text);font-weight:500;}
.contact-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:64px;}
@media (max-width:800px){.contact-grid{grid-template-columns:1fr;}}
.contact-list{display:flex;flex-direction:column;}
.contact-list a{display:flex;justify-content:space-between;align-items:center;padding:22px 0;border-bottom:1px solid var(--line);text-decoration:none;color:var(--text);font-size:16px;font-family:'Fraunces',serif;font-style:italic;}
.contact-list a:hover{color:var(--accent);}
.contact-list a .arrow{font-family:'Inter',sans-serif;color:var(--text-faint);font-style:normal;font-size:13px;}
.contact-list a:hover .arrow{color:var(--accent);}
footer{padding:64px 0 48px;}
.foot-grid{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:20px;}
.foot-links{display:flex;gap:28px;font-size:12px;letter-spacing:.08em;text-transform:uppercase;}
.foot-links a{text-decoration:none;color:var(--text-dim);transition:color .2s;}
.foot-links a:hover{color:var(--accent);}
.foot-note{font-family:'Fraunces',serif;font-style:italic;font-size:13px;color:var(--text-faint);}

/* forced mobile preview mode */
html.force-mobile body{background:var(--bg-sunken); padding:28px 0;}
html.force-mobile .wrap{padding:0 22px;}
html.force-mobile .device-frame{max-width:390px; margin:0 auto; background:var(--bg); border:1px solid var(--line); border-radius:28px; box-shadow:0 12px 40px rgba(0,0,0,.18); overflow:hidden; padding-top:14px;}
html.force-mobile .device-frame::before{content:""; display:block; width:120px; height:5px; background:var(--line); border-radius:4px; margin:0 auto 10px;}
html.force-mobile .navlinks{display:none; position:absolute; top:76px; left:0; right:0; background:var(--bg); border-bottom:1px solid var(--line); flex-direction:column; gap:0; padding:8px 22px 18px;}
html.force-mobile .navlinks.open{display:flex;}
html.force-mobile .navlinks a{padding:13px 0; border-bottom:1px solid var(--line);}
html.force-mobile .navtoggle{display:block;}
html.force-mobile .stat-row{grid-template-columns:1fr !important;}
html.force-mobile .about-body{grid-template-columns:1fr !important;}
html.force-mobile .proj-grid{grid-template-columns:1fr !important;}
html.force-mobile .skill-grid{grid-template-columns:1fr !important;}
html.force-mobile .cert-grid{grid-template-columns:1fr !important;}
html.force-mobile .contact-grid{grid-template-columns:1fr !important;}
html.force-mobile [style*="grid-template-columns"]{grid-template-columns:1fr !important; gap:24px !important;}
html.force-mobile .trace-line{flex-direction:column; align-items:flex-start; gap:4px;}
html.force-mobile .trace-line .v{text-align:left;}
html.force-mobile img{max-width:100%; height:auto;}
html.force-mobile h1{font-size:34px !important;}
html.force-mobile h2{font-size:26px !important;}
html.force-mobile section{padding:56px 0;}
html.force-mobile .pagehero{padding:48px 0 32px;}

.view-toggle{display:flex; align-items:center; gap:8px; font-size:11px; letter-spacing:.08em; text-transform:uppercase; color:var(--text-dim);}
.view-toggle button{background:none; border:1px solid var(--line); color:var(--text-dim); padding:6px 12px; cursor:pointer; font-size:10.5px; letter-spacing:.08em; text-transform:uppercase; transition:.2s;}
.view-toggle button.active{background:var(--text); color:var(--bg); border-color:var(--text);}
.view-toggle button:first-child{border-radius:2px 0 0 2px;}
.view-toggle button:last-child{border-radius:0 2px 2px 0; border-left:none;}

html.force-mobile nav.wrap{flex-wrap:nowrap; height:auto; padding:16px 18px; gap:6px; align-items:center;}
html.force-mobile .brand{font-size:13px; gap:8px !important; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
html.force-mobile .brand img{width:24px !important; height:24px !important; flex-shrink:0;}
html.force-mobile .view-toggle{gap:0; flex-shrink:0;}
html.force-mobile .view-toggle button{padding:6px 9px; font-size:8.5px; letter-spacing:.04em; border-color:var(--line); font-weight:500;}
html.force-mobile .view-toggle button.active{background:var(--accent); border-color:var(--accent); color:var(--bg);}
html.force-mobile .navtoggle{padding:6px 9px; font-size:8.5px; letter-spacing:.04em; flex-shrink:0; border-color:var(--line);}
html.force-mobile .device-frame{overflow-x:hidden;}
