{"id":148617,"date":"2026-11-03T07:59:00","date_gmt":"2026-11-03T07:59:00","guid":{"rendered":"https:\/\/aurumbikes.com\/?page_id=148617"},"modified":"2026-11-03T10:20:39","modified_gmt":"2026-11-03T10:20:39","slug":"nova","status":"publish","type":"page","link":"https:\/\/aurumbikes.com\/it\/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=\"it\">\n<a class=\"skip-link\" href=\"#main\">Vai al contenuto<\/a>\n\n  <section class=\"hero\" id=\"top\" aria-label=\"Filmato di lancio di NOVA\">\n    <h1 class=\"visually-hidden\">NOVA, la bici elettrica all-road di 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=\"Filmato di lancio di 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\">Esplora NOVA<\/a>\n            <a class=\"outline-button\" href=\"https:\/\/aurumbikes.com\/it\/rivenditori\/\">Trova un rivenditore<\/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\">Metti in pausa la pellicola<\/span>\n        <\/button>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <div class=\"product-nav-shell\">\n    <nav class=\"product-nav\" aria-label=\"Sezioni della pagina NOVA\">\n      <a href=\"#words\">Il concetto NOVA<\/a><a href=\"#x20\">Motore e assistenza<\/a><a href=\"#range\">Batteria e autonomia<\/a><a href=\"#geometry\">Geometria e taglie<\/a><a href=\"#viewer\">Esplora in 3D<\/a><a href=\"#buy\">Prezzo e configurazione<\/a>\n    <\/nav>\n    <button class=\"product-nav-more\" type=\"button\" aria-label=\"Mostra pi\u00f9 sezioni\" 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=\"Configura 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 in configurazione Stradale\" 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 in configurazione 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\">Configurazione Road<\/p>\n            <p class=\"cfg-sub\" hidden=\"\">Configurazione All-Road<\/p>\n            <p class=\"cfg-price\">A partire da 5.999\u20ac <span>(tasse escluse)<\/span><\/p>\n          <\/div>\n          <div class=\"cfg-actions\">\n            <button class=\"cfg-step\" type=\"button\" data-step=\"-1\" aria-label=\"Variante precedente\">\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=\"Prossima variante\">\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\/it\/nova\/configurare\/?load-preset=148872\">Configura<\/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 \u00e8 la prima e-bike AURUM, progettata per andare pi\u00f9 lontano a ogni uscita senza cambiare il tuo modo di vivere il ciclismo.<\/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;idea<\/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=\"\">Un\u2019assistenza che segue il tuo sforzo e la tua cadenza, con una risposta immediata, fluida e progressiva. Sei tu a decidere quanto spingere e quando andare oltre.<\/p>\n            <a class=\"outline-button\" href=\"#feel\" aria-label=\"Explore Natural ride\">Esplorare<\/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 batteria integrata prolunga ogni uscita lasciando il controllo al ciclista. Per percorsi pi\u00f9 lunghi, pi\u00f9 dislivello e nuove strade.<\/p>\n            <a class=\"outline-button\" href=\"#range\" aria-label=\"Explore Open possibilities\">Esplorare<\/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=\"\">Attacchi integrati e discreti permettono a NOVA di adattarsi a modi diversi di pedalare, dall\u2019asfalto alle piste veloci, con una sola bici.<\/p>\n            <a class=\"outline-button\" href=\"#road\" aria-label=\"Explore Versatile by design\">Esplorare<\/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=\"\">MAHLE X20 offre un\u2019assistenza precisa e naturale senza alterare il carattere sportivo di NOVA. Potenza di picco di 275 W e circa 3,2 kg per il sistema completo. Tutti i cavi restano nascosti.<\/p>\n            <a class=\"outline-button\" href=\"#x20\" aria-label=\"Explore Amplified by technology\">Esplorare<\/a>\n          <\/div>\n        <\/div>\n        <div class=\"words-rule\" aria-hidden=\"true\"><\/div>\n        <nav class=\"words-links\" aria-label=\"Scegli un reclamo\">\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\">Pensata per chi pedala, non per i passeggeri.<\/p>\n              <h2 id=\"feel-title\" data-reveal=\"\">Senti ogni momento.<\/h2>\n            <\/div>\n            <div class=\"manifesto-stage\">\n              <p class=\"manifesto-text\">La prima e-bike AURUM porta il nostro DNA prestazionale in una bici leggera, essenziale e versatile. Non pedala al posto tuo. Ti permette di portare pi\u00f9 lontano il tuo sforzo e i tuoi percorsi.<\/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 macchina<\/p>\n            <h2 id=\"machine-title\" data-reveal=\"\">Tutte le sensazioni. Pi\u00f9 libert\u00e0.<\/h2>\n          <\/div>\n          <p class=\"machine-lead\" data-reveal=\"\">Ha l\u2019aspetto di una AURUM. Si guida come una AURUM. Con un piccolo aiuto in pi\u00f9 per ogni avventura.<\/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=\"E-bike NOVA, vista laterale completa\" 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>ca. peso bici completa*<\/span><\/li>\n          <li><strong>350 <small class=\"unit\">Wh<\/small><\/strong><span>Batteria integrata<\/span><\/li>\n          <li><strong>38 <small class=\"unit\">mm<\/small><\/strong><span>Spazio massimo per gli pneumatici<\/span><\/li>\n        <\/ul>\n        <p class=\"machine-note\">*Peso di riferimento; il peso effettivo varia in base alla taglia e all\u2019allestimento.<\/p>\n      <\/div>\n    <\/section>\n\n    <section class=\"road\" id=\"road\" aria-label=\"STRADA e ALL-ROAD\">\n      <article class=\"road-panel\">\n        <img loading=\"lazy\" src=\"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/nova-road-panel.webp\" alt=\"Ciclista in kit bianco che percorre una strada di montagna illuminata dal sole\" width=\"1600\" height=\"1067\" loading=\"lazy\" decoding=\"async\">\n        <div class=\"road-copy\">\n          <p class=\"road-label\">01 \/ ASFALTO<\/p>\n          <h2 class=\"road-title\">ROAD.<\/h2>\n          <p class=\"road-text\">Il ritmo che conosci. Le strade che ami. E la libert\u00e0 di andare avanti.<\/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=\"Primo piano del telaio NOVA bianco con scritta AURUM e pneumatico gravel\" loading=\"lazy\" decoding=\"async\">\n        <div class=\"road-copy\">\n          <p class=\"road-label\">02 \/ OLTRE L\u2019ASFALTO<\/p>\n          <h2 class=\"road-title\">ALL-ROAD.<\/h2>\n          <p class=\"road-text\">Quando la strada cambia, l&#8217;avventura non si ferma. Esplora ulteriormente con spazio per pneumatici fino a 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\">Un\u2019assistenza che conserva le sensazioni del ciclismo.<\/h2>\n          <p>MAHLE X20 \u00e8 un sistema premium con motore nel mozzo posteriore, batteria integrata e unit\u00e0 di controllo. L\u2019assistenza reattiva aiuta nelle uscite lunghe e in salita, preservando la silhouette essenziale e le sensazioni naturali di 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=\"Il ciclista preme il comando sul telaio NOVA bianco, con l'indicatore verde acceso\" loading=\"lazy\" decoding=\"async\">\n          <\/figure>\n          <p class=\"x20-lead\">Fluido. Silenzioso. Naturalmente reattivo. MAHLE X20 ti aiuta quando ne hai bisogno, senza toglierti la sensazione di pedalare.<\/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=\"Bici da strada NOVA in officina\" 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\u00e0 motrice per mozzo posteriore 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\">Sistema completo<\/p>\n            <p class=\"x20-detail\">MAHLE X20<\/p>\n          <\/div>\n        <\/div>\n      <\/div>\n      <ul class=\"x20-specs\" aria-label=\"Specifiche 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\">Peso del motore<\/p>\n          <p class=\"x20-detail\">Mozzo posteriore<\/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\">Alla ruota<\/p>\n          <p class=\"x20-detail\">Equivalente a 65 Nm su un motore centrale<\/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\">Batteria integrata<\/p>\n          <p class=\"x20-detail\">iX3<\/p>\n        <\/li>\n      <\/ul>\n      <ul class=\"x20-points\" data-reveal=\"\">\n        <li><strong>Integrazione invisibile.<\/strong> <span>La silhouette pulita di un AURUM.<\/span><\/li>\n        <li><strong>Pedalata naturale.<\/strong> <span>Assistenza progressiva, silenziosa, che non prende mai il sopravvento.<\/span><\/li>\n        <li><strong>Nessuna resistenza.<\/strong> <span>La ruota gira liberamente quando il motore non funziona.<\/span><\/li>\n        <li><strong>Trasmissione protetta.<\/strong> <span>La potenza extra non passa attraverso la catena o la cassetta.<\/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 dell'app MAHLE My SmartBike\" width=\"512\" height=\"512\" loading=\"lazy\" decoding=\"async\">\n          <h3 class=\"x20-connect-title\">Connesso per pedalare a modo tuo.<\/h3>\n          <p class=\"x20-connect-copy\">Con l&#8217;app My SmartBike di MAHLE personalizza l&#8217;assistenza, rivedi i dati della corsa NOVA, registra i percorsi e mantieni aggiornato il sistema. Bluetooth e ANT+ collegano i sensori di potenza e cadenza, con supporto per 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=\"Ciclista che controlla l'app MAHLE My SmartBike sul telefono accanto a una bicicletta NOVA bianca\" loading=\"lazy\" decoding=\"async\">\n        <\/figure>\n      <\/div>\n      <p class=\"x20-note\">La batteria esterna MAHLE eX1, venduta separatamente, aggiunge 171 Wh e porta la capacit\u00e0 totale da 350 Wh a 521 Wh. Pu\u00f2 offrire fino a 60 km di autonomia in pi\u00f9, in base al percorso e al livello di assistenza.<\/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\">Fino a <span class=\"count\" data-count=\"140\" data-decimals=\"0\">140<\/span><span class=\"range-unit\">km.<\/span><\/h2>\n        <p>Autonomia stimata, raggiunta in test interni su strada con 2.000\u20132.300 m di dislivello positivo accumulato.<\/p>\n        <p class=\"range-note\">Cifre stimate. L&#8217;autonomia effettiva dipende dal peso del ciclista, dal percorso, dalla salita, dal livello di assistenza, dalla velocit\u00e0, dagli pneumatici, dalla pressione, dalla temperatura e dalle condizioni di utilizzo.<\/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 da vicino \/ 05 immagini<\/p>\n            <h2 id=\"gallery-title\">Ogni dettaglio.<br>Ogni possibilit\u00e0.<\/h2>\n          <\/div>\n          <p class=\"gallery-lead\">Scopri NOVA attraverso le sue uscite, il design e la tecnologia.<\/p>\n        <\/div>\n      <\/div>\n      <div class=\"gallery-stage\" tabindex=\"0\" aria-label=\"Galleria fotografica NOVA. Utilizzare le frecce per spostarsi tra i fotogrammi.\">\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=\"Pilota in piedi accanto a una bicicletta NOVA su una strada aperta\" 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=\"Primo piano di un pilota con casco e occhiali da sole\" 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=\"Pilota appoggiato al manubrio di una bicicletta NOVA su una strada in collina\" 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=\"Pilota su una bicicletta NOVA bianca su una strada forestale, in movimento\" 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=\"Pilota su una bicicletta NOVA su una strada che attraversa prati aridi\" 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=\"Foto precedente\" 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=\"Foto successiva\">\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\">Trova la tua posizione naturale.<\/h2>\n        <p class=\"geometry-lead\">Stack progressivo, reach contenuto.<\/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=\"Primo piano della cornice NOVA bianca con la montatura AURUM FDH2 su uno sfondo da studio grigio chiaro\" 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>Carro in mm<\/span><\/li>\n              <li><strong>4<\/strong><span>Taglie telaio<\/span><\/li>\n              <li><strong>38<\/strong><span>Pneumatico max. in mm<\/span><\/li>\n            <\/ul>\n        <p class=\"size-label\">Esplora la geometria per taglia<\/p>\n        <div class=\"size-picker\" role=\"group\" aria-label=\"Dimensioni del telaio\">\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\/it\/guida-alle-taglie\/\">Guida alle taglie<\/a>\n      <dl class=\"geometry-table\" aria-label=\"Geometria del telaio NOVA per dimensione\" 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>Tubo orizzontale<\/dt><dd data-values=\"536 mm,547 mm,560 mm,573 mm\">536 mm<\/dd><\/div>\n        <div class=\"geometry-item\"><dt>Interasse<\/dt><dd data-values=\"1007 mm,1015 mm,1024 mm,1038 mm\">1007 mm<\/dd><\/div>\n        <div class=\"geometry-item\"><dt>Angolo di sterzo<\/dt><dd data-values=\"71\u00b0,71.6\u00b0,72\u00b0,72\u00b0\">71\u00b0<\/dd><\/div>\n        <div class=\"geometry-item\"><dt>Altezza cavallo<\/dt><dd data-values=\"743 mm,792 mm,805 mm,831 mm\">743 mm<\/dd><\/div>\n      <\/dl>\n      <p class=\"geometry-foot\">Supporti nascosti per parafanghi e supporti per borsa sul tubo superiore. Movimento centrale BB386EVO, UDH, reggisella da 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\">UNA GEOMETRIA SPORTIVA REALIZZATA PER PI\u00d9 TEMPO IN BICI.<\/h2><div class=\"tech-columns\"><div><h3>VERSATILIT\u00c0 ALL-ROAD<\/h3><ul><li>Passaggio ruota per pneumatici fino a 38 mm<\/li><li>Compatibile con trasmissioni da strada 1x e 2x<\/li><li>Attacchi per un massimo di tre portaborraccia<\/li><li>Attacchi per borsa sul tubo orizzontale<\/li><li>Attacchi nascosti per parafanghi<\/li><\/ul><\/div><div><h3>TELAIO E POSIZIONE<\/h3><ul><li>Passaggio cavi completamente interno<\/li><li>Serie sterzo da 1,5 pollici<\/li><li>Interfaccia standard per attacco manubrio da 28,6 mm<\/li><li>Movimento centrale BB386EVO<\/li><li>Forcellino cambio UDH<\/li><li>Reggisella rotondo da 27,2 mm<\/li><li>Quattro taglie di telaio: S, M, L e XL<\/li><\/ul><\/div><div><h3>SISTEMA MAHLE X20<\/h3><ul><li>Batteria integrata da 350 Wh<\/li><li>Motore nel mozzo posteriore<\/li><li>Assistenza con sensore di coppia<\/li><li>Unit\u00e0 di controllo integrata nel tubo orizzontale<\/li><li>Porta di ricarica sotto il movimento centrale<\/li><li>Peso approssimativo del sistema completo: 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\">Esplora NOVA in 3D.<\/h2>\n        <p>Ruota la bici, controlla i dettagli, guarda il telaio da ogni lato.<\/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=\"E-bike NOVA, pronta per esplorare in 3D\" width=\"1920\" height=\"951\" loading=\"lazy\" decoding=\"async\">\n      <\/div>\n      <p class=\"viewer-hint\" id=\"viewer-hint\" hidden=\"\">Trascina per esplorare<\/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=\"Prezzo e rivenditori\">\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 da \u20ac 5.999 <span>escl. IVA (NOVA 105, prezzo consigliato)<\/span><\/p>\n        <div class=\"buy-copy\">\n          <p>Gamma completa da 5.999 \u20ac a 8.799 \u20ac, IVA esclusa, a seconda del gruppo di trasmissione.<\/p>\n          <p class=\"buy-note\">Componenti e configurazione influiscono sul prezzo finale.<\/p>\n          <p class=\"buy-note\">I prezzi non includono manubrio e attacco manubrio, venduti separatamente.<\/p>\n          <div class=\"buy-actions\">\n            <a class=\"outline-button\" href=\"https:\/\/aurumbikes.com\/it\/nova\/configurare\/?load-preset=148872\">Configura 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\">Domande frequenti<\/h2>\n      <div class=\"faq-list\" data-reveal=\"\">\n        <details class=\"faq-item\">\n          <summary>Che tipo di bici \u00e8 NOVA?<\/summary>\n          <p>Una e-bike all-road ad alte prestazioni che unisce velocit\u00e0, leggerezza, stabilit\u00e0 e versatilit\u00e0.<\/p>\n        <\/details>\n        <details class=\"faq-item\">\n          <summary>Come si percepisce l\u2019assistenza?<\/summary>\n          <p>Naturale e progressiva. Il sensore di coppia adatta la risposta del motore allo sforzo esercitato a ogni pedalata.<\/p>\n        <\/details>\n        <details class=\"faq-item\">\n          <summary>Posso pedalare senza assistenza?<\/summary>\n          <p>S\u00ec. Puoi spegnere il sistema e pedalare normalmente. Oltre i 25 km\/h il motore si disaccoppia automaticamente.<\/p>\n        <\/details>\n        <details class=\"faq-item\">\n          <summary>Qual \u00e8 l\u2019autonomia di NOVA?<\/summary>\n          <p>Dipende dal terreno, dal dislivello, dal peso del ciclista, dalle condizioni e dal livello di assistenza. Nei test AURUM, NOVA ha completato percorsi fino a 140 km e 2.300 m di dislivello, soprattutto con il livello di assistenza pi\u00f9 basso.<\/p>\n        <\/details>\n        <details class=\"faq-item\">\n          <summary>Qual \u00e8 la larghezza massima degli pneumatici?<\/summary>\n          <p>NOVA accetta pneumatici fino a 38 mm nelle configurazioni Road e All-Road.<\/p>\n        <\/details>\n        <details class=\"faq-item\">\n          <summary>\u00c8 compatibile con trasmissioni 1x e 2x?<\/summary>\n          <p>S\u00ec. La piattaforma supporta entrambe le configurazioni, a seconda dell\u2019allestimento scelto.<\/p>\n        <\/details>\n        <details class=\"faq-item\">\n          <summary>La ruota posteriore \u00e8 facile da rimuovere?<\/summary>\n          <p>S\u00ec. Il sistema MAHLE effettua automaticamente il collegamento elettrico quando la ruota viene rimontata, senza dover collegare cavi a mano.<\/p>\n        <\/details>\n        <details class=\"faq-item\">\n          <summary>\u00c8 possibile aumentare l\u2019autonomia di NOVA?<\/summary>\n          <p>S\u00ec. NOVA \u00e8 compatibile con la batteria esterna MAHLE eX1, venduta separatamente. I suoi 171 Wh aggiuntivi portano la capacit\u00e0 totale della batteria da 350 Wh a 521 Wh e possono aggiungere fino a 60 km di autonomia in pi\u00f9, in base al percorso e al livello di assistenza. Grazie ai tre attacchi portaborraccia di NOVA, puoi montare la batteria lasciando libere due posizioni per le borracce.<\/p>\n        <\/details>\n        <details class=\"faq-item\">\n          <summary>Quali modalit\u00e0 di assistenza offre NOVA?<\/summary>\n          <p>NOVA dispone di tre livelli di assistenza, personalizzabili nell\u2019app My SmartBike regolando potenza, accelerazione e risposta. La modalit\u00e0 Smart Assist adatta automaticamente l\u2019assistenza alla pendenza, al peso del ciclista e allo sforzo necessario.<\/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=\"\">Supportato da AURUM,<br><span>prima e dopo la vendita.<\/span><\/h2>\n      <ol class=\"closing-list\">\n        <li data-reveal=\"\">\n          <h3>Garanzia legale 3 anni.<\/h3>\n          <p>NOVA gode di tre anni di garanzia legale contro vizi di fabbricazione, materiali o difetti di conformit\u00e0.<\/p>\n        <\/li>\n        <li data-reveal=\"\">\n          <h3>Garanzia a vita limitata su telaio e forcella.<\/h3>\n          <p>Il proprietario originale pu\u00f2 usufruirne gratuitamente registrando la bici su aurumbikes.com entro 30 giorni dalla ricezione. La garanzia non \u00e8 trasferibile.<\/p>\n        <\/li>\n        <li data-reveal=\"\">\n          <h3>Allestita secondo le tue preferenze.<\/h3>\n          <p>Manubrio e attacco manubrio sono venduti separatamente. Compatibile con il pozzetto monoscocca AURUM per una configurazione pi\u00f9 pulita e integrata.<\/p>\n        <\/li>\n      <\/ol>\n      <div class=\"closing-actions\">\n        <a class=\"outline-button\" href=\"https:\/\/aurumbikes.com\/it\/garanzia\/\">Maggiori dettagli<\/a>\n        <a class=\"outline-button\" href=\"https:\/\/aurumbikes.com\/it\/rivenditori\/\">Trova un rivenditore<\/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 = 'Impossibile caricare il modello';\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 ? 'Metti in pausa la pellicola' : 'Riproduci 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\/it\/nova\/configurare\/?load-preset=148872',all='https:\/\/aurumbikes.com\/it\/nova\/configurare\/?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>Vai al contenuto NOVA, la bici elettrica all-road di AURUM MORE RIDE. SAME YOU. Esplora NOVA Trova un rivenditore Metti in pausa la pellicola Il concetto NOVAMotore e assistenzaBatteria e autonomiaGeometria e taglieEsplora in 3DPrezzo e configurazione ROAD ALL-ROAD NOVA Configurazione Road Configurazione All-Road A partire da 5.999\u20ac (tasse escluse) Configura MORE RIDE. SAME YOU. [&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: bici elettrica all-road | AURUM<\/title>\n<meta name=\"description\" content=\"Scopri NOVA, la bici elettrica all-road AURUM: motore MAHLE X20, batteria da 350 Wh e copertoni fino a 38 mm. Scopri gli allestimenti.\" \/>\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\/it\/nova\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"NOVA: bici elettrica all-road | AURUM\" \/>\n<meta property=\"og:description\" content=\"Scopri NOVA, la bici elettrica all-road AURUM: motore MAHLE X20, batteria da 350 Wh e copertoni fino a 38 mm. Scopri gli allestimenti.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/aurumbikes.com\/it\/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:20:39+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=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data1\" content=\"10 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/aurumbikes.com\/it\/nova\/\",\"url\":\"https:\/\/aurumbikes.com\/it\/nova\/\",\"name\":\"NOVA: bici elettrica all-road | AURUM\",\"isPartOf\":{\"@id\":\"https:\/\/aurumbikes.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/aurumbikes.com\/it\/nova\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/aurumbikes.com\/it\/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:20:39+00:00\",\"description\":\"Scopri NOVA, la bici elettrica all-road AURUM: motore MAHLE X20, batteria da 350 Wh e copertoni fino a 38 mm. Scopri gli allestimenti.\",\"breadcrumb\":{\"@id\":\"https:\/\/aurumbikes.com\/it\/nova\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/aurumbikes.com\/it\/nova\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/aurumbikes.com\/it\/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\/it\/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\":\"it-IT\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"NOVA: bici elettrica all-road | AURUM","description":"Scopri NOVA, la bici elettrica all-road AURUM: motore MAHLE X20, batteria da 350 Wh e copertoni fino a 38 mm. Scopri gli allestimenti.","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\/it\/nova\/","og_locale":"it_IT","og_type":"article","og_title":"NOVA: bici elettrica all-road | AURUM","og_description":"Scopri NOVA, la bici elettrica all-road AURUM: motore MAHLE X20, batteria da 350 Wh e copertoni fino a 38 mm. Scopri gli allestimenti.","og_url":"https:\/\/aurumbikes.com\/it\/nova\/","og_site_name":"Aurum Bikes","article_publisher":"https:\/\/www.facebook.com\/AURUMbikes","article_modified_time":"2026-11-03T10:20:39+00:00","og_image":[{"url":"https:\/\/aurumbikes.com\/wp-content\/uploads\/2026\/10\/novadurace2.webp"}],"twitter_card":"summary_large_image","twitter_misc":{"Tempo di lettura stimato":"10 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/aurumbikes.com\/it\/nova\/","url":"https:\/\/aurumbikes.com\/it\/nova\/","name":"NOVA: bici elettrica all-road | AURUM","isPartOf":{"@id":"https:\/\/aurumbikes.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/aurumbikes.com\/it\/nova\/#primaryimage"},"image":{"@id":"https:\/\/aurumbikes.com\/it\/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:20:39+00:00","description":"Scopri NOVA, la bici elettrica all-road AURUM: motore MAHLE X20, batteria da 350 Wh e copertoni fino a 38 mm. Scopri gli allestimenti.","breadcrumb":{"@id":"https:\/\/aurumbikes.com\/it\/nova\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/aurumbikes.com\/it\/nova\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/aurumbikes.com\/it\/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\/it\/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":"it-IT"}]}},"_links":{"self":[{"href":"https:\/\/aurumbikes.com\/it\/wp-json\/wp\/v2\/pages\/148617"}],"collection":[{"href":"https:\/\/aurumbikes.com\/it\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/aurumbikes.com\/it\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/aurumbikes.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aurumbikes.com\/it\/wp-json\/wp\/v2\/comments?post=148617"}],"version-history":[{"count":14,"href":"https:\/\/aurumbikes.com\/it\/wp-json\/wp\/v2\/pages\/148617\/revisions"}],"predecessor-version":[{"id":149040,"href":"https:\/\/aurumbikes.com\/it\/wp-json\/wp\/v2\/pages\/148617\/revisions\/149040"}],"wp:attachment":[{"href":"https:\/\/aurumbikes.com\/it\/wp-json\/wp\/v2\/media?parent=148617"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}