@font-face {
    font-family: 'IBM Plex Mono';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url(fonts/IBMPlexMono-400-latin-ext.woff2) format('woff2');
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
    font-family: 'IBM Plex Mono';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url(fonts/IBMPlexMono-400-latin.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
    font-family: 'IBM Plex Mono';
    font-style: normal;
    font-weight: 500;
    font-display: swap;
    src: url(fonts/IBMPlexMono-500-latin-ext.woff2) format('woff2');
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
    font-family: 'IBM Plex Mono';
    font-style: normal;
    font-weight: 500;
    font-display: swap;
    src: url(fonts/IBMPlexMono-500-latin.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
    font-family: 'IBM Plex Mono';
    font-style: normal;
    font-weight: 600;
    font-display: swap;
    src: url(fonts/IBMPlexMono-600-latin-ext.woff2) format('woff2');
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
    font-family: 'IBM Plex Mono';
    font-style: normal;
    font-weight: 600;
    font-display: swap;
    src: url(fonts/IBMPlexMono-600-latin.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
    font-family: 'IBM Plex Sans';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url(fonts/IBMPlexSans-400-latin-ext.woff2) format('woff2');
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
    font-family: 'IBM Plex Sans';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url(fonts/IBMPlexSans-400-latin.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
    font-family: 'IBM Plex Sans';
    font-style: normal;
    font-weight: 500;
    font-display: swap;
    src: url(fonts/IBMPlexSans-500-latin-ext.woff2) format('woff2');
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
    font-family: 'IBM Plex Sans';
    font-style: normal;
    font-weight: 500;
    font-display: swap;
    src: url(fonts/IBMPlexSans-500-latin.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

:root{
    --bg:#0D0F12;
    --panel:#14171C;
    --panel-alt:#181C22;
    --wire:#262B33;
    --wire-soft:#1C2027;
    --chalk:#E8EAEE;
    --fog:#99A2B0;
    --fog-dim:#69717E;
    --signal:#4ADE94;
    --signal-dim:rgba(74,222,148,0.12);
    --ember:#F2A65A;
    --ember-dim:rgba(242,166,90,0.14);
    --radius:10px;
    --mono:'IBM Plex Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
    --sans:'IBM Plex Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
    --maxw:1120px;
}
*{box-sizing:border-box;}
html{scroll-behavior:smooth;}
body{
    margin:0;
    background:var(--bg);
    color:var(--chalk);
    font-family:var(--sans);
    font-size:16px;
    line-height:1.65;
    -webkit-font-smoothing:antialiased;
}
a{color:inherit;}
img{max-width:100%;display:block;}
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 32px;}
.skip-link{position:absolute;left:-999px;top:0;background:var(--signal);color:#06210F;padding:10px 16px;border-radius:6px;font-family:var(--mono);font-size:13px;z-index:100;}
.skip-link:focus{left:16px;top:16px;}
:focus-visible{outline:2px solid var(--signal);outline-offset:2px;}

/* eyebrow / labels */
.eyebrow{
    font-family:var(--mono);
    font-size:13px;
    color:var(--signal);
    letter-spacing:0.02em;
    margin:0 0 14px;
}
h1,h2,h3{font-family:var(--mono);font-weight:500;margin:0;color:var(--chalk);}
h1{font-size:clamp(32px,5vw,48px);line-height:1.15;letter-spacing:-0.01em;}
h2{font-size:clamp(22px,3vw,28px);line-height:1.3;}
p{margin:0;color:var(--fog);}

/* buttons */
.btn{
    display:inline-flex;align-items:center;gap:8px;
    font-family:var(--mono);font-size:14px;font-weight:500;
    padding:12px 20px;border-radius:8px;text-decoration:none;
    border:1px solid transparent;transition:transform .15s ease, border-color .15s ease, background .15s ease;
}
.btn:hover{transform:translateY(-1px);}
.btn-primary{background:var(--signal);color:#06210F;}
.btn-primary:hover{background:#5FE6A4;}
.btn-outline{border-color:var(--wire);color:var(--chalk);}
.btn-outline:hover{border-color:var(--signal);color:var(--signal);}
.btn-ghost{border-color:transparent;color:var(--fog);padding:10px 16px;}
.btn-ghost:hover{color:var(--chalk);border-color:var(--wire);}

/* nav */
.nav{position:sticky;top:0;z-index:20;background:rgba(13,15,18,0.86);backdrop-filter:blur(8px);border-bottom:1px solid var(--wire-soft);}
.nav-inner{max-width:var(--maxw);margin:0 auto;padding:14px 32px;display:flex;align-items:center;justify-content:space-between;gap:16px;}
.brand{display:flex;align-items:center;gap:10px;text-decoration:none;font-family:var(--mono);font-size:15px;color:var(--chalk);}
.brand-mark{width:26px;height:26px;border-radius:6px;object-fit:cover;}
.nav-right{display:flex;align-items:center;gap:16px;}
.status-pill{display:none;align-items:center;gap:8px;font-family:var(--mono);font-size:12px;color:var(--fog);border:1px solid var(--wire);padding:6px 12px;border-radius:999px;}
.dot{width:7px;height:7px;border-radius:50%;background:var(--signal);box-shadow:0 0 0 3px var(--signal-dim);flex:none;}

/* hero */
.hero{padding:40px 0 32px;display:grid;grid-template-columns:1.05fr 0.95fr;gap:56px;align-items:center;}
.lede{margin-top:20px;max-width:46ch;font-size:16px;}
.hero-actions{display:flex;gap:12px;margin-top:32px;flex-wrap:wrap;}

.hero-terminal{background:var(--panel);border:1px solid var(--wire);border-radius:12px;overflow:hidden;}
.term-chrome{display:flex;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid var(--wire-soft);background:var(--panel-alt);}
.term-dot{width:10px;height:10px;border-radius:50%;}
.term-dot-r{background:#E5645C;}
.term-dot-y{background:#E5B75C;}
.term-dot-g{background:#5CC26E;}
.term-title{margin-left:8px;font-family:var(--mono);font-size:12px;color:var(--fog-dim);}
.term-body{padding:22px 20px 26px;font-family:var(--mono);font-size:13.5px;line-height:1.9;}
.term-line{opacity:0;transform:translateY(4px);animation:reveal .35s ease forwards;animation-delay:calc(var(--d) * 160ms + 250ms);white-space:pre-wrap;color:var(--chalk);}
.term-line .prompt{color:var(--signal);margin-right:6px;}
.term-out{color:var(--fog);padding-left:1.2em;}
.term-accent{color:var(--signal);}
.term-accent .dot{margin-right:8px;}
.cursor{display:inline-block;width:7px;height:14px;background:var(--signal);margin-left:6px;vertical-align:-2px;animation:blink 1s steps(1) infinite;}
@keyframes reveal{to{opacity:1;transform:none;}}
@keyframes blink{50%{opacity:0;}}

section{padding:32px 0;border-top:1px solid var(--wire-soft);}
.section-head{max-width:60ch;margin-bottom:36px;}
.section-head p{font-size:15.5px;}

/* références */
.refs{padding:28px 0;}
.refs-head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:22px;}
.refs-head .eyebrow{margin:0;}
.refs-nav{display:flex;gap:8px;}
.refs-btn{font-family:var(--mono);font-size:14px;background:none;border:1px solid var(--wire);color:var(--fog);width:32px;height:32px;border-radius:8px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:border-color .15s ease,color .15s ease;}
.refs-btn:hover{border-color:var(--signal);color:var(--signal);}
.refs-marquee{overflow-x:auto;scrollbar-width:none;-webkit-mask-image:linear-gradient(90deg,transparent,#000 4%,#000 96%,transparent);mask-image:linear-gradient(90deg,transparent,#000 4%,#000 96%,transparent);}
.refs-marquee::-webkit-scrollbar{display:none;}
.refs-track{display:flex;width:max-content;}
.refs-set{display:flex;align-items:center;gap:64px;padding-right:64px;}
.refs-track img{height:40px;width:auto;max-width:none;filter:brightness(0) invert(1);opacity:.55;}
.refs-track .ref-fournier,.refs-track .ref-perene,.refs-track .ref-wilson{height:20px;}
.refs-track .ref-kewego{height:27px;}
.refs-track .ref-niiwaa{height:60px;}
.refs-track .ref-dose{transform:translateY(-4px);}

/* need / backlog */
.backlog{list-style:none;margin:0;padding:0;display:grid;gap:1px;background:var(--wire-soft);border:1px solid var(--wire-soft);border-radius:10px;overflow:hidden;}
.backlog li{display:flex;gap:16px;align-items:baseline;background:var(--panel);padding:14px 18px;border-left:2px solid transparent;transition:border-color .15s ease, background .15s ease;}
.backlog li:hover{border-left-color:var(--signal);background:var(--panel-alt);}
.ticket-id{font-family:var(--mono);font-size:12px;color:var(--fog-dim);flex:none;width:44px;}
.ticket-text{font-size:15px;color:var(--chalk);}
.need-foot{margin-top:24px;font-size:14.5px;max-width:62ch;}

/* files */
.files{display:grid;grid-template-columns:1fr 1fr;gap:24px;}
.file-card{background:var(--panel);border:1px solid var(--wire);border-radius:12px;overflow:hidden;}
.file-tab{display:flex;align-items:center;gap:8px;padding:12px 16px;background:var(--panel-alt);border-bottom:1px solid var(--wire-soft);font-family:var(--mono);font-size:13px;color:var(--chalk);}
.file-tab i{width:6px;height:6px;border-radius:50%;background:var(--ember);flex:none;}
.file-body{padding:20px;}
.file-body ul{list-style:none;margin:0;padding:0;display:grid;gap:12px;}
.file-body li{font-size:14.5px;color:var(--fog);padding-left:18px;position:relative;}
.file-body li::before{content:"//";position:absolute;left:0;color:var(--fog-dim);font-family:var(--mono);font-size:13px;}
.file-body li b{color:var(--chalk);font-weight:500;}
code.tag{font-family:var(--mono);font-size:12.5px;background:var(--wire-soft);color:var(--signal);padding:2px 6px;border-radius:4px;}

/* stack / composer */
.stack-grid{display:grid;grid-template-columns:1.1fr 0.9fr;gap:32px;align-items:start;}
.code-block{background:var(--panel);border:1px solid var(--wire);border-radius:12px;padding:22px 24px;font-family:var(--mono);font-size:13.5px;line-height:1.9;color:var(--fog);overflow-x:auto;}
.code-block .k{color:var(--ember);}
.code-block .s{color:var(--signal);}
.code-block .c{color:var(--fog-dim);}
.logo-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}
.logo-tile{background:var(--panel);border:1px solid var(--wire);border-radius:10px;padding:18px 12px;display:flex;flex-direction:column;align-items:center;gap:10px;}
.logo-tile img{height:28px;width:auto;object-fit:contain;filter:grayscale(1) brightness(1.4);opacity:0.85;}
.logo-tile span{font-family:var(--mono);font-size:11px;color:var(--fog-dim);text-align:center;}

/* contact band */
.contact-band{background:var(--panel);border:1px solid var(--wire);border-radius:16px;padding:48px;text-align:left;display:flex;justify-content:space-between;align-items:center;gap:32px;flex-wrap:wrap;}
.contact-band h2{margin-bottom:10px;}
.contact-band p{max-width:48ch;}
.contact-actions{display:flex;gap:12px;flex-wrap:wrap;}

footer{padding:32px 0 48px;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;border-top:1px solid var(--wire-soft);}
footer p{font-family:var(--mono);font-size:12.5px;color:var(--fog-dim);}
footer .foot-links{display:flex;gap:18px;}
footer .foot-links a{font-family:var(--mono);font-size:12.5px;color:var(--fog);text-decoration:none;}
footer .foot-links a:hover{color:var(--signal);}

@media (min-width:760px){.status-pill{display:inline-flex;}}

@media (max-width:860px){
    .wrap{padding:0 20px;}
    .hero{grid-template-columns:1fr;padding-top:34px;gap:36px;}
    .files{grid-template-columns:1fr;}
    .stack-grid{grid-template-columns:1fr;}
    .logo-grid{grid-template-columns:repeat(3,1fr);}
    .contact-band{padding:32px;flex-direction:column;align-items:flex-start;}
}

@media (prefers-reduced-motion:reduce){
    .term-line{animation:none;opacity:1;transform:none;}
    .cursor{animation:none;}
    html{scroll-behavior:auto;}
    .btn:hover{transform:none;}
}
