/* Geist et Geist Mono, auto-hébergées (SIL Open Font License, voir /assets/fonts/OFL.txt) */
@font-face{font-family:'Geist';font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/fonts/geist-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:'Geist';font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/fonts/geist-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:'Geist Mono';font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/fonts/geist-mono-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:'Geist Mono';font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/fonts/geist-mono-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}
body{margin:0;background:#0A0A0B}
a{color:#EDEDEC}a:hover{color:#FFFFFF}
.kx *{box-sizing:border-box}
.kx h1,.kx h2,.kx h3{text-wrap:balance}
.kx p{text-wrap:pretty}
.kx a:focus-visible,.kx summary:focus-visible,.kx button:focus-visible{outline:2px solid #EDEDEC;outline-offset:3px}
.kx button{font-family:inherit;color:inherit}
.kx details>summary{list-style:none;cursor:pointer}
.kx details>summary::-webkit-details-marker{display:none}
.kx details[open] .kx-plus{transform:rotate(45deg)}
.kx-plus{transition:transform .2s ease}
.kx-mob{display:none}
@media (max-width:1180px){.kx-desk{display:none!important}.kx-mob{display:flex!important}}
@media (max-width:860px){.kx-navlinks{display:none!important}}
@keyframes kxH{0%{left:0;opacity:0}12%{opacity:1}88%{opacity:1}100%{left:100%;opacity:0}}
@keyframes kxV{0%{top:0;opacity:0}12%{opacity:1}88%{opacity:1}100%{top:100%;opacity:0}}
@keyframes kxVup{0%{top:100%;opacity:0}12%{opacity:1}88%{opacity:1}100%{top:0;opacity:0}}
@keyframes kxRing{0%{transform:scale(1);opacity:.55}100%{transform:scale(1.18);opacity:0}}
@keyframes kxDots{0%,100%{opacity:.25}50%{opacity:1}}
@keyframes kxRise{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
@keyframes kxGrow{0%{transform:scaleX(0);opacity:1}9%{transform:scaleX(1)}95%{opacity:1}100%{transform:scaleX(1);opacity:0}}
@keyframes kxGrowOnce{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes kxGrowY{from{transform:scaleY(0)}to{transform:scaleY(1)}}
@keyframes kxSlide{0%,42%{margin-left:0}56%,100%{margin-left:var(--dx)}}
@keyframes kxAlea{0%,30%{opacity:0;transform:scaleY(.2)}34%{opacity:1;transform:scaleY(1)}95%{opacity:1}100%{opacity:0}}
@keyframes kxGhost{0%,42%{opacity:0}50%,92%{opacity:.55}100%{opacity:0}}
@keyframes kxCheck{0%,58%{opacity:0}64%,94%{opacity:1}100%{opacity:0}}
@keyframes kxDraw{from{stroke-dashoffset:1}to{stroke-dashoffset:0}}
.kx-on .a-h{animation:kxH 2.6s linear infinite}
.kx-on .a-v{animation:kxV 2.6s linear infinite}
.kx-on .a-vup{animation:kxVup 2.6s linear infinite}
.kx-on .a-ring{animation:kxRing 2.4s ease-out infinite}
.kx-on .a-dots{animation:kxDots 1.4s ease-in-out infinite}
.kx-on .a-rise{animation:kxRise 1s cubic-bezier(.2,.7,.2,1) both}
.kx-on .a-g{transform-origin:left center;animation:kxGrow 12s cubic-bezier(.3,.7,.2,1) infinite}
.kx-on .a-gs{transform-origin:left center;animation:kxGrow 12s cubic-bezier(.3,.7,.2,1) infinite,kxSlide 12s cubic-bezier(.5,0,.2,1) infinite}
.kx-on .a-al{animation:kxAlea 12s ease-out infinite}
.kx-on .a-gh{animation:kxGhost 12s ease-in-out infinite}
.kx-on .a-ck{animation:kxCheck 12s ease-in-out infinite}
.kx-on .a-bar{transform-origin:left center;animation:kxGrowOnce 1.4s cubic-bezier(.2,.7,.2,1) both}
.kx-on .a-col{transform-origin:center bottom;animation:kxGrowY 1.2s cubic-bezier(.2,.7,.2,1) both}
.kx-on .a-draw{stroke-dasharray:1;stroke-dashoffset:1;animation:kxDraw 2.4s cubic-bezier(.4,0,.2,1) forwards}
.kx-off .a-gh{display:none}
@media (prefers-reduced-motion: reduce){.kx *{animation:none!important;transition:none!important}.kx .a-gh,.kx .a-h,.kx .a-v,.kx .a-vup{display:none}}
.kx a:focus-visible,.kx button:focus-visible{outline:2px solid #EDEDEC;outline-offset:3px}
.kx input[type=range]{-webkit-appearance:none;appearance:none;position:absolute;inset:0;width:100%;height:100%;margin:0;background:transparent;cursor:pointer}
.kx input[type=range]::-webkit-slider-runnable-track{height:2px;background:transparent}
.kx input[type=range]::-moz-range-track{height:2px;background:transparent}
.kx input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:16px;height:16px;margin-top:-7px;border-radius:50%;background:#EDEDEC;box-shadow:0 0 0 4px #0E0E10,0 0 0 5px #3A3A3F}
.kx input[type=range]::-moz-range-thumb{width:16px;height:16px;border:0;border-radius:50%;background:#EDEDEC;box-shadow:0 0 0 4px #0E0E10,0 0 0 5px #3A3A3F}
.kx input[type=range]:focus-visible{outline:2px solid #EDEDEC;outline-offset:2px;border-radius:6px}
.kx-navlinks a{color:#9A9A97;text-decoration:none}
@media (min-width:1000px){.kx-sticky{position:sticky;top:84px}}
@media (max-width:640px){.kx-hide-s{display:none!important}}
@keyframes kxFade{from{opacity:0}to{opacity:1}}
.kx-svgring{transform-box:fill-box;transform-origin:center}
.kx-on .a-fade{animation:kxFade 1.6s ease-out both}
@keyframes kxPulse{0%{transform:scale(1);opacity:.6}100%{transform:scale(3.2);opacity:0}}
.kx-on .a-pulse{animation:kxPulse 2.2s ease-out infinite}

/* ajouts site statique */
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
@media (prefers-reduced-motion: reduce){html{scroll-behavior:auto}}
body{-webkit-font-smoothing:antialiased;color:#EDEDEC}
[id]{scroll-margin-top:76px}
.kx-skip{position:absolute;left:12px;top:-60px;z-index:100;background:#EDEDEC;color:#0A0A0B;padding:10px 16px;border-radius:999px;text-decoration:none;font:500 14px/1.2 'Geist',system-ui,sans-serif}
.kx-skip:focus{top:12px;color:#0A0A0B}
.kx-off .kx-ic-pause,.kx-on .kx-ic-play{display:none}
[data-motion-toggle]:hover{border-color:#5A5A5F!important}
.kx-dot{width:44px;height:44px;padding:0;border:0;background:transparent;display:inline-flex;align-items:center;justify-content:center;cursor:pointer}
.kx-dot span{width:12px;height:4px;border-radius:2px;background:#3A3A3F;display:block;transition:width .3s ease,background-color .3s ease}
.kx-dot[aria-current="true"] span{width:28px;background:#EDEDEC}
.kx-chip{background:transparent;border:0;padding:0;cursor:pointer;min-height:44px;display:inline-flex;align-items:center}
.kx-chip span{display:inline-flex;padding:7px 12px;border-radius:999px;border:1px solid #2E2E33;color:#9A9A97;font-size:13px;transition:background-color .2s,color .2s}
.kx-chip[aria-pressed="true"] span{background:#EDEDEC;border-color:#EDEDEC;color:#0A0A0B;font-weight:500}
.kx-chip:focus-visible{outline:2px solid #EDEDEC;outline-offset:3px;border-radius:999px}
@media (prefers-reduced-motion: reduce){.kx .a-pulse{display:none}}
.kx h3{line-height:1.2}
@media (max-width:640px){.kx-formula{grid-template-columns:1fr!important;row-gap:2px!important}.kx-formula span:nth-child(odd){margin-top:12px}.kx-formula span:first-child{margin-top:0}}

/* ---------- v2 · accueil plein écran ---------- */
.kx-hero{position:relative;min-height:calc(100svh - 73px);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:64px 24px 112px;overflow:hidden;isolation:isolate;text-align:center}
.kx-hero-bg{position:absolute;inset:0;z-index:-2;display:block;width:100%;height:100%;-webkit-mask-image:radial-gradient(ellipse 60% 55% at 50% 48%,rgba(0,0,0,.16) 0%,rgba(0,0,0,.5) 55%,#000 100%);mask-image:radial-gradient(ellipse 60% 55% at 50% 48%,rgba(0,0,0,.16) 0%,rgba(0,0,0,.5) 55%,#000 100%)}
.kx-hero-veil{position:absolute;inset:0;z-index:-1;pointer-events:none;background:linear-gradient(180deg,#0A0A0B 0%,rgba(10,10,11,0) 16%,rgba(10,10,11,0) 74%,#0A0A0B 100%)}
.kx-hero-in{position:relative;display:flex;flex-direction:column;align-items:center;gap:22px;max-width:1120px}
.kx-h1{margin:0;font-size:clamp(44px,6.6vw,100px);line-height:.98;font-weight:500;letter-spacing:-.05em;max-width:12.5ch;background:linear-gradient(180deg,#FFFFFF 0%,#EDEDEC 52%,#8F8F8C 100%);-webkit-background-clip:text;background-clip:text;color:transparent;padding-bottom:.06em}
.kx-ai{display:inline-flex;padding:1px;border-radius:999px;background:linear-gradient(100deg,#2E2E33 0%,#2E2E33 38%,#D4D4D1 50%,#2E2E33 62%,#2E2E33 100%);background-size:260% 100%;background-position:100% 0}
.kx-ai>span{display:inline-flex;align-items:center;gap:9px;padding:7px 16px;border-radius:999px;background:#0E0E10;font-size:13px;letter-spacing:.01em;color:#EDEDEC}
.kx-on .kx-ai{animation:kxRise 1s cubic-bezier(.2,.7,.2,1) both,kxSheen 6s ease-in-out 1.2s infinite}
@keyframes kxSheen{0%{background-position:100% 0}55%,100%{background-position:-60% 0}}
.kx-ai-star{transform-box:fill-box;transform-origin:center}
.kx-on .kx-ai-star{animation:kxTwinkle 3.4s ease-in-out infinite}
@keyframes kxTwinkle{0%,100%{transform:scale(1) rotate(0);opacity:1}50%{transform:scale(.7) rotate(45deg);opacity:.65}}
.kx-sectors{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-wrap:wrap;justify-content:center;gap:8px 0;font-family:'Geist Mono',ui-monospace,monospace;font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:#6E6E6B}
.kx-sectors li+li::before{content:"·";margin:0 14px;color:#3A3A3F}
.kx-cue{position:absolute;left:50%;bottom:24px;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:10px;font-family:'Geist Mono',ui-monospace,monospace;font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:#6E6E6B;text-decoration:none;padding:4px 10px}
.kx-cue:hover{color:#9A9A97}
.kx-cue-line{position:relative;display:block;width:1px;height:46px;overflow:hidden;background:linear-gradient(#3A3A3F,rgba(58,58,63,0))}
.kx-cue-line::after{content:"";position:absolute;left:0;top:-40%;width:1px;height:40%;background:#EDEDEC}
.kx-on .kx-cue-line::after{animation:kxCue 2.4s cubic-bezier(.6,0,.3,1) infinite}
@keyframes kxCue{0%{top:-40%}100%{top:100%}}
@media (max-height:620px){.kx-cue{display:none}}

/* ---------- v2 · schéma simplifié ---------- */
.kx-simple{position:relative;width:min(620px,100%);aspect-ratio:1/1;margin:0 auto}
.kx-simple-svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.a-orbit{transform-box:view-box;transform-origin:50% 50%}
.kx-on .a-orbit{animation:kxSpin 26s linear infinite}
@keyframes kxSpin{to{transform:rotate(360deg)}}
.kx-on .a-flow{animation:kxFlow 1.8s linear infinite}
@keyframes kxFlow{to{stroke-dashoffset:-32}}
.kx-sn{position:absolute;transform:translate(-50%,-50%);width:33%;min-width:116px;border:1px solid #2E2E33;border-radius:16px;background:rgba(17,17,19,.94);padding:clamp(10px,2vw,16px) clamp(10px,2vw,18px);display:flex;flex-direction:column;gap:4px;text-align:left;transition:opacity .2s linear}
.kx-sn b{font-weight:500;font-size:clamp(13px,1.9vw,17px);letter-spacing:-.01em;line-height:1.25}
.kx-sn>span:not(.kx-sn-n):not(.a-ring){font-family:'Geist Mono',ui-monospace,monospace;font-size:clamp(10px,1.5vw,12px);line-height:1.45;color:#8A8A87}
.kx-sn-n{position:absolute;top:-11px;left:-11px;width:22px;height:22px;border-radius:50%;background:#0A0A0B;border:1px solid #3A3A3F;font-family:'Geist Mono',ui-monospace,monospace;font-size:11px;display:flex;align-items:center;justify-content:center;color:#9A9A97}
.kx-sn.kx-core{width:27%;min-width:96px;aspect-ratio:1/1;border-radius:50%;border-color:#EDEDEC;background:#141416;align-items:center;justify-content:center;text-align:center}
.kx-sn.kx-core b{font-size:clamp(15px,2.4vw,22px)}
.kx-ia-tag{position:absolute;transform:translate(-50%,-50%);padding:5px 14px;border-radius:999px;border:1px solid #3A3A3F;background:#0A0A0B;font-family:'Geist Mono',ui-monospace,monospace;font-size:12px;letter-spacing:.16em;color:#EDEDEC;transition:opacity .2s linear}
.kx-drop{display:block;width:1px;height:56px;background:linear-gradient(#3A3A3F,rgba(58,58,63,0))}
#kx-detail [data-from],#kx-detail [data-asm]{will-change:transform,opacity}
.kx-stats{width:100%;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(230px,100%),1fr));gap:28px;border-top:1px solid #1A1A1D;padding-top:40px;margin-top:8px}
.kx-stats>div{display:flex;flex-direction:column;gap:6px}
.kx-stat-v{font-size:clamp(28px,2.6vw,36px);font-weight:400;letter-spacing:-.025em;line-height:1.12}
.kx-stat-l{font-size:14px;line-height:1.5;color:#8A8A87;max-width:28ch}

/* ---------- v2 · apparition au défilement ---------- */
.kx-on .kx-rv{opacity:0;transform:translateY(28px);transition:opacity .9s cubic-bezier(.2,.7,.2,1),transform .9s cubic-bezier(.2,.7,.2,1)}
.kx-on .kx-rv.is-in{opacity:1;transform:none}

/* ---------- v2 · mosaïque défilante ---------- */
.kx-marquee{position:relative;overflow:hidden;-webkit-mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent);mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent)}
.kx-track{display:flex;width:max-content}
.kx-set{list-style:none;margin:0;padding:0 14px 0 0;display:flex;gap:14px}
.kx-set li{flex:none;display:flex;flex-direction:column;justify-content:center;gap:5px;min-width:176px;height:86px;padding:0 24px;border:1px solid #1F1F22;border-radius:16px;background:#0E0E10;transition:border-color .3s,background-color .3s}
.kx-set li:hover{border-color:#3A3A3F;background:#131315}
.kx-set b{font-weight:500;font-size:17px;letter-spacing:-.01em;white-space:nowrap}
.kx-set span{font-family:'Geist Mono',ui-monospace,monospace;font-size:11px;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;color:#8A8A87}
.kx-on .kx-track{animation:kxMarq 80s linear infinite}
.kx-on .kx-rev .kx-track{animation-direction:reverse;animation-duration:66s}
.kx-marquee:hover .kx-track{animation-play-state:paused}
@keyframes kxMarq{to{transform:translateX(-50%)}}
.kx-off .kx-set[aria-hidden="true"]{display:none}
.kx-off .kx-track{width:auto}
.kx-off .kx-set{flex-wrap:wrap;justify-content:center;padding:0 24px}
.kx-off .kx-marquee{-webkit-mask-image:none;mask-image:none}
@media (prefers-reduced-motion: reduce){.kx .kx-set[aria-hidden="true"]{display:none}.kx .kx-track{width:auto}.kx .kx-set{flex-wrap:wrap;justify-content:center;padding:0 24px}.kx .kx-marquee{-webkit-mask-image:none;mask-image:none}.kx .kx-rv{opacity:1;transform:none}}
@media (max-width:640px){.kx-sectors{gap:6px 18px}.kx-sectors li+li::before{content:none}.kx-cue{display:none}}
@media (max-width:520px){.kx-sn>span:not(.kx-sn-n):not(.a-ring){display:none}.kx-sn{width:31%;min-width:0;padding:10px 12px}.kx-sn.kx-core{width:25%;min-width:0}}
