/* Design system — tokens, base, shared components, header, menu, footer. */
@font-face{font-family:Inter;src:url(assets/InterVariable.woff2) format('woff2');font-display:swap;font-weight:100 900}

:root{
 /* Semantic colour roles (qa/color-study): backgrounds, surfaces, text, borders, accent. */
 --bg:#f7f5ef;--bg-alt:#eeece4;--bg-tint:#e8eee7;--surface:#fbfaf6;--surface-raised:#fff;
 --surface-brand:#123f34;--surface-brand-deep:#0e3229;--surface-screen:#121614;--surface-stage:#0b1714;
 --text:#171918;--text-muted:#5e625c;--text-on-brand:#f2f1eb;--text-muted-on-brand:#bfd0c7;
 --border:#dad9d1;--border-strong:#c2c5bd;--border-interactive:#7f847c;--border-on-brand:rgba(242,241,235,.16);
 --accent:#196451;--accent-hover:#124c3d;--accent-soft:#dce8e1;--accent-on-brand:#8fc3ae;--accent-contrast:#f7f5ef;
 --shadow-raised:0 18px 40px -24px rgba(23,25,24,.35);
 /* Original names, kept as aliases of the roles. */
 --paper:var(--bg);--paper-2:var(--bg-alt);--ink:var(--text);--ink-soft:#2b2e2c;--muted:var(--text-muted);--muted-on-paper-2:var(--text-muted);
 --line:var(--border);--line-strong:var(--border-strong);--accent-ink:var(--accent-contrast);--sage:#dfe5dc;--mint:#8fc3ae;
 --night:#111312;--night-2:#191c1a;--night-3:#222624;--night-line:#2f3532;--night-ink:#f2f1eb;--night-muted:#a3aba5;
 --plate:#f6f5ef;
 --mono:ui-monospace,"SF Mono",SFMono-Regular,Menlo,Consolas,monospace;
 --gutter:clamp(20px,5.5vw,88px);--section:clamp(88px,10vw,150px);--header-h:76px;
 --ease-out:cubic-bezier(.22,1,.36,1);
 color-scheme:light;
}
:root[data-theme=dark]{
 --bg:#141716;--bg-alt:#1a1e1c;--bg-tint:#0f1d18;--surface:#212624;--surface-raised:#2a302d;
 --surface-brand:#133a30;--surface-brand-deep:#0d2620;--surface-screen:#0e1210;--surface-stage:#0a1512;
 --text:#ecede7;--text-muted:#a7afa9;--text-on-brand:#eef1ec;--text-muted-on-brand:#b5c9bf;
 --border:#2e3431;--border-strong:#46504b;--border-interactive:#6b766f;--border-on-brand:rgba(238,241,236,.14);
 --accent:#8fc3ae;--accent-hover:#a9d4c2;--accent-soft:#1f3a31;--accent-on-brand:#8fc3ae;--accent-contrast:#101412;
 --shadow-raised:0 18px 40px -24px rgba(0,0,0,.7);
 --ink-soft:#d9dbd5;--sage:#1d2420;--plate:#f2f1eb;
 --night:#0c0e0d;--night-2:#151816;--night-3:#1d211f;--night-line:#2a302d;
 color-scheme:dark;
}
/* Theme switch: every colour changes in the same frame (js/app.js). */
.theme-switching *,.theme-switching *::before,.theme-switching *::after{transition:none!important}

*,*::before,*::after{box-sizing:border-box}
html{scroll-padding-top:calc(var(--header-h) + 12px);-webkit-text-size-adjust:100%;overflow-x:clip}
body{margin:0;background:var(--paper);color:var(--ink);font:17px/1.6 Inter,system-ui,Arial,sans-serif;font-feature-settings:"ss01","cv11";-webkit-font-smoothing:antialiased;overflow-x:clip}
img,svg{display:block;max-width:100%}
button,input{font:inherit;color:inherit}
button{cursor:pointer;border:0;background:none;padding:0}
a{color:inherit;text-decoration:none}
button,a{-webkit-tap-highlight-color:transparent}
:focus-visible{outline:2px solid var(--focus-color,var(--accent));outline-offset:4px;border-radius:2px}
h1,h2,h3,h4,p,ul,ol,dl,dd,figure{margin:0}
ul,ol{padding:0;list-style:none}
h1,h2,h3,h4{font-weight:520;line-height:1.08}
p{max-width:66ch}
::selection{background:var(--accent);color:var(--accent-ink)}
.vh{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}
.wrap{padding-inline:var(--gutter)}
.section{padding-block:var(--section)}
.skip{position:fixed;left:16px;top:-80px;z-index:100;background:var(--ink);color:var(--paper);padding:12px 16px;border-radius:6px}
.skip:focus{top:12px}

