{"id":148613,"date":"2026-11-03T07:59:00","date_gmt":"2026-11-03T07:59:00","guid":{"rendered":"https:\/\/aurumbikes.com\/?page_id=148613"},"modified":"2026-11-03T10:21:41","modified_gmt":"2026-11-03T10:21:41","slug":"nova","status":"publish","type":"page","link":"https:\/\/aurumbikes.com\/fr\/nova\/","title":{"rendered":"NOVA"},"content":{"rendered":"\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Poppins:wght@200;300;400;500;600&amp;display=swap\" rel=\"stylesheet\">\n<style id=\"nv-hybrid-style\">\n\/* NOVA hybrid, WordPress build. Every rule sits under .nv-hybrid, so the theme's own styles and this page's do not reach each other. The exceptions are the page wrapper rules near the top and the end of this style. *\/\n.nv-hybrid {\n  --nv-top: 70px;\n  --nv-admin: 0px;\n  --black: #000;\n  --charcoal: #171717;\n  --white: #fff;\n  --ink: #171717;\n  --grey: #595959;\n  --mid: #878787;\n  --rule: #d8d8d8;\n  --sand: #E7E5DF;\n  --yellow: #ffd700;\n  --gold: #C5A681;\n  --warm: #6B655E;\n  --gutter: clamp(22px, 6.2vw, 96px);\n  --content: 1440px;\n  --fs-display: clamp(48px, 6vw, 96px);\n  --fs-body: 16px;\n  --fs-small: 14px;\n  --fs-manifesto: clamp(30px, 4vw, 60px);\n  position: relative;\n  width: var(--nv-width, 100%);\n  margin-left: calc((100% - var(--nv-width, 100%)) \/ 2);\n  padding-top: 40px;\n  overflow-x: clip;\n  background: var(--black);\n  color: var(--white);\n  color-scheme: dark;\n  font: 400 var(--fs-body)\/1.7 Poppins, sans-serif;\n  font-synthesis: none;\n  text-rendering: optimizeLegibility;\n}\n\/* The admin bar pushes the theme's sticky header down, so pinned content has to start below both. *\/\nbody.admin-bar .nv-hybrid { --nv-admin: 32px; }\n@media (max-width: 782px) { body.admin-bar .nv-hybrid { --nv-admin: 46px; } }\n\/* On desktop the theme's 40 px top strip sits over the first 40 px of the block, so the block starts below it and the film is not covered. Phones have no strip. *\/\n@media (max-width: 900px) { .nv-hybrid { padding-top: 0; } }\n\/* The theme wraps the page in containers that set overflow: hidden. A scroll container between the viewport and a sticky stage stops the stage from sticking, so those containers are reset to visible. *\/\n:has(.nv-hybrid):not(html):not(body) { overflow: visible !important; }\n\/* The theme's page title band and the spacer under it sit above the block; both are removed on any page that holds the block. *\/\nbody:has(.nv-hybrid) .qodef-page-title { display: none; }\n#qodef-page-inner:has(.nv-hybrid) { padding-top: 0; }\n.nv-hybrid *, .nv-hybrid *::before, .nv-hybrid *::after { box-sizing: border-box; }\n.nv-hybrid :where(h1, h2, h3, p, figure, ul, ol) { margin: 0; padding: 0; }\n.nv-hybrid p, .nv-hybrid li { text-wrap: pretty; }\n.nv-hybrid ::selection { color: var(--black); background: var(--yellow); }\n.nv-hybrid a { color: inherit; text-underline-offset: 5px; }\n\/* The theme colours h2 elements dark, which hid headings and figures on the black sections. Headings take their section's colour. *\/\n.nv-hybrid :is(h1, h2, h3, h4, h5, h6) { color: inherit; }\n.nv-hybrid button { color: inherit; font: inherit; }\n.nv-hybrid img, .nv-hybrid video { display: block; width: 100%; }\n.nv-hybrid :focus-visible { outline: 2px solid var(--yellow); outline-offset: 5px; }\n\/* 62px is the product nav, which stays stuck under the header. *\/\n.nv-hybrid [id] { scroll-margin-top: calc(var(--nv-top) + var(--nv-admin) + 62px); }\n.nv-hybrid h2 { text-transform: uppercase; }\n.nv-hybrid .words :focus-visible,\n.nv-hybrid .geometry :focus-visible,\n.nv-hybrid .faq :focus-visible,\n.nv-hybrid .closing :focus-visible,\n.nv-hybrid .marquee :focus-visible { outline-color: var(--black); }\n.nv-hybrid .visually-hidden { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }\n.nv-hybrid .skip-link { position: fixed; z-index: 100; top: 12px; left: 12px; padding: 10px 16px; transform: translateY(-160%); background: var(--white); color: var(--black); }\n.nv-hybrid .skip-link:focus { transform: none; }\n.nv-hybrid [hidden] { display: none !important; }\n.nv-hybrid .hero { position: relative; background: var(--black); }\n.nv-hybrid .hero-body { display: grid; grid-template-columns: minmax(0, 1fr); }\n.nv-hybrid .hero-media,\n.nv-hybrid .hero-overlay { grid-area: 1 \/ 1; }\n.nv-hybrid .hero-media { position: relative; width: 100%; aspect-ratio: 16 \/ 9; overflow: hidden; background: var(--black); }\n.nv-hybrid .hero-film { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; }\n.nv-hybrid .hero-shade { position: absolute; inset: 0; pointer-events: none; background: linear-gradient(180deg, #0009 0%, #0000 17%); }\n.nv-hybrid .hero-overlay { position: relative; }\n.nv-hybrid .hero-copy { padding: clamp(44px, 5vw, 72px) var(--gutter) clamp(56px, 7vw, 96px); text-align: center; }\n.nv-hybrid .product-logo { display: block; width: clamp(128px, 13vw, 188px); height: auto; margin: 0 auto; filter: brightness(0) invert(1); }\n.nv-hybrid .hero-copy p { max-width: 340px; margin: 16px auto 26px; color: var(--white); font-size: var(--fs-body); font-weight: 300; line-height: 1.55; }\n.nv-hybrid .hero-actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 12px; }\n.nv-hybrid .outline-button { min-height: 48px; display: inline-flex; align-items: center; justify-content: center; gap: 12px; padding: 10px 20px; border: 1px solid currentColor; border-radius: 5px; background: transparent; color: inherit; font-size: var(--fs-small); font-weight: 400; text-decoration: none; cursor: pointer; transition: color .2s ease, background-color .2s ease; }\n.nv-hybrid .outline-button:hover { color: var(--black); background: var(--white); }\n.nv-hybrid .words .outline-button:hover,\n.nv-hybrid .closing .outline-button:hover { color: var(--white); background: var(--black); }\n.nv-hybrid .outline-button.solid-button { background: var(--white); color: var(--black); }\n.nv-hybrid .outline-button.solid-button:hover { background: var(--yellow); }\n.nv-hybrid .film-control { position: absolute; z-index: 2; right: clamp(18px, 2.4vw, 36px); bottom: 24px; display: inline-flex; align-items: center; gap: 10px; min-height: 44px; padding: 8px 0 8px 12px; border: 0; background: transparent; color: var(--white); font-size: var(--fs-small); cursor: pointer; pointer-events: auto; }\n.nv-hybrid .film-control:hover { color: var(--yellow); }\n.nv-hybrid .control-icon { display: block; width: 16px; height: 18px; position: relative; }\n.nv-hybrid .control-icon::before,\n.nv-hybrid .control-icon::after { content: \"\"; position: absolute; }\n.nv-hybrid .film-control[data-state=\"playing\"] .control-icon::before,\n.nv-hybrid .film-control[data-state=\"playing\"] .control-icon::after { top: 2px; bottom: 2px; width: 4px; background: currentColor; }\n.nv-hybrid .film-control[data-state=\"playing\"] .control-icon::before { left: 2px; }\n.nv-hybrid .film-control[data-state=\"playing\"] .control-icon::after { right: 2px; }\n.nv-hybrid .film-control[data-state=\"paused\"] .control-icon::before { inset: 1px 0 1px 3px; width: 0; height: 0; border-top: 8px solid transparent; border-bottom: 8px solid transparent; border-left: 12px solid currentColor; }\n@keyframes nv-film-in { from { opacity: 0; } }\n@keyframes nv-copy-in { from { opacity: 0; transform: translate3d(0, 28px, 0); } }\n.nv-hybrid.motion .hero-film { animation: nv-film-in 1.4s ease-out backwards; }\n.nv-hybrid.motion .hero-copy { animation: nv-copy-in 1s cubic-bezier(.16, 1, .3, 1) .5s backwards; }\n@media (min-width: 901px) {\n  .nv-hybrid .hero-overlay { position: sticky; bottom: 0; align-self: end; z-index: 1; pointer-events: none; }\n  .nv-hybrid .hero-copy { background: linear-gradient(0deg, #000c 0%, #0009 45%, #0000 100%); }\n  .nv-hybrid .hero-copy a,\n  .nv-hybrid .film-control { pointer-events: auto; }\n  .nv-hybrid .hero-shade { background: linear-gradient(0deg, #000b 0%, #0000 40%), linear-gradient(180deg, #0009 0%, #0000 17%); }\n}\n.nv-hybrid .product-nav-shell { position: relative; z-index: 20; background: var(--black); }\n.nv-hybrid .product-nav { position: relative; z-index: 20; min-height: 62px; display: flex; align-items: center; justify-content: center; gap: clamp(18px, 3vw, 46px); padding: 12px var(--gutter); overflow-x: auto; background: var(--black); border-bottom: 1px solid #333; scrollbar-width: none; }\n.nv-hybrid .product-nav::-webkit-scrollbar { display: none; }\n.nv-hybrid .product-nav a { flex: 0 0 auto; color: var(--white); font-size: var(--fs-small); font-weight: 300; text-decoration: none; }\n.nv-hybrid .product-nav a:hover { text-decoration: underline; text-underline-offset: 6px; }\n.nv-hybrid .product-nav a[aria-current=\"location\"] { color: var(--yellow); }\n.nv-hybrid .product-nav-more { display: none; }\n.nv-hybrid.motion .product-nav-shell { position: sticky; top: var(--nv-stick, calc(var(--nv-top) + var(--nv-admin))); }\n.nv-hybrid .configurator { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, .85fr); min-height: clamp(600px, 80vh, 780px); background: var(--black); color: var(--white); }\n.nv-hybrid .cfg-stage { position: relative; display: grid; grid-template-rows: auto minmax(0, 1fr) auto; gap: 24px; padding: clamp(24px, 3vw, 40px); background: var(--sand); color: var(--ink); }\n.nv-hybrid .cfg-stage :focus-visible { outline-color: var(--black); }\n.nv-hybrid .cfg-variants { display: flex; gap: 8px; }\n.nv-hybrid .cfg-variant { min-height: 44px; padding: 0 22px; border: 1px solid var(--black); border-radius: 2px; background: var(--white); color: var(--ink); font-size: var(--fs-small); font-weight: 500; letter-spacing: .08em; cursor: pointer; transition: background-color .2s ease, color .2s ease; }\n.nv-hybrid .cfg-variant[aria-pressed=\"true\"] { background: var(--black); color: var(--white); }\n.nv-hybrid .cfg-visual { display: grid; place-items: center; min-height: 0; }\n.nv-hybrid .cfg-bike { width: 100%; max-width: 720px; height: auto; aspect-ratio: 3 \/ 2; object-fit: contain; }\n.nv-hybrid .cfg-bar { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 20px 24px; }\n.nv-hybrid .cfg-name { margin: 0; font-size: clamp(32px, 3.4vw, 48px); font-weight: 300; line-height: 1; letter-spacing: -.03em; }\n.nv-hybrid .cfg-sub { margin: 10px 0 0; color: var(--grey); font-size: var(--fs-small); letter-spacing: .12em; text-transform: uppercase; }\n.nv-hybrid .cfg-price { margin: 14px 0 0; font-size: var(--fs-body); }\n.nv-hybrid .cfg-price span { color: var(--grey); font-size: var(--fs-small); }\n.nv-hybrid .cfg-actions { display: flex; align-items: center; gap: 12px; }\n.nv-hybrid .cfg-step { width: 52px; height: 52px; display: grid; place-items: center; padding: 0; border: 1px solid var(--ink); border-radius: 50%; background: transparent; color: var(--ink); cursor: pointer; transition: background-color .2s ease, color .2s ease; }\n.nv-hybrid .cfg-step:hover { background: var(--black); color: var(--white); }\n.nv-hybrid .cfg-step svg { display: block; width: 18px; height: 18px; }\n.nv-hybrid .cfg-configure { min-height: 52px; display: inline-flex; align-items: center; padding: 0 32px; border-radius: 2px; background: var(--grey); color: var(--white); font-size: var(--fs-small); text-decoration: none; transition: background-color .2s ease; }\n.nv-hybrid .cfg-configure:hover { background: var(--black); }\n.nv-hybrid .cfg-panel { position: relative; min-height: 0; overflow: hidden; background: var(--sand); }\n.nv-hybrid .cfg-panel > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }\n.nv-hybrid .cfg-panel-copy { position: absolute; inset: 0; z-index: 2; display: flex; flex-direction: column; align-items: flex-start; justify-content: flex-start; gap: 28px; padding: clamp(20px, 2.4vw, 36px); text-align: left; }\n.nv-hybrid .cfg-panel .cfg-panel-logo { display: block; width: clamp(132px, 14vw, 200px); height: auto; align-self: flex-end; margin-top: auto; }\n.nv-hybrid .cfg-claim { margin: 0; color: var(--ink); font-size: clamp(22px, 2.2vw, 30px); font-weight: 300; line-height: 1.2; letter-spacing: -.02em; }\n.nv-hybrid .cfg-claim strong { font-weight: 600; }\n.nv-hybrid .cfg-about { max-width: 36ch; margin: 0; color: var(--ink); font-size: var(--fs-body); line-height: 1.55; }\n.nv-hybrid .words { background: var(--sand); color: var(--ink); padding: clamp(64px, 6.5vw, 96px) var(--gutter); }\n.nv-hybrid .words-main { max-width: var(--content); margin: 0 auto; display: grid; gap: clamp(24px, 2.6vw, 40px); }\n.nv-hybrid .word-item { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, .8fr); gap: clamp(40px, 6vw, 96px); align-items: start; }\n.nv-hybrid .word-claim { margin: 0; color: var(--warm); font-size: clamp(20px, 3.2vw, 46px); font-weight: 400; line-height: 1.15; letter-spacing: -.035em; white-space: nowrap; transition: color .5s ease; }\n.nv-hybrid .word-claim::first-letter { font-weight: 600; }\n.nv-hybrid .word-item.is-active .word-claim { color: var(--ink); }\n.nv-hybrid .word-body { display: grid; justify-items: start; gap: 24px; max-width: 46ch; }\n.nv-hybrid .word-body p { margin: 0; color: var(--grey); font-size: var(--fs-body); line-height: 1.6; transition: color .5s ease; }\n.nv-hybrid .word-item.is-active .word-body p { color: var(--ink); }\n.nv-hybrid.motion .word-body p[data-reveal] { transition: opacity .9s ease, transform .9s cubic-bezier(.16, 1, .3, 1), color .5s ease; }\n.nv-hybrid .word-item .outline-button { font-size: var(--fs-small); letter-spacing: .12em; text-transform: uppercase; }\n.nv-hybrid .words-links { justify-self: end; display: flex; flex-wrap: wrap; justify-content: flex-end; align-items: center; gap: 4px 14px; }\n.nv-hybrid .word-link { min-height: 44px; display: inline-flex; align-items: center; margin: 0; padding: 0; border: 0; background: none; color: var(--grey); font: inherit; font-size: var(--fs-small); letter-spacing: .12em; text-transform: uppercase; text-decoration: none; cursor: pointer; transition: color .5s ease; }\n.nv-hybrid .word-link.is-active { color: var(--ink); }\n.nv-hybrid .word-link:hover { text-decoration: underline; text-decoration-thickness: 2px; text-underline-offset: .3em; }\n.nv-hybrid .words-sep { color: var(--mid); font-size: var(--fs-small); }\n.nv-hybrid .words-rule { height: 1px; background: var(--rule); }\n.nv-hybrid .word-body { transition: opacity .6s ease, visibility .6s ease; }\n.nv-hybrid .word-item:not(.is-active) .word-body { opacity: 0; visibility: hidden; }\n@media (min-width: 901px) {\n  .nv-hybrid .word-body { height: 0; }\n  .nv-hybrid .word-item:has(+ .words-rule) .word-body { height: auto; }\n  .nv-hybrid .words-rule { margin-top: 0; }\n}\n@media (min-width: 901px) { .nv-hybrid .words-links { position: sticky; bottom: 24px; padding: 8px 0 8px 16px; background: var(--sand); } }\n@media (max-width: 900px) {\n  .nv-hybrid .words-main { gap: 24px; }\n  .nv-hybrid .word-item { grid-template-columns: minmax(0, 1fr); gap: 20px; }\n  .nv-hybrid .word-claim { font-size: clamp(17px, 5.3vw, 34px); }\n}\n.nv-hybrid .manifesto-track { position: relative; height: 210vh; }\n.nv-hybrid:not(.sweep) .manifesto-track { height: auto; }\n.nv-hybrid .feel { position: relative; background: var(--black); color: var(--white); }\n.nv-hybrid .feel-stage { position: sticky; top: 0; height: 100vh; min-height: 560px; overflow: hidden; }\n.nv-hybrid .feel-photo { position: absolute; inset: 0; margin: 0; background: var(--charcoal); }\n.nv-hybrid .feel-photo img { width: 100%; height: 100%; object-fit: cover; object-position: 60% 50%; }\n.nv-hybrid .feel-shade { position: absolute; inset: 0; pointer-events: none; background: linear-gradient(90deg, #000e 0%, #0008 40%, #0000 72%), linear-gradient(0deg, #000e 0%, #000b 35%, #0000 70%); }\n.nv-hybrid .feel-inner { position: absolute; inset: 0; display: grid; grid-template-columns: minmax(0, 1fr); grid-template-rows: auto minmax(0, 1fr); align-items: stretch; max-width: calc(var(--content) + var(--gutter) * 2); margin: 0 auto; padding: calc(var(--nv-top) + var(--nv-admin) + 62px + clamp(24px, 4vh, 48px)) var(--gutter) clamp(40px, 9vh, 96px); }\n.nv-hybrid .feel-copy { align-self: start; }\n.nv-hybrid .feel-kicker { margin: 0 0 24px; color: var(--white); font-size: var(--fs-small); font-weight: 500; letter-spacing: .18em; text-transform: uppercase; }\n.nv-hybrid .feel h2 { margin: 0; max-width: 8ch; font-size: var(--fs-display); font-weight: 300; line-height: 1.02; letter-spacing: -.03em; text-wrap: balance; }\n.nv-hybrid .manifesto-stage { align-self: end; justify-self: start; max-width: 780px; }\n.nv-hybrid .manifesto-text { margin: 0; font-size: clamp(20px, 1.6vw, 28px); font-weight: 300; line-height: 1.3; letter-spacing: -.02em; text-wrap: pretty; }\n.nv-hybrid .manifesto-bar { display: none; }\n.nv-hybrid.sweep .manifesto-bar { display: block; position: relative; height: 2px; margin-top: clamp(32px, 4vw, 48px); overflow: hidden; background: #ffd70033; }\n.nv-hybrid.sweep .manifesto-bar::after { content: \"\"; position: absolute; inset: 0; background: var(--yellow); transform: scaleX(var(--p, 0)); transform-origin: left center; }\n.nv-hybrid .machine { background: var(--sand); color: var(--ink); padding: clamp(64px, 6.5vw, 96px) var(--gutter); }\n.nv-hybrid .machine-main { max-width: var(--content); margin: 0 auto; }\n.nv-hybrid .machine-head { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, .42fr); gap: clamp(40px, 6vw, 96px); align-items: end; }\n.nv-hybrid .machine-kicker, .nv-hybrid .words-kicker { display: flex; align-items: center; gap: 14px; margin: 0; color: var(--grey); font-size: var(--fs-small); font-weight: 500; letter-spacing: .18em; text-transform: uppercase; }\n.nv-hybrid .machine-kicker { margin-bottom: 28px; }\n.nv-hybrid .machine-kicker::before, .nv-hybrid .words-kicker::before { content: \"\"; width: 40px; height: 1px; background: var(--gold); }\n.nv-hybrid .machine h2 { margin: 0; font-size: var(--fs-display); font-weight: 300; line-height: 1.02; letter-spacing: -.03em; text-wrap: balance; }\n.nv-hybrid .machine-lead { max-width: 34ch; margin: 0; color: var(--grey); font-size: var(--fs-body); line-height: 1.55; }\n.nv-hybrid .machine-photo { margin: clamp(40px, 4.5vw, 64px) 0 0; height: clamp(300px, 46vw, 640px); }\n.nv-hybrid .machine-photo img { width: 100%; height: 100%; object-fit: contain; }\n.nv-hybrid .machine-stats { margin: clamp(40px, 5vw, 64px) 0 0; padding: 0; list-style: none; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule); }\n.nv-hybrid .machine-stats li { padding: 28px 24px; }\n.nv-hybrid .machine-stats li:first-child { padding-left: 0; }\n.nv-hybrid .machine-stats li + li { border-left: 1px solid var(--rule); }\n.nv-hybrid .machine-stats strong { display: block; font-size: clamp(48px, 5.2vw, 80px); font-weight: 300; line-height: 1; letter-spacing: -.03em; font-variant-numeric: tabular-nums; white-space: nowrap; }\n.nv-hybrid .machine-stats .unit { font-size: var(--fs-body); letter-spacing: .12em; text-transform: uppercase; color: var(--grey); }\n.nv-hybrid .machine-stats span { display: block; margin-top: 14px; color: var(--grey); font-size: var(--fs-small); letter-spacing: .12em; text-transform: uppercase; }\n.nv-hybrid .machine-note { margin: 24px 0 0; color: var(--grey); font-size: var(--fs-small); line-height: 1.6; }\n.nv-hybrid .road { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; background: var(--black); }\n.nv-hybrid .road-panel { position: relative; height: clamp(560px, 80vh, 820px); margin: 0; overflow: hidden; background: var(--charcoal); color: var(--white); }\n.nv-hybrid .road-panel img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }\n.nv-hybrid .road-panel::after { content: \"\"; position: absolute; inset: 0; background: linear-gradient(0deg, #000d 0%, #000c 30%, #0009 55%, #0000 85%); }\n.nv-hybrid .road-copy { position: absolute; z-index: 1; left: var(--gutter); right: var(--gutter); bottom: clamp(32px, 5vw, 64px); max-width: 540px; }\n.nv-hybrid .road-label { margin: 0 0 16px; font-size: var(--fs-small); font-weight: 500; letter-spacing: .18em; text-transform: uppercase; }\n.nv-hybrid .road-title { margin: 0 0 20px; font-size: var(--fs-display); font-weight: 300; line-height: 1; letter-spacing: -.03em; }\n.nv-hybrid .road-text { max-width: 36ch; margin: 0; font-size: var(--fs-body); font-weight: 300; line-height: 1.55; }\n.nv-hybrid .x20 { background: var(--charcoal); color: var(--white); padding: clamp(64px, 6.5vw, 96px) var(--gutter); }\n.nv-hybrid .x20-head { max-width: var(--content); margin: 0 auto; display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, .9fr); gap: 48px; align-items: end; }\n.nv-hybrid .x20-head h2 { margin: 0; font-size: var(--fs-display); font-weight: 300; line-height: 1.05; letter-spacing: -.03em; text-wrap: balance; }\n.nv-hybrid .x20-head p { margin: 0; max-width: 52ch; color: #a3a3a3; }\n.nv-hybrid .x20-copy { grid-column: 1; grid-row: 1; align-self: end; display: grid; gap: 48px; }\n.nv-hybrid .x20-intro { grid-column: 2; grid-row: 1; align-self: end; display: grid; gap: 24px; }\n.nv-hybrid .x20-intro-photo { margin: 0; aspect-ratio: 3 \/ 2; overflow: hidden; background: #262626; }\n.nv-hybrid .x20-intro-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }\n.nv-hybrid .x20-media { max-width: var(--content); margin: clamp(40px, 4.5vw, 64px) auto 0; display: grid; grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr); gap: 18px; }\n.nv-hybrid .x20-band { position: relative; height: clamp(360px, 44vw, 660px); margin: 0; overflow: hidden; background: #262626; }\n.nv-hybrid .x20-band img { position: absolute; top: 0; left: 0; width: 100%; height: 120%; object-fit: cover; object-position: center 40%; }\n.nv-hybrid.motion .x20-band img { transform: translate3d(0, calc(var(--y, 0) * -16%), 0); }\n.nv-hybrid .x20-side { display: flex; flex-direction: column; }\n.nv-hybrid .x20-photo { margin: 0; height: clamp(200px, 26vw, 380px); overflow: hidden; background: #262626; }\n.nv-hybrid .x20-photo img { width: 100%; height: 100%; object-fit: cover; }\n.nv-hybrid .x20-photo--cutout img { object-fit: contain; padding: 8%; }\n.nv-hybrid .x20-callout { margin-top: 28px; padding-top: 24px; border-top: 1px solid #333; }\n.nv-hybrid .x20-specs { max-width: var(--content); margin: clamp(40px, 4.5vw, 64px) auto 0; padding: 0; list-style: none; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-top: 1px solid #333; }\n.nv-hybrid .x20-spec { padding: 28px 24px 0 0; }\n.nv-hybrid .x20-value { margin: 0; font-size: var(--fs-display); font-weight: 200; line-height: 1; letter-spacing: -.03em; font-variant-numeric: tabular-nums; white-space: nowrap; }\n.nv-hybrid .x20-value small { margin-left: 8px; font-size: var(--fs-body); font-weight: 200; letter-spacing: 0; color: #a3a3a3; }\n.nv-hybrid .x20-label { margin: 16px 0 2px; font-size: var(--fs-small); font-weight: 500; }\n.nv-hybrid .x20-spec .x20-label { text-transform: uppercase; letter-spacing: .12em; }\n.nv-hybrid .x20-detail { margin: 0; color: #a3a3a3; font-size: var(--fs-small); line-height: 1.5; }\n.nv-hybrid .x20-points { max-width: var(--content); margin: clamp(40px, 4.5vw, 64px) auto 0; padding: 0; list-style: none; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 48px; border-top: 1px solid #333; }\n.nv-hybrid .x20-points li { padding: 22px 0; border-bottom: 1px solid #333; font-size: var(--fs-body); line-height: 1.55; }\n.nv-hybrid .x20-points strong { display: block; margin-bottom: 6px; font-size: var(--fs-body); font-weight: 600; }\n.nv-hybrid .x20-points span { color: #d4d4d4; }\n.nv-hybrid .x20-connect { max-width: var(--content); margin: clamp(40px, 4.5vw, 64px) auto 0; padding-top: 28px; border-top: 1px solid #333; display: grid; grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr); gap: 48px; align-items: center; }\n.nv-hybrid .x20-connect-text { display: flex; flex-direction: column; gap: 18px; }\n.nv-hybrid .x20-connect-logo { display: block; width: 96px; height: 96px; border-radius: 22%; }\n.nv-hybrid .x20-connect-photo { margin: 0; aspect-ratio: 3 \/ 2; overflow: hidden; background: #262626; }\n.nv-hybrid .x20-connect-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }\n.nv-hybrid .x20-connect-title { margin: 0; font-size: clamp(1.6rem, 2.6vw, 2.4rem); font-weight: 300; line-height: 1.1; letter-spacing: -.03em; text-wrap: balance; }\n.nv-hybrid .x20-connect-copy { max-width: 55ch; margin: 0; color: #a3a3a3; line-height: 1.7; }\n.nv-hybrid .x20-note { max-width: 75ch; margin: 48px 0 0 max(0px, calc((100% - var(--content)) \/ 2)); color: #a3a3a3; font-size: var(--fs-small); line-height: 1.75; }\n.nv-hybrid .range { position: relative; overflow: hidden; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-items: end; min-height: clamp(600px, 84vh, 860px); background: var(--charcoal); color: var(--white); padding: clamp(64px, 6.5vw, 96px) var(--gutter) clamp(56px, 5.5vw, 80px); }\n.nv-hybrid .range-photo { position: absolute; inset: 0; margin: 0; }\n.nv-hybrid .range-photo img { height: 100%; object-fit: cover; object-position: center 60%; }\n.nv-hybrid .range-photo::after { content: \"\"; position: absolute; inset: 0; background: linear-gradient(90deg, #0000 0%, #0000 36%, #000c 60%, #000e 100%); }\n.nv-hybrid .range-copy { position: relative; grid-column: 2; justify-self: end; width: min(100%, 520px); }\n.nv-hybrid .range-number { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0 .22em; margin: 0; font-size: var(--fs-body); font-weight: 300; line-height: 1.1; }\n.nv-hybrid .range-number .count { font-size: var(--fs-display); font-weight: 200; line-height: .8; letter-spacing: -.03em; font-variant-numeric: tabular-nums; }\n.nv-hybrid .range-unit { font-size: var(--fs-body); font-weight: 300; }\n.nv-hybrid .range-copy > p { max-width: 56ch; margin: 22px 0 0; color: #fff; font-size: var(--fs-body); }\n.nv-hybrid .range-copy .range-note { margin-top: 12px; color: #fff; font-size: var(--fs-small); }\n.nv-hybrid .gallery { background: var(--sand); color: var(--ink); padding: clamp(64px, 6.5vw, 96px) 0 clamp(56px, 5.5vw, 80px); }\n.nv-hybrid .gallery-inner { padding: 0 max(var(--gutter), calc((100% - var(--content)) \/ 2)); }\n.nv-hybrid .gallery-head { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 340px); align-items: end; gap: 32px; }\n.nv-hybrid .gallery-kicker { margin: 0; color: var(--warm); font-size: var(--fs-small); letter-spacing: .08em; text-transform: uppercase; }\n.nv-hybrid .gallery h2 { margin: 22px 0 0; font-size: var(--fs-display); font-weight: 300; line-height: 1.05; letter-spacing: -.03em; text-transform: none; }\n.nv-hybrid .gallery-lead { margin: 0; color: var(--grey); font-size: var(--fs-body); line-height: 1.55; }\n\/* The strip moves only with the arrows or a swipe, never with the page's own scroll. Its frames have different shapes and snap to the content edge. *\/\n.nv-hybrid .gallery-stage { position: relative; margin-top: clamp(40px, 4.5vw, 64px); overflow-x: auto; overscroll-behavior-x: contain; scroll-snap-type: x mandatory; scroll-padding-inline-start: max(var(--gutter), calc((100% - var(--content)) \/ 2)); scrollbar-width: none; }\n.nv-hybrid .gallery-stage::-webkit-scrollbar { display: none; }\n.nv-hybrid .gallery-stage:focus-visible { outline: 1px solid var(--black); outline-offset: 8px; }\n.nv-hybrid .gallery-grid { --gal-h: clamp(300px, 30vw, 500px); width: max-content; display: flex; align-items: flex-start; gap: clamp(12px, 1.4vw, 20px); margin: 0; padding: 0 var(--gutter) 0 max(var(--gutter), calc((100% - var(--content)) \/ 2)); list-style: none; }\n.nv-hybrid .gallery-frame { position: relative; flex: 0 0 auto; width: calc(var(--gal-h) * var(--gal-r, 1)); height: var(--gal-h); overflow: hidden; background: var(--charcoal); scroll-snap-align: start; }\n.nv-hybrid .gallery-frame img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }\n\/* Plain rectangles in five proportions: tall, square, wide, wide and panorama. --gal-r is the width-to-height ratio. *\/\n.nv-hybrid .gal-tall { --gal-r: .667; }\n.nv-hybrid .gal-square { --gal-r: 1; }\n.nv-hybrid .gal-wide { --gal-r: 1.5; }\n.nv-hybrid .gal-pano { --gal-r: 2; }\n.nv-hybrid .gallery-foot { margin-top: clamp(28px, 3vw, 40px); }\n.nv-hybrid .gallery-controls { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 24px; margin-top: 28px; }\n.nv-hybrid .gallery-count { margin: 0; font-size: var(--fs-small); letter-spacing: .08em; font-variant-numeric: tabular-nums; white-space: nowrap; }\n.nv-hybrid .gallery-progress { position: relative; height: 1px; background: var(--rule); }\n.nv-hybrid .gallery-bar { position: absolute; top: -.5px; left: 0; height: 2px; background: var(--ink); transition: width .4s ease; }\n.nv-hybrid .gallery-arrows { display: flex; gap: 12px; }\n.nv-hybrid .gallery-arrows .cfg-step:disabled, .nv-hybrid .gallery-arrows .cfg-step:disabled:hover { opacity: .35; cursor: default; background: transparent; color: var(--ink); }\n.nv-hybrid .geometry { position: relative; overflow: hidden; background: var(--sand); color: var(--ink); padding: clamp(64px, 6.5vw, 96px) var(--gutter); }\n.nv-hybrid .geometry-inner { max-width: var(--content); margin: 0 auto; }\n.nv-hybrid .geometry h2 { margin: 0; font-size: var(--fs-display); font-weight: 300; line-height: 1.05; letter-spacing: -.03em; }\n.nv-hybrid .geometry-lead { max-width: 42ch; margin: 22px 0 0; color: #171717; }\n.nv-hybrid .geometry-grid { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); gap: clamp(40px, 5vw, 74px); align-items: start; margin: clamp(40px, 4.5vw, 64px) 0 0; }\n.nv-hybrid .geometry-photo { margin: 0; overflow: hidden; padding: 12.5% 0; }\n.nv-hybrid .geometry-photo img { display: block; width: 100%; height: auto; aspect-ratio: 3 \/ 2; object-fit: cover; }\n.nv-hybrid.motion .geometry-photo img { transform: scale(calc(1.06 - var(--g, 0) * .06)); }\n.nv-hybrid .geometry-stats { margin: 0; padding: 22px 0 0; list-style: none; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px 24px; border-top: 1px solid var(--grey); }\n.nv-hybrid .geometry-stats li { display: grid; gap: 14px; }\n.nv-hybrid .geometry-stats strong { font-size: clamp(44px, 4.8vw, 72px); font-weight: 300; line-height: 1; letter-spacing: -.03em; font-variant-numeric: tabular-nums; }\n.nv-hybrid .geometry-stats span { color: var(--grey); font-size: var(--fs-small); line-height: 1.4; letter-spacing: .12em; text-transform: uppercase; }\n.nv-hybrid .size-label { margin: 56px 0 0; color: var(--ink); font-size: var(--fs-small); font-weight: 500; letter-spacing: .18em; text-transform: uppercase; }\n.nv-hybrid .size-picker { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin: 20px 0 0; }\n.nv-hybrid .size-button { min-height: 52px; padding: 0 16px; border: 1px solid var(--grey); border-radius: 2px; background: transparent; color: var(--ink); font-size: var(--fs-body); font-weight: 400; cursor: pointer; transition: color .2s ease, background-color .2s ease, border-color .2s ease; }\n.nv-hybrid .size-button:hover { border-color: var(--ink); }\n.nv-hybrid .size-button[aria-pressed=\"true\"] { border-color: var(--ink); background: var(--ink); color: var(--white); }\n.nv-hybrid .size-guide { display: inline-block; margin: 16px 0 0; color: var(--ink); font-size: var(--fs-small); text-decoration: underline; text-underline-offset: 4px; }\n.nv-hybrid .geometry-table { margin: 28px 0 0; padding: 28px 0 0; border-top: 1px solid var(--grey); display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: clamp(24px, 6vw, 96px); }\n.nv-hybrid .geometry-item { margin: 0; padding: 0 0 24px; }\n.nv-hybrid .geometry-item dt { color: var(--grey); font-size: var(--fs-small); line-height: 1.4; }\n.nv-hybrid .geometry-item dd { margin: 6px 0 0; color: var(--ink); font-size: var(--fs-body); font-weight: 500; line-height: 1.4; font-variant-numeric: tabular-nums; }\n.nv-hybrid .geometry-foot { margin: 8px 0 0; color: var(--grey); font-size: var(--fs-small); }\n.nv-hybrid .viewer { background: var(--charcoal); color: var(--white); padding: clamp(64px, 6.5vw, 96px) var(--gutter); }\n.nv-hybrid .viewer-head { max-width: var(--content); margin: 0 auto 40px; display: flex; flex-wrap: wrap; align-items: end; justify-content: space-between; gap: 32px; }\n.nv-hybrid .viewer-head h2 { margin: 0; font-size: var(--fs-display); font-weight: 300; line-height: 1.05; letter-spacing: -.03em; }\n.nv-hybrid .viewer-head p { margin: 0; max-width: 36ch; color: #fff; }\n.nv-hybrid .viewer-stage { position: relative; max-width: var(--content); height: clamp(420px, 56vw, 760px); margin: 0 auto; overflow: hidden; background: var(--charcoal); }\n.nv-hybrid .viewer-poster { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center 55%; }\n.nv-hybrid .viewer-stage iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; background: var(--charcoal); }\n.nv-hybrid .viewer-hint { max-width: var(--content); margin: 16px auto 0; color: #fff; font-size: var(--fs-small); }\n.nv-hybrid .marquee { overflow: hidden; background: var(--sand); color: var(--black); padding: clamp(40px, 4.5vw, 64px) 0; }\n.nv-hybrid .marquee-track { display: flex; width: max-content; margin: 0; padding-left: var(--gutter); font-size: clamp(36px, 4vw, 76px); font-weight: 200; line-height: 1; letter-spacing: -.01em; text-transform: uppercase; white-space: nowrap; }\n.nv-hybrid .marquee-track span { padding-right: .4em; }\n.nv-hybrid .marquee-track .sep { color: #595959; }\n.nv-hybrid.motion .marquee-track { transform: translate3d(calc(var(--m, 0) * -50%), 0, 0); will-change: transform; }\n.nv-hybrid .buy { position: relative; display: flex; flex-direction: column; min-height: clamp(600px, 84vh, 860px); overflow: hidden; padding: clamp(64px, 6.5vw, 96px) var(--gutter) clamp(56px, 5.5vw, 80px); background: var(--charcoal); color: var(--white); }\n.nv-hybrid .buy-photo { position: absolute; inset: 0; margin: 0; }\n.nv-hybrid .buy-photo img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 50%; }\n.nv-hybrid .buy-shade { position: absolute; inset: 0; pointer-events: none; background: linear-gradient(90deg, #000e 0%, #000a 40%, #0000 75%), linear-gradient(0deg, #000e 0%, #000b 35%, #0000 70%); }\n.nv-hybrid .buy-inner { position: relative; z-index: 1; flex: 1; display: flex; flex-direction: column; justify-content: space-between; gap: 48px; width: 100%; max-width: var(--content); margin: 0 auto; }\n.nv-hybrid .buy-price { margin: 0; font-size: var(--fs-display); font-weight: 200; line-height: .95; letter-spacing: -.03em; }\n.nv-hybrid .buy-price span { display: block; margin-top: 22px; color: #e0e0e0; font-size: var(--fs-body); font-weight: 300; letter-spacing: 0; }\n.nv-hybrid .buy-copy p { max-width: 52ch; margin: 0 0 14px; color: #ededed; font-size: var(--fs-body); }\n.nv-hybrid .buy-copy .buy-note { color: #bdbdbd; font-size: var(--fs-small); }\n.nv-hybrid .buy-actions { display: flex; flex-wrap: wrap; gap: 12px; margin: 30px 0 18px; }\n.nv-hybrid .faq { background: var(--sand); color: var(--ink); padding: clamp(64px, 6.5vw, 96px) var(--gutter) clamp(40px, 4vw, 64px); }\n.nv-hybrid .faq-title { max-width: var(--content); margin: 0 auto; padding: 0 0 clamp(36px, 4vw, 56px); border-bottom: 1px dashed var(--mid); font-size: var(--fs-display); font-weight: 300; line-height: 1.05; letter-spacing: -.03em; }\n.nv-hybrid .faq-list { max-width: var(--content); margin: 0 auto; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: clamp(40px, 6vw, 96px); }\n.nv-hybrid .faq-item { border-bottom: 1px dashed var(--mid); }\n.nv-hybrid .faq-item summary { display: flex; align-items: center; justify-content: space-between; gap: 24px; padding: clamp(28px, 3vw, 40px) 0; cursor: pointer; list-style: none; font-size: var(--fs-body); font-weight: 500; line-height: 1.4; }\n.nv-hybrid .faq-item summary::-webkit-details-marker { display: none; }\n.nv-hybrid .faq-item summary::after { content: \"\"; flex: 0 0 auto; width: 18px; height: 18px; background: linear-gradient(currentColor, currentColor) center \/ 18px 1px no-repeat, linear-gradient(currentColor, currentColor) center \/ 1px 18px no-repeat; }\n.nv-hybrid .faq-item[open] summary::after { background: linear-gradient(currentColor, currentColor) center \/ 18px 1px no-repeat; }\n.nv-hybrid .faq-item p { max-width: 60ch; margin: 0 0 clamp(28px, 3vw, 40px); color: var(--grey); font-weight: 300; line-height: 1.7; }\n.nv-hybrid .closing { background: var(--sand); color: var(--ink); padding: clamp(64px, 6.5vw, 96px) var(--gutter); }\n.nv-hybrid .closing h2 { max-width: var(--content); margin: 0 auto; font-size: var(--fs-display); font-weight: 300; line-height: 1.04; letter-spacing: -.03em; text-wrap: balance; }\n.nv-hybrid .closing h2 span { font-weight: 200; }\n.nv-hybrid .closing-list { position: relative; max-width: var(--content); margin: clamp(40px, 4.5vw, 64px) auto 0; padding: 0; list-style: none; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); counter-reset: item; }\n.nv-hybrid .closing-list::before { content: \"\"; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: var(--ink); transform-origin: left center; }\n.nv-hybrid.motion .closing-list::before { transform: scaleX(var(--draw, 0)); }\n.nv-hybrid .closing-list li { padding: 26px 28px 0 0; counter-increment: item; }\n.nv-hybrid.motion .closing-list li:nth-child(2) { transition-delay: .12s; }\n.nv-hybrid.motion .closing-list li:nth-child(3) { transition-delay: .24s; }\n.nv-hybrid .closing-list li::before { content: counter(item, decimal-leading-zero); display: block; margin-bottom: 42px; color: var(--grey); font-size: var(--fs-small); font-variant-numeric: tabular-nums; }\n.nv-hybrid .closing-list h3 { margin: 0 0 12px; font-size: var(--fs-body); font-weight: 500; line-height: 1.3; }\n.nv-hybrid .closing-list p { max-width: 40ch; margin: 0; color: #171717; font-size: var(--fs-body); }\n.nv-hybrid .closing-actions { display: flex; flex-wrap: wrap; gap: 12px; margin: 56px 0 0 max(0px, calc((100% - var(--content)) \/ 2)); }\n.nv-hybrid.motion [data-reveal] { opacity: 0; transform: translate3d(0, 28px, 0); transition: opacity .9s ease, transform .9s cubic-bezier(.16, 1, .3, 1); }\n.nv-hybrid.motion [data-reveal].is-in { opacity: 1; transform: none; }\n@media (max-width: 900px) {\n  .nv-hybrid .hero-body { position: relative; }\n  .nv-hybrid .hero-media { aspect-ratio: 3 \/ 4; }\n  .nv-hybrid .hero-shade { background: linear-gradient(0deg, #000b 0%, #0000 40%), linear-gradient(180deg, #0009 0%, #0000 17%); }\n  .nv-hybrid .hero-overlay { position: absolute; inset: 0; display: flex; flex-direction: column; justify-content: flex-end; pointer-events: none; }\n  .nv-hybrid .hero-copy { background: linear-gradient(0deg, #000c 0%, #0009 45%, #0000 100%); padding: 36px var(--gutter) 52px; }\n  .nv-hybrid .hero-copy a,\n  .nv-hybrid .film-control { pointer-events: auto; }\n  .nv-hybrid .hero-copy p { max-width: 34ch; }\n  .nv-hybrid .manifesto-track { height: 190vh; }\n  .nv-hybrid .feel-inner { display: contents; }\n  .nv-hybrid .feel-copy { position: absolute; top: calc(var(--nv-top) + var(--nv-admin) + 62px + 24px); left: max(var(--gutter), calc((100% - var(--content)) \/ 2)); }\n  .nv-hybrid .feel h2 { font-size: clamp(44px, 12vw, 60px); }\n  .nv-hybrid .feel-photo img { object-position: 62% 50%; }\n  .nv-hybrid .feel-shade { background: linear-gradient(0deg, #000e 0%, #000a 50%, #0006 100%); }\n  .nv-hybrid .manifesto-stage { position: absolute; left: var(--gutter); right: var(--gutter); width: auto; bottom: 40px; }\n  .nv-hybrid .manifesto-text { font-size: clamp(18px, 4.8vw, 22px); }\n  .nv-hybrid .machine-head { grid-template-columns: minmax(0, 1fr); gap: 24px; }\n  .nv-hybrid .machine-stats { grid-template-columns: minmax(0, 1fr); }\n  .nv-hybrid .machine-stats li { padding: 20px 0; }\n  .nv-hybrid .machine-stats li + li { border-left: 0; border-top: 1px solid var(--rule); }\n  .nv-hybrid .range { grid-template-columns: minmax(0, 1fr); }\n  .nv-hybrid .range-copy { grid-column: auto; justify-self: stretch; width: auto; }\n  .nv-hybrid .range-photo img { object-position: 30% 60%; }\n  .nv-hybrid .range-photo::after { background: linear-gradient(180deg, #0006 0%, #000d 60%, #000e 100%); }\n  .nv-hybrid .film-control { top: calc(var(--nv-top) + var(--nv-admin) + 14px); bottom: auto; right: 14px; padding: 8px 12px; border-radius: 4px; background: #000a; }\n  .nv-hybrid .product-nav-shell { position: sticky; top: var(--nv-stick, var(--nv-admin)); }\n  .nv-hybrid .product-nav { width: calc(100% - 52px); justify-content: flex-start; min-height: 60px; gap: 25px; padding: 8px 20px; scroll-padding-inline: 20px; overscroll-behavior-x: contain; }\n  .nv-hybrid .product-nav a { min-height: 44px; display: inline-flex; align-items: center; }\n  .nv-hybrid .product-nav-more { position: absolute; top: 0; right: 0; width: 52px; height: 60px; display: grid; place-items: center; padding: 0 4px; border: 0; background: linear-gradient(90deg, #0000 0%, #000 42%); color: var(--white); cursor: pointer; }\n  .nv-hybrid .product-nav-more svg { display: block; width: 18px; height: 18px; }\n  .nv-hybrid .product-nav-more:focus-visible { outline: 2px solid var(--yellow); outline-offset: -4px; }\n  .nv-hybrid .product-nav-more[hidden] { display: none; }\n  .nv-hybrid [id] { scroll-margin-top: calc(var(--nv-stick, var(--nv-admin)) + 62px); }\n  .nv-hybrid .x20-head { grid-template-columns: 1fr; }\n  .nv-hybrid .buy-shade { background: linear-gradient(180deg, #000a 0%, #0000 25%), linear-gradient(0deg, #000e 0%, #000a 50%, #0006 100%); }\n  .nv-hybrid .buy-photo img { object-position: 60% 50%; }\n  .nv-hybrid .x20-media { grid-template-columns: minmax(0, 1fr); }\n  .nv-hybrid .x20-photo { height: 60vw; }\n  .nv-hybrid .x20-specs { grid-template-columns: minmax(0, 1fr); }\n  .nv-hybrid .x20-spec { padding-bottom: 28px; }\n  .nv-hybrid .x20-points { grid-template-columns: 1fr; }\n  .nv-hybrid .x20-points li { padding: 16px 0; }\n  .nv-hybrid .x20-connect { grid-template-columns: minmax(0, 1fr); gap: 18px; }\n  .nv-hybrid .x20-note { margin: 24px 0 0; }\n  .nv-hybrid .x20-copy { display: contents; }\n.nv-hybrid .x20-intro { grid-column: auto; grid-row: auto; order: 1; }\n.nv-hybrid .x20-copy > p { order: 2; }\n  .nv-hybrid .x20-band { height: 70vw; min-height: 260px; }\n  .nv-hybrid .hero-film { object-fit: cover; }\n  .nv-hybrid .road { grid-template-columns: minmax(0, 1fr); }\n  .nv-hybrid .road-panel { height: auto; min-height: 480px; display: flex; flex-direction: column; justify-content: flex-end; }\n  .nv-hybrid .road-copy { position: relative; z-index: 1; left: auto; right: auto; bottom: auto; max-width: none; margin: 0 var(--gutter); padding-bottom: 32px; }\n  .nv-hybrid .gallery-grid { --gal-h: clamp(260px, 70vw, 420px); }\n  .nv-hybrid .gallery-head { grid-template-columns: minmax(0, 1fr); }\n  .nv-hybrid .geometry-grid { grid-template-columns: minmax(0, 1fr); }\n  .nv-hybrid .geometry-stats { gap: 16px 12px; }\n  .nv-hybrid .configurator { grid-template-columns: minmax(0, 1fr); min-height: 0; }\n  .nv-hybrid .cfg-stage { padding: 24px 20px 28px; }\n  .nv-hybrid .cfg-bar { flex-direction: column; align-items: stretch; }\n  .nv-hybrid .cfg-actions { justify-content: space-between; }\n  .nv-hybrid .cfg-panel { aspect-ratio: auto; }\n  .nv-hybrid .cfg-panel-copy { position: relative; inset: auto; padding: clamp(20px, 2.4vw, 36px); }\n  .nv-hybrid .faq-list { grid-template-columns: minmax(0, 1fr); }\n  .nv-hybrid .viewer-head { flex-direction: column; align-items: flex-start; }\n  .nv-hybrid .viewer-stage { height: 72vw; min-height: 340px; max-height: 560px; }\n  .nv-hybrid .closing-list { grid-template-columns: 1fr; }\n  .nv-hybrid .closing-list li { padding-bottom: 36px; }\n  .nv-hybrid .closing-list li::before { margin-bottom: 18px; }\n}\n\/* The theme pads its page wrapper by 100px at the bottom. That padding would show as a white band above the footer, so the block removes it. *\/\n#qodef-page-inner:has(.nv-hybrid) { padding-bottom: 0; }\n@media (prefers-reduced-motion: reduce) {\n  .nv-hybrid *, .nv-hybrid *::before, .nv-hybrid *::after { transition-duration: .01ms !important; animation-duration: .01ms !important; }\n}\n\n\/* Ficha t\u00e9cnica de geometr\u00eda aprobada *\/\n.nv-hybrid .geometry{padding-bottom:clamp(24px,2.5vw,36px)}.nv-hybrid .geometry-grid{margin-top:clamp(24px,3vw,40px)}.nv-hybrid .geometry-photo{padding:4% 0}.nv-hybrid .size-label{margin-top:32px}.tech{background:#e7e5df;color:#171717;padding:clamp(24px,2.5vw,36px) var(--gutter) clamp(48px,5vw,72px)}.tech-inner{max-width:var(--content);margin:auto}.tech h2{font-size:clamp(30px,3vw,48px);font-weight:300;line-height:1.15;max-width:24ch;margin:0 0 32px}.tech-columns{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:40px}.tech h3{font-size:14px;letter-spacing:.12em;font-weight:500;border-top:1px solid #878787;padding-top:18px;margin-bottom:20px}.tech ul{list-style:none;padding:0}.tech li{padding:10px 0;border-bottom:1px solid #ccc;line-height:1.5}@media(max-width:900px){.tech-columns{grid-template-columns:1fr;gap:32px}}\n<\/style>\n<div class=\"nv-hybrid\" lang=\"fr\">\n<a class=\"skip-link\" href=\"#main\">Passer au contenu<\/a>\n\n  <section class=\"hero\" id=\"top\" aria-label=\"Film de lancement de NOVA\">\n    <h1 class=\"visually-hidden\">NOVA, le v\u00e9lo \u00e9lectrique tout-terrain d&#8217;AURUM<\/h1>\n\n    <div class=\"hero-body\">\n      <div class=\"hero-media\">\n        <video class=\"hero-film\" id=\"hero-film\" autoplay=\"\" muted=\"\" loop=\"\" playsinline=\"\" preload=\"metadata\" poster=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/nova-hero-film-poster.webp\" aria-label=\"Film de lancement de NOVA\">\n          <source src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/11\/nova-hero-film-optimized.webm\" type=\"video\/webm\" media=\"(min-width: 901px)\">\n          <source src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/11\/nova-hero-film-optimized.mp4\" type=\"video\/mp4\" media=\"(min-width: 901px)\">\n          <source src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/11\/nova-hero-film-vertical-optimized.webm\" type=\"video\/webm\" media=\"(max-width: 900px)\">\n          <source src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/11\/nova-hero-film-vertical-optimized.mp4\" type=\"video\/mp4\">\n        <\/video>\n        <div class=\"hero-shade\" aria-hidden=\"true\"><\/div>\n      <\/div>\n\n      <div class=\"hero-overlay\">\n        <div class=\"hero-copy\">\n          <svg class=\"product-logo\" viewBox=\"0 0 487.64 94.16\" role=\"img\" aria-label=\"NOVA\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><g>\n    <path fill=\"#1d1d1b\" d=\"M186.67,0c13.58,0,24.94,4.53,34.09,13.59,9.15,9.06,13.72,20.21,13.72,33.46s-4.56,24.26-13.69,33.4c-9.13,9.14-20.26,13.71-33.39,13.71s-24.52-4.55-33.66-13.65c-9.15-9.1-13.72-20.11-13.72-33.03,0-8.61,2.08-16.6,6.25-23.95,4.17-7.35,9.85-13.11,17.04-17.28,7.2-4.16,14.98-6.25,23.36-6.25M187.06,8.71c-6.63,0-12.92,1.73-18.86,5.19-5.94,3.46-10.58,8.11-13.92,13.97-3.34,5.85-5,12.38-5,19.58,0,10.65,3.69,19.65,11.08,26.99,7.38,7.34,16.29,11.01,26.71,11.01,6.96,0,13.4-1.69,19.32-5.06s10.54-7.99,13.86-13.84c3.32-5.85,4.98-12.36,4.98-19.52s-1.66-13.55-4.98-19.3c-3.32-5.75-7.99-10.36-14.01-13.81-6.02-3.46-12.41-5.19-19.17-5.19\"><\/path>\n    <polygon fill=\"#1d1d1b\" points=\"280.19 2.25 289.94 2.25 319.65 71.51 349.84 2.25 359.59 2.25 320.59 91.9 318.64 91.9 280.19 2.25\"><\/polygon>\n    <polygon fill=\"#1d1d1b\" points=\"445.83 2.26 443.64 2.26 401.28 91.9 411.28 91.9 425.24 62.41 429.34 53.75 444.7 21.3 459.98 53.75 436.41 53.75 432.38 62.41 463.86 62.41 477.96 91.9 487.64 91.9 445.83 2.26\"><\/polygon>\n    <polygon fill=\"#1d1d1b\" points=\"0 91.9 17.28 2.26 19.41 2.26 71.4 70.98 84.65 2.26 94.31 2.26 77.03 91.9 74.83 91.9 23.21 24.02 10.13 91.9 0 91.9\"><\/polygon>\n  <\/g><\/svg>\n          <p>MORE RIDE. SAME YOU.<\/p>\n          <div class=\"hero-actions\">\n            <a class=\"outline-button solid-button\" href=\"#words\">Explorez NOVA<\/a>\n            <a class=\"outline-button\" href=\"https:\/\/aurumbikes.com\/fr\/revendeurs\/\">Trouver un revendeur<\/a>\n          <\/div>\n        <\/div>\n        <button class=\"film-control\" type=\"button\" aria-controls=\"hero-film\" data-state=\"playing\">\n          <span class=\"control-icon\" aria-hidden=\"true\"><\/span>\n          <span class=\"control-label\">Mettre le film en pause<\/span>\n        <\/button>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <div class=\"product-nav-shell\">\n    <nav class=\"product-nav\" aria-label=\"Sections des pages NOVA\">\n      <a href=\"#words\">Le concept NOVA<\/a><a href=\"#x20\">Moteur et assistance<\/a><a href=\"#range\">Batterie et autonomie<\/a><a href=\"#geometry\">G\u00e9om\u00e9trie et tailles<\/a><a href=\"#viewer\">Explorer en 3D<\/a><a href=\"#buy\">Prix et configuration<\/a>\n    <\/nav>\n    <button class=\"product-nav-more\" type=\"button\" aria-label=\"Afficher plus de sections\" hidden=\"\">\n      <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"m9 5 7 7-7 7\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>\n    <\/button>\n  <\/div>\n\n  <div id=\"main\">\n    <section class=\"configurator\" id=\"configurator\" aria-label=\"Configurer NOVA\">\n      <div class=\"cfg-stage\" data-reveal=\"\">\n        <div class=\"cfg-variants\">\n          <button class=\"cfg-variant\" type=\"button\" aria-pressed=\"true\">ROAD<\/button>\n          <button class=\"cfg-variant\" type=\"button\" aria-pressed=\"false\">ALL-ROAD<\/button>\n        <\/div>\n        <div class=\"cfg-visual\">\n          <img loading=\"lazy\" class=\"cfg-bike\" src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/novadurace2.webp\" alt=\"NOVA en configuration Route\" width=\"1200\" height=\"800\" loading=\"lazy\" decoding=\"async\">\n          <img loading=\"lazy\" class=\"cfg-bike\" src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/novaduracemontana.webp\" alt=\"NOVA en configuration All-Road\" width=\"2400\" height=\"1601\" loading=\"lazy\" decoding=\"async\" hidden=\"\">\n        <\/div>\n        <div class=\"cfg-bar\">\n          <div class=\"cfg-info\">\n            <p class=\"cfg-name\">NOVA<\/p>\n            <p class=\"cfg-sub\">Configuration Road<\/p>\n            <p class=\"cfg-sub\" hidden=\"\">Configuration All-Road<\/p>\n            <p class=\"cfg-price\">\u00c0 partir de 5 999 \u20ac <span>(hors taxes)<\/span><\/p>\n          <\/div>\n          <div class=\"cfg-actions\">\n            <button class=\"cfg-step\" type=\"button\" data-step=\"-1\" aria-label=\"Variante pr\u00e9c\u00e9dente\">\n              <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"m15 5-7 7 7 7\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>\n            <\/button>\n            <button class=\"cfg-step\" type=\"button\" data-step=\"1\" aria-label=\"Variante suivante\">\n              <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"m9 5 7 7-7 7\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>\n            <\/button>\n            <a class=\"cfg-configure\" href=\"https:\/\/aurumbikes.com\/fr\/nova\/configurer\/?load-preset=148872\">Configurer<\/a>\n          <\/div>\n        <\/div>\n      <\/div>\n      <figure class=\"cfg-panel\" data-reveal=\"\">\n        <img src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/R5M20409-Editar.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n        <div class=\"cfg-panel-copy\">\n          <p class=\"cfg-claim\"><strong>MORE RIDE.<\/strong> SAME YOU.<\/p>\n          <p class=\"cfg-about\">NOVA est le premier v\u00e9lo \u00e9lectrique AURUM, con\u00e7u pour aller plus loin \u00e0 chaque sortie sans changer votre fa\u00e7on de vivre le cyclisme.<\/p>\n          <svg class=\"cfg-panel-logo\" viewBox=\"0 0 487.64 94.16\" role=\"img\" aria-label=\"NOVA\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><g>\n            <path fill=\"#1d1d1b\" d=\"M186.67,0c13.58,0,24.94,4.53,34.09,13.59,9.15,9.06,13.72,20.21,13.72,33.46s-4.56,24.26-13.69,33.4c-9.13,9.14-20.26,13.71-33.39,13.71s-24.52-4.55-33.66-13.65c-9.15-9.1-13.72-20.11-13.72-33.03,0-8.61,2.08-16.6,6.25-23.95,4.17-7.35,9.85-13.11,17.04-17.28,7.2-4.16,14.98-6.25,23.36-6.25M187.06,8.71c-6.63,0-12.92,1.73-18.86,5.19-5.94,3.46-10.58,8.11-13.92,13.97-3.34,5.85-5,12.38-5,19.58,0,10.65,3.69,19.65,11.08,26.99,7.38,7.34,16.29,11.01,26.71,11.01,6.96,0,13.4-1.69,19.32-5.06s10.54-7.99,13.86-13.84c3.32-5.85,4.98-12.36,4.98-19.52s-1.66-13.55-4.98-19.3c-3.32-5.75-7.99-10.36-14.01-13.81-6.02-3.46-12.41-5.19-19.17-5.19\"><\/path>\n    <polygon fill=\"#1d1d1b\" points=\"280.19 2.25 289.94 2.25 319.65 71.51 349.84 2.25 359.59 2.25 320.59 91.9 318.64 91.9 280.19 2.25\"><\/polygon>\n    <polygon fill=\"#1d1d1b\" points=\"445.83 2.26 443.64 2.26 401.28 91.9 411.28 91.9 425.24 62.41 429.34 53.75 444.7 21.3 459.98 53.75 436.41 53.75 432.38 62.41 463.86 62.41 477.96 91.9 487.64 91.9 445.83 2.26\"><\/polygon>\n    <polygon fill=\"#1d1d1b\" points=\"0 91.9 17.28 2.26 19.41 2.26 71.4 70.98 84.65 2.26 94.31 2.26 77.03 91.9 74.83 91.9 23.21 24.02 10.13 91.9 0 91.9\"><\/polygon>\n  <\/g><\/svg>\n        <\/div>\n      <\/figure>\n    <\/section>\n    <section class=\"words\" id=\"words\" aria-label=\"Natural. Open. Versatile. Amplified.\">\n      <div class=\"words-main\">\n        <p class=\"words-kicker\">01 \u2014 L&#8217;id\u00e9e<\/p>\n        <div class=\"word-item is-active\">\n          <h2 class=\"word-claim\">Natural ride.<\/h2>\n          <div class=\"word-body\">\n            <p data-reveal=\"\">Une assistance qui suit votre effort et votre cadence, avec une r\u00e9ponse imm\u00e9diate, fluide et progressive. Vous d\u00e9cidez quand fournir un effort et quand aller plus loin.<\/p>\n            <a class=\"outline-button\" href=\"#feel\" aria-label=\"Explore Natural ride\">Explorer<\/a>\n          <\/div>\n        <\/div>\n        <div class=\"word-item\">\n          <h2 class=\"word-claim\">Open possibilities.<\/h2>\n          <div class=\"word-body\">\n            <p data-reveal=\"\">La batterie int\u00e9gr\u00e9e prolonge chaque sortie tout en vous laissant le contr\u00f4le. Pour des parcours plus longs, davantage de d\u00e9nivel\u00e9 et de nouvelles routes.<\/p>\n            <a class=\"outline-button\" href=\"#range\" aria-label=\"Explore Open possibilities\">Explorer<\/a>\n          <\/div>\n        <\/div>\n        <div class=\"word-item\">\n          <h2 class=\"word-claim\">Versatile by design.<\/h2>\n          <div class=\"word-body\">\n            <p data-reveal=\"\">Ses fixations int\u00e9gr\u00e9es et discr\u00e8tes permettent \u00e0 NOVA de s\u2019adapter \u00e0 des pratiques vari\u00e9es, de l\u2019asphalte aux pistes rapides, avec un seul v\u00e9lo.<\/p>\n            <a class=\"outline-button\" href=\"#road\" aria-label=\"Explore Versatile by design\">Explorer<\/a>\n          <\/div>\n        <\/div>\n        <div class=\"word-item\">\n          <h2 class=\"word-claim\">Amplified by technology.<\/h2>\n          <div class=\"word-body\">\n            <p data-reveal=\"\">Le MAHLE X20 offre une assistance pr\u00e9cise et naturelle sans modifier le caract\u00e8re sportif de NOVA. Puissance maximale de 275 W et environ 3,2 kg pour le syst\u00e8me complet. Tous les c\u00e2bles restent dissimul\u00e9s.<\/p>\n            <a class=\"outline-button\" href=\"#x20\" aria-label=\"Explore Amplified by technology\">Explorer<\/a>\n          <\/div>\n        <\/div>\n        <div class=\"words-rule\" aria-hidden=\"true\"><\/div>\n        <nav class=\"words-links\" aria-label=\"Choisissez une r\u00e9clamation\">\n          <button class=\"word-link is-active\" type=\"button\">Natural<\/button><span class=\"words-sep\" aria-hidden=\"true\">\/<\/span>\n          <button class=\"word-link\" type=\"button\">Open<\/button><span class=\"words-sep\" aria-hidden=\"true\">\/<\/span>\n          <button class=\"word-link\" type=\"button\">Versatile<\/button><span class=\"words-sep\" aria-hidden=\"true\">\/<\/span>\n          <button class=\"word-link\" type=\"button\">Amplified<\/button>\n        <\/nav>\n      <\/div>\n    <\/section>\n\n    <section class=\"feel\" id=\"feel\" aria-labelledby=\"feel-title\">\n      <div class=\"manifesto-track\">\n        <div class=\"feel-stage\">\n          <figure class=\"feel-photo\" aria-hidden=\"true\">\n            <img loading=\"lazy\" src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/nova-life-07.jpg\" alt=\"\" width=\"2000\" height=\"1333\" loading=\"lazy\" decoding=\"async\">\n          <\/figure>\n          <div class=\"feel-shade\" aria-hidden=\"true\"><\/div>\n          <div class=\"feel-inner\">\n            <div class=\"feel-copy\">\n              <p class=\"feel-kicker\">Con\u00e7u pour les cyclistes, pas pour les passagers.<\/p>\n              <h2 id=\"feel-title\" data-reveal=\"\">Ressentez chaque instant.<\/h2>\n            <\/div>\n            <div class=\"manifesto-stage\">\n              <p class=\"manifesto-text\">Le premier v\u00e9lo \u00e9lectrique AURUM transpose notre ADN de performance dans un v\u00e9lo l\u00e9ger, \u00e9pur\u00e9 et polyvalent. Il ne p\u00e9dale pas \u00e0 votre place. Il vous permet de porter votre effort et vos parcours plus loin.<\/p>\n              <span class=\"manifesto-bar\" aria-hidden=\"true\"><\/span>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/section>\n\n    <section class=\"machine\" aria-labelledby=\"machine-title\">\n      <div class=\"machine-main\">\n        <div class=\"machine-head\">\n          <div>\n            <p class=\"machine-kicker\">02 \u2014 La machine<\/p>\n            <h2 id=\"machine-title\" data-reveal=\"\">Toutes les sensations. Plus de libert\u00e9.<\/h2>\n          <\/div>\n          <p class=\"machine-lead\" data-reveal=\"\">Il ressemble \u00e0 un AURUM. Il roule comme un AURUM. Avec un petit suppl\u00e9ment pour chaque aventure.<\/p>\n        <\/div>\n        <figure class=\"machine-photo\" data-reveal=\"\">\n          <img loading=\"lazy\" src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/novadurace2.webp\" alt=\"V\u00e9lo \u00e9lectrique NOVA, vue lat\u00e9rale compl\u00e8te\" width=\"2400\" height=\"1601\" loading=\"lazy\" decoding=\"async\">\n        <\/figure>\n        <ul class=\"machine-stats\" data-reveal=\"\">\n          <li><strong>11.5 <small class=\"unit\">kg<\/small><\/strong><span>Env. poids complet du v\u00e9lo*<\/span><\/li>\n          <li><strong>350 <small class=\"unit\">Wh<\/small><\/strong><span>Batterie int\u00e9gr\u00e9e<\/span><\/li>\n          <li><strong>38 <small class=\"unit\">mm<\/small><\/strong><span>D\u00e9gagement maximal des pneus<\/span><\/li>\n        <\/ul>\n        <p class=\"machine-note\">*Poids de r\u00e9f\u00e9rence ; le poids r\u00e9el varie selon la taille et le montage.<\/p>\n      <\/div>\n    <\/section>\n\n    <section class=\"road\" id=\"road\" aria-label=\"ROUTE et TOUT-ROUTE\">\n      <article class=\"road-panel\">\n        <img loading=\"lazy\" src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/nova-road-panel.webp\" alt=\"Cycliste en kit blanc remontant une route de montagne ensoleill\u00e9e\" width=\"1600\" height=\"1067\" loading=\"lazy\" decoding=\"async\">\n        <div class=\"road-copy\">\n          <p class=\"road-label\">01 \/ ASPHALTE<\/p>\n          <h2 class=\"road-title\">ROAD.<\/h2>\n          <p class=\"road-text\">Le rythme que vous connaissez. Les routes que vous aimez. Et la libert\u00e9 de continuer.<\/p>\n        <\/div>\n      <\/article>\n      <article class=\"road-panel\">\n        <img src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/R5M20442-scaled-1.jpg\" alt=\"Gros plan sur le cadre NOVA blanc avec lettrage AURUM et un pneu gravel\" loading=\"lazy\" decoding=\"async\">\n        <div class=\"road-copy\">\n          <p class=\"road-label\">02 \/ AU-DEL\u00c0 DU TARMAC<\/p>\n          <h2 class=\"road-title\">ALL-ROAD.<\/h2>\n          <p class=\"road-text\">Lorsque la route change, l&#8217;aventure ne s&#8217;arr\u00eate pas. Explorez plus loin avec de la place pour des pneus jusqu&#8217;\u00e0 38 mm.<\/p>\n        <\/div>\n      <\/article>\n    <\/section>\n\n    <section class=\"x20\" id=\"x20\" aria-labelledby=\"x20-title\">\n      <div class=\"x20-head\">\n        <div class=\"x20-copy\">\n          <h2 id=\"x20-title\">Une assistance qui pr\u00e9serve les sensations du cycliste.<\/h2>\n          <p>Le MAHLE X20 est un syst\u00e8me haut de gamme \u00e0 moteur dans le moyeu arri\u00e8re comprenant le moteur, la batterie int\u00e9gr\u00e9e et l\u2019unit\u00e9 de commande. Son assistance r\u00e9active facilite les longues sorties et les mont\u00e9es tout en pr\u00e9servant la silhouette \u00e9pur\u00e9e et les sensations naturelles de NOVA.<\/p>\n        <\/div>\n        <div class=\"x20-intro\">\n          <figure class=\"x20-intro-photo\">\n            <img src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/aurum9934.webp\" alt=\"Pilote appuyant sur la commande du cadre blanc NOVA, avec le voyant vert allum\u00e9\" loading=\"lazy\" decoding=\"async\">\n          <\/figure>\n          <p class=\"x20-lead\">Fluide. Silencieux. Naturellement r\u00e9actif. Le MAHLE X20 vous aide quand vous en avez besoin, sans enlever le plaisir de p\u00e9daler.<\/p>\n        <\/div>\n      <\/div>\n      <div class=\"x20-media\" data-reveal=\"\">\n        <figure class=\"x20-band\">\n          <img src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/nova-bike-road.jpg\" alt=\"V\u00e9lo de route NOVA dans un atelier\" loading=\"lazy\" decoding=\"async\">\n        <\/figure>\n        <div class=\"x20-side\">\n          <figure class=\"x20-photo x20-photo--cutout\">\n            <img src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/mahle-x20-motor.webp\" alt=\"Unit\u00e9 d'entra\u00eenement de moyeu arri\u00e8re MAHLE X20\" loading=\"lazy\" decoding=\"async\">\n          <\/figure>\n          <div class=\"x20-callout\">\n            <p class=\"x20-value\"><span class=\"count\" data-count=\"3.2\" data-decimals=\"1\">3.2<\/span><small>kg<\/small><\/p>\n            <p class=\"x20-label\">Syst\u00e8me complet<\/p>\n            <p class=\"x20-detail\">MAHLE X20<\/p>\n          <\/div>\n        <\/div>\n      <\/div>\n      <ul class=\"x20-specs\" aria-label=\"Sp\u00e9cifications du MAHLE X20\" data-reveal=\"\">\n        <li class=\"x20-spec\">\n          <p class=\"x20-value\"><span class=\"count\" data-count=\"1.39\" data-decimals=\"2\">1.39<\/span><small>kg<\/small><\/p>\n          <p class=\"x20-label\">Poids du moteur<\/p>\n          <p class=\"x20-detail\">Moyeu arri\u00e8re<\/p>\n        <\/li>\n        <li class=\"x20-spec\">\n          <p class=\"x20-value\"><span class=\"count\" data-count=\"23\" data-decimals=\"0\">23<\/span><small>Nm<\/small><\/p>\n          <p class=\"x20-label\">\u00c0 la roue<\/p>\n          <p class=\"x20-detail\">Equivalent \u00e0 65 Nm sur un moteur central<\/p>\n        <\/li>\n        <li class=\"x20-spec\">\n          <p class=\"x20-value\"><span class=\"count\" data-count=\"350\" data-decimals=\"0\">350<\/span><small>Wh<\/small><\/p>\n          <p class=\"x20-label\">Batterie int\u00e9gr\u00e9e<\/p>\n          <p class=\"x20-detail\">iX3<\/p>\n        <\/li>\n      <\/ul>\n      <ul class=\"x20-points\" data-reveal=\"\">\n        <li><strong>Int\u00e9gration invisible.<\/strong> <span>La silhouette \u00e9pur\u00e9e d&#8217;un AURUM.<\/span><\/li>\n        <li><strong>P\u00e9dalage naturel.<\/strong> <span>Une assistance progressive et silencieuse qui ne prend jamais le dessus.<\/span><\/li>\n        <li><strong>Aucune tra\u00een\u00e9e.<\/strong> <span>La roue tourne librement lorsque le moteur ne fonctionne pas.<\/span><\/li>\n        <li><strong>Transmission prot\u00e9g\u00e9e.<\/strong> <span>La puissance suppl\u00e9mentaire ne passe ni par la cha\u00eene ni par la cassette.<\/span><\/li>\n      <\/ul>\n      <div class=\"x20-connect\" data-reveal=\"\">\n        <div class=\"x20-connect-text\">\n          <img loading=\"lazy\" class=\"x20-connect-logo\" src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/logo-app-mysmartbike.jpg\" alt=\"Logo de l'application MAHLE My SmartBike\" width=\"512\" height=\"512\" loading=\"lazy\" decoding=\"async\">\n          <h3 class=\"x20-connect-title\">Connect\u00e9 pour rouler \u00e0 votre fa\u00e7on.<\/h3>\n          <p class=\"x20-connect-copy\">Avec l&#8217;application My SmartBike de MAHLE, personnalisez l&#8217;assistance, consultez les donn\u00e9es de trajet NOVA, enregistrez les itin\u00e9raires et maintenez le syst\u00e8me \u00e0 jour. Bluetooth et ANT+ connectent des capteurs de puissance et de cadence, avec prise en charge d&#8217;Apple Watch.<\/p>\n        <\/div>\n        <figure class=\"x20-connect-photo\">\n          <img src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/mahle-my-smartbike-app.webp\" alt=\"Pilote v\u00e9rifiant l'application MAHLE My SmartBike sur un t\u00e9l\u00e9phone \u00e0 c\u00f4t\u00e9 d'un v\u00e9lo NOVA blanc\" loading=\"lazy\" decoding=\"async\">\n        <\/figure>\n      <\/div>\n      <p class=\"x20-note\">La batterie externe MAHLE eX1, vendue s\u00e9par\u00e9ment, ajoute 171 Wh et porte la capacit\u00e9 totale de 350 Wh \u00e0 521 Wh. Elle peut offrir jusqu\u2019\u00e0 60 km d\u2019autonomie suppl\u00e9mentaire selon le parcours et le niveau d\u2019assistance.<\/p>\n    <\/section>\n\n    <section class=\"range\" id=\"range\" aria-labelledby=\"range-title\">\n      <figure class=\"range-photo\" aria-hidden=\"true\">\n        <img loading=\"lazy\" src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/nova-life-05.jpg\" alt=\"\" width=\"2000\" height=\"1333\" loading=\"lazy\" decoding=\"async\">\n      <\/figure>\n      <div class=\"range-copy\">\n        <h2 class=\"range-number\" id=\"range-title\">Jusqu\u2019\u00e0 <span class=\"count\" data-count=\"140\" data-decimals=\"0\">140<\/span><span class=\"range-unit\">km.<\/span><\/h2>\n        <p>Autonomie estim\u00e9e, obtenue lors de tests internes sur le terrain avec 2 000 \u00e0 2 300 m de d\u00e9nivel\u00e9 positif cumul\u00e9.<\/p>\n        <p class=\"range-note\">Chiffres estim\u00e9s. L&#8217;autonomie r\u00e9elle d\u00e9pend du poids du cycliste, de l&#8217;itin\u00e9raire, de la mont\u00e9e, du niveau d&#8217;assistance, de la vitesse, des pneus, de la pression, de la temp\u00e9rature et des conditions d&#8217;utilisation.<\/p>\n      <\/div>\n    <\/section>\n\n    <section class=\"gallery\" id=\"gallery\" aria-labelledby=\"gallery-title\">\n      <div class=\"gallery-inner\">\n        <div class=\"gallery-head\">\n          <div>\n            <p class=\"gallery-kicker\">NOVA de plus pr\u00e8s \/ 05 images<\/p>\n            <h2 id=\"gallery-title\">Chaque d\u00e9tail.<br>Toutes les possibilit\u00e9s.<\/h2>\n          <\/div>\n          <p class=\"gallery-lead\">D\u00e9couvrez NOVA \u00e0 travers ses parcours, son design et sa technologie.<\/p>\n        <\/div>\n      <\/div>\n      <div class=\"gallery-stage\" tabindex=\"0\" aria-label=\"Galerie de photos NOVA. Utilisez les fl\u00e8ches pour vous d\u00e9placer entre les images.\">\n        <ul class=\"gallery-grid\">\n          <li class=\"gallery-frame gal-tall\">\n            <img src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/nova-life-03.jpg\" alt=\"Pilote debout \u00e0 c\u00f4t\u00e9 d'un v\u00e9lo NOVA sur une route ouverte\" loading=\"lazy\" decoding=\"async\">\n          <\/li>\n          <li class=\"gallery-frame gal-square\">\n            <img src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/nova-life-04.jpg\" alt=\"Gros plan d'un cavalier portant un casque et des lunettes de soleil\" loading=\"lazy\" decoding=\"async\">\n          <\/li>\n          <li class=\"gallery-frame gal-wide\">\n            <img src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/nova-life-06.jpg\" alt=\"Rider pench\u00e9 sur le guidon d'un v\u00e9lo NOVA sur une route \u00e0 flanc de colline\" loading=\"lazy\" decoding=\"async\">\n          <\/li>\n          <li class=\"gallery-frame gal-wide\">\n            <img src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/nova-life-07.jpg\" alt=\"Pilote sur un v\u00e9lo NOVA blanc sur une route foresti\u00e8re, en mouvement\" loading=\"lazy\" decoding=\"async\">\n          <\/li>\n          <li class=\"gallery-frame gal-pano\">\n            <img src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/nova-life-08.jpg\" alt=\"Pilote sur un v\u00e9lo NOVA sur une route \u00e0 travers des prairies s\u00e8ches\" loading=\"lazy\" decoding=\"async\">\n          <\/li>\n        <\/ul>\n      <\/div>\n      <div class=\"gallery-inner gallery-foot\">\n        <div class=\"gallery-controls\">\n          <p class=\"gallery-count\"><span class=\"gallery-now\">01<\/span> \/ 05<\/p>\n          <div class=\"gallery-progress\" aria-hidden=\"true\"><span class=\"gallery-bar\"><\/span><\/div>\n          <div class=\"gallery-arrows\">\n            <button class=\"cfg-step\" type=\"button\" data-gallery-step=\"-1\" aria-label=\"Photo pr\u00e9c\u00e9dente\" disabled=\"\">\n              <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19 12H5m0 0 6-6m-6 6 6 6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>\n            <\/button>\n            <button class=\"cfg-step\" type=\"button\" data-gallery-step=\"1\" aria-label=\"Photo suivante\">\n              <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M5 12h14m0 0-6-6m6 6-6 6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>\n            <\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/section>\n    <section class=\"geometry\" id=\"geometry\" aria-labelledby=\"geometry-title\">\n      <div class=\"geometry-inner\">\n        <h2 id=\"geometry-title\">Trouvez votre position naturelle.<\/h2>\n        <p class=\"geometry-lead\">Stack progressif, reach ma\u00eetris\u00e9.<\/p>\n        <div class=\"geometry-grid\">\n          <figure class=\"geometry-photo\">\n            <img loading=\"lazy\" src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/nova-geometry-fit.webp\" alt=\"Gros plan du cadre NOVA blanc avec la monture AURUM FDH2 sur fond studio gris clair\" width=\"1600\" height=\"1067\" loading=\"lazy\" decoding=\"async\">\n          <\/figure>\n          <div class=\"geometry-panel\">\n            <ul class=\"geometry-stats\">\n              <li><strong>420<\/strong><span>Bases en mm<\/span><\/li>\n              <li><strong>4<\/strong><span>Tailles de cadre<\/span><\/li>\n              <li><strong>38<\/strong><span>Pneu max. en mm<\/span><\/li>\n            <\/ul>\n        <p class=\"size-label\">Explorez la g\u00e9om\u00e9trie par taille<\/p>\n        <div class=\"size-picker\" role=\"group\" aria-label=\"Taille du cadre\">\n          <button class=\"size-button\" type=\"button\" aria-pressed=\"true\">S<\/button>\n          <button class=\"size-button\" type=\"button\" aria-pressed=\"false\">M<\/button>\n          <button class=\"size-button\" type=\"button\" aria-pressed=\"false\">L<\/button>\n          <button class=\"size-button\" type=\"button\" aria-pressed=\"false\">XL<\/button>\n        <\/div>\n        <a class=\"size-guide\" href=\"https:\/\/aurumbikes.com\/fr\/guide-des-tailles\/\">Guide des tailles<\/a>\n      <dl class=\"geometry-table\" aria-label=\"G\u00e9om\u00e9trie du cadre NOVA par taille\" data-reveal=\"\">\n        <div class=\"geometry-item\"><dt>Stack<\/dt><dd data-values=\"550 mm,570 mm,590 mm,610 mm\">550 mm<\/dd><\/div>\n        <div class=\"geometry-item\"><dt>Reach<\/dt><dd data-values=\"378 mm,384 mm,391 mm,398 mm\">378 mm<\/dd><\/div>\n        <div class=\"geometry-item\"><dt>Tube sup\u00e9rieur<\/dt><dd data-values=\"536 mm,547 mm,560 mm,573 mm\">536 mm<\/dd><\/div>\n        <div class=\"geometry-item\"><dt>Empattement<\/dt><dd data-values=\"1007 mm,1015 mm,1024 mm,1038 mm\">1007 mm<\/dd><\/div>\n        <div class=\"geometry-item\"><dt>Angle de direction<\/dt><dd data-values=\"71\u00b0,71.6\u00b0,72\u00b0,72\u00b0\">71\u00b0<\/dd><\/div>\n        <div class=\"geometry-item\"><dt>Hauteur d\u2019entrejambe<\/dt><dd data-values=\"743 mm,792 mm,805 mm,831 mm\">743 mm<\/dd><\/div>\n      <\/dl>\n      <p class=\"geometry-foot\">Supports de garde-boue cach\u00e9s et supports de sac de tube sup\u00e9rieur. Bo\u00eetier de p\u00e9dalier BB386EVO, UDH, tige de selle de 27,2 mm.<\/p>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/section>\n\n    <section class=\"tech\" aria-labelledby=\"tech-title\"><div class=\"tech-inner\"><h2 id=\"tech-title\">UNE G\u00c9OM\u00c9TRIE SPORTIVE CON\u00c7UE POUR PLUS DE TEMPS SUR LE V\u00c9LO.<\/h2><div class=\"tech-columns\"><div><h3>POLYVALENCE ALL-ROAD<\/h3><ul><li>D\u00e9gagement pour pneus jusqu\u2019\u00e0 38 mm<\/li><li>Compatible avec les transmissions route 1x et 2x<\/li><li>Fixations pour trois porte-bidons au maximum<\/li><li>Fixations pour sac de tube sup\u00e9rieur<\/li><li>Fixations de garde-boue dissimul\u00e9es<\/li><\/ul><\/div><div><h3>CADRE ET POSITION<\/h3><ul><li>Passage de c\u00e2bles enti\u00e8rement interne<\/li><li>Jeu de direction de 1,5 pouce<\/li><li>Interface de potence standard de 28,6 mm<\/li><li>Bo\u00eetier de p\u00e9dalier BB386EVO<\/li><li>Patte de d\u00e9railleur UDH<\/li><li>Tige de selle ronde de 27,2 mm<\/li><li>Quatre tailles de cadre : S, M, L et XL<\/li><\/ul><\/div><div><h3>SYST\u00c8ME MAHLE X20<\/h3><ul><li>Batterie int\u00e9gr\u00e9e de 350 Wh<\/li><li>Moteur dans le moyeu arri\u00e8re<\/li><li>Assistance par capteur de couple<\/li><li>Unit\u00e9 de commande int\u00e9gr\u00e9e au tube sup\u00e9rieur<\/li><li>Port de charge sous le bo\u00eetier de p\u00e9dalier<\/li><li>Poids approximatif du syst\u00e8me complet : 3,2 kg<\/li><\/ul><\/div><\/div><\/div><\/section>\n\n    <section class=\"viewer\" id=\"viewer\" aria-labelledby=\"viewer-title\">\n      <div class=\"viewer-head\">\n        <h2 id=\"viewer-title\">Explorez NOVA en 3D.<\/h2>\n        <p>Faites pivoter le v\u00e9lo, v\u00e9rifiez les d\u00e9tails, voyez le cadre de tous les c\u00f4t\u00e9s.<\/p>\n      <\/div>\n      <div class=\"viewer-stage\" id=\"viewer-stage\">\n        <img loading=\"lazy\" class=\"viewer-poster\" src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/nova-poster-glb.jpg\" alt=\"V\u00e9lo \u00e9lectrique NOVA, pr\u00eat \u00e0 explorer en 3D\" width=\"1920\" height=\"951\" loading=\"lazy\" decoding=\"async\">\n      <\/div>\n      <p class=\"viewer-hint\" id=\"viewer-hint\" hidden=\"\">Faites glisser pour explorer<\/p>\n    <\/section>\n\n    <div class=\"marquee\">\n      <p class=\"visually-hidden\">More ride. Same you.<\/p>\n      <p class=\"marquee-track\" aria-hidden=\"true\"><span>More ride.<\/span><span class=\"sep\">\/<\/span><span>Same you.<\/span><span>More ride.<\/span><span class=\"sep\">\/<\/span><span>Same you.<\/span><span>More ride.<\/span><span class=\"sep\">\/<\/span><span>Same you.<\/span><span>More ride.<\/span><span class=\"sep\">\/<\/span><span>Same you.<\/span><span>More ride.<\/span><span class=\"sep\">\/<\/span><span>Same you.<\/span><span>More ride.<\/span><span class=\"sep\">\/<\/span><span>Same you.<\/span><span>More ride.<\/span><span class=\"sep\">\/<\/span><span>Same you.<\/span><\/p>\n    <\/div>\n\n    <section class=\"buy\" id=\"buy\" aria-label=\"Prix \u200b\u200bet revendeurs\">\n      <figure class=\"buy-photo\" aria-hidden=\"true\">\n        <img loading=\"lazy\" src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/R5M20402-Editar.webp\" alt=\"\" width=\"2400\" height=\"1601\" loading=\"lazy\" decoding=\"async\">\n      <\/figure>\n      <div class=\"buy-shade\" aria-hidden=\"true\"><\/div>\n      <div class=\"buy-inner\">\n        <p class=\"buy-price\">NOVA \u00e0 partir de 5 999 \u20ac <span>excl. TVA (NOVA 105, PVC)<\/span><\/p>\n        <div class=\"buy-copy\">\n          <p>Gamme compl\u00e8te de 5 999 \u20ac \u00e0 8 799 \u20ac hors TVA, selon le groupe de transmission.<\/p>\n          <p class=\"buy-note\">Les composants et la configuration affectent le prix final.<\/p>\n          <p class=\"buy-note\">Les prix excluent le guidon et la potence, qui sont vendus s\u00e9par\u00e9ment.<\/p>\n          <div class=\"buy-actions\">\n            <a class=\"outline-button\" href=\"https:\/\/aurumbikes.com\/fr\/nova\/configurer\/?load-preset=148872\">Configurer NOVA<\/a>\n          <\/div>\n          \n        <\/div>\n      <\/div>\n    <\/section>\n\n    <section class=\"faq\" id=\"faq\" aria-labelledby=\"faq-title\">\n      <h2 class=\"faq-title\" id=\"faq-title\">Questions fr\u00e9quemment pos\u00e9es<\/h2>\n      <div class=\"faq-list\" data-reveal=\"\">\n        <details class=\"faq-item\">\n          <summary>Quel type de v\u00e9lo est NOVA ?<\/summary>\n          <p>Un v\u00e9lo \u00e9lectrique all-road performant qui associe vitesse, l\u00e9g\u00e8ret\u00e9, stabilit\u00e9 et polyvalence.<\/p>\n        <\/details>\n        <details class=\"faq-item\">\n          <summary>Quelles sensations procure l\u2019assistance ?<\/summary>\n          <p>Naturelle et progressive. Le capteur de couple adapte la r\u00e9ponse du moteur \u00e0 l\u2019effort fourni \u00e0 chaque coup de p\u00e9dale.<\/p>\n        <\/details>\n        <details class=\"faq-item\">\n          <summary>Puis-je p\u00e9daler sans assistance ?<\/summary>\n          <p>Oui. Vous pouvez \u00e9teindre le syst\u00e8me et p\u00e9daler normalement. Au-del\u00e0 de 25 km\/h, le moteur se d\u00e9saccouple automatiquement.<\/p>\n        <\/details>\n        <details class=\"faq-item\">\n          <summary>Quelle est l\u2019autonomie de NOVA ?<\/summary>\n          <p>Elle d\u00e9pend du terrain, du d\u00e9nivel\u00e9, du poids du cycliste, des conditions et du niveau d\u2019assistance. Lors des tests AURUM, NOVA a parcouru jusqu\u2019\u00e0 140 km et 2 300 m de d\u00e9nivel\u00e9 positif, principalement avec le niveau d\u2019assistance le plus faible.<\/p>\n        <\/details>\n        <details class=\"faq-item\">\n          <summary>Quelle est la largeur maximale des pneus ?<\/summary>\n          <p>NOVA accepte des pneus jusqu\u2019\u00e0 38 mm en configurations Road et All-Road.<\/p>\n        <\/details>\n        <details class=\"faq-item\">\n          <summary>Est-elle compatible avec les transmissions 1x et 2x ?<\/summary>\n          <p>Oui. La plateforme accepte les deux configurations selon le montage choisi.<\/p>\n        <\/details>\n        <details class=\"faq-item\">\n          <summary>La roue arri\u00e8re est-elle facile \u00e0 d\u00e9monter ?<\/summary>\n          <p>Oui. Le syst\u00e8me MAHLE \u00e9tablit automatiquement la connexion \u00e9lectrique au remontage de la roue, sans c\u00e2ble \u00e0 brancher manuellement.<\/p>\n        <\/details>\n        <details class=\"faq-item\">\n          <summary>Peut-on augmenter l\u2019autonomie de NOVA ?<\/summary>\n          <p>Oui. NOVA est compatible avec la batterie externe MAHLE eX1, vendue s\u00e9par\u00e9ment. Ses 171 Wh suppl\u00e9mentaires portent la capacit\u00e9 totale de la batterie de 350 Wh \u00e0 521 Wh et peuvent ajouter jusqu\u2019\u00e0 60 km d\u2019autonomie suppl\u00e9mentaire, selon le parcours et le niveau d\u2019assistance. Gr\u00e2ce aux trois fixations de porte-bidon, la batterie peut \u00eatre install\u00e9e en laissant deux emplacements libres pour l\u2019hydratation.<\/p>\n        <\/details>\n        <details class=\"faq-item\">\n          <summary>Quels modes d\u2019assistance NOVA propose-t-elle ?<\/summary>\n          <p>NOVA dispose de trois niveaux d\u2019assistance personnalisables dans l\u2019application My SmartBike : puissance, acc\u00e9l\u00e9ration et r\u00e9ponse. Le mode Smart Assist adapte \u00e9galement automatiquement l\u2019assistance \u00e0 la pente, au poids du cycliste et \u00e0 l\u2019effort n\u00e9cessaire.<\/p>\n        <\/details>\n      <\/div>\n    <\/section>\n\n    <section class=\"closing\" id=\"warranty\" aria-labelledby=\"closing-title\">\n      <h2 id=\"closing-title\" data-reveal=\"\">Soutenu par AURUM,<br><span>avant et apr\u00e8s la vente.<\/span><\/h2>\n      <ol class=\"closing-list\">\n        <li data-reveal=\"\">\n          <h3>Garantie l\u00e9gale de 3 ans.<\/h3>\n          <p>NOVA b\u00e9n\u00e9ficie de trois ans de garantie l\u00e9gale contre les d\u00e9fauts de fabrication, de mati\u00e8re ou de non-conformit\u00e9.<\/p>\n        <\/li>\n        <li data-reveal=\"\">\n          <h3>Garantie \u00e0 vie limit\u00e9e sur le cadre et la fourche.<\/h3>\n          <p>Le propri\u00e9taire d\u2019origine peut en b\u00e9n\u00e9ficier gratuitement apr\u00e8s avoir enregistr\u00e9 le v\u00e9lo sur aurumbikes.com dans les 30 jours suivant sa r\u00e9ception. Cette garantie n\u2019est pas transf\u00e9rable.<\/p>\n        <\/li>\n        <li data-reveal=\"\">\n          <h3>Mont\u00e9 selon vos choix.<\/h3>\n          <p>Le guidon et la potence sont vendus s\u00e9par\u00e9ment. Compatible avec le cockpit monocoque AURUM pour une configuration plus propre et plus int\u00e9gr\u00e9e.<\/p>\n        <\/li>\n      <\/ol>\n      <div class=\"closing-actions\">\n        <a class=\"outline-button\" href=\"https:\/\/aurumbikes.com\/fr\/garantie\/\">Plus de d\u00e9tails<\/a>\n        <a class=\"outline-button\" href=\"https:\/\/aurumbikes.com\/fr\/revendeurs\/\">Trouver un revendeur<\/a>\n      <\/div>\n    <\/section>\n  <\/div>\n<\/div>\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/lenis@1.3.26\/dist\/lenis.min.js\"><\/script>\n<template id=\"nv-viewer-doc\">\n<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>NOVA 3D<\/title>\n<style>\nhtml, body { margin: 0; height: 100%; overflow: hidden; background: #171717; }\n#stage { position: fixed; inset: 0; background: #171717; }\n#stage canvas { display: block; width: 100%; height: 100%; cursor: grab; }\n#stage canvas:active { cursor: grabbing; }\n#status {\n  position: fixed; left: 50%; top: 50%; transform: translate(-50%, -50%);\n  margin: 0; color: #878787; font: 600 14px\/1 'Poppins', sans-serif;\n  letter-spacing: .12em; text-transform: uppercase; white-space: nowrap;\n}\n#status.is-hidden { display: none; }\n<\/style>\n<\/head>\n<body>\n<div id=\"stage\"><\/div>\n<p id=\"status\">Loading<\/p>\n\n<script type=\"importmap\">\n{\n  \"imports\": {\n    \"three\": \"https:\/\/unpkg.com\/three@0.160.0\/build\/three.module.js\",\n    \"three\/addons\/\": \"https:\/\/unpkg.com\/three@0.160.0\/examples\/jsm\/\"\n  }\n}\n<\/script>\n<script type=\"module\">\nimport * as THREE from 'three';\nimport { GLTFLoader } from 'three\/addons\/loaders\/GLTFLoader.js';\nimport { DRACOLoader } from 'three\/addons\/loaders\/DRACOLoader.js';\nimport { OrbitControls } from 'three\/addons\/controls\/OrbitControls.js';\nimport { RoomEnvironment } from 'three\/addons\/environments\/RoomEnvironment.js';\n\nconst MODEL_URL = 'https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/NOVA.glb';\nconst BG = '#171717';\n\nconst stage = document.getElementById('stage');\nconst status = document.getElementById('status');\n\nconst renderer = new THREE.WebGLRenderer({ antialias: true });\nrenderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));\nrenderer.setSize(stage.clientWidth, stage.clientHeight);\nrenderer.setClearColor(BG, 1);\nstage.appendChild(renderer.domElement);\n\nconst scene = new THREE.Scene();\nscene.background = new THREE.Color(BG);\nconst pmrem = new THREE.PMREMGenerator(renderer);\nscene.environment = pmrem.fromScene(new RoomEnvironment(), 0.04).texture;\nconst key = new THREE.DirectionalLight(0xffffff, 0.6);\nkey.position.set(2, 3, 2);\nscene.add(key);\n\nconst camera = new THREE.PerspectiveCamera(30, stage.clientWidth \/ stage.clientHeight, 0.01, 100);\n\n\/\/ Solo girar: arrastre con el bot\u00f3n izquierdo o un dedo. Sin zoom, sin desplazamiento.\nconst controls = new OrbitControls(camera, renderer.domElement);\ncontrols.enablePan = false;\ncontrols.enableZoom = false;\ncontrols.enableDamping = true;\ncontrols.dampingFactor = 0.08;\ncontrols.rotateSpeed = 0.8;\n\/\/ Giro lento al entrar; se para en cuanto el visitante interact\u00faa, y no gira si el sistema pide menos movimiento.\nconst reduceMotion = matchMedia('(prefers-reduced-motion: reduce)');\ncontrols.autoRotate = !reduceMotion.matches;\ncontrols.autoRotateSpeed = 1.2;\ncontrols.addEventListener('start', () => { controls.autoRotate = false; });\ncontrols.minPolarAngle = Math.PI * 0.12;\ncontrols.maxPolarAngle = Math.PI * 0.88;\ncontrols.mouseButtons = { LEFT: THREE.MOUSE.ROTATE, MIDDLE: null, RIGHT: null };\ncontrols.touches = { ONE: THREE.TOUCH.ROTATE, TWO: null };\n\/\/ Con un dedo gira la bici; el desplazamiento vertical de la p\u00e1gina sigue funcionando.\nrenderer.domElement.style.touchAction = 'pan-y';\n\nrenderer.domElement.addEventListener('contextmenu', (e) => e.preventDefault());\n\n\/\/ La rueda no hace zoom: se reenv\u00eda al desplazamiento de la p\u00e1gina que aloja el visor.\nrenderer.domElement.addEventListener('wheel', (e) => {\n  e.preventDefault();\n  const k = e.deltaMode === 1 ? 16 : (e.deltaMode === 2 ? window.innerHeight : 1);\n  try {\n    if (window.parent && window.parent !== window) window.parent.scrollBy(0, e.deltaY * k);\n  } catch (err) { \/* p\u00e1gina de otro origen: no hay nada que desplazar *\/ }\n}, { passive: false });\n\nlet modelRadius = 0;\nlet modelLength = 0;\n\nfunction requiredDistance() {\n  const vf = THREE.MathUtils.degToRad(camera.fov) \/ 2;\n  const hf = Math.atan(Math.tan(vf) * camera.aspect);\n  return Math.max(modelRadius \/ Math.sin(vf), (modelLength \/ 2) \/ Math.tan(hf)) * 0.8;\n}\n\nfunction frameModel(object) {\n  const box = new THREE.Box3().setFromObject(object);\n  const center = box.getCenter(new THREE.Vector3());\n  const size = box.getSize(new THREE.Vector3());\n  object.position.sub(center);\n  modelRadius = size.length() \/ 2;\n  modelLength = size.x;\n\n  const d = requiredDistance();\n  camera.position.set(d * 0.62, d * 0.22, d * 0.78);\n  camera.near = d \/ 100;\n  camera.far = d * 10;\n  camera.updateProjectionMatrix();\n  controls.target.set(0, 0, 0);\n  controls.update();\n}\n\nfunction resize() {\n  const w = stage.clientWidth;\n  const h = stage.clientHeight;\n  renderer.setSize(w, h);\n  camera.aspect = w \/ h;\n  camera.updateProjectionMatrix();\n  if (modelRadius > 0) {\n    const need = requiredDistance();\n    const offset = camera.position.clone().sub(controls.target);\n    if (offset.length() < need) camera.position.copy(controls.target).add(offset.setLength(need));\n  }\n}\nwindow.addEventListener('resize', resize);\n\n\/\/ El modelo va comprimido con Draco: sin su decodificador, GLTFLoader no puede leerlo.\nconst dracoLoader = new DRACOLoader();\ndracoLoader.setDecoderPath('https:\/\/unpkg.com\/three@0.160.0\/examples\/jsm\/libs\/draco\/gltf\/');\nconst loader = new GLTFLoader();\nloader.setDRACOLoader(dracoLoader);\nloader.load(\n  MODEL_URL,\n  (gltf) => {\n    scene.add(gltf.scene);\n    frameModel(gltf.scene);\n    status.classList.add('is-hidden');\n    if (window.parent && window.parent !== window) window.parent.postMessage('nova3d-ready', '*');\n  },\n  (xhr) => {\n    if (xhr.total) status.textContent = 'Loading ' + Math.round((xhr.loaded \/ xhr.total) * 100) + '%';\n  },\n  () => {\n    status.textContent = 'Impossible de charger le mod\u00e8le';\n  }\n);\n\nlet viewerActive = false;\nconst renderViewer = () => {\n  controls.update();\n  renderer.render(scene, camera);\n};\nconst syncRenderLoop = () => {\n  renderer.setAnimationLoop(viewerActive && document.visibilityState !== 'hidden' ? renderViewer : null);\n};\nwindow.addEventListener('message', (event) => {\n  if (event.source !== window.parent) return;\n  if (event.data === 'nova3d-resume') viewerActive = true;\n  else if (event.data === 'nova3d-pause') viewerActive = false;\n  else return;\n  syncRenderLoop();\n});\ndocument.addEventListener('visibilitychange', syncRenderLoop);\nsyncRenderLoop();\n<\/script>\n<\/body>\n<\/html>\n\n<\/template>\n<script id=\"nv-hybrid-script\">\n(() => {\n  const root = document.querySelector('.nv-hybrid');\n  const cssPx = (name) => parseFloat(getComputedStyle(root).getPropertyValue(name)) || 0;\n  \/\/ The pinned nav and stages take their top from syncStick, which follows the theme header.\n  let TOP = cssPx('--nv-admin');\n  \/\/ Full-bleed width: the viewport without its scrollbar. CSS 100vw would include the scrollbar and overhang the page.\n  const fitFrame = () => {\n    root.style.setProperty('--nv-width', document.documentElement.clientWidth + 'px');\n  };\n  fitFrame();\n  window.addEventListener('load', fitFrame);\n  window.addEventListener('resize', fitFrame, { passive: true });\n  \/\/ The theme header slides away on scroll down and back in on scroll up. The product nav and the pinned stages sit under its lower edge, or at the top of the viewport below the admin bar while it is away.\n  const themeHeader = document.querySelector('.qodef-header-sticky');\n  \/\/ The theme changes the header a moment after a scroll event, so its edge is read again for a short time after each one.\n  let settleUntil = 0;\n  const syncStick = () => {\n    const edge = themeHeader ? themeHeader.getBoundingClientRect().bottom : 0;\n    TOP = Math.max(cssPx('--nv-admin'), Math.min(edge, cssPx('--nv-top') + cssPx('--nv-admin')));\n    root.style.setProperty('--nv-stick', TOP + 'px');\n    if (performance.now() < settleUntil) requestUpdate();\n  };\n  const reduceMotion = matchMedia('(prefers-reduced-motion: reduce)');\n  const desktop = matchMedia('(min-width: 901px)');\n  const clamp = (value, min = 0, max = 1) => Math.min(max, Math.max(min, value));\n  const motionOn = () => desktop.matches && !reduceMotion.matches;\n  const sweepOn = () => !reduceMotion.matches;\n  const productNav = root.querySelector('.product-nav');\n  const productNavMore = root.querySelector('.product-nav-more');\n  const productNavLinks = [...productNav.querySelectorAll('a[href^=\"#\"]')];\n  const productNavTargets = productNavLinks.map((link) => root.querySelector(link.hash)).filter(Boolean);\n  const syncProductNavOverflow = () => {\n    const canScroll = productNav.scrollWidth > productNav.clientWidth + 2;\n    const atEnd = productNav.scrollLeft + productNav.clientWidth >= productNav.scrollWidth - 2;\n    productNavMore.hidden = desktop.matches || !canScroll || atEnd;\n  };\n  const syncCurrentSection = () => {\n    const threshold = TOP + productNav.offsetHeight + 8;\n    let current = null;\n    productNavTargets.forEach((section) => {\n      if (section.getBoundingClientRect().top <= threshold) current = section;\n    });\n    productNavLinks.forEach((link) => {\n      if (current && link.hash === `#${current.id}`) link.setAttribute('aria-current', 'location');\n      else link.removeAttribute('aria-current');\n    });\n  };\n  productNavMore.addEventListener('click', () => {\n    productNav.scrollBy({ left: Math.max(148, productNav.clientWidth * 0.72), behavior: reduceMotion.matches ? 'auto' : 'smooth' });\n  });\n  productNav.addEventListener('scroll', syncProductNavOverflow, { passive: true });\n  syncProductNavOverflow();\n\n  \/\/ Film: plays while on screen and while the visitor wants it. Pauses when it leaves the screen or the tab is hidden.\n  const video = root.querySelector('#hero-film');\n  const control = root.querySelector('.film-control');\n  if (video && control) {\n    const label = control.querySelector('.control-label');\n    let inView = true;\n    let wantsPlay = !reduceMotion.matches;\n    const syncControl = () => {\n      const playing = !video.paused && !video.ended;\n      control.dataset.state = playing ? 'playing' : 'paused';\n      label.textContent = playing ? 'Mettre le film en pause' : 'Jouer un film';\n    };\n    const syncFilm = () => {\n      const shouldPlay = wantsPlay && inView && document.visibilityState !== 'hidden';\n      if (shouldPlay && video.paused) video.play().catch(syncControl);\n      else if (!shouldPlay && !video.paused) video.pause();\n      syncControl();\n    };\n    video.addEventListener('play', syncControl);\n    video.addEventListener('pause', syncControl);\n    video.addEventListener('ended', syncControl);\n    document.addEventListener('visibilitychange', syncFilm);\n    reduceMotion.addEventListener('change', (event) => { wantsPlay = !event.matches; syncFilm(); });\n    control.addEventListener('click', () => { wantsPlay = video.paused; syncFilm(); });\n    if ('IntersectionObserver' in window) {\n      new IntersectionObserver(([entry]) => { inView = entry.isIntersecting; syncFilm(); }, { threshold: 0.1 }).observe(video);\n    }\n    syncFilm();\n  }\n\n  const wordItems = [...root.querySelectorAll('.word-item')];\n  const wordLinks = [...root.querySelectorAll('.word-link')];\n\n  \/\/ The last claim whose row has passed the middle of the viewport is active. Its nav button follows it.\n  const updateWords = () => {\n    const line = innerHeight * 0.5;\n    let active = 0;\n    wordItems.forEach((el, i) => { if (el.getBoundingClientRect().top < line) active = i; });\n    wordItems.forEach((el, i) => el.classList.toggle('is-active', i === active));\n    wordLinks.forEach((el, i) => {\n      el.classList.toggle('is-active', i === active);\n      el.setAttribute('aria-current', i === active ? 'true' : 'false');\n    });\n  };\n\n  \/\/ A nav button scrolls its claim to the reading line. The scroll then sets the active claim, as any scroll does.\n  wordLinks.forEach((link, i) => link.addEventListener('click', () => {\n    const y = Math.max(0, wordItems[i].getBoundingClientRect().top + scrollY - innerHeight * 0.5 + 40);\n    if (lenis) lenis.scrollTo(y, { duration: 1.2 });\n    else window.scrollTo({ top: y, behavior: reduceMotion.matches ? 'auto' : 'smooth' });\n  }));\n\n  \/\/ Share of an element's travel through the viewport, from 0 at its entry to 1 at its exit.\n  const along = (el, vh) => {\n    const rect = el.getBoundingClientRect();\n    return clamp((vh - rect.top) \/ (vh + rect.height));\n  };\n\n  \/\/ Performance DNA: a band of light moves through the words as the copy crosses the screen. The yellow bar tracks the same travel.\n  const BAND = 0.12;\n  const manifestoTrack = root.querySelector('.manifesto-track');\n  const manifestoStage = root.querySelector('.manifesto-stage');\n  const manifestoText = root.querySelector('.manifesto-text');\n  const splitWords = (el) => {\n    const parts = el.textContent.split(' ');\n    el.replaceChildren(...parts.flatMap((word, i) => {\n      const span = Object.assign(document.createElement('span'), { className: 'w', textContent: word });\n      return i < parts.length - 1 ? [span, ' '] : [span];\n    }));\n  };\n  splitWords(manifestoText);\n  const manifestoWords = [...manifestoText.querySelectorAll('.w')];\n  const updateManifesto = (vh) => {\n    \/\/ Colour runs through the first 85% of the pin, so the last word is lit before the stage leaves.\n    const pin = Math.max(1, manifestoTrack.offsetHeight - vh);\n    const progress = clamp(-manifestoTrack.getBoundingClientRect().top \/ (pin * 0.85));\n    manifestoStage.style.setProperty('--p', progress.toFixed(4));\n    const last = manifestoWords.length - 1;\n    manifestoWords.forEach((word, i) => {\n      const start = (i \/ last) * (1 - BAND);\n      const lit = clamp((progress - start) \/ BAND);\n      const v = Math.round(135 + 120 * lit);\n      word.style.color = `rgb(${v}, ${v}, ${v})`;\n    });\n  };\n  const resetManifesto = () => {\n    manifestoStage.style.removeProperty('--p');\n    manifestoWords.forEach((word) => { word.style.color = ''; });\n  };\n\n  const marquee = root.querySelector('.marquee');\n  const geometryPhoto = root.querySelector('.geometry-photo');\n  const x20Band = root.querySelector('.x20-band');\n  const closingList = root.querySelector('.closing-list');\n  \/\/ The strip moves only with its arrows or a swipe, never with the page's scroll. The counter and progress follow the frame in view.\n  const galleryStage = root.querySelector('.gallery-stage');\n  const galleryFrames = [...galleryStage.querySelectorAll('.gallery-frame')];\n  const galleryNow = root.querySelector('.gallery-now');\n  const galleryBar = root.querySelector('.gallery-bar');\n  const galleryPrev = root.querySelector('[data-gallery-step=\"-1\"]');\n  const galleryNext = root.querySelector('[data-gallery-step=\"1\"]');\n  const galleryEdge = () => galleryFrames[0].offsetLeft;\n  \/\/ The frame in view is the last one whose left edge has reached the content edge. At the end of the strip it is the last frame.\n  const galleryIndex = () => {\n    if (galleryStage.scrollLeft + galleryStage.clientWidth >= galleryStage.scrollWidth - 4) return galleryFrames.length - 1;\n    const reach = galleryStage.scrollLeft + galleryEdge() + 4;\n    return Math.max(0, galleryFrames.findLastIndex((frame) => frame.offsetLeft <= reach));\n  };\n  const syncGallery = () => {\n    const index = galleryIndex();\n    galleryNow.textContent = String(index + 1).padStart(2, '0');\n    galleryBar.style.width = `${((index + 1) \/ galleryFrames.length) * 100}%`;\n    galleryPrev.disabled = index === 0;\n    galleryNext.disabled = index === galleryFrames.length - 1;\n  };\n  const galleryStep = (direction) => {\n    const index = Math.min(galleryFrames.length - 1, Math.max(0, galleryIndex() + direction));\n    const reduce = matchMedia('(prefers-reduced-motion: reduce)').matches;\n    galleryStage.scrollTo({ left: galleryFrames[index].offsetLeft - galleryEdge(), behavior: reduce ? 'auto' : 'smooth' });\n  };\n  galleryPrev.addEventListener('click', () => galleryStep(-1));\n  galleryNext.addEventListener('click', () => galleryStep(1));\n  galleryStage.addEventListener('scroll', syncGallery, { passive: true });\n  syncGallery();\n  \/\/ The marquee eases toward its scroll position, so small changes in scroll speed do not show as jumps.\n  let marqueeTarget = 0;\n  let marqueeNow = null;\n  let marqueeGliding = false;\n  const glideMarquee = () => {\n    marqueeGliding = false;\n    if (!motionOn() || document.visibilityState === 'hidden') return;\n    marqueeNow = marqueeNow === null ? marqueeTarget : marqueeNow + (marqueeTarget - marqueeNow) * 0.12;\n    if (Math.abs(marqueeTarget - marqueeNow) < 0.0002) marqueeNow = marqueeTarget;\n    marquee.style.setProperty('--m', marqueeNow.toFixed(5));\n    if (marqueeNow !== marqueeTarget) {\n      marqueeGliding = true;\n      requestAnimationFrame(glideMarquee);\n    }\n  };\n\n  let pending = false;\n  let pendingFrame = 0;\n  const update = () => {\n    pending = false;\n    pendingFrame = 0;\n    if (document.visibilityState === 'hidden') return;\n    syncStick();\n    syncCurrentSection();\n    updateWords();\n    const vh = window.innerHeight;\n    if (sweepOn()) updateManifesto(vh);\n    if (!motionOn()) return;\n    marqueeTarget = along(marquee, vh);\n    if (!marqueeGliding) glideMarquee();\n    geometryPhoto.style.setProperty('--g', along(geometryPhoto, vh).toFixed(4));\n    x20Band.style.setProperty('--y', along(x20Band, vh).toFixed(4));\n    const closingRect = closingList.getBoundingClientRect();\n    closingList.style.setProperty('--draw', clamp((vh - closingRect.top) \/ (vh * 0.4)).toFixed(4));\n  };\n  const requestUpdate = () => {\n    if (pending || document.visibilityState === 'hidden') return;\n    pending = true;\n    pendingFrame = requestAnimationFrame(update);\n  };\n\n  \/\/ Counters: each figure counts up once, when it is mostly visible, and only with motion on.\n  const counters = [...root.querySelectorAll('.count')];\n  const countUp = (el) => {\n    const target = Number(el.dataset.count);\n    const decimals = Number(el.dataset.decimals);\n    const start = performance.now();\n    const duration = 1400;\n    el.textContent = (0).toFixed(decimals);\n    const step = (now) => {\n      const t = clamp((now - start) \/ duration);\n      const eased = 1 - Math.pow(1 - t, 4);\n      el.textContent = (target * eased).toFixed(decimals);\n      if (t < 1) requestAnimationFrame(step);\n      else el.textContent = target.toFixed(decimals);\n    };\n    requestAnimationFrame(step);\n  };\n  if ('IntersectionObserver' in window) {\n    const counterObserver = new IntersectionObserver((entries) => {\n      entries.forEach((entry) => {\n        if (!entry.isIntersecting) return;\n        counterObserver.unobserve(entry.target);\n        if (motionOn()) countUp(entry.target);\n      });\n    }, { threshold: 0.6 });\n    counters.forEach((el) => {\n      counterObserver.observe(el);\n    });\n  }\n\n  const reveals = [...root.querySelectorAll('[data-reveal]')];\n  if ('IntersectionObserver' in window) {\n    const revealObserver = new IntersectionObserver((entries) => {\n      entries.forEach((entry) => {\n        if (!entry.isIntersecting) return;\n        entry.target.classList.add('is-in');\n        revealObserver.unobserve(entry.target);\n      });\n    }, { threshold: 0.15 });\n    reveals.forEach((el) => revealObserver.observe(el));\n  } else {\n    reveals.forEach((el) => el.classList.add('is-in'));\n  }\n\n  \/\/ 3D viewer: the iframe is created once, when the stage comes within 300px of the screen, and the observer is then disconnected. Without IntersectionObserver it is created at once. The hint appears when the viewer reports ready.\n  const viewerStage = root.querySelector('#viewer-stage');\n  if (viewerStage) {\n    const viewerHint = root.querySelector('#viewer-hint');\n    let viewerFrame = null;\n    let viewerIsVisible = false;\n    const syncViewerActivity = () => {\n      if (!viewerFrame?.contentWindow) return;\n      const active = viewerIsVisible && document.visibilityState !== 'hidden';\n      viewerFrame.contentWindow.postMessage(active ? 'nova3d-resume' : 'nova3d-pause', location.origin);\n    };\n    if ('IntersectionObserver' in window) {\n      const activityObserver = new IntersectionObserver(([entry]) => {\n        viewerIsVisible = entry.isIntersecting;\n        syncViewerActivity();\n      }, { threshold: 0.01 });\n      activityObserver.observe(viewerStage);\n    }\n    document.addEventListener('visibilitychange', syncViewerActivity);\n    const loadViewer = () => {\n      viewerFrame = document.createElement('iframe');\n      viewerFrame.title = 'Interactive NOVA 3D viewer';\n      viewerFrame.allow = 'autoplay; xr';\n      viewerFrame.loading = 'eager';\n      viewerFrame.addEventListener('load', syncViewerActivity, { once: true });\n      viewerFrame.srcdoc = document.getElementById('nv-viewer-doc').innerHTML;\n      viewerStage.replaceChildren(viewerFrame);\n    };\n    if ('IntersectionObserver' in window) {\n      const viewerObserver = new IntersectionObserver(([entry]) => {\n        if (!entry.isIntersecting) return;\n        viewerObserver.disconnect();\n        loadViewer();\n      }, { rootMargin: '300px 0px' });\n      viewerObserver.observe(viewerStage);\n    } else {\n      loadViewer();\n    }\n    window.addEventListener('message', (event) => {\n      if (viewerFrame && event.source === viewerFrame.contentWindow && event.data === 'nova3d-ready') viewerHint.hidden = false;\n    });\n  }\n\n  \/\/ Configurator: the drivetrain buttons and the arrows show one bike at a time, with its sub-line.\n  const cfg = root.querySelector('#configurator');\n  if (cfg) {\n    const variantButtons = [...cfg.querySelectorAll('.cfg-variant')];\n    const bikes = [...cfg.querySelectorAll('.cfg-bike')];\n    const subs = [...cfg.querySelectorAll('.cfg-sub')];\n    let current = 0;\n    const showVariant = (index) => {\n      current = (index + bikes.length) % bikes.length;\n      variantButtons.forEach((button, i) => button.setAttribute('aria-pressed', String(i === current)));\n      bikes.forEach((bike, i) => { bike.hidden = i !== current; });\n      subs.forEach((sub, i) => { sub.hidden = i !== current; });\n    };\n    variantButtons.forEach((button, i) => button.addEventListener('click', () => showVariant(i)));\n    cfg.querySelectorAll('.cfg-step').forEach((button) => {\n      button.addEventListener('click', () => showVariant(current + Number(button.dataset.step)));\n    });\n  }\n\n  \/\/ Geometry: the size buttons set the values of the geometry list. S is the default, set in the HTML.\n  const sizeButtons = [...root.querySelectorAll('.size-button')];\n  const sizeValues = [...root.querySelectorAll('[data-values]')];\n  sizeButtons.forEach((button, index) => {\n    button.addEventListener('click', () => {\n      sizeButtons.forEach((other, i) => other.setAttribute('aria-pressed', String(i === index)));\n      sizeValues.forEach((cell) => { cell.textContent = cell.dataset.values.split(',')[index]; });\n    });\n  });\n\n  \/\/ Smooth scroll on desktop with motion: Lenis moves the native scroll position, so scroll events and the sticky stages keep working.\n  let lenis = null;\n  \/\/ Smooth same-page anchors while preserving history and the user's motion preference.\n  root.addEventListener('click', (event) => {\n    const link = event.target.closest('a[href^=\"#\"]');\n    if (!link || !root.contains(link) || event.defaultPrevented || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || link.hasAttribute('download') || (link.target && link.target !== '_self')) return;\n    const hash = link.getAttribute('href');\n    if (!hash || hash === '#') return;\n    const target = document.getElementById(hash.slice(1));\n    if (!target || !root.contains(target)) return;\n    event.preventDefault();\n    if (location.hash !== hash) history.pushState(null, '', hash);\n    const offset = parseFloat(getComputedStyle(target).scrollMarginTop) || 0;\n    const destination = Math.max(0, target.getBoundingClientRect().top + window.scrollY - offset);\n    if (lenis && !reduceMotion.matches) lenis.scrollTo(destination, { duration: 1.05 });\n    else window.scrollTo({ top: destination, behavior: reduceMotion.matches ? 'instant' : 'smooth' });\n    if (!target.hasAttribute('tabindex')) target.setAttribute('tabindex', '-1');\n    target.focus({ preventScroll: true });\n  });\n\n  const startLenis = () => {\n    if (lenis || !window.Lenis || !motionOn() || document.visibilityState === 'hidden') return;\n    lenis = new window.Lenis({ autoRaf: true });\n  };\n  const stopLenis = () => {\n    if (!lenis) return;\n    lenis.destroy();\n    lenis = null;\n  };\n  const syncMotion = () => {\n    const on = motionOn();\n    root.classList.toggle('motion', on);\n    root.classList.toggle('sweep', sweepOn());\n    if (on) startLenis();\n    else stopLenis();\n    if (!sweepOn()) resetManifesto();\n    requestUpdate();\n  };\n  desktop.addEventListener('change', syncMotion);\n  reduceMotion.addEventListener('change', syncMotion);\n  document.addEventListener('visibilitychange', () => {\n    if (document.visibilityState === 'hidden') {\n      if (pendingFrame) cancelAnimationFrame(pendingFrame);\n      pending = false;\n      pendingFrame = 0;\n      stopLenis();\n      return;\n    }\n    if (motionOn()) startLenis();\n    requestUpdate();\n  });\n  window.addEventListener('scroll', () => { settleUntil = performance.now() + 800; requestUpdate(); }, { passive: true });\n  window.addEventListener('resize', () => {\n    syncProductNavOverflow();\n    syncGallery();\n    requestUpdate();\n  }, { passive: true });\n  syncMotion();\n})();\n<\/script>\n\n<script data-nova-preset-sync>(function(){var r=document.querySelector('.nv-hybrid');if(!r)return;var road='https:\/\/aurumbikes.com\/fr\/nova\/configurer\/?load-preset=148872',all='https:\/\/aurumbikes.com\/fr\/nova\/configurer\/?load-preset=148878';function sync(){var a=r.querySelector('.cfg-variant[aria-pressed=\"true\"]');var t=(a&&\/ALL-ROAD\/i.test(a.textContent))?all:road;r.querySelectorAll('.cfg-configure,.buy-actions a').forEach(function(x){x.href=t;});}r.querySelectorAll('.cfg-variant,.cfg-step').forEach(function(b){b.addEventListener('click',function(){setTimeout(sync,0);});});sync();})();<\/script>","protected":false},"excerpt":{"rendered":"<p>Passer au contenu NOVA, le v\u00e9lo \u00e9lectrique tout-terrain d&#8217;AURUM MORE RIDE. SAME YOU. Explorez NOVA Trouver un revendeur Mettre le film en pause Le concept NOVAMoteur et assistanceBatterie et autonomieG\u00e9om\u00e9trie et taillesExplorer en 3DPrix et configuration ROAD ALL-ROAD NOVA Configuration Road Configuration All-Road \u00c0 partir de 5 999 \u20ac (hors taxes) Configurer MORE RIDE. SAME [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>NOVA : v\u00e9lo \u00e9lectrique all-road | AURUM<\/title>\n<meta name=\"description\" content=\"D\u00e9couvrez NOVA, le v\u00e9lo \u00e9lectrique all-road AURUM : moteur MAHLE X20, batterie de 350 Wh et pneus jusqu\u2019\u00e0 38 mm. Explorez les versions disponibles.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/aurumbikes.com\/fr\/nova\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"NOVA : v\u00e9lo \u00e9lectrique all-road | AURUM\" \/>\n<meta property=\"og:description\" content=\"D\u00e9couvrez NOVA, le v\u00e9lo \u00e9lectrique all-road AURUM : moteur MAHLE X20, batterie de 350 Wh et pneus jusqu\u2019\u00e0 38 mm. Explorez les versions disponibles.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/aurumbikes.com\/fr\/nova\/\" \/>\n<meta property=\"og:site_name\" content=\"Aurum Bikes\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/AURUMbikes\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-03T10:21:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/novadurace2.webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/aurumbikes.com\/fr\/nova\/\",\"url\":\"https:\/\/aurumbikes.com\/fr\/nova\/\",\"name\":\"NOVA : v\u00e9lo \u00e9lectrique all-road | AURUM\",\"isPartOf\":{\"@id\":\"https:\/\/aurumbikes.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/aurumbikes.com\/fr\/nova\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/aurumbikes.com\/fr\/nova\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/novadurace2.webp\",\"datePublished\":\"2026-11-03T07:59:00+00:00\",\"dateModified\":\"2026-11-03T10:21:41+00:00\",\"description\":\"D\u00e9couvrez NOVA, le v\u00e9lo \u00e9lectrique all-road AURUM : moteur MAHLE X20, batterie de 350 Wh et pneus jusqu\u2019\u00e0 38 mm. Explorez les versions disponibles.\",\"breadcrumb\":{\"@id\":\"https:\/\/aurumbikes.com\/fr\/nova\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/aurumbikes.com\/fr\/nova\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/aurumbikes.com\/fr\/nova\/#primaryimage\",\"url\":\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/novadurace2.webp\",\"contentUrl\":\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/novadurace2.webp\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/aurumbikes.com\/fr\/nova\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/aurumbikes.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"NOVA\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/aurumbikes.com\/es\/#website\",\"url\":\"https:\/\/aurumbikes.com\/es\/\",\"name\":\"Aurum Bikes\",\"description\":\"Born From Experience\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/aurumbikes.com\/es\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"NOVA : v\u00e9lo \u00e9lectrique all-road | AURUM","description":"D\u00e9couvrez NOVA, le v\u00e9lo \u00e9lectrique all-road AURUM : moteur MAHLE X20, batterie de 350 Wh et pneus jusqu\u2019\u00e0 38 mm. Explorez les versions disponibles.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/aurumbikes.com\/fr\/nova\/","og_locale":"fr_FR","og_type":"article","og_title":"NOVA : v\u00e9lo \u00e9lectrique all-road | AURUM","og_description":"D\u00e9couvrez NOVA, le v\u00e9lo \u00e9lectrique all-road AURUM : moteur MAHLE X20, batterie de 350 Wh et pneus jusqu\u2019\u00e0 38 mm. Explorez les versions disponibles.","og_url":"https:\/\/aurumbikes.com\/fr\/nova\/","og_site_name":"Aurum Bikes","article_publisher":"https:\/\/www.facebook.com\/AURUMbikes","article_modified_time":"2026-11-03T10:21:41+00:00","og_image":[{"url":"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/novadurace2.webp"}],"twitter_card":"summary_large_image","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/aurumbikes.com\/fr\/nova\/","url":"https:\/\/aurumbikes.com\/fr\/nova\/","name":"NOVA : v\u00e9lo \u00e9lectrique all-road | AURUM","isPartOf":{"@id":"https:\/\/aurumbikes.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/aurumbikes.com\/fr\/nova\/#primaryimage"},"image":{"@id":"https:\/\/aurumbikes.com\/fr\/nova\/#primaryimage"},"thumbnailUrl":"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/novadurace2.webp","datePublished":"2026-11-03T07:59:00+00:00","dateModified":"2026-11-03T10:21:41+00:00","description":"D\u00e9couvrez NOVA, le v\u00e9lo \u00e9lectrique all-road AURUM : moteur MAHLE X20, batterie de 350 Wh et pneus jusqu\u2019\u00e0 38 mm. Explorez les versions disponibles.","breadcrumb":{"@id":"https:\/\/aurumbikes.com\/fr\/nova\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/aurumbikes.com\/fr\/nova\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/aurumbikes.com\/fr\/nova\/#primaryimage","url":"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/novadurace2.webp","contentUrl":"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/novadurace2.webp"},{"@type":"BreadcrumbList","@id":"https:\/\/aurumbikes.com\/fr\/nova\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/aurumbikes.com\/"},{"@type":"ListItem","position":2,"name":"NOVA"}]},{"@type":"WebSite","@id":"https:\/\/aurumbikes.com\/es\/#website","url":"https:\/\/aurumbikes.com\/es\/","name":"Aurum Bikes","description":"Born From Experience","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/aurumbikes.com\/es\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"}]}},"_links":{"self":[{"href":"https:\/\/aurumbikes.com\/fr\/wp-json\/wp\/v2\/pages\/148613"}],"collection":[{"href":"https:\/\/aurumbikes.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/aurumbikes.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/aurumbikes.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aurumbikes.com\/fr\/wp-json\/wp\/v2\/comments?post=148613"}],"version-history":[{"count":15,"href":"https:\/\/aurumbikes.com\/fr\/wp-json\/wp\/v2\/pages\/148613\/revisions"}],"predecessor-version":[{"id":149039,"href":"https:\/\/aurumbikes.com\/fr\/wp-json\/wp\/v2\/pages\/148613\/revisions\/149039"}],"wp:attachment":[{"href":"https:\/\/aurumbikes.com\/fr\/wp-json\/wp\/v2\/media?parent=148613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}