/* Bibliothèque de visuels SVG (partials/visuals). Motion déclenché par js/visuals.js, coupé en reduced-motion. */
.vz{--va:#6C3CAA;--vs:#efeafb;--vh:#d5cbf3;--vi:#0b0a0c;--vm:#625d68;--vl:#dedbe2;--vk:#efedf1;--vw:#fff;--vp:#f7f6f8;--ve:cubic-bezier(.22,1,.36,1);margin:0;padding:clamp(14px,3.2vw,30px);border-radius:20px;background:var(--vp);font:inherit;color:var(--vi)}
.vz svg{display:block;width:100%;height:auto;overflow:visible}
.vz text{font-family:inherit;font-size:13px;font-weight:560;fill:var(--vi)}
.vz .t{font-size:14px}.vz .b{font-size:16px;font-weight:680;letter-spacing:-.01em}.vz .m{font-size:11.5px;font-weight:500;fill:var(--vm)}.vz .x{fill:var(--va)}.vz .xb{font-weight:680}.vz .w{fill:#fff}.vz .big{font-size:34px;font-weight:560;letter-spacing:-.02em}.vz .sm{font-size:10.5px}
.vz .mid{text-anchor:middle}.vz .end{text-anchor:end}
.vz .h{paint-order:stroke;stroke:var(--vp);stroke-width:4px;stroke-linejoin:round}
.vz .c{fill:var(--vw);stroke:var(--vl);stroke-width:1.5}.vz .ca{stroke:var(--va)}.vz .k{fill:var(--vk)}.vz .k2{fill:#e2dfe6}.vz .g{fill:#c9c4cf}.vz .g2{fill:#a7a1ae}.vz .a{fill:var(--va)}.vz .s{fill:var(--vs)}.vz .i{fill:var(--vi)}.vz .wf{fill:#fff}
.vz .ln{fill:none;stroke:var(--vl);stroke-width:1.5}.vz .ln2{fill:none;stroke:var(--vl);stroke-width:2.5}
.vz .la,.vz .li,.vz .lw,.vz .ga{fill:none;stroke-linecap:round;stroke-linejoin:round}
.vz .la{stroke:var(--va);stroke-width:2.5}.vz .li{stroke:var(--vi);stroke-width:1.5}.vz .lw{stroke:#fff;stroke-width:2}.vz .ga{stroke:var(--va);stroke-width:1.6}
.vz .lh{fill:none;stroke:var(--vh);stroke-width:2}.vz .ld{fill:none;stroke:var(--va);stroke-width:1.3;stroke-dasharray:3 4}
.vz .lt,.vz .lg{fill:none;stroke-width:14;stroke-linecap:round}.vz .lt{stroke:#e9e6ec}.vz .lg{stroke:var(--va)}
.vz .w35{stroke-width:3.5}.vz .w4{stroke-width:4}.vz .w7{stroke-width:7}
.vz .lm{fill:none;stroke:#a9a3b0;stroke-width:1.5;stroke-linejoin:round}
.vz .cut{stroke:var(--vp);stroke-width:4}.vz .fr{fill:#fff;stroke:#d3cfd8;stroke-dasharray:3 3}.vz .bk{stroke:var(--va);stroke-width:1.2}.vz .sa{stroke:var(--va);stroke-width:2}.vz .ol{fill:#fff;stroke:var(--vi);stroke-width:1.5}.vz .map{fill:#fff}
.vz .ap,.vz .ax,.vz .ay{transform-box:fill-box}.vz .ap{transform-origin:center}.vz .ax{transform-origin:left center}.vz .ay{transform-origin:center bottom}
.vz .at,.vz .ao{opacity:0}
.vz .ndl{transform-box:view-box;transform-origin:200px 180px;transform:rotate(55deg)}
.vz .br{transform-box:fill-box;transform-origin:center;opacity:.35}
.d1{--d:.12s}.d2{--d:.24s}.d3{--d:.36s}.d4{--d:.48s}.d5{--d:.6s}.d6{--d:.72s}.d7{--d:.84s}.d8{--d:.96s}.d9{--d:1.08s}.d10{--d:1.2s}.d11{--d:1.32s}.d12{--d:1.44s}
@media (prefers-reduced-motion:no-preference){
.vz-armed :is(.au,.af,.ap,.ax,.ay,.ar,.kn,.ndl,.lk){opacity:0}
.vz-armed .ad{stroke-dasharray:1;stroke-dashoffset:1}
.vz-armed .ao{opacity:1}
.vz-armed.is-in .au{animation:vz-u .7s var(--ve) var(--d,0s) both}
.vz-armed.is-in .af{animation:vz-f .8s ease-out var(--d,0s) both}
.vz-armed.is-in .ap{animation:vz-p .6s var(--ve) var(--d,0s) both}
.vz-armed.is-in .ax{animation:vz-x .9s var(--ve) var(--d,0s) both}
.vz-armed.is-in .ay{animation:vz-y .9s var(--ve) var(--d,0s) both}
.vz-armed.is-in .ar{animation:vz-r .8s var(--ve) var(--d,0s) both}
.vz-armed.is-in .ad{animation:vz-d 1s var(--ve) var(--d,0s) both}
.vz-armed.is-in .at{animation:vz-t .9s ease-in-out var(--d,0s) both}
.vz-armed.is-in .ao{animation:vz-o .4s ease-in var(--d,0s) both}
.vz-armed.is-in .kn{animation:vz-k .5s var(--ve) var(--d,0s) both}
.vz-armed.is-in .lk{animation:vz-l .6s var(--ve) var(--d,0s) both}
.vz-armed.is-in .ndl{animation:vz-n 1.2s var(--ve) var(--d,0s) both}
.vz-armed.is-in .br{animation:vz-b 5s ease-in-out 2s infinite}
}
@keyframes vz-u{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@keyframes vz-f{from{opacity:0}to{opacity:1}}
@keyframes vz-p{from{opacity:0;transform:scale(.9)}to{opacity:1;transform:none}}
@keyframes vz-x{from{opacity:1;transform:scaleX(0)}to{opacity:1;transform:none}}
@keyframes vz-y{from{opacity:1;transform:scaleY(0)}to{opacity:1;transform:none}}
@keyframes vz-r{from{opacity:0;transform:translateY(-14px)}to{opacity:1;transform:none}}
@keyframes vz-d{from{stroke-dashoffset:1}to{stroke-dashoffset:0}}
@keyframes vz-t{0%,100%{opacity:0}20%,75%{opacity:1}}
@keyframes vz-o{to{opacity:0}}
@keyframes vz-k{from{opacity:1;transform:translateX(-20px)}to{opacity:1;transform:none}}
@keyframes vz-l{from{opacity:1;transform:translateY(-9px)}to{opacity:1;transform:none}}
@keyframes vz-n{from{opacity:1;transform:rotate(-75deg)}to{opacity:1;transform:rotate(55deg)}}
@keyframes vz-b{0%,100%{opacity:.35;transform:none}50%{opacity:0;transform:scale(1.9)}}
@media (prefers-reduced-motion:reduce){.vz *{animation:none!important;transition:none!important}}
.vz-lab{max-width:1180px;margin:auto;padding:clamp(2rem,6vw,4.5rem) clamp(1rem,5vw,3rem) clamp(4rem,9vw,7rem);display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,460px),1fr));gap:clamp(1.5rem,3vw,2.5rem)}
.vz-lab__item h2{margin:0 0 .25rem;font-size:1.05rem;letter-spacing:-.01em}.vz-lab__item p{margin:0 0 .9rem;color:var(--muted,#4a4640);font-size:.92rem;line-height:1.5}
/* Mobile : le SVG (viewBox 400) est reduit a ~0,8x ; on grossit les libelles pour rester >= 11 px a l'ecran. */
@media (max-width:720px){.vz text{font-size:14px}.vz .m,.vz .sm{font-size:13.5px}.vz .t{font-size:15px}}
@media (max-width:400px){.vz text{font-size:15px}.vz .m,.vz .sm{font-size:14.5px}.vz .t{font-size:16px}}