/* Typography */
.display-2{font-size:clamp(36px,4.7vw,76px);letter-spacing:-.052em;line-height:1.02;max-width:16ch;font-weight:540}
.lead{font-size:clamp(17px,1.35vw,21px);line-height:1.5;letter-spacing:-.012em;color:var(--muted);max-width:52ch}
.eyebrow{display:flex;align-items:center;gap:14px;font-size:12px;line-height:1;letter-spacing:.09em;text-transform:uppercase;margin-bottom:28px;color:var(--muted)}
.eyebrow-index{font-variant-numeric:tabular-nums;color:var(--accent);letter-spacing:.02em}
.eyebrow-index::after{content:"";display:inline-block;width:28px;height:1px;background:currentColor;vertical-align:middle;margin-left:14px;opacity:.6}
.mini-label{font-size:12px;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);margin-bottom:16px}
.split-line{display:block}
.split-mask{overflow:clip;padding-bottom:.08em;margin-bottom:-.08em}

/* Chips & stacks */
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chips li{font-size:13px;line-height:1;padding:8px 12px;border:1px solid var(--line-strong);border-radius:100px;white-space:nowrap}
.stack{display:flex;flex-wrap:wrap;gap:6px 16px}
.stack li{font-size:13px;line-height:1.3;display:flex;align-items:center;gap:8px}
.stack li::before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor;opacity:.55}

/* CTA — fill layer reverses with easeReverse (js/animations/cta.js) */
.cta{--cta-ink:var(--ink);--cta-fill:var(--ink);--cta-on:var(--paper);--cta-border:var(--line-strong);position:relative;isolation:isolate;display:inline-flex;align-items:center;justify-content:space-between;gap:20px;min-height:56px;padding:14px 26px;border:1px solid var(--cta-border);border-radius:100px;overflow:hidden;font-size:15px;line-height:1.2;color:var(--cta-ink);transition:color .22s ease,border-color .22s ease;vertical-align:middle;white-space:nowrap}
.cta-fill{position:absolute;inset:-1px;z-index:-1;border-radius:inherit;background:var(--cta-fill);transform:translateY(102%)}
.cta-label,.cta-icon{position:relative}
.cta-icon{display:flex;flex:none;width:22px;height:22px;align-items:center;justify-content:center}
.cta svg{width:22px;height:22px;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}
.cta.is-active{color:var(--cta-on);border-color:var(--cta-fill)}
.cta.is-animated.is-active{color:var(--cta-ink)}
.cta.is-animated{transition:border-color .22s ease}
/* The moving fill clips a decorative copy of the label to keep both halves
   readable throughout the original fill animation, including interruption. */
.cta-contrast{position:absolute;inset:0;display:flex;align-items:center;justify-content:space-between;gap:inherit;padding:inherit;pointer-events:none;color:var(--cta-on);clip-path:inset(100% 0 0)}
.cta.is-static{transition:none}
.cta.is-static .cta-fill{visibility:hidden}
.cta.is-static.is-active{background:var(--cta-fill)}
.cta--solid{--cta-ink:var(--paper);--cta-border:var(--ink);--cta-fill:var(--accent);--cta-on:var(--accent-ink);background:var(--ink)}
.cta--solid.is-active{border-color:var(--accent)}
.cta--light{--cta-ink:#111312;--cta-border:#f2f1eb;--cta-fill:var(--mint);--cta-on:#111312;background:#f2f1eb}
.cta--ghost-light{--cta-ink:#f2f1eb;--cta-border:#4b534e;--cta-fill:#f2f1eb;--cta-on:#111312}
.text-link{display:inline-flex;align-items:center;gap:8px;min-height:44px;font-size:15px;border-bottom:1px solid currentColor;padding-bottom:2px}
.text-link:hover{color:var(--accent)}

/* Header (homepage composition in homepage.css) */
.header{position:fixed;inset:0 0 auto;z-index:30;height:var(--header-h);color:var(--ink);pointer-events:none}
.header::before{content:"";position:absolute;inset:0;background:var(--paper);border-bottom:1px solid var(--line);opacity:0;transition:opacity .25s ease}
.header.is-floating::before{opacity:1}
.header-inner{position:relative;height:100%;display:flex;align-items:center;gap:23px;pointer-events:auto}
.brand{font-size:42px;font-weight:650;letter-spacing:-4px;line-height:1;transform:translateY(-3px)}
.brand span{color:var(--accent)}
.header-role{font-size:14px;line-height:1.25;padding-left:19px;border-left:1px solid var(--line);color:var(--muted)}
.header-actions{margin-left:auto;display:flex;align-items:center;gap:20px}
.pref{min-width:44px;min-height:44px;display:inline-flex;align-items:center;justify-content:center;font-size:14px;letter-spacing:.02em}
.pref svg{width:25px;height:25px}
.header .pref--language{justify-content:flex-end;padding-right:1px}
.menu-toggle{display:inline-flex;align-items:center;gap:15px;min-height:42px;padding:8px 17px 8px 18px;border:1px solid var(--line-strong);border-radius:100px;font-size:14px}
.menu-lines{display:grid;gap:4px;width:18px}
.menu-lines i{display:block;height:1.4px;background:currentColor;border-radius:1px;transform-origin:50% 50%}
.header-actions button:hover,.header-role:hover{color:var(--accent)}

/* Menu — single timeline adapted from GSAP qEaKJZr (js/animations/menu.js) */
#menu-layer{position:fixed;inset:0;z-index:50;overflow:hidden;visibility:hidden}
#menu-layer[hidden]{display:none}
.overlay{position:absolute;inset:0;background:rgba(8,10,9,.55)}
#navigation{position:absolute;right:0;top:0;height:100%;width:min(620px,92vw);display:flex;flex-direction:column}
.menu-panel{background:var(--paper);color:var(--ink);padding-inline:44px;flex-shrink:0;transform-origin:50% 50%}
.menu-panel--top{padding-top:22px;flex:1;display:flex;flex-direction:column;min-height:0}
.menu-panel--middle{height:72px}
.menu-panel--bottom{padding-bottom:28px;display:flex;justify-content:space-between;gap:20px;align-items:center;flex-wrap:wrap}
.menu-top{display:flex;align-items:center;justify-content:space-between;gap:20px;font-size:13px;min-height:54px;border-bottom:1px solid var(--line)}
.menu-close{min-height:44px;font-size:14px}
.menu-close span{font-size:20px;margin-left:6px}
.menu-prefs{display:none;gap:6px;padding-top:10px}
.menu-prefs .pref{border:1px solid var(--line);border-radius:100px;padding:0 14px}
#navigation nav{display:flex;flex-direction:column;margin:auto 0;padding:28px 0}
#navigation nav a{display:grid;grid-template-columns:44px 1fr auto;align-items:baseline;font-size:clamp(28px,3.7vw,46px);letter-spacing:-.045em;line-height:1.32;padding:4px 0}
.menu-index{font-size:12px;letter-spacing:.04em;color:var(--muted);font-variant-numeric:tabular-nums}
.menu-arrow{font-size:22px;color:var(--muted)}
#navigation nav a:hover .menu-label,#navigation nav a:focus-visible .menu-label{color:var(--accent)}
.menu-mail,.menu-cv{font-size:14px;min-height:44px;display:inline-flex;align-items:center}
.menu-cv{border-bottom:1px solid currentColor;min-height:0;padding-bottom:2px}

/* Footer */
.footer{--focus-color:var(--accent-on-brand);display:flex;justify-content:space-between;gap:24px;padding-block:28px;font-size:12px;background:var(--surface-brand-deep);color:var(--text-muted-on-brand);border-top:1px solid var(--border-on-brand)}
.footer a{min-height:44px;display:inline-flex;align-items:center;margin-block:-12px}

/* Back to top (js/animations/back-to-top.js): in the right gutter, under the menu layer.
   The ring is the reading progress; the theme tokens keep it legible on every surface. */
.back-to-top{position:fixed;z-index:40;right:clamp(16px,1.6vw,24px);bottom:max(20px,calc(env(safe-area-inset-bottom) + 12px));pointer-events:none}
.back-to-top-button{position:relative;display:grid;place-items:center;width:52px;height:52px;border-radius:50%;color:var(--ink);background:color-mix(in srgb,var(--paper) 88%,transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:0 10px 28px -14px rgba(17,19,18,.45);pointer-events:auto;visibility:hidden;opacity:0;transition:background-color .25s ease,color .25s ease}
.back-to-top-button:hover{background:var(--ink);color:var(--paper)}
.back-to-top-button:focus-visible{outline-offset:3px;border-radius:50%}
.back-to-top-ring{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg);fill:none;stroke-width:1.5}
.back-to-top-track{stroke:var(--line-strong)}
.back-to-top-bar{stroke:var(--accent);stroke-dasharray:1;stroke-dashoffset:1;stroke-linecap:round}
.back-to-top-icon{display:block;width:20px;height:20px;overflow:hidden}
.back-to-top-arrow{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}

@media(max-width:899px){
 :root{--header-h:68px}
 .header-actions{gap:8px}
 .menu-panel{padding-inline:32px}
}
@media(max-width:599px){
 body{font-size:16px}
 .header-role{display:none}
 .header .pref{display:none}
 .menu-toggle{border:0;padding:8px 0 8px 10px;gap:13px;font-size:13px}
 .menu-lines{width:21px;gap:5px}
 .menu-lines i{height:1.5px}
 .menu-prefs{display:flex}
 .menu-panel{padding-inline:22px}
 .menu-panel--middle{height:40px}
 .menu-panel--bottom{padding-bottom:22px}
 #navigation nav{padding:16px 0}
 #navigation nav a{font-size:33px;grid-template-columns:34px 1fr auto}
 .eyebrow{margin-bottom:22px}
 .footer{flex-direction:column;gap:6px}
 .back-to-top-button{width:46px;height:46px}
}
@media(max-height:680px){
 .menu-panel--middle{height:0}
 #navigation nav{overflow-y:auto;min-height:0;margin:0;padding:12px 0}
 #navigation nav a{flex-shrink:0;font-size:28px}
}
@media(prefers-reduced-motion:reduce){
 *,*::before,*::after{scroll-behavior:auto!important;transition:none!important;animation:none!important}
}
