{"id":2,"date":"2024-03-04T22:14:39","date_gmt":"2024-03-04T21:14:39","guid":{"rendered":"http:\/\/dscycling.com\/?page_id=2"},"modified":"2026-05-01T12:04:48","modified_gmt":"2026-05-01T10:04:48","slug":"dscycling-lorenzodelsant-ciclismo-articoli-ciclismo-youtubeciclismo","status":"publish","type":"page","link":"https:\/\/dscycling.com\/","title":{"rendered":""},"content":{"rendered":"\n<h2 class=\"wp-block-heading has-text-align-center\" style=\"font-size:clamp(2.156rem, 2.156rem + ((1vw - 0.2rem) * 2.847), 3.9rem);\">YOUR CYCLING PARTNER<\/h2>\n\n\n\n<p class=\"has-text-align-center has-small-font-size\"><\/p>\n\n\n\n<div class=\"wp-block-cover alignfull has-parallax \/* HERO con immagine fissa - Gutenberg Cover *\/ .wp-block-cover.hero-fixed {  position: relative; overflow: hidden; } l&apos;immagine dentro la cover diventa fixed &gt; img.wp-block-cover__image-background !important; top: 0; left: width: 100vw height: 100vh object-fit: cover; z-index: -1; transform: none il contenuto resta sopra .wp-block-cover__inner-container 2; su mobile disattiviamo (limite browser) @media (max-width: 1024px) absolute Nextawards: rimuove transform che rompe body, .site, .site-content, .wp-site-blocks is-layout-flow wp-block-cover-is-layout-flow\" style=\"min-height:700px;aspect-ratio:unset;\"><div class=\"wp-block-cover__image-background wp-image-590 size-full has-parallax\" style=\"background-position:50% 50%;background-image:url(https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/LORENZO-DEL-SANT-4.png)\"><\/div><span aria-hidden=\"true\" class=\"wp-block-cover__background has-background-dim-40 has-background-dim\" style=\"background-color:#7c6c88\"><\/span><div class=\"wp-block-cover__inner-container\">\n<div style=\"height:80px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-text-align-center has-white-color has-text-color\" style=\"font-size:clamp(25.014px, 1.563rem + ((1vw - 3.2px) * 1.733), 42px);\"><strong>TUTTO IL MEGLIO DEL CICLISMO A PORTATA DI MANO!<\/strong><\/p>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-text-align-center\"><\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n<\/div><\/div>\n\n\n\n<div style=\"height:31px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-cover alignwide is-light\" style=\"min-height:492px;aspect-ratio:unset;\"><span aria-hidden=\"true\" class=\"wp-block-cover__background has-light-gray-background-color has-background-dim-0 has-background-dim\"><\/span><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n<div class=\"wp-block-media-text is-stacked-on-mobile is-image-fill-element has-vivid-purple-background-color has-background\" style=\"grid-template-columns:40% auto\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/507069258-1024x768.jpg\" alt=\"\" class=\"wp-image-593 size-full\" style=\"object-position:44% 8%\" srcset=\"https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/507069258-1024x768.jpg 1024w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/507069258-300x225.jpg 300w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/507069258-768x576.jpg 768w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/507069258-1536x1152.jpg 1536w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/507069258-2048x1536.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<div style=\"height:17px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center has-neve-text-color-color has-text-color has-medium-font-size\">IL MIO OBBIETTIVO<\/h2>\n\n\n\n<p class=\"has-text-align-left has-neve-text-color-color has-text-color\" style=\"font-size:clamp(14.642px, 0.915rem + ((1vw - 3.2px) * 0.751), 22px);\">Portare trasparenza e curiosit\u00e0 nel ciclismo, testando bici e componenti in modo sincero, accessibile e senza pregiudizi, per aiutare ogni ciclista a scegliere ci\u00f2 che davvero vale la pena comprare<\/p>\n\n\n\n<div class=\"wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-03627597 wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button is-style-primary is-style-outline is-style-outline--1\"><a class=\"wp-block-button__link has-light-gray-color has-text-color has-background has-link-color has-extra-small-font-size has-text-align-center has-custom-font-size wp-element-button\" href=\"https:\/\/www.youtube.com\/channel\/UC5m9fFoCUc3cdBxkJAu8BsA\" style=\"border-width:1px;border-radius:100px;background-color:#fe0000\" target=\"_blank\" rel=\"noreferrer noopener\">YOUTUBE<\/a><\/div>\n<\/div>\n\n\n\n<div style=\"height:18px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n<\/div><\/div>\n<\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:8px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-cover alignwide\" style=\"border-style:none;border-width:0px;border-radius:0px;min-height:716px;aspect-ratio:unset;\"><span aria-hidden=\"true\" class=\"wp-block-cover__background has-background-dim-70 has-background-dim has-background-gradient has-cool-to-warm-spectrum-gradient-background\"><\/span><div class=\"wp-block-cover__inner-container is-layout-flow wp-container-core-cover-is-layout-22223934 wp-block-cover-is-layout-flow\">\n<h2 class=\"wp-block-heading has-text-align-center has-light-gray-color has-text-color\">PRODOTTI DI TENDENZA<\/h2>\n\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<p class=\"has-text-align-center has-nv-dark-bg-color has-text-color\"><\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image aligncenter size-full is-resized is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"792\" height=\"796\" src=\"https:\/\/dscycling.com\/wp-content\/uploads\/2025\/12\/aero50.jpg\" alt=\"\" class=\"wp-image-751\" style=\"width:339px;height:auto\" srcset=\"https:\/\/dscycling.com\/wp-content\/uploads\/2025\/12\/aero50.jpg 792w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/12\/aero50-298x300.jpg 298w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/12\/aero50-150x150.jpg 150w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/12\/aero50-768x772.jpg 768w\" sizes=\"auto, (max-width: 792px) 100vw, 792px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-center has-neve-text-color-color has-text-color\">IICAN AERO II 50<\/h3>\n\n\n\n<p>Extra <strong>5% di sconto<\/strong> con il codice <strong>LORENZODELSANT<\/strong><\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-a89b3969 wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/it.icancycling.com\/products\/aero-50-disc-wheelset?ref=LORENZODELSANT&amp;utm_source=affiliate\" target=\"_blank\" rel=\"noreferrer noopener\">GUARDA IL PRODOTTO<\/a><\/div>\n<\/div>\n\n\n\n<div style=\"height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image aligncenter size-full is-resized is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/ph-11134207-7rash-m476m7ttk0km80.jpg\" alt=\"\" class=\"wp-image-607\" style=\"width:339px;height:auto\" srcset=\"https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/ph-11134207-7rash-m476m7ttk0km80.jpg 800w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/ph-11134207-7rash-m476m7ttk0km80-300x300.jpg 300w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/ph-11134207-7rash-m476m7ttk0km80-150x150.jpg 150w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/ph-11134207-7rash-m476m7ttk0km80-768x768.jpg 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-center has-neve-text-color-color has-text-color\">SUNRMOON CS43<\/h3>\n\n\n\n<div style=\"height:39px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-a89b3969 wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/sunrimoon.com\/product\/cs-43phantom\/231?ref=Ciclismosconti\" target=\"_blank\" rel=\"noreferrer noopener\">GUARDA IL PRODOTTO<\/a><\/div>\n<\/div>\n\n\n\n<div style=\"height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h3 class=\"wp-block-heading has-text-align-center has-neve-text-color-color has-text-color\"><\/h3>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"1276\" height=\"851\" src=\"https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/burgos-siroko-01-1276x851.jpg.webp\" alt=\"\" class=\"wp-image-668\" srcset=\"https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/burgos-siroko-01-1276x851.jpg.webp 1276w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/burgos-siroko-01-1276x851.jpg-300x200.webp 300w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/burgos-siroko-01-1276x851.jpg-1024x683.webp 1024w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/burgos-siroko-01-1276x851.jpg-768x512.webp 768w\" sizes=\"auto, (max-width: 1276px) 100vw, 1276px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-text-align-center has-neve-text-color-color has-text-color has-base-font-size\"><strong>EXTRA 10% SU TUTTO IL SITO SIROKO!<\/strong><\/p>\n\n\n\n<div style=\"height:13px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-a89b3969 wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link has-text-align-center wp-element-button\" href=\"https:\/\/srko.co\/ciclismosconti\" target=\"_blank\" rel=\"noreferrer noopener\">GUARDA IL PRODOTTO<\/a><\/div>\n<\/div>\n\n\n\n<div style=\"height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div><\/div>\n\n\n\n<div style=\"height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:5px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-group alignfull has-cyan-bluish-gray-background-color has-background is-layout-flow wp-block-group-is-layout-flow\" style=\"padding-top:6vw;padding-right:6vw;padding-bottom:6vw;padding-left:6vw\">\n<div class=\"wp-block-group is-vertical is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-d274c13d wp-block-group-is-layout-flex\" style=\"padding-right:0;padding-left:0\">\n<h6 class=\"wp-block-heading has-text-align-center has-text-color\" id=\"ecosystem\" style=\"color:#000000;font-size:clamp(45.774px, 2.861rem + ((1vw - 3.2px) * 4.411), 89px);\"><strong>SCOPRI I CONTENUTI<\/strong><\/h6>\n<\/div>\n\n\n\n<div style=\"height:9px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-group alignwide is-vertical is-nowrap is-layout-flex wp-container-core-group-is-layout-7946b6b8 wp-block-group-is-layout-flex\" style=\"padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-21b20327 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.38%\">\n<p class=\"has-text-align-center has-small-font-size\"><strong>CICLISMO MADE IN CINA<\/strong><\/p>\n\n\n\n<p class=\"has-text-color\" style=\"color:#000000;font-size:clamp(15.197px, 0.95rem + ((1vw - 3.2px) * 0.796), 23px);\">Scopri bici, ruote, gruppi e componenti made in Cina: unboxing, analisi e confronti per capire se questi prodotti sono davvero un\u2019alternativa valida ai marchi pi\u00f9 famosi.<\/p>\n\n\n\n<p class=\"has-text-color\" style=\"color:#000000;font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.306), 17px);\"><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33%\">\n<div style=\"height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-text-align-center has-small-font-size\"><strong>GUARDA LA PLAYLIST<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Ciclismo Made in China\" width=\"720\" height=\"405\" src=\"https:\/\/www.youtube.com\/embed\/videoseries?list=PLPAhk0QTdIEwxyE7N9W8Pz9n8blWbPYyO\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33%\">\n<div style=\"height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-text-align-center has-small-font-size\"><strong>SCOPRI GRAVEL PROJECT<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"CREO UNA BICI 100% CINESE! Gravel Project EP1\" width=\"720\" height=\"405\" src=\"https:\/\/www.youtube.com\/embed\/bqPaO8B1RKI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-c24efe4f wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:69%\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"ROCKRIDER RACE 940S, LA BICI CHE NON TI ASPETTI!\" width=\"720\" height=\"405\" src=\"https:\/\/www.youtube.com\/embed\/e9LkgvIpr_s?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33%\">\n<p class=\"has-text-align-left has-small-font-size\"><strong>ROCKRIDER RACE 940S<\/strong><\/p>\n\n\n\n<p class=\"has-text-color\" style=\"color:#000000;font-size:clamp(14.642px, 0.915rem + ((1vw - 3.2px) * 0.751), 22px);\">La <strong>Rockrider Race 940S<\/strong> \u00e8 una full in carbonio da XC con 120 mm di escursione, pensata per chi vuole una bici leggera, reattiva e pronta alle gare. Ottimo rapporto qualit\u00e0-prezzo, geometria moderna e componenti di livello: una scelta interessante per chi cerca prestazioni senza spendere cifre esagerate.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div class=\"wp-block-cover alignwide\" style=\"min-height:600px;aspect-ratio:unset;\"><span aria-hidden=\"true\" class=\"wp-block-cover__background has-background-dim-60 has-background-dim has-background-gradient has-cool-to-warm-spectrum-gradient-background\"><\/span><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n<h2 class=\"wp-block-heading has-text-align-center has-neve-text-color-color has-text-color has-extra-large-font-size\">I VIDEO PIU VISTI<\/h2>\n\n\n\n<div style=\"height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<p class=\"has-text-align-center has-small-font-size\">Nel cuore del nostro sito, esploriamo e mettiamo alla prova ogni novit\u00e0 che il mercato ci presenta, garantendovi consigli mirati per scoprire esattamente ci\u00f2 che pi\u00f9 si adatta alle vostre esigenze<\/p>\n\n\n\n<div class=\"wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<div style=\"height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"QUICK PRO ER-ONE, LA BICI CINESE CHE CAMBIA TUTTO!\" width=\"720\" height=\"405\" src=\"https:\/\/www.youtube.com\/embed\/zGayKbsOkiM?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<div style=\"height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"ROCKRIDER RACE 940S, LA BICI CHE NON TI ASPETTI!\" width=\"720\" height=\"405\" src=\"https:\/\/www.youtube.com\/embed\/e9LkgvIpr_s?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-text-align-center has-nv-dark-bg-color has-text-color\"><\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-a89b3969 wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link has-blush-bordeaux-gradient-background has-background has-text-align-center wp-element-button\" href=\"https:\/\/t.me\/ciclismosconti\">CICLISMOSCONTI<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\">PROGETTI<\/h2>\n\n\n\n<div class=\"wp-block-cover alignwide is-light\" style=\"min-height:391px;aspect-ratio:unset;\"><span aria-hidden=\"true\" class=\"wp-block-cover__background has-nv-light-bg-background-color has-background-dim-0 has-background-dim\"><\/span><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n<div class=\"wp-block-media-text is-stacked-on-mobile is-image-fill-element has-background\" style=\"background-color:#d91919;grid-template-columns:26% auto\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"500\" src=\"https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/L-1.png\" alt=\"\" class=\"wp-image-585 size-full\" style=\"object-position:50% 50%\" srcset=\"https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/L-1.png 500w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/L-1-300x300.png 300w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/L-1-150x150.png 150w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<div style=\"height:18px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left has-light-gray-color has-text-color\">CANALE YOUTUBE<\/h2>\n\n\n\n<p class=\"has-text-align-left has-neve-text-color-color has-text-color\" style=\"font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.306), 17px);px\">NON PERDERTI TUTTI I CONTENUTI GIRATI NEL CANALE YOUTUBE!<\/p>\n\n\n\n<div class=\"wp-block-buttons is-horizontal is-content-justification-left is-layout-flex wp-container-core-buttons-is-layout-20be11b6 wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button is-style-primary\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/www.youtube.com\/@LorenzoDelsant\" style=\"border-width:1px\">VAI AL CANALE<\/a><\/div>\n<\/div>\n\n\n\n<div style=\"height:18px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n<\/div><\/div>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-cover alignwide is-light\" style=\"min-height:371px;aspect-ratio:unset;\"><span aria-hidden=\"true\" class=\"wp-block-cover__background has-nv-light-bg-background-color has-background-dim-0 has-background-dim\"><\/span><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n<div class=\"wp-block-media-text is-stacked-on-mobile is-image-fill-element has-pale-cyan-blue-background-color has-background\" style=\"grid-template-columns:26% auto\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"625\" src=\"https:\/\/dscycling.com\/wp-content\/uploads\/2024\/03\/IMG_0462-1-1024x625.jpg\" alt=\"\" class=\"wp-image-24 size-full\" style=\"object-position:50% 50%\" srcset=\"https:\/\/dscycling.com\/wp-content\/uploads\/2024\/03\/IMG_0462-1-1024x625.jpg 1024w, https:\/\/dscycling.com\/wp-content\/uploads\/2024\/03\/IMG_0462-1-300x183.jpg 300w, https:\/\/dscycling.com\/wp-content\/uploads\/2024\/03\/IMG_0462-1-768x468.jpg 768w, https:\/\/dscycling.com\/wp-content\/uploads\/2024\/03\/IMG_0462-1.jpg 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<div style=\"height:18px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left has-neve-text-color-color has-text-color\">CICLISMOSCONTI TELEGRAM<\/h2>\n\n\n\n<p class=\"has-text-align-left has-neve-text-color-color has-text-color\" style=\"font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.306), 17px);px\">ENTRA NEL MIGLIOR CANALE TELEGRAM DEDICATO ALLE OFFERTE CICLISTICHE!<\/p>\n\n\n\n<div class=\"wp-block-buttons is-horizontal is-content-justification-left is-layout-flex wp-container-core-buttons-is-layout-20be11b6 wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button is-style-primary\"><a class=\"wp-block-button__link has-background wp-element-button\" href=\"https:\/\/t.me\/ciclismosconti\" style=\"border-width:1px;background-color:#ee0101\">CICLISMOSCONTI<\/a><\/div>\n<\/div>\n\n\n\n<div style=\"height:17px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n<\/div><\/div>\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\">ULTIMI ARTICOLI<\/h2>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-group is-horizontal is-layout-flex wp-block-group-is-layout-flex\" style=\"padding-top:30px;padding-right:30px;padding-bottom:30px;padding-left:30px\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\"><\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-query is-layout-flow wp-block-query-is-layout-flow\"><ul class=\"wp-block-post-template is-layout-flow wp-block-post-template-is-layout-flow\"><li class=\"wp-block-post post-760 post type-post status-publish format-standard has-post-thumbnail hentry category-blog category-equipaggiamento category-pezzi-di-ricambio tag-canale-25mm tag-componenti-cinesi-bici tag-gravel-wheels tag-ican-g40 tag-ican-g40-peso tag-ican-g40-vs-g50 tag-ican-ruote tag-ruote-carbonio-gravel tag-ruote-cinesi tag-ruote-gravel tag-ruote-gravel-carbonio tag-ruote-tubeless-gravel tag-torayca-t700 tag-unboxing-ruote-gravel\">\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\"><figure class=\"wp-block-post-featured-image\"><a href=\"https:\/\/dscycling.com\/index.php\/2025\/12\/24\/ican-g40-unboxing-analisi-ruote-gravel\/\" target=\"_self\"  ><img loading=\"lazy\" decoding=\"async\" width=\"1646\" height=\"600\" src=\"https:\/\/dscycling.com\/wp-content\/uploads\/2025\/12\/g40.webp\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"ICAN G40: Unboxing e Analisi Completa\" style=\"object-fit:cover;\" srcset=\"https:\/\/dscycling.com\/wp-content\/uploads\/2025\/12\/g40.webp 1646w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/12\/g40-300x109.webp 300w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/12\/g40-1024x373.webp 1024w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/12\/g40-768x280.webp 768w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/12\/g40-1536x560.webp 1536w\" sizes=\"auto, (max-width: 1646px) 100vw, 1646px\" \/><\/a><\/figure><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\"><h2 class=\"wp-block-post-title\"><a href=\"https:\/\/dscycling.com\/index.php\/2025\/12\/24\/ican-g40-unboxing-analisi-ruote-gravel\/\" target=\"_self\" >ICAN G40: Unboxing e Analisi Completa<\/a><\/h2>\n\n<div class=\"wp-block-post-excerpt\"><p class=\"wp-block-post-excerpt__excerpt\">Le\u00a0ICAN G40\u00a0rappresentano una delle soluzioni pi\u00f9 interessanti nel panorama delle ruote cinesi da gravel in carbonio, combinando prestazioni di alto livello con un prezzo accessibile. In questo articolo vi mostro l&#8217;unboxing e l&#8217;analisi dettagliata di queste ruote che ho scelto per il mio progetto gravel 100% cinese. Unboxing e Prime Impressioni Le&nbsp;ICAN G40&nbsp;arrivano in un&hellip; <\/p><\/div><\/div>\n<\/div>\n\n<\/li><li class=\"wp-block-post post-741 post type-post status-publish format-standard has-post-thumbnail hentry category-blog category-equipaggiamento tag-bici-aerodinamica tag-bici-cinese tag-bici-cinese-vs-europea tag-euskaltel-2026 tag-harry-hudson tag-lorenzo-del-sant tag-pandapodium tag-quick-pro-ar1 tag-quick-pro-er1 tag-recensione-bici-cinese tag-samuel-sanchez tag-telaio-carbonio-toray tag-test-prestazioni-ciclismo tag-vuelta-espana-2026\">\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\"><figure class=\"wp-block-post-featured-image\"><a href=\"https:\/\/dscycling.com\/index.php\/2025\/12\/10\/bici-cinese-quick-pro-euskaltel-2026-recensione\/\" target=\"_self\"  ><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1080\" src=\"https:\/\/dscycling.com\/wp-content\/uploads\/2025\/12\/ce3b569d-43f9-498e-945c-b31dae389bc9.large_.jpg\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"Bici Cinese Quick-Pro Partner dell&#8217;Euskaltel 2026: La Rivoluzione che Cambia il Ciclismo\" style=\"object-fit:cover;\" srcset=\"https:\/\/dscycling.com\/wp-content\/uploads\/2025\/12\/ce3b569d-43f9-498e-945c-b31dae389bc9.large_.jpg 1920w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/12\/ce3b569d-43f9-498e-945c-b31dae389bc9.large_-300x169.jpg 300w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/12\/ce3b569d-43f9-498e-945c-b31dae389bc9.large_-1024x576.jpg 1024w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/12\/ce3b569d-43f9-498e-945c-b31dae389bc9.large_-768x432.jpg 768w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/12\/ce3b569d-43f9-498e-945c-b31dae389bc9.large_-1536x864.jpg 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/figure><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\"><h2 class=\"wp-block-post-title\"><a href=\"https:\/\/dscycling.com\/index.php\/2025\/12\/10\/bici-cinese-quick-pro-euskaltel-2026-recensione\/\" target=\"_self\" >Bici Cinese Quick-Pro Partner dell&#8217;Euskaltel 2026: La Rivoluzione che Cambia il Ciclismo<\/a><\/h2>\n\n<div class=\"wp-block-post-excerpt\"><p class=\"wp-block-post-excerpt__excerpt\">La bici cinese Quick-Pro entra ufficialmente nel ciclismo professionistico europeo: dal 2026, il team Euskaltel Euskadi e la sua squadra Under 23 Euskadi Fundazioa gareggeranno con le biciclette del marchio cinese. Questo accordo storico dimostra che una bici cinese pu\u00f2 competere ai massimi livelli WorldTour, abbattendo i pregiudizi sui telai asiatici. Utilizzo la Quick-Pro ER&hellip; <\/p><\/div><\/div>\n<\/div>\n\n<\/li><li class=\"wp-block-post post-720 post type-post status-publish format-standard has-post-thumbnail hentry category-blog category-equipaggiamento tag-aliepress tag-alternativa-casco-costoso tag-attrezzatura-ciclismo tag-caschi-aero tag-caschi-aliexpress tag-caschi-cinesi-qualita tag-caschi-economici tag-caschi-sunrimoon tag-caschi-ventilati tag-casco-110-euro tag-casco-aerodinamico tag-casco-ciclismo tag-casco-cinese tag-casco-da-corsa tag-casco-gravel tag-casco-ventilato tag-ciclismo-italia tag-cs43 tag-cycling-helmet-review tag-gravel-bike-italia tag-miglior-casco-economico tag-quick-pro tag-recensione-casco tag-sunrimoon tag-sunrimoon-cs43 tag-tecnologia-3d-grid tag-unboxing-casco\">\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\"><figure class=\"wp-block-post-featured-image\"><a href=\"https:\/\/dscycling.com\/index.php\/2025\/12\/02\/sunrimoon-cs43-il-casco-cinese-da-100e-che-sfida-i-big\/\" target=\"_self\"  ><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/dscycling.com\/wp-content\/uploads\/2025\/12\/ph-11134207-7rash-m476m7ttk0km80-1.jpg\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"Sunrimoon CS43: Il Casco Cinese da 100\u20ac che Sfida i Big\" style=\"object-fit:cover;\" srcset=\"https:\/\/dscycling.com\/wp-content\/uploads\/2025\/12\/ph-11134207-7rash-m476m7ttk0km80-1.jpg 800w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/12\/ph-11134207-7rash-m476m7ttk0km80-1-300x300.jpg 300w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/12\/ph-11134207-7rash-m476m7ttk0km80-1-150x150.jpg 150w, https:\/\/dscycling.com\/wp-content\/uploads\/2025\/12\/ph-11134207-7rash-m476m7ttk0km80-1-768x768.jpg 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><\/figure><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\"><h2 class=\"wp-block-post-title\"><a href=\"https:\/\/dscycling.com\/index.php\/2025\/12\/02\/sunrimoon-cs43-il-casco-cinese-da-100e-che-sfida-i-big\/\" target=\"_self\" >Sunrimoon CS43: Il Casco Cinese da 100\u20ac che Sfida i Big<\/a><\/h2>\n\n<div class=\"wp-block-post-excerpt\"><p class=\"wp-block-post-excerpt__excerpt\">La Rivoluzione dei Caschi Cinesi nel Ciclismo Il&nbsp;Sunrimoon CS43 Phantom 3D&nbsp;: un casco che combina sicurezza certificata, design aerodinamico e materiali premium a circa&nbsp;115 dollari, un prezzo che fa riflettere considerando che i top di gamma dei marchi occidentali superano facilmente i 300\u20ac.\u200b\u200b Ma \u00e8 davvero all&#8217;altezza delle promesse? Dopo averlo testato personalmente e analizzato&hellip; <\/p><\/div><\/div>\n<\/div>\n\n<\/li><\/ul><\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20)\"\/>\n\n\n\n<div class=\"wp-block-group alignfull has-background-color is-layout-flow wp-block-group-is-layout-flow\" style=\"margin-top:0;margin-bottom:0;padding-top:var(--wp--preset--spacing--50);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--50);padding-left:var(--wp--preset--spacing--30)\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column has-white-background-color has-background is-layout-flow wp-container-core-column-is-layout-c951c46d wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading has-text-align-center\">SOCIAL<\/h2>\n\n\n\n<p class=\"has-text-align-center has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-febce959ae32df106c9216ae9f712a0e\"><a href=\"https:\/\/www.youtube.com\/@LorenzoDelsant\" target=\"_blank\" rel=\"noreferrer noopener\">YOUTUBE<\/a><\/p>\n\n\n\n<p class=\"has-text-align-center has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-947656d1953ef68b5f3658553a0f64c9\"><a href=\"https:\/\/www.instagram.com\/lorenzo.delsant\" target=\"_blank\" rel=\"noreferrer noopener\">INSTAGRAM<\/a><\/p>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/open.spotify.com\/show\/26NBdjpJqTJN0Hs6eJaZKu?si=tTwwYJ73SDech5O6wr4H0g\" target=\"_blank\" rel=\"noreferrer noopener\">SPOTIFY<\/a><\/p>\n\n\n\n<p class=\"has-text-align-center has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-100c27d745dbdd6daf1cb168e6e83626\"><a href=\"https:\/\/tiktok.com\/@lorenzodelsant\" target=\"_blank\" rel=\"noreferrer noopener\">TIKTOK<\/a><\/p>\n\n\n\n<p class=\"has-text-align-center has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-3c6e6b18958f4fb7e3ba44d16c48807f\"><a href=\"https:\/\/www.facebook.com\/lorenzo.delsant\" target=\"_blank\" rel=\"noreferrer noopener\">FACEBOOK<\/a><\/p>\n\n\n\n<p class=\"has-text-align-center has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-c7e07b27823a0d9c9eb00fe67eb93ca0\"><a href=\"https:\/\/www.twitch.tv\/lorenzodelsant\" target=\"_blank\" rel=\"noreferrer noopener\">TWITCH<\/a><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column has-white-background-color has-background is-layout-flow wp-container-core-column-is-layout-c951c46d wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading has-text-align-center\">CHI SIAMO<\/h2>\n\n\n\n<p class=\"has-text-align-center has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-f46381e7cee4b378e7a8a64321b69e91\"><a href=\"http:\/\/dscycling.com\/index.php\/privacy-policy\/\" target=\"_blank\" rel=\"noreferrer noopener\">COOKIE POLICY<\/a><\/p>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"http:\/\/dscycling.com\/index.php\/privacy-policy-2\/\" target=\"_blank\" rel=\"noreferrer noopener\">PRIVACY POLICY<\/a><\/p>\n\n\n\n<p class=\"has-text-align-center has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-ead28eab371a2ed6c11d1120ea64ea5c\"><a href=\"http:\/\/dscycling.com\/index.php\/collabora-con-noi\/\" target=\"_blank\" rel=\"noreferrer noopener\">COLLABORA CON NOI<\/a><\/p>\n\n\n\n<p class=\"has-text-align-center has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-be781ddc1318a9956f7d2edd9aa9993d\"><a href=\"http:\/\/dscycling.com\/index.php\/contattaci\/\" target=\"_blank\" rel=\"noreferrer noopener\">CONTATTACI<\/a><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column has-white-background-color has-background is-layout-flow wp-container-core-column-is-layout-c951c46d wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading has-text-align-center\">SITI CONSIGLIATI<\/h2>\n\n\n\n<p class=\"has-text-align-center has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-2eb8e1226264d5a0d0682abd9be64ac0\"><a href=\"https:\/\/tidd.ly\/4crOmHL\" target=\"_blank\" rel=\"noreferrer noopener\">DECATLON<\/a><\/p>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/srko.co\/ciclismosconti\">SIROKO<\/a><\/p>\n\n\n\n<p class=\"has-text-align-center has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-6ec43719f8ff6d714ff164a708a187af\"><a href=\"https:\/\/fnty.co\/c\/r-KXkAegUW\" target=\"_blank\" rel=\"noreferrer noopener\">ALLTRICKS<\/a><\/p>\n\n\n\n<p class=\"has-text-align-center has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-a24f181278640d3c98ee6bab46502ae9\"><a href=\"https:\/\/fnty.co\/c\/r-UxrmRxLx\" target=\"_blank\" rel=\"noreferrer noopener\">EKOI<\/a><\/p>\n\n\n\n<p class=\"has-text-align-center has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-111a02f6031329d1bd99fe15e3653054\"><a href=\"https:\/\/tidd.ly\/3TBnTyJ\" target=\"_blank\" rel=\"noreferrer noopener\">CINGOLANI<\/a><\/p>\n\n\n\n<p class=\"has-text-align-center has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-242c1d60879745f64d6a6d9cd3789df9\"><a href=\"https:\/\/tidd.ly\/3TrUd7a\" target=\"_blank\" rel=\"noreferrer noopener\">BULK<\/a><\/p>\n\n\n\n<p class=\"has-text-align-center has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-7a51ea253f9d17ed6dca2f779e0e4229\"><a href=\"https:\/\/tidd.ly\/4aqnLc6\">PRIVE&#8217; <\/a><a href=\"https:\/\/tidd.ly\/4aqnLc6\" target=\"_blank\" rel=\"noreferrer noopener\">BY<\/a><a href=\"https:\/\/tidd.ly\/4aqnLc6\"> ZALANDO<\/a><\/p>\n\n\n\n<p class=\"has-text-align-center has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-2d63613e8da73e9c1f53f9ddd07002cf\"><a href=\"https:\/\/amzn.to\/3SYgjx2\" target=\"_blank\" rel=\"noreferrer noopener\">AMAZON<\/a><\/p>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/wheeltop.refr.cc\/wheeltop-referral-program\/u\/lorenzodelsant?s=sp&amp;t=cp\">WHEELTOP<\/a><\/p>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:38px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<!DOCTYPE html>\n<html lang=\"it\">\n<head>\n  <meta charset=\"UTF-8\" \/>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\/>\n  <title>Affiliate Manager Pro<\/title>\n  \n  <!-- Font: Satoshi da Fontshare -->\n  <link rel=\"preconnect\" href=\"https:\/\/fontshare.com\">\n  <link href=\"https:\/\/api.fontshare.com\/v2\/css?f[]=satoshi@300,400,500,700&#038;display=swap\" rel=\"stylesheet\">\n  \n  <style>\n    \/* ===== DESIGN SYSTEM ===== *\/\n    :root {\n      \/* Palette Teal - Dark Mode Default *\/\n      --bg-primary: #0a0f0d;\n      --bg-secondary: #121a19;\n      --bg-tertiary: #1a2524;\n      --text-primary: #f0f7f6;\n      --text-secondary: #a8c4c2;\n      --accent-teal: #4f98a3;\n      --accent-teal-light: #01696f;\n      --accent-teal-glow: rgba(79, 152, 163, 0.3);\n      --success: #2ecc71;\n      --warning: #f39c12;\n      --danger: #e74c3c;\n      --border: #2a3a38;\n      --shadow: 0 4px 20px rgba(0,0,0,0.4);\n      --radius: 12px;\n      --transition: all 0.25s ease;\n    }\n\n    [data-theme=\"light\"] {\n      --bg-primary: #f8fbfa;\n      --bg-secondary: #ffffff;\n      --bg-tertiary: #edf5f4;\n      --text-primary: #0a0f0d;\n      --text-secondary: #4a6b68;\n      --accent-teal: #01696f;\n      --accent-teal-light: #4f98a3;\n      --accent-teal-glow: rgba(1, 105, 111, 0.15);\n      --border: #d1e4e2;\n      --shadow: 0 4px 20px rgba(1, 105, 111, 0.1);\n    }\n\n    \/* ===== RESET & BASE ===== *\/\n    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n    html { scroll-behavior: smooth; }\n    body {\n      font-family: 'Satoshi', -apple-system, BlinkMacSystemFont, sans-serif;\n      background: var(--bg-primary);\n      color: var(--text-primary);\n      line-height: 1.5;\n      transition: var(--transition);\n      min-height: 100vh;\n    }\n\n    \/* ===== LAYOUT ===== *\/\n    .app-container {\n      display: grid;\n      grid-template-columns: 260px 1fr;\n      min-height: 100vh;\n    }\n\n    \/* ===== SIDEBAR ===== *\/\n    .sidebar {\n      background: var(--bg-secondary);\n      border-right: 1px solid var(--border);\n      padding: 1.5rem;\n      position: fixed;\n      height: 100vh;\n      width: 260px;\n      z-index: 100;\n      transition: var(--transition);\n      display: flex;\n      flex-direction: column;\n      gap: 1.5rem;\n    }\n\n    .sidebar.collapsed { transform: translateX(-100%); }\n    \n    .sidebar-header {\n      display: flex;\n      align-items: center;\n      gap: 0.75rem;\n      padding-bottom: 1rem;\n      border-bottom: 1px solid var(--border);\n    }\n\n    .logo {\n      font-weight: 700;\n      font-size: 1.25rem;\n      color: var(--accent-teal);\n      display: flex;\n      align-items: center;\n      gap: 0.5rem;\n    }\n\n    .logo-icon {\n      width: 28px;\n      height: 28px;\n      background: linear-gradient(135deg, var(--accent-teal), var(--accent-teal-light));\n      border-radius: 8px;\n      display: grid;\n      place-items: center;\n      font-size: 0.9rem;\n    }\n\n    .nav-menu {\n      display: flex;\n      flex-direction: column;\n      gap: 0.25rem;\n      flex: 1;\n    }\n\n    .nav-item {\n      display: flex;\n      align-items: center;\n      gap: 0.75rem;\n      padding: 0.75rem 1rem;\n      border-radius: var(--radius);\n      cursor: pointer;\n      transition: var(--transition);\n      font-weight: 500;\n      color: var(--text-secondary);\n    }\n\n    .nav-item:hover, .nav-item.active {\n      background: var(--accent-teal-glow);\n      color: var(--accent-teal);\n    }\n\n    .nav-item.active { border-left: 3px solid var(--accent-teal); }\n\n    .sidebar-footer {\n      padding-top: 1rem;\n      border-top: 1px solid var(--border);\n      display: flex;\n      flex-direction: column;\n      gap: 0.75rem;\n    }\n\n    .theme-toggle, .settings-btn {\n      display: flex;\n      align-items: center;\n      gap: 0.5rem;\n      padding: 0.6rem 1rem;\n      background: var(--bg-tertiary);\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n      cursor: pointer;\n      transition: var(--transition);\n      font-size: 0.9rem;\n      color: var(--text-secondary);\n    }\n\n    .theme-toggle:hover, .settings-btn:hover {\n      border-color: var(--accent-teal);\n      color: var(--accent-teal);\n    }\n\n    \/* ===== MAIN CONTENT ===== *\/\n    .main-content {\n      grid-column: 2;\n      padding: 2rem;\n      padding-left: 280px;\n      transition: var(--transition);\n    }\n\n    .sidebar.collapsed + .main-content { padding-left: 2rem; }\n\n    .page-header {\n      margin-bottom: 2rem;\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      flex-wrap: wrap;\n      gap: 1rem;\n    }\n\n    .page-title {\n      font-size: 1.75rem;\n      font-weight: 700;\n      display: flex;\n      align-items: center;\n      gap: 0.75rem;\n    }\n\n    .page-title span { color: var(--accent-teal); }\n\n    .command-palette-trigger {\n      display: flex;\n      align-items: center;\n      gap: 0.5rem;\n      padding: 0.5rem 1rem;\n      background: var(--bg-secondary);\n      border: 1px solid var(--border);\n      border-radius: 8px;\n      cursor: pointer;\n      font-size: 0.9rem;\n      color: var(--text-secondary);\n      transition: var(--transition);\n    }\n\n    .command-palette-trigger:hover {\n      border-color: var(--accent-teal);\n      color: var(--accent-teal);\n    }\n\n    .command-palette-trigger kbd {\n      background: var(--bg-tertiary);\n      padding: 2px 6px;\n      border-radius: 4px;\n      font-size: 0.8rem;\n    }\n\n    \/* ===== MODULES ===== *\/\n    .module { display: none; animation: fadeIn 0.3s ease; }\n    .module.active { display: block; }\n    \n    @keyframes fadeIn {\n      from { opacity: 0; transform: translateY(10px); }\n      to { opacity: 1; transform: translateY(0); }\n    }\n\n    \/* ===== MODULE 1: LINK GENERATOR ===== *\/\n    .link-generator {\n      display: grid;\n      gap: 1.5rem;\n      max-width: 800px;\n    }\n\n    .input-card {\n      background: var(--bg-secondary);\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n      padding: 1.5rem;\n      display: flex;\n      flex-direction: column;\n      gap: 1rem;\n    }\n\n    .input-group label {\n      display: block;\n      font-weight: 500;\n      margin-bottom: 0.5rem;\n      color: var(--text-secondary);\n    }\n\n    .url-input-wrapper {\n      display: flex;\n      gap: 0.75rem;\n    }\n\n    .url-input {\n      flex: 1;\n      padding: 0.875rem 1rem;\n      background: var(--bg-tertiary);\n      border: 1px solid var(--border);\n      border-radius: 8px;\n      color: var(--text-primary);\n      font-size: 1rem;\n      transition: var(--transition);\n    }\n\n    .url-input:focus {\n      outline: none;\n      border-color: var(--accent-teal);\n      box-shadow: 0 0 0 3px var(--accent-teal-glow);\n    }\n\n    .btn {\n      padding: 0.875rem 1.5rem;\n      background: linear-gradient(135deg, var(--accent-teal), var(--accent-teal-light));\n      color: white;\n      border: none;\n      border-radius: 8px;\n      font-weight: 600;\n      cursor: pointer;\n      transition: var(--transition);\n      display: inline-flex;\n      align-items: center;\n      gap: 0.5rem;\n    }\n\n    .btn:hover {\n      transform: translateY(-2px);\n      box-shadow: 0 6px 20px var(--accent-teal-glow);\n    }\n\n    .btn:active { transform: translateY(0); }\n\n    .btn-secondary {\n      background: var(--bg-tertiary);\n      color: var(--text-primary);\n      border: 1px solid var(--border);\n    }\n\n    .btn-secondary:hover { border-color: var(--accent-teal); }\n\n    .result-card {\n      background: var(--bg-secondary);\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n      padding: 1.5rem;\n      display: none;\n    }\n\n    .result-card.show { display: block; }\n\n    .result-header {\n      display: flex;\n      justify-content: space-between;\n      align-items: flex-start;\n      margin-bottom: 1rem;\n      flex-wrap: wrap;\n      gap: 1rem;\n    }\n\n    .platform-badge {\n      padding: 0.35rem 0.75rem;\n      background: var(--accent-teal-glow);\n      color: var(--accent-teal);\n      border-radius: 20px;\n      font-size: 0.85rem;\n      font-weight: 600;\n      display: inline-flex;\n      align-items: center;\n      gap: 0.35rem;\n    }\n\n    .generated-link {\n      background: var(--bg-tertiary);\n      padding: 1rem;\n      border-radius: 8px;\n      font-family: monospace;\n      font-size: 0.95rem;\n      word-break: break-all;\n      margin: 1rem 0;\n      border-left: 3px solid var(--accent-teal);\n    }\n\n    .preview-section {\n      display: grid;\n      grid-template-columns: 120px 1fr;\n      gap: 1rem;\n      align-items: center;\n      padding: 1rem;\n      background: var(--bg-tertiary);\n      border-radius: 8px;\n      margin-top: 1rem;\n    }\n\n    .preview-img {\n      width: 120px;\n      height: 120px;\n      background: var(--bg-secondary);\n      border-radius: 8px;\n      display: grid;\n      place-items: center;\n      color: var(--text-secondary);\n      font-size: 2rem;\n      border: 1px dashed var(--border);\n    }\n\n    .preview-info h4 { margin-bottom: 0.5rem; }\n    .preview-info p { color: var(--text-secondary); font-size: 0.95rem; }\n\n    .copy-btn {\n      margin-top: 1rem;\n      width: 100%;\n      justify-content: center;\n    }\n\n    \/* ===== MODULE 2: DEAL SCANNER ===== *\/\n    .deal-scanner { display: flex; flex-direction: column; gap: 1.5rem; }\n\n    .filters-bar {\n      display: flex;\n      gap: 1rem;\n      flex-wrap: wrap;\n      padding: 1rem;\n      background: var(--bg-secondary);\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n    }\n\n    .filter-group {\n      display: flex;\n      flex-direction: column;\n      gap: 0.35rem;\n      min-width: 150px;\n    }\n\n    .filter-group label {\n      font-size: 0.85rem;\n      color: var(--text-secondary);\n      font-weight: 500;\n    }\n\n    .filter-select, .filter-input {\n      padding: 0.5rem 0.75rem;\n      background: var(--bg-tertiary);\n      border: 1px solid var(--border);\n      border-radius: 6px;\n      color: var(--text-primary);\n      font-size: 0.9rem;\n    }\n\n    .deal-of-day {\n      background: linear-gradient(135deg, var(--bg-secondary), var(--bg-tertiary));\n      border: 2px solid var(--accent-teal);\n      border-radius: var(--radius);\n      padding: 1.5rem;\n      position: relative;\n      overflow: hidden;\n    }\n\n    .deal-badge {\n      position: absolute;\n      top: 1rem;\n      right: -2rem;\n      background: linear-gradient(135deg, #ff6b6b, #ee5a24);\n      color: white;\n      padding: 0.4rem 3rem;\n      font-weight: 700;\n      font-size: 0.85rem;\n      transform: rotate(45deg);\n      animation: pulse 2s infinite;\n    }\n\n    @keyframes pulse {\n      0%, 100% { opacity: 1; }\n      50% { opacity: 0.85; }\n    }\n\n    .countdown {\n      display: flex;\n      gap: 0.5rem;\n      margin: 1rem 0;\n      font-family: monospace;\n      font-weight: 600;\n      color: var(--accent-teal);\n    }\n\n    .countdown span {\n      background: var(--bg-tertiary);\n      padding: 0.35rem 0.75rem;\n      border-radius: 6px;\n      min-width: 45px;\n      text-align: center;\n    }\n\n    .deals-grid {\n      display: grid;\n      grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n      gap: 1.25rem;\n    }\n\n    .deal-card {\n      background: var(--bg-secondary);\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n      padding: 1.25rem;\n      display: flex;\n      flex-direction: column;\n      gap: 1rem;\n      transition: var(--transition);\n      cursor: pointer;\n    }\n\n    .deal-card:hover {\n      border-color: var(--accent-teal);\n      transform: translateY(-4px);\n      box-shadow: var(--shadow);\n    }\n\n    .deal-card-header {\n      display: flex;\n      justify-content: space-between;\n      align-items: flex-start;\n      gap: 0.75rem;\n    }\n\n    .deal-platform {\n      font-size: 0.75rem;\n      padding: 0.25rem 0.6rem;\n      background: var(--bg-tertiary);\n      border-radius: 4px;\n      font-weight: 600;\n      text-transform: uppercase;\n    }\n\n    .deal-title {\n      font-weight: 600;\n      font-size: 1.05rem;\n      line-height: 1.4;\n      display: -webkit-box;\n      -webkit-line-clamp: 2;\n      -webkit-box-orient: vertical;\n      overflow: hidden;\n    }\n\n    .deal-image {\n      width: 100%;\n      aspect-ratio: 4\/3;\n      background: var(--bg-tertiary);\n      border-radius: 8px;\n      display: grid;\n      place-items: center;\n      color: var(--text-secondary);\n      border: 1px dashed var(--border);\n    }\n\n    .deal-pricing {\n      display: flex;\n      align-items: center;\n      gap: 0.75rem;\n      flex-wrap: wrap;\n    }\n\n    .price-current {\n      font-size: 1.35rem;\n      font-weight: 700;\n      color: var(--accent-teal);\n    }\n\n    .price-original {\n      text-decoration: line-through;\n      color: var(--text-secondary);\n      font-size: 0.95rem;\n    }\n\n    .discount-badge {\n      background: linear-gradient(135deg, var(--success), #27ae60);\n      color: white;\n      padding: 0.2rem 0.5rem;\n      border-radius: 4px;\n      font-size: 0.8rem;\n      font-weight: 600;\n    }\n\n    .deal-cta {\n      margin-top: auto;\n      width: 100%;\n      padding: 0.7rem;\n      text-align: center;\n      background: var(--bg-tertiary);\n      border: 1px solid var(--border);\n      border-radius: 8px;\n      font-weight: 600;\n      cursor: pointer;\n      transition: var(--transition);\n    }\n\n    .deal-cta:hover {\n      background: var(--accent-teal);\n      border-color: var(--accent-teal);\n      color: white;\n    }\n\n    \/* Skeleton Loader *\/\n    .skeleton {\n      background: linear-gradient(90deg, var(--bg-tertiary) 25%, var(--bg-secondary) 50%, var(--bg-tertiary) 75%);\n      background-size: 200% 100%;\n      animation: shimmer 1.5s infinite;\n      border-radius: 8px;\n    }\n\n    @keyframes shimmer {\n      0% { background-position: -200% 0; }\n      100% { background-position: 200% 0; }\n    }\n\n    .skeleton-card {\n      height: 320px;\n      display: flex;\n      flex-direction: column;\n      gap: 0.75rem;\n      padding: 1.25rem;\n    }\n\n    .skeleton-img { height: 140px; }\n    .skeleton-title { height: 20px; width: 85%; }\n    .skeleton-price { height: 24px; width: 50%; }\n    .skeleton-btn { height: 36px; width: 100%; margin-top: auto; }\n\n    \/* ===== MODULE 3: PRODUCT RECOMMENDER ===== *\/\n    .recommender {\n      display: grid;\n      gap: 1.5rem;\n      max-width: 900px;\n    }\n\n    .ai-input-card {\n      background: var(--bg-secondary);\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n      padding: 1.5rem;\n    }\n\n    .ai-prompt-area {\n      display: flex;\n      flex-direction: column;\n      gap: 1rem;\n    }\n\n    .ai-textarea {\n      width: 100%;\n      min-height: 100px;\n      padding: 1rem;\n      background: var(--bg-tertiary);\n      border: 1px solid var(--border);\n      border-radius: 8px;\n      color: var(--text-primary);\n      font-family: inherit;\n      font-size: 1rem;\n      resize: vertical;\n      transition: var(--transition);\n    }\n\n    .ai-textarea:focus {\n      outline: none;\n      border-color: var(--accent-teal);\n      box-shadow: 0 0 0 3px var(--accent-teal-glow);\n    }\n\n    .ai-hints {\n      display: flex;\n      gap: 0.5rem;\n      flex-wrap: wrap;\n    }\n\n    .ai-hint {\n      padding: 0.35rem 0.75rem;\n      background: var(--bg-tertiary);\n      border-radius: 20px;\n      font-size: 0.85rem;\n      color: var(--text-secondary);\n      cursor: pointer;\n      transition: var(--transition);\n    }\n\n    .ai-hint:hover {\n      background: var(--accent-teal);\n      color: white;\n    }\n\n    .recommendations-list {\n      display: flex;\n      flex-direction: column;\n      gap: 1rem;\n    }\n\n    .recommendation-card {\n      background: var(--bg-secondary);\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n      padding: 1.25rem;\n      display: grid;\n      grid-template-columns: 1fr auto;\n      gap: 1rem;\n      align-items: start;\n    }\n\n    .rec-content { display: flex; flex-direction: column; gap: 0.75rem; }\n\n    .rec-header {\n      display: flex;\n      justify-content: space-between;\n      align-items: flex-start;\n      gap: 1rem;\n      flex-wrap: wrap;\n    }\n\n    .rec-title {\n      font-weight: 600;\n      font-size: 1.1rem;\n    }\n\n    .compatibility-bar {\n      display: flex;\n      align-items: center;\n      gap: 0.75rem;\n    }\n\n    .compat-label {\n      font-size: 0.9rem;\n      font-weight: 500;\n      min-width: 85px;\n    }\n\n    .compat-track {\n      flex: 1;\n      height: 8px;\n      background: var(--bg-tertiary);\n      border-radius: 4px;\n      overflow: hidden;\n    }\n\n    .compat-fill {\n      height: 100%;\n      background: linear-gradient(90deg, var(--accent-teal), var(--success));\n      border-radius: 4px;\n      transition: width 0.4s ease;\n    }\n\n    .compat-percent {\n      font-weight: 700;\n      color: var(--accent-teal);\n      min-width: 45px;\n      text-align: right;\n    }\n\n    .rec-reason {\n      font-size: 0.9rem;\n      color: var(--text-secondary);\n      padding-left: 95px;\n    }\n\n    .rec-actions {\n      display: flex;\n      flex-direction: column;\n      gap: 0.5rem;\n      align-items: flex-end;\n    }\n\n    .btn-sm {\n      padding: 0.5rem 1rem;\n      font-size: 0.9rem;\n      border-radius: 6px;\n    }\n\n    .btn-share {\n      background: var(--bg-tertiary);\n      color: var(--text-primary);\n      border: 1px solid var(--border);\n    }\n\n    .btn-share:hover { border-color: var(--accent-teal); color: var(--accent-teal); }\n\n    \/* ===== TOAST NOTIFICATIONS ===== *\/\n    .toast-container {\n      position: fixed;\n      bottom: 2rem;\n      right: 2rem;\n      z-index: 1000;\n      display: flex;\n      flex-direction: column;\n      gap: 0.75rem;\n      max-width: 380px;\n    }\n\n    .toast {\n      background: var(--bg-secondary);\n      border: 1px solid var(--border);\n      border-left: 4px solid var(--accent-teal);\n      border-radius: var(--radius);\n      padding: 1rem 1.25rem;\n      display: flex;\n      align-items: center;\n      gap: 0.75rem;\n      box-shadow: var(--shadow);\n      animation: slideIn 0.3s ease, fadeOut 0.3s ease 2.7s forwards;\n      max-width: 100%;\n    }\n\n    .toast.success { border-left-color: var(--success); }\n    .toast.error { border-left-color: var(--danger); }\n    .toast.warning { border-left-color: var(--warning); }\n\n    @keyframes slideIn {\n      from { transform: translateX(120%); opacity: 0; }\n      to { transform: translateX(0); opacity: 1; }\n    }\n\n    @keyframes fadeOut {\n      from { opacity: 1; transform: translateX(0); }\n      to { opacity: 0; transform: translateX(20px); }\n    }\n\n    .toast-icon {\n      width: 20px;\n      height: 20px;\n      display: grid;\n      place-items: center;\n      font-weight: 700;\n      border-radius: 50%;\n      font-size: 0.8rem;\n    }\n\n    .toast.success .toast-icon { background: var(--success); color: white; }\n    .toast.error .toast-icon { background: var(--danger); color: white; }\n    .toast.warning .toast-icon { background: var(--warning); color: white; }\n\n    .toast-content { flex: 1; font-size: 0.95rem; }\n    .toast-close {\n      cursor: pointer;\n      opacity: 0.7;\n      transition: var(--transition);\n      padding: 0.25rem;\n    }\n    .toast-close:hover { opacity: 1; }\n\n    \/* ===== MODAL ===== *\/\n    .modal-overlay {\n      position: fixed;\n      inset: 0;\n      background: rgba(0,0,0,0.7);\n      display: none;\n      align-items: center;\n      justify-content: center;\n      z-index: 1000;\n      padding: 1rem;\n      animation: fadeIn 0.2s ease;\n    }\n\n    .modal-overlay.show { display: flex; }\n\n    .modal {\n      background: var(--bg-secondary);\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n      max-width: 600px;\n      width: 100%;\n      max-height: 90vh;\n      overflow-y: auto;\n      animation: modalSlide 0.3s ease;\n    }\n\n    @keyframes modalSlide {\n      from { opacity: 0; transform: translateY(-20px); }\n      to { opacity: 1; transform: translateY(0); }\n    }\n\n    .modal-header {\n      padding: 1.25rem 1.5rem;\n      border-bottom: 1px solid var(--border);\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n    }\n\n    .modal-title { font-weight: 600; font-size: 1.2rem; }\n    .modal-close {\n      background: none;\n      border: none;\n      font-size: 1.5rem;\n      color: var(--text-secondary);\n      cursor: pointer;\n      transition: var(--transition);\n      line-height: 1;\n    }\n    .modal-close:hover { color: var(--danger); }\n\n    .modal-body { padding: 1.5rem; display: flex; flex-direction: column; gap: 1rem; }\n\n    .modal-product {\n      display: grid;\n      grid-template-columns: 140px 1fr;\n      gap: 1.25rem;\n      align-items: start;\n    }\n\n    .modal-product-img {\n      width: 140px;\n      height: 140px;\n      background: var(--bg-tertiary);\n      border-radius: 8px;\n      display: grid;\n      place-items: center;\n      border: 1px dashed var(--border);\n    }\n\n    .modal-product-details h4 { margin-bottom: 0.5rem; }\n    .modal-product-details p { color: var(--text-secondary); font-size: 0.95rem; margin-bottom: 0.75rem; }\n\n    .modal-pricing {\n      display: flex;\n      align-items: center;\n      gap: 0.75rem;\n      margin: 0.5rem 0;\n    }\n\n    .modal-affiliate-link {\n      background: var(--bg-tertiary);\n      padding: 0.875rem;\n      border-radius: 8px;\n      font-family: monospace;\n      font-size: 0.9rem;\n      word-break: break-all;\n      margin: 0.5rem 0;\n    }\n\n    .modal-footer {\n      padding: 1rem 1.5rem;\n      border-top: 1px solid var(--border);\n      display: flex;\n      gap: 0.75rem;\n      justify-content: flex-end;\n    }\n\n    \/* ===== SETTINGS PANEL ===== *\/\n    .settings-panel {\n      background: var(--bg-secondary);\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n      padding: 1.5rem;\n      max-width: 600px;\n    }\n\n    .settings-grid {\n      display: grid;\n      gap: 1.25rem;\n      margin-top: 1rem;\n    }\n\n    .setting-item {\n      display: flex;\n      flex-direction: column;\n      gap: 0.5rem;\n    }\n\n    .setting-item label {\n      font-weight: 500;\n      display: flex;\n      align-items: center;\n      gap: 0.5rem;\n    }\n\n    .setting-item input {\n      padding: 0.75rem 1rem;\n      background: var(--bg-tertiary);\n      border: 1px solid var(--border);\n      border-radius: 8px;\n      color: var(--text-primary);\n      font-family: monospace;\n      font-size: 0.95rem;\n    }\n\n    .setting-item input:focus {\n      outline: none;\n      border-color: var(--accent-teal);\n      box-shadow: 0 0 0 3px var(--accent-teal-glow);\n    }\n\n    .settings-note {\n      font-size: 0.85rem;\n      color: var(--text-secondary);\n      margin-top: 0.25rem;\n    }\n\n    \/* ===== COMMAND PALETTE ===== *\/\n    .command-palette {\n      position: fixed;\n      top: 50%;\n      left: 50%;\n      transform: translate(-50%, -50%) scale(0.95);\n      background: var(--bg-secondary);\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n      width: 90%;\n      max-width: 600px;\n      max-height: 70vh;\n      overflow: hidden;\n      z-index: 1001;\n      display: none;\n      flex-direction: column;\n      animation: modalSlide 0.2s ease forwards;\n      box-shadow: var(--shadow);\n    }\n\n    .command-palette.show {\n      display: flex;\n      transform: translate(-50%, -50%) scale(1);\n    }\n\n    .command-input {\n      padding: 1rem 1.25rem;\n      border-bottom: 1px solid var(--border);\n      display: flex;\n      align-items: center;\n      gap: 0.75rem;\n    }\n\n    .command-input input {\n      flex: 1;\n      background: transparent;\n      border: none;\n      color: var(--text-primary);\n      font-size: 1.1rem;\n      outline: none;\n    }\n\n    .command-input input::placeholder { color: var(--text-secondary); }\n\n    .command-results {\n      overflow-y: auto;\n      padding: 0.5rem;\n      max-height: 400px;\n    }\n\n    .command-item {\n      padding: 0.75rem 1rem;\n      border-radius: 8px;\n      cursor: pointer;\n      display: flex;\n      align-items: center;\n      gap: 0.75rem;\n      transition: var(--transition);\n    }\n\n    .command-item:hover, .command-item.active {\n      background: var(--accent-teal-glow);\n      color: var(--accent-teal);\n    }\n\n    .command-item-icon {\n      width: 28px;\n      height: 28px;\n      background: var(--bg-tertiary);\n      border-radius: 6px;\n      display: grid;\n      place-items: center;\n      font-size: 0.9rem;\n    }\n\n    .command-shortcut {\n      margin-left: auto;\n      font-size: 0.8rem;\n      color: var(--text-secondary);\n      background: var(--bg-tertiary);\n      padding: 2px 6px;\n      border-radius: 4px;\n    }\n\n    \/* ===== MOBILE RESPONSIVE ===== *\/\n    @media (max-width: 768px) {\n      .app-container { grid-template-columns: 1fr; }\n      \n      .sidebar {\n        transform: translateX(-100%);\n        width: 280px;\n      }\n      \n      .sidebar.mobile-open { transform: translateX(0); }\n      \n      .main-content {\n        padding: 1.5rem;\n        padding-left: 1.5rem;\n      }\n      \n      .sidebar.collapsed + .main-content { padding-left: 1.5rem; }\n      \n      .mobile-toggle {\n        display: flex !important;\n        position: fixed;\n        top: 1rem;\n        left: 1rem;\n        z-index: 99;\n        background: var(--bg-secondary);\n        border: 1px solid var(--border);\n        border-radius: 8px;\n        padding: 0.5rem;\n        cursor: pointer;\n      }\n      \n      .preview-section, .modal-product {\n        grid-template-columns: 1fr;\n        text-align: center;\n      }\n      \n      .preview-img, .modal-product-img { margin: 0 auto; }\n      \n      .rec-reason { padding-left: 0; }\n      \n      .recommendation-card {\n        grid-template-columns: 1fr;\n      }\n      \n      .rec-actions {\n        flex-direction: row;\n        align-items: center;\n        justify-content: flex-end;\n      }\n    }\n\n    .mobile-toggle { display: none; }\n\n    \/* ===== UTILS ===== *\/\n    .hidden { display: none !important; }\n    .text-center { text-align: center; }\n    .mt-1 { margin-top: 0.5rem; }\n    .mt-2 { margin-top: 1rem; }\n    .mb-1 { margin-bottom: 0.5rem; }\n    .flex { display: flex; }\n    .items-center { align-items: center; }\n    .justify-between { justify-content: space-between; }\n    .gap-1 { gap: 0.5rem; }\n    .gap-2 { gap: 1rem; }\n  <\/style>\n<\/head>\n<body>\n  <!-- Mobile Sidebar Toggle -->\n  <button class=\"mobile-toggle\" id=\"mobileToggle\" aria-label=\"Toggle menu\">\u2630<\/button>\n\n  <div class=\"app-container\">\n    <!-- SIDEBAR -->\n    <aside class=\"sidebar\" id=\"sidebar\">\n      <div class=\"sidebar-header\">\n        <div class=\"logo\">\n          <div class=\"logo-icon\">\u26a1<\/div>\n          <span>AffiliatePro<\/span>\n        <\/div>\n      <\/div>\n      \n      <nav class=\"nav-menu\">\n        <div class=\"nav-item active\" data-module=\"link-generator\">\n          <span>\ud83d\udd17<\/span> Link Generator\n        <\/div>\n        <div class=\"nav-item\" data-module=\"deal-scanner\">\n          <span>\ud83d\udd25<\/span> Deal Scanner\n        <\/div>\n        <div class=\"nav-item\" data-module=\"product-recommender\">\n          <span>\ud83e\udd16<\/span> AI Advisor\n        <\/div>\n      <\/nav>\n      \n      <div class=\"sidebar-footer\">\n        <button class=\"theme-toggle\" id=\"themeToggle\">\n          <span>\ud83c\udf13<\/span> <span id=\"themeLabel\">Dark Mode<\/span>\n        <\/button>\n        <button class=\"settings-btn\" id=\"settingsBtn\">\n          <span>\u2699\ufe0f<\/span> Settings\n        <\/button>\n      <\/div>\n    <\/aside>\n\n    <!-- MAIN CONTENT -->\n    <main class=\"main-content\">\n      <!-- PAGE HEADER -->\n      <header class=\"page-header\">\n        <h1 class=\"page-title\">\n          <span id=\"pageTitle\">Link Generator<\/span>\n        <\/h1>\n        <button class=\"command-palette-trigger\" id=\"commandTrigger\">\n          <span>\u2318K<\/span> <span>Cerca comandi&#8230;<\/span>\n        <\/button>\n      <\/header>\n\n      <!-- MODULE 1: LINK GENERATOR -->\n      <section id=\"link-generator\" class=\"module active\">\n        <div class=\"link-generator\">\n          <div class=\"input-card\">\n            <div class=\"input-group\">\n              <label for=\"originalUrl\">Incolla l&#8217;URL del prodotto<\/label>\n              <div class=\"url-input-wrapper\">\n                <input type=\"url\" id=\"originalUrl\" class=\"url-input\" \n                       placeholder=\"https:\/\/amazon.it\/dp\/B08XYZ123...\" \n                       value=\"https:\/\/www.amazon.it\/dp\/B09G9FPHY6\">\n                <button class=\"btn\" id=\"generateBtn\">\n                  <span>\u2728<\/span> Genera\n                <\/button>\n              <\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"result-card\" id=\"resultCard\">\n            <div class=\"result-header\">\n              <h3>Link Convertito<\/h3>\n              <span class=\"platform-badge\" id=\"platformBadge\">\n                <span>\ud83d\uded2<\/span> <span id=\"platformName\">Amazon IT<\/span>\n              <\/span>\n            <\/div>\n            \n            <div class=\"generated-link\" id=\"generatedLink\">\n              <iframe loading=\"lazy\" title=\"Apple iPad (9th Generation): with A13 Bionic chip, 10.2-inch Retina Display, 64GB, Wi-Fi, 12MP front\/8MP Back Camera, Touch ID, All-Day Battery Life \u2013 Silver\" type=\"text\/html\" width=\"720\" height=\"550\" frameborder=\"0\" allowfullscreen allow=\"clipboard-write\" style=\"max-width:100%\" src=\"https:\/\/read.amazon.co.uk\/kp\/card?asin=B09G9FPHY6\"><\/iframe>\n            <\/div>\n            \n            <div class=\"preview-section\">\n              <div class=\"preview-img\">\ud83d\udeb4<\/div>\n              <div class=\"preview-info\">\n                <h4 id=\"previewTitle\">Cuffie Bluetooth Sport<\/h4>\n                <p id=\"previewDesc\">Cuffie wireless con cancellazione del rumore, ideali per ciclismo e running.<\/p>\n                <div class=\"deal-pricing\">\n                  <span class=\"price-current\" id=\"previewPrice\">\u20ac89,99<\/span>\n                  <span class=\"price-original\" id=\"previewOriginal\">\u20ac129,99<\/span>\n                  <span class=\"discount-badge\">-31%<\/span>\n                <\/div>\n              <\/div>\n            <\/div>\n            \n            <button class=\"btn copy-btn\" id=\"copyBtn\">\n              \ud83d\udccb Copia Link Affiliato\n            <\/button>\n          <\/div>\n        <\/div>\n      <\/section>\n\n      <!-- MODULE 2: DEAL SCANNER -->\n      <section id=\"deal-scanner\" class=\"module\">\n        <div class=\"deal-scanner\">\n          <!-- Deal of the Day -->\n          <div class=\"deal-of-day\">\n            <div class=\"deal-badge\">\ud83d\udd25 OFFERTA<\/div>\n            <div class=\"deal-card-header\">\n              <span class=\"deal-platform\">Amazon IT<\/span>\n              <span class=\"discount-badge\">-45%<\/span>\n            <\/div>\n            <h3 class=\"deal-title\">Bici Elettrica Pieghevole UrbanX Pro &#8211; Motore 250W, Batteria 36V<\/h3>\n            <div class=\"deal-image\">\ud83d\udeb2\u26a1<\/div>\n            <div class=\"deal-pricing\">\n              <span class=\"price-current\">\u20ac899,00<\/span>\n              <span class=\"price-original\">\u20ac1.599,00<\/span>\n              <span class=\"discount-badge\">Risparmi \u20ac700<\/span>\n            <\/div>\n            <div class=\"countdown\">\n              <span id=\"cdHours\">23<\/span>h\n              <span id=\"cdMinutes\">45<\/span>m\n              <span id=\"cdSeconds\">12<\/span>s\n            <\/div>\n            <button class=\"deal-cta\" data-product=\"urbanx-pro\">\n              \ud83c\udfaf Ottieni Link Affiliato\n            <\/button>\n          <\/div>\n\n          <!-- Filters -->\n          <div class=\"filters-bar\">\n            <div class=\"filter-group\">\n              <label>Categoria<\/label>\n              <select class=\"filter-select\" id=\"filterCategory\">\n                <option value=\"\">Tutte<\/option>\n                <option value=\"ciclismo\">\ud83d\udeb4 Ciclismo<\/option>\n                <option value=\"tech\">\ud83d\udcbb Tech<\/option>\n                <option value=\"elettronica\">\ud83d\udd0c Elettronica<\/option>\n                <option value=\"accessori\">\ud83c\udf92 Accessori<\/option>\n              <\/select>\n            <\/div>\n            <div class=\"filter-group\">\n              <label>Piattaforma<\/label>\n              <select class=\"filter-select\" id=\"filterPlatform\">\n                <option value=\"\">Tutte<\/option>\n                <option value=\"amazon\">Amazon<\/option>\n                <option value=\"aliexpress\">AliExpress<\/option>\n                <option value=\"awin\">Awin<\/option>\n                <option value=\"siroko\">Siroko<\/option>\n              <\/select>\n            <\/div>\n            <div class=\"filter-group\">\n              <label>Sconto min.<\/label>\n              <select class=\"filter-select\" id=\"filterDiscount\">\n                <option value=\"0\">Qualsiasi<\/option>\n                <option value=\"20\">20%+<\/option>\n                <option value=\"40\">40%+<\/option>\n                <option value=\"60\">60%+<\/option>\n              <\/select>\n            <\/div>\n            <div class=\"filter-group\">\n              <label>Prezzo max<\/label>\n              <input type=\"number\" class=\"filter-input\" id=\"filterPrice\" placeholder=\"\u20ac\">\n            <\/div>\n          <\/div>\n\n          <!-- Deals Grid -->\n          <div class=\"deals-grid\" id=\"dealsGrid\">\n            <!-- Skeleton loaders while \"loading\" -->\n          <\/div>\n        <\/div>\n      <\/section>\n\n      <!-- MODULE 3: PRODUCT RECOMMENDER -->\n      <section id=\"product-recommender\" class=\"module\">\n        <div class=\"recommender\">\n          <div class=\"ai-input-card\">\n            <div class=\"ai-prompt-area\">\n              <label for=\"aiPrompt\">Descrivi cosa cerchi (in italiano)<\/label>\n              <textarea class=\"ai-textarea\" id=\"aiPrompt\" \n                        placeholder=\"Es: cerco una bici gravel sotto 1500\u20ac per uso weekend, leggera e con freni a disco...\"><\/textarea>\n              <div class=\"ai-hints\">\n                <span class=\"ai-hint\" data-hint=\"bici gravel sotto 1500\u20ac\">\ud83d\udeb4 Bici gravel budget<\/span>\n                <span class=\"ai-hint\" data-hint=\"cuffie bluetooth sport impermeabili\">\ud83c\udfa7 Cuffie sport<\/span>\n                <span class=\"ai-hint\" data-hint=\"computer da viaggio leggero sotto 800\u20ac\">\ud83d\udcbb Laptop travel<\/span>\n                <span class=\"ai-hint\" data-hint=\"power bank 20000mAh ricarica rapida\">\ud83d\udd0b Power bank<\/span>\n              <\/div>\n              <button class=\"btn\" id=\"aiAnalyzeBtn\" style=\"margin-top: 0.5rem;\">\n                \ud83d\udd0d Analizza e Trova Prodotti\n              <\/button>\n            <\/div>\n          <\/div>\n\n          <div class=\"recommendations-list\" id=\"recommendationsList\">\n            <!-- Results will appear here -->\n          <\/div>\n        <\/div>\n      <\/section>\n    <\/main>\n  <\/div>\n\n  <!-- TOAST CONTAINER -->\n  <div class=\"toast-container\" id=\"toastContainer\"><\/div>\n\n  <!-- PRODUCT MODAL -->\n  <div class=\"modal-overlay\" id=\"productModal\">\n    <div class=\"modal\">\n      <div class=\"modal-header\">\n        <h3 class=\"modal-title\">Anteprima Prodotto<\/h3>\n        <button class=\"modal-close\" id=\"modalClose\">&times;<\/button>\n      <\/div>\n      <div class=\"modal-body\">\n        <div class=\"modal-product\">\n          <div class=\"modal-product-img\">\ud83d\udce6<\/div>\n          <div class=\"modal-product-details\">\n            <h4 id=\"modalTitle\">Nome Prodotto<\/h4>\n            <p id=\"modalDesc\">Descrizione del prodotto con caratteristiche principali e vantaggi per l&#8217;utente finale.<\/p>\n            <div class=\"modal-pricing\">\n              <span class=\"price-current\" id=\"modalPrice\">\u20ac0,00<\/span>\n              <span class=\"price-original\" id=\"modalOriginal\">\u20ac0,00<\/span>\n              <span class=\"discount-badge\" id=\"modalDiscount\">-0%<\/span>\n            <\/div>\n            <span class=\"platform-badge\" id=\"modalPlatform\">\ud83d\uded2 Piattaforma<\/span>\n          <\/div>\n        <\/div>\n        <div>\n          <strong>Link Affiliato:<\/strong>\n          <div class=\"modal-affiliate-link\" id=\"modalAffiliateLink\">https:\/\/&#8230;<\/div>\n        <\/div>\n      <\/div>\n      <div class=\"modal-footer\">\n        <button class=\"btn btn-secondary btn-sm\" id=\"modalCancel\">Annulla<\/button>\n        <button class=\"btn btn-sm\" id=\"modalCopy\">\ud83d\udccb Copia &#038; Vai<\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- COMMAND PALETTE -->\n  <div class=\"command-palette\" id=\"commandPalette\">\n    <div class=\"command-input\">\n      <span>\u2318<\/span>\n      <input type=\"text\" id=\"commandInput\" placeholder=\"Cerca comandi o prodotti...\">\n    <\/div>\n    <div class=\"command-results\" id=\"commandResults\">\n      <div class=\"command-item\" data-action=\"link-generator\">\n        <div class=\"command-item-icon\">\ud83d\udd17<\/div>\n        <span>Apri Link Generator<\/span>\n        <span class=\"command-shortcut\">Ctrl+1<\/span>\n      <\/div>\n      <div class=\"command-item\" data-action=\"deal-scanner\">\n        <div class=\"command-item-icon\">\ud83d\udd25<\/div>\n        <span>Apri Deal Scanner<\/span>\n        <span class=\"command-shortcut\">Ctrl+2<\/span>\n      <\/div>\n      <div class=\"command-item\" data-action=\"product-recommender\">\n        <div class=\"command-item-icon\">\ud83e\udd16<\/div>\n        <span>Apri AI Advisor<\/span>\n        <span class=\"command-shortcut\">Ctrl+3<\/span>\n      <\/div>\n      <div class=\"command-item\" data-action=\"settings\">\n        <div class=\"command-item-icon\">\u2699\ufe0f<\/div>\n        <span>Apri Settings<\/span>\n        <span class=\"command-shortcut\">Ctrl+,<\/span>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- SETTINGS MODAL (Inline) -->\n  <div class=\"modal-overlay\" id=\"settingsModal\">\n    <div class=\"modal\">\n      <div class=\"modal-header\">\n        <h3 class=\"modal-title\">\u2699\ufe0f Impostazioni Affiliate<\/h3>\n        <button class=\"modal-close\" id=\"settingsClose\">&times;<\/button>\n      <\/div>\n      <div class=\"modal-body\">\n        <div class=\"settings-panel\">\n          <p style=\"color: var(--text-secondary); margin-bottom: 1rem;\">\n            Inserisci i tuoi ID di affiliazione. Vengono salvati in memoria JavaScript.\n          <\/p>\n          <div class=\"settings-grid\">\n            <div class=\"setting-item\">\n              <label>\ud83d\uded2 Amazon Tag (IT\/EU)<\/label>\n              <input type=\"text\" id=\"amazonTag\" placeholder=\"tuotag-21\" value=\"mionome-21\">\n              <span class=\"settings-note\">Formato: tuotag-21<\/span>\n            <\/div>\n            <div class=\"setting-item\">\n              <label>\ud83c\udf10 Awin Publisher ID<\/label>\n              <input type=\"text\" id=\"awinId\" placeholder=\"123456\" value=\"987654\">\n              <span class=\"settings-note\">Il tuo ID editore Awin<\/span>\n            <\/div>\n            <div class=\"setting-item\">\n              <label>\ud83e\udde5 Siroko Ref Code<\/label>\n              <input type=\"text\" id=\"sirokoRef\" placeholder=\"TUOREF\" value=\"AFFPRO20\">\n              <span class=\"settings-note\">Codice referral personale<\/span>\n            <\/div>\n            <div class=\"setting-item\">\n              <label>\ud83d\udd17 AliExpress Affiliate Key<\/label>\n              <input type=\"text\" id=\"aliexpressKey\" placeholder=\"aff_fcid value\">\n              <span class=\"settings-note\">Da AliExpress Portals API<\/span>\n            <\/div>\n            <div class=\"setting-item\">\n              <label>\ud83c\udff7\ufe0f UTM Source (Generic)<\/label>\n              <input type=\"text\" id=\"utmSource\" placeholder=\"affiliate-manager\" value=\"affiliatemanager\">\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n      <div class=\"modal-footer\">\n        <button class=\"btn btn-secondary\" id=\"settingsCancel\">Annulla<\/button>\n        <button class=\"btn\" id=\"settingsSave\">\ud83d\udcbe Salva Impostazioni<\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <script>\n    \/* ===== AFFILIATE MANAGER PRO - VANILLA JS ES6+ ===== *\/\n    \n    \/\/ ===== STATE MANAGEMENT =====\n    const AppState = {\n      theme: localStorage.getItem('theme') || 'dark',\n      settings: {\n        amazonTag: 'mionome-21',\n        awinId: '987654',\n        sirokoRef: 'AFFPRO20',\n        aliexpressKey: '',\n        utmSource: 'affiliatemanager'\n      },\n      currentModule: 'link-generator',\n      deals: [] \/\/ Will be populated with mock data\n    };\n\n    \/\/ ===== PLATFORM CONFIG =====\n    const PLATFORMS = {\n      'amazon.it': { \n        name: 'Amazon IT', \n        icon: '\ud83d\uded2', \n        param: 'tag', \n        format: (url, tag) => {\n          const clean = removeExistingParams(url, ['tag', 'psc', 'linkCode']);\n          return `${clean}${clean.includes('?') ? '&' : '?'}tag=${tag}`;\n        }\n      },\n      'amazon.com': { \n        name: 'Amazon US', \n        icon: '\ud83d\uded2', \n        param: 'tag', \n        format: (url, tag) => {\n          const clean = removeExistingParams(url, ['tag', 'psc', 'linkCode']);\n          return `${clean}${clean.includes('?') ? '&' : '?'}tag=${tag}`;\n        }\n      },\n      'amazon.de': { \n        name: 'Amazon DE', \n        icon: '\ud83d\uded2', \n        param: 'tag', \n        format: (url, tag) => {\n          const clean = removeExistingParams(url, ['tag', 'psc', 'linkCode']);\n          return `${clean}${clean.includes('?') ? '&' : '?'}tag=${tag}`;\n        }\n      },\n      'aliexpress.com': {\n        name: 'AliExpress',\n        icon: '\ud83d\udecd\ufe0f',\n        param: 'aff_fcid',\n        format: (url, key) => {\n          const clean = removeExistingParams(url, ['aff_fcid', 'aff_trace_key', 'aff_platform']);\n          const separator = clean.includes('?') ? '&' : '?';\n          return `${clean}${separator}aff_fcid=${key}&aff_trace_key=portal&aff_platform=portals`;\n        }\n      },\n      'awin1.com': {\n        name: 'Awin',\n        icon: '\ud83d\udd17',\n        param: 'awinaffid',\n        format: (url, publisherId) => {\n          const encodedUrl = encodeURIComponent(url.split('?')[0]);\n          return `https:\/\/www.awin1.com\/cread.php?awinmid=12345&awinaffid=${publisherId}&ued=${encodedUrl}`;\n        }\n      },\n      'siroko.com': {\n        name: 'Siroko',\n        icon: '\ud83e\udde5',\n        param: 'ref',\n        format: (url, ref) => {\n          const clean = removeExistingParams(url, ['ref']);\n          return `${clean}${clean.includes('?') ? '&' : '?'}ref=${ref}`;\n        }\n      }\n    };\n\n    \/\/ ===== MOCK DEALS DATA (20+ items, cycling + tech focus) =====\n    const MOCK_DEALS = [\n      { id: 1, title: \"Cuffie Bluetooth Sport IPX7 - Cancellazione Rumore\", platform: \"amazon\", category: \"accessori\", price: 49.99, original: 89.99, image: \"\ud83c\udfa7\", url: \"https:\/\/amazon.it\/dp\/B09X1Y2Z3A\", discount: 44 },\n      { id: 2, title: \"Computer Bordo GPS Garmin Edge 530\", platform: \"amazon\", category: \"ciclismo\", price: 279.00, original: 349.00, image: \"\ud83d\udcf1\", url: \"https:\/\/amazon.it\/dp\/B07QXYZ123\", discount: 20 },\n      { id: 3, title: \"Power Bank 20000mAh Ricarica Rapida 65W\", platform: \"aliexpress\", category: \"tech\", price: 35.90, original: 79.90, image: \"\ud83d\udd0b\", url: \"https:\/\/aliexpress.com\/item\/1005004ABC\", discount: 55 },\n      { id: 4, title: \"Giacca Ciclismo Impermeabile Leggera\", platform: \"siroko\", category: \"ciclismo\", price: 129.00, original: 189.00, image: \"\ud83e\udde5\", url: \"https:\/\/siroko.com\/it\/prodotto\/jacket-pro\", discount: 32 },\n      { id: 5, title: \"Luci Bici USB Ricaricabili Set Ant+Post\", platform: \"amazon\", category: \"ciclismo\", price: 24.99, original: 45.99, image: \"\ud83d\udca1\", url: \"https:\/\/amazon.it\/dp\/B08LIGHTS1\", discount: 46 },\n      { id: 6, title: \"Smartwatch Sport GPS Multisport\", platform: \"awin\", category: \"tech\", price: 159.00, original: 249.00, image: \"\u231a\", url: \"https:\/\/brand.com\/smartwatch-pro\", discount: 36 },\n      { id: 7, title: \"Borraccia Termica Acciaio 750ml\", platform: \"amazon\", category: \"accessori\", price: 19.99, original: 34.99, image: \"\ud83e\udd64\", url: \"https:\/\/amazon.it\/dp\/B09BOTTLE1\", discount: 43 },\n      { id: 8, title: \"Tapis Roulant Pieghevole Elettrico 12km\/h\", platform: \"aliexpress\", category: \"elettronica\", price: 289.00, original: 599.00, image: \"\ud83c\udfc3\", url: \"https:\/\/aliexpress.com\/item\/1005005TREAD\", discount: 52 },\n      { id: 9, title: \"Casco Bici Aerodinamico con Visiera Magnetica\", platform: \"amazon\", category: \"ciclismo\", price: 89.90, original: 139.90, image: \"\u26d1\ufe0f\", url: \"https:\/\/amazon.it\/dp\/B09HELMET1\", discount: 36 },\n      { id: 10, title: \"Tracker GPS per Bici Anti-Furto\", platform: \"awin\", category: \"ciclismo\", price: 45.00, original: 79.00, image: \"\ud83d\udccd\", url: \"https:\/\/tracker-brand.com\/bike-gps\", discount: 43 },\n      { id: 11, title: \"Cavo USB-C Ricarica Rapida 100W 2m\", platform: \"aliexpress\", category: \"tech\", price: 8.99, original: 19.99, image: \"\ud83d\udd0c\", url: \"https:\/\/aliexpress.com\/item\/1005006CABLE\", discount: 55 },\n      { id: 12, title: \"Guanti Ciclismo Invernali Touchscreen\", platform: \"siroko\", category: \"ciclismo\", price: 39.00, original: 59.00, image: \"\ud83e\udde4\", url: \"https:\/\/siroko.com\/it\/prodotto\/gloves-winter\", discount: 34 },\n      { id: 13, title: \"Action Camera 4K Stabilizzata Impermeabile\", platform: \"amazon\", category: \"elettronica\", price: 149.00, original: 249.00, image: \"\ud83d\udcf9\", url: \"https:\/\/amazon.it\/dp\/B09CAMERA1\", discount: 40 },\n      { id: 14, title: \"Sella Bici Ergonomica con Gel\", platform: \"amazon\", category: \"ciclismo\", price: 34.99, original: 59.99, image: \"\ud83e\ude91\", url: \"https:\/\/amazon.it\/dp\/B09SADDLE1\", discount: 42 },\n      { id: 15, title: \"Adattatore Bluetooth 5.3 USB per PC\", platform: \"aliexpress\", category: \"tech\", price: 6.50, original: 15.90, image: \"\ud83d\udcf6\", url: \"https:\/\/aliexpress.com\/item\/1005007BTUSB\", discount: 59 },\n      { id: 16, title: \"Zaino Ciclismo Idrorepellente 20L\", platform: \"siroko\", category: \"ciclismo\", price: 79.00, original: 119.00, image: \"\ud83c\udf92\", url: \"https:\/\/siroko.com\/it\/prodotto\/backpack-20l\", discount: 34 },\n      { id: 17, title: \"Monitor Frequenza Cardiaca Petto Bluetooth\", platform: \"awin\", category: \"ciclismo\", price: 55.00, original: 89.00, image: \"\u2764\ufe0f\", url: \"https:\/\/hrm-brand.com\/chest-strap\", discount: 38 },\n      { id: 18, title: \"Supporto Telefono Bici Rotazione 360\u00b0\", platform: \"amazon\", category: \"accessori\", price: 14.99, original: 29.99, image: \"\ud83d\udcf1\", url: \"https:\/\/amazon.it\/dp\/B09MOUNT1\", discount: 50 },\n      { id: 19, title: \"Tastiera Meccanica Wireless RGB Compatta\", platform: \"aliexpress\", category: \"tech\", price: 45.90, original: 89.90, image: \"\u2328\ufe0f\", url: \"https:\/\/aliexpress.com\/item\/1005008KEYB\", discount: 49 },\n      { id: 20, title: \"Pompa Bici Elettrica Portatile 150PSI\", platform: \"amazon\", category: \"ciclismo\", price: 39.99, original: 69.99, image: \"\ud83d\udca8\", url: \"https:\/\/amazon.it\/dp\/B09PUMP1\", discount: 43 },\n      { id: 21, title: \"Occhiali Ciclismo Fotocromatici UV400\", platform: \"siroko\", category: \"ciclismo\", price: 59.00, original: 89.00, image: \"\ud83d\udd76\ufe0f\", url: \"https:\/\/siroko.com\/it\/prodotto\/glasses-photo\", discount: 34 },\n      { id: 22, title: \"Hub USB-C 7-in-1 HDMI 4K\", platform: \"aliexpress\", category: \"tech\", price: 22.90, original: 49.90, image: \"\ud83d\udd17\", url: \"https:\/\/aliexpress.com\/item\/1005009HUB7\", discount: 54 }\n    ];\n\n    \/\/ ===== UTILITY FUNCTIONS =====\n    function removeExistingParams(url, paramsToRemove) {\n      try {\n        const urlObj = new URL(url);\n        paramsToRemove.forEach(p => urlObj.searchParams.delete(p));\n        return urlObj.origin + urlObj.pathname + (urlObj.search || '');\n      } catch {\n        return url.split('?')[0];\n      }\n    }\n\n    function detectPlatform(url) {\n      const domain = url.toLowerCase().match(\/(?:https?:\\\/\\\/)?(?:www\\.)?([^\\\/\\?#]+)\/)?.[1] || '';\n      for (const [key, config] of Object.entries(PLATFORMS)) {\n        if (domain.includes(key)) return { key, ...config };\n      }\n      return { key: 'generic', name: 'Generic', icon: '\ud83d\udd17', param: 'utm_source', format: genericFormat };\n    }\n\n    function genericFormat(url, utmSource) {\n      const clean = removeExistingParams(url, ['utm_source', 'utm_medium', 'utm_campaign']);\n      const separator = clean.includes('?') ? '&' : '?';\n      return `${clean}${separator}utm_source=${utmSource}&utm_medium=affiliate&utm_campaign=manager`;\n    }\n\n    function showToast(message, type = 'success') {\n      const container = document.getElementById('toastContainer');\n      const toast = document.createElement('div');\n      toast.className = `toast ${type}`;\n      toast.innerHTML = `\n        <div class=\"toast-icon\">${type === 'success' ? '\u2713' : type === 'error' ? '\u2715' : '!'}<\/div>\n        <div class=\"toast-content\">${message}<\/div>\n        <div class=\"toast-close\" onclick=\"this.parentElement.remove()\">\u2715<\/div>\n      `;\n      container.appendChild(toast);\n      setTimeout(() => toast.remove(), 3000);\n    }\n\n    function copyToClipboard(text) {\n      navigator.clipboard.writeText(text).then(() => {\n        showToast('Link copiato negli appunti! \u2713', 'success');\n      }).catch(() => {\n        showToast('Errore durante la copia', 'error');\n      });\n    }\n\n    \/\/ ===== MODULE 1: LINK GENERATOR =====\n    function generateAffiliateLink() {\n      const url = document.getElementById('originalUrl').value.trim();\n      if (!url) { showToast('Inserisci un URL valido', 'error'); return; }\n\n      const platform = detectPlatform(url);\n      const settings = AppState.settings;\n      \n      let affiliateUrl;\n      switch(platform.key) {\n        case 'amazon.it':\n        case 'amazon.com':\n        case 'amazon.de':\n          affiliateUrl = platform.format(url, settings.amazonTag);\n          break;\n        case 'aliexpress.com':\n          affiliateUrl = platform.format(url, settings.aliexpressKey || 'demo_key');\n          break;\n        case 'awin1.com':\n          affiliateUrl = platform.format(url, settings.awinId);\n          break;\n        case 'siroko.com':\n          affiliateUrl = platform.format(url, settings.sirokoRef);\n          break;\n        default:\n          affiliateUrl = platform.format(url, settings.utmSource);\n      }\n\n      \/\/ Update UI\n      document.getElementById('platformBadge').innerHTML = `<span>${platform.icon}<\/span> ${platform.name}`;\n      document.getElementById('platformName').textContent = platform.name;\n      document.getElementById('generatedLink').textContent = affiliateUrl;\n      document.getElementById('previewTitle').textContent = `Prodotto da ${platform.name}`;\n      document.getElementById('previewDesc').textContent = 'Anteprima generata automaticamente. Clicca \"Copia\" per usare il link affiliato.';\n      document.getElementById('previewPrice').textContent = '\u20acXX,XX';\n      document.getElementById('previewOriginal').textContent = '\u20acXX,XX';\n      \n      document.getElementById('resultCard').classList.add('show');\n      \n      \/\/ Setup copy button\n      document.getElementById('copyBtn').onclick = () => copyToClipboard(affiliateUrl);\n      \n      showToast('Link generato con successo! \ud83c\udfaf', 'success');\n    }\n\n    \/\/ ===== MODULE 2: DEAL SCANNER =====\n    function renderDeals(deals = MOCK_DEALS) {\n      const grid = document.getElementById('dealsGrid');\n      grid.innerHTML = '';\n      \n      deals.forEach(deal => {\n        const platformConfig = Object.values(PLATFORMS).find(p => deal.platform.includes(p.name.toLowerCase().split(' ')[0])) || PLATFORMS['amazon.it'];\n        const card = document.createElement('div');\n        card.className = 'deal-card';\n        card.innerHTML = `\n          <div class=\"deal-card-header\">\n            <span class=\"deal-platform\">${platformConfig.icon} ${deal.platform.toUpperCase()}<\/span>\n            <span class=\"discount-badge\">-${deal.discount}%<\/span>\n          <\/div>\n          <h3 class=\"deal-title\">${deal.title}<\/h3>\n          <div class=\"deal-image\">${deal.image}<\/div>\n          <div class=\"deal-pricing\">\n            <span class=\"price-current\">\u20ac${deal.price.toFixed(2)}<\/span>\n            <span class=\"price-original\">\u20ac${deal.original.toFixed(2)}<\/span>\n          <\/div>\n          <button class=\"deal-cta\" data-url=\"${deal.url}\" data-title=\"${deal.title}\" data-price=\"${deal.price}\">\n            \ud83c\udfaf Ottieni Link Affiliato\n          <\/button>\n        `;\n        grid.appendChild(card);\n      });\n\n      \/\/ Add click handlers\n      grid.querySelectorAll('.deal-cta').forEach(btn => {\n        btn.onclick = (e) => {\n          e.stopPropagation();\n          const url = btn.dataset.url;\n          const title = btn.dataset.title;\n          const price = btn.dataset.price;\n          \n          \/\/ Generate affiliate link\n          const platform = detectPlatform(url);\n          const affiliateUrl = platform.format(url, AppState.settings[platform.param.replace('aff_', '') + (platform.key.includes('amazon') ? 'Tag' : platform.key.includes('awin') ? 'Id' : platform.key.includes('siroko') ? 'Ref' : 'Key')] || 'demo');\n          \n          \/\/ Show modal\n          document.getElementById('modalTitle').textContent = title;\n          document.getElementById('modalPrice').textContent = `\u20ac${price}`;\n          document.getElementById('modalAffiliateLink').textContent = affiliateUrl;\n          document.getElementById('productModal').classList.add('show');\n          \n          document.getElementById('modalCopy').onclick = () => {\n            copyToClipboard(affiliateUrl);\n            document.getElementById('productModal').classList.remove('show');\n          };\n        };\n      });\n    }\n\n    function filterDeals() {\n      const category = document.getElementById('filterCategory').value;\n      const platform = document.getElementById('filterPlatform').value;\n      const minDiscount = parseInt(document.getElementById('filterDiscount').value) || 0;\n      const maxPrice = parseFloat(document.getElementById('filterPrice').value) || Infinity;\n\n      const filtered = MOCK_DEALS.filter(deal => {\n        const matchesCategory = !category || deal.category === category;\n        const matchesPlatform = !platform || deal.platform === platform;\n        const matchesDiscount = deal.discount >= minDiscount;\n        const matchesPrice = deal.price <= maxPrice;\n        return matchesCategory &#038;&#038; matchesPlatform &#038;&#038; matchesDiscount &#038;&#038; matchesPrice;\n      });\n\n      renderDeals(filtered);\n    }\n\n    \/\/ ===== MODULE 3: AI PRODUCT RECOMMENDER =====\n    function parseUserQuery(query) {\n      const lower = query.toLowerCase();\n      const parsed = {\n        category: null,\n        budget: null,\n        keywords: []\n      };\n\n      \/\/ Extract budget\n      const budgetMatch = lower.match(\/(?:sotto|under|meno di|max|massimo)?\\s*\u20ac?\\s*(\\d{2,4})\/);\n      if (budgetMatch) parsed.budget = parseInt(budgetMatch[1]);\n\n      \/\/ Extract category\n      const categories = {\n        'gravel': 'ciclismo', 'bici': 'ciclismo', 'ciclismo': 'ciclismo', 'corsa': 'ciclismo',\n        'cuffie': 'audio', 'bluetooth': 'tech', 'wireless': 'tech', 'laptop': 'tech', 'computer': 'tech',\n        'power bank': 'accessori', 'batteria': 'accessori', 'impermeabil': 'accessori'\n      };\n      \n      for (const [key, cat] of Object.entries(categories)) {\n        if (lower.includes(key)) {\n          parsed.category = cat;\n          break;\n        }\n      }\n\n      \/\/ Extract keywords\n      parsed.keywords = lower.split(\/[\\s,;]+\/).filter(w => \n        w.length > 3 && !['cerco', 'una', 'un', 'per', 'uso', 'con', 'e', 'o', 'sotto', 'sopra'].includes(w)\n      );\n\n      return parsed;\n    }\n\n    function calculateCompatibility(product, parsed) {\n      let score = 50; \/\/ Base score\n      \n      \/\/ Category match (+30)\n      if (parsed.category && product.category === parsed.category) score += 30;\n      \n      \/\/ Budget fit (+20 if within budget)\n      if (parsed.budget && product.price <= parsed.budget) score += 20;\n      else if (parsed.budget &#038;&#038; product.price > parsed.budget * 1.2) score -= 15;\n      \n      \/\/ Keyword overlap (+5 per match, max +15)\n      const keywordMatches = parsed.keywords.filter(k => \n        product.title.toLowerCase().includes(k) || product.category.includes(k)\n      ).length;\n      score += Math.min(keywordMatches * 5, 15);\n      \n      return Math.min(Math.max(score, 10), 99);\n    }\n\n    function generateRecommendations(query) {\n      const parsed = parseUserQuery(query);\n      const scored = MOCK_DEALS.map(p => ({\n        ...p,\n        score: calculateCompatibility(p, parsed),\n        reason: generateReason(p, parsed)\n      })).filter(p => p.score >= 40).sort((a, b) => b.score - a.score).slice(0, 7);\n\n      const container = document.getElementById('recommendationsList');\n      container.innerHTML = '';\n\n      if (scored.length === 0) {\n        container.innerHTML = '<p style=\"text-align:center;color:var(--text-secondary);padding:2rem;\">Nessun prodotto trovato. Prova a modificare la ricerca.<\/p>';\n        return;\n      }\n\n      scored.forEach(product => {\n        const platformConfig = Object.values(PLATFORMS).find(p => product.platform.includes(p.name.toLowerCase().split(' ')[0])) || PLATFORMS['amazon.it'];\n        const affiliateUrl = platformConfig.format(product.url, AppState.settings[platformConfig.param.replace('aff_', '') + (platformConfig.key.includes('amazon') ? 'Tag' : platformConfig.key.includes('awin') ? 'Id' : platformConfig.key.includes('siroko') ? 'Ref' : 'Key')] || 'demo');\n        \n        const card = document.createElement('div');\n        card.className = 'recommendation-card';\n        card.innerHTML = `\n          <div class=\"rec-content\">\n            <div class=\"rec-header\">\n              <h4 class=\"rec-title\">${product.title}<\/h4>\n              <span class=\"platform-badge\">${platformConfig.icon} ${product.platform.toUpperCase()}<\/span>\n            <\/div>\n            <div class=\"compatibility-bar\">\n              <span class=\"compat-label\">Compatibilit\u00e0<\/span>\n              <div class=\"compat-track\">\n                <div class=\"compat-fill\" style=\"width: ${product.score}%\"><\/div>\n              <\/div>\n              <span class=\"compat-percent\">${product.score}%<\/span>\n            <\/div>\n            <p class=\"rec-reason\">\u2728 ${product.reason}<\/p>\n          <\/div>\n          <div class=\"rec-actions\">\n            <button class=\"btn btn-sm\" onclick=\"copyToClipboard(\\`${affiliateUrl}\\')\">\ud83d\udd17 Link<\/button>\n            <button class=\"btn btn-sm btn-share\" onclick=\"shareRecommendation(\\`${product.title}\\`, \\`${affiliateUrl}\\`)\">\ud83d\udce4 Condividi<\/button>\n          <\/div>\n        `;\n        container.appendChild(card);\n      });\n    }\n\n    function generateReason(product, parsed) {\n      const reasons = [];\n      if (parsed.category && product.category === parsed.category) reasons.push(`categoria ${parsed.category}`);\n      if (parsed.budget) {\n        if (product.price <= parsed.budget) reasons.push(`entro budget`);\n        else reasons.push(`leggermente sopra budget ma ottimo valore`);\n      }\n      if (product.discount >= 40) reasons.push(`sconto elevato ${product.discount}%`);\n      if (reasons.length === 0) reasons.push('corrispondenza keyword');\n      return `Scelto perch\u00e9: ${reasons.join(', ')}`;\n    }\n\n    function shareRecommendation(title, url) {\n      const text = `\ud83c\udfaf Consiglio AffiliatePro:\\n\\n${title}\\n\ud83d\udcb0 Link: ${url}\\n\\nGenerato con Affiliate Manager Pro \u26a1`;\n      \n      if (navigator.share) {\n        navigator.share({ title: 'Consiglio Prodotto', text }).catch(() => copyToClipboard(text));\n      } else {\n        copyToClipboard(text);\n        showToast('Testo consiglio copiato! Incolla dove vuoi \ud83d\udccb', 'success');\n      }\n    }\n\n    \/\/ ===== COUNTDOWN TIMER (Deal of the Day) =====\n    function startCountdown() {\n      const end = new Date();\n      end.setHours(23, 59, 59, 999);\n      \n      function update() {\n        const now = new Date();\n        const diff = end - now;\n        \n        if (diff <= 0) {\n          document.getElementById('cdHours').textContent = '00';\n          document.getElementById('cdMinutes').textContent = '00';\n          document.getElementById('cdSeconds').textContent = '00';\n          return;\n        }\n        \n        const h = Math.floor(diff \/ 3600000);\n        const m = Math.floor((diff % 3600000) \/ 60000);\n        const s = Math.floor((diff % 60000) \/ 1000);\n        \n        document.getElementById('cdHours').textContent = String(h).padStart(2, '0');\n        document.getElementById('cdMinutes').textContent = String(m).padStart(2, '0');\n        document.getElementById('cdSeconds').textContent = String(s).padStart(2, '0');\n      }\n      \n      update();\n      setInterval(update, 1000);\n    }\n\n    \/\/ ===== THEME TOGGLE =====\n    function applyTheme(theme) {\n      document.documentElement.setAttribute('data-theme', theme);\n      document.getElementById('themeLabel').textContent = theme === 'dark' ? 'Dark Mode' : 'Light Mode';\n      localStorage.setItem('theme', theme);\n    }\n\n    \/\/ ===== NAVIGATION =====\n    function switchModule(moduleId) {\n      \/\/ Update nav\n      document.querySelectorAll('.nav-item').forEach(item => {\n        item.classList.toggle('active', item.dataset.module === moduleId);\n      });\n      \n      \/\/ Update module visibility\n      document.querySelectorAll('.module').forEach(mod => {\n        mod.classList.toggle('active', mod.id === moduleId);\n      });\n      \n      \/\/ Update title\n      const titles = {\n        'link-generator': '\ud83d\udd17 Link Generator',\n        'deal-scanner': '\ud83d\udd25 Deal Scanner',\n        'product-recommender': '\ud83e\udd16 AI Advisor'\n      };\n      document.getElementById('pageTitle').innerHTML = titles[moduleId] || 'AffiliatePro';\n      \n      AppState.currentModule = moduleId;\n      \n      \/\/ Close mobile sidebar\n      document.getElementById('sidebar').classList.remove('mobile-open');\n    }\n\n    \/\/ ===== COMMAND PALETTE =====\n    function toggleCommandPalette(show) {\n      const palette = document.getElementById('commandPalette');\n      const input = document.getElementById('commandInput');\n      \n      if (show) {\n        palette.classList.add('show');\n        input.focus();\n        input.value = '';\n      } else {\n        palette.classList.remove('show');\n      }\n    }\n\n    \/\/ ===== INITIALIZATION =====\n    function init() {\n      \/\/ Apply saved theme\n      applyTheme(AppState.theme);\n      \n      \/\/ Load settings from memory (could be extended to localStorage)\n      Object.entries(AppState.settings).forEach(([key, value]) => {\n        const input = document.getElementById(key);\n        if (input) input.value = value;\n      });\n\n      \/\/ Event Listeners\n      document.getElementById('generateBtn').onclick = generateAffiliateLink;\n      document.getElementById('originalUrl').onkeypress = (e) => e.key === 'Enter' && generateAffiliateLink();\n      \n      \/\/ Nav\n      document.querySelectorAll('.nav-item').forEach(item => {\n        item.onclick = () => switchModule(item.dataset.module);\n      });\n      \n      \/\/ Theme\n      document.getElementById('themeToggle').onclick = () => {\n        AppState.theme = AppState.theme === 'dark' ? 'light' : 'dark';\n        applyTheme(AppState.theme);\n      };\n      \n      \/\/ Settings\n      document.getElementById('settingsBtn').onclick = () => {\n        document.getElementById('settingsModal').classList.add('show');\n      };\n      document.getElementById('settingsClose').onclick = \n      document.getElementById('settingsCancel').onclick = () => {\n        document.getElementById('settingsModal').classList.remove('show');\n      };\n      document.getElementById('settingsSave').onclick = () => {\n        ['amazonTag', 'awinId', 'sirokoRef', 'aliexpressKey', 'utmSource'].forEach(key => {\n          const val = document.getElementById(key).value;\n          if (val) AppState.settings[key] = val;\n        });\n        document.getElementById('settingsModal').classList.remove('show');\n        showToast('Impostazioni salvate! \u2713', 'success');\n      };\n      \n      \/\/ Modal\n      document.getElementById('modalClose').onclick = \n      document.getElementById('modalCancel').onclick = \n      document.getElementById('productModal').onclick = (e) => {\n        if (e.target.id === 'productModal' || e.target.closest('.modal-close, #modalCancel')) {\n          document.getElementById('productModal').classList.remove('show');\n        }\n      };\n      \n      \/\/ Command Palette\n      document.getElementById('commandTrigger').onclick = () => toggleCommandPalette(true);\n      document.getElementById('commandPalette').onclick = (e) => {\n        if (e.target.id === 'commandPalette') toggleCommandPalette(false);\n      };\n      document.getElementById('commandInput').onkeydown = (e) => {\n        if (e.key === 'Escape') toggleCommandPalette(false);\n      };\n      document.querySelectorAll('.command-item').forEach(item => {\n        item.onclick = () => {\n          const action = item.dataset.action;\n          if (action.startsWith('link') || action.startsWith('deal') || action.startsWith('product')) {\n            switchModule(action);\n          } else if (action === 'settings') {\n            document.getElementById('settingsModal').classList.add('show');\n          }\n          toggleCommandPalette(false);\n        };\n      });\n      \n      \/\/ AI Recommender\n      document.getElementById('aiAnalyzeBtn').onclick = () => {\n        const query = document.getElementById('aiPrompt').value.trim();\n        if (!query) { showToast('Descrivi cosa cerchi!', 'warning'); return; }\n        generateRecommendations(query);\n      };\n      document.querySelectorAll('.ai-hint').forEach(hint => {\n        hint.onclick = () => {\n          document.getElementById('aiPrompt').value = hint.dataset.hint;\n          generateRecommendations(hint.dataset.hint);\n        };\n      });\n      \n      \/\/ Deal Filters\n      ['filterCategory', 'filterPlatform', 'filterDiscount', 'filterPrice'].forEach(id => {\n        document.getElementById(id).onchange = filterDeals;\n      });\n      \n      \/\/ Mobile Toggle\n      document.getElementById('mobileToggle').onclick = () => {\n        document.getElementById('sidebar').classList.toggle('mobile-open');\n      };\n      \n      \/\/ Keyboard shortcuts\n      document.addEventListener('keydown', (e) => {\n        if ((e.ctrlKey || e.metaKey) && e.key === 'k') {\n          e.preventDefault();\n          toggleCommandPalette(true);\n        }\n        if (e.key === 'Escape') {\n          toggleCommandPalette(false);\n          document.getElementById('productModal').classList.remove('show');\n          document.getElementById('settingsModal').classList.remove('show');\n        }\n        \/\/ Module shortcuts\n        if (e.ctrlKey && e.key === '1') switchModule('link-generator');\n        if (e.ctrlKey && e.key === '2') switchModule('deal-scanner');\n        if (e.ctrlKey && e.key === '3') switchModule('product-recommender');\n        if (e.ctrlKey && e.key === ',') document.getElementById('settingsModal').classList.add('show');\n      });\n      \n      \/\/ Initial render\n      renderDeals();\n      startCountdown();\n      \n      \/\/ Auto-generate for demo\n      setTimeout(generateAffiliateLink, 500);\n    }\n\n    \/\/ Start app\n    document.addEventListener('DOMContentLoaded', init);\n  <\/script>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>YOUR CYCLING PARTNER SCOPRI I CONTENUTI CICLISMO MADE IN CINA Scopri bici, ruote, gruppi e componenti made in Cina: unboxing, analisi e confronti per capire se questi prodotti sono davvero un\u2019alternativa valida ai marchi pi\u00f9 famosi. GUARDA LA PLAYLIST SCOPRI GRAVEL PROJECT ROCKRIDER RACE 940S La Rockrider Race 940S \u00e8 una full in carbonio da [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-templates\/menu-trasparent.php","meta":{"footnotes":""},"class_list":["post-2","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>- DSCYCLING<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/dscycling.com\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"- DSCYCLING\" \/>\n<meta property=\"og:description\" content=\"YOUR CYCLING PARTNER SCOPRI I CONTENUTI CICLISMO MADE IN CINA Scopri bici, ruote, gruppi e componenti made in Cina: unboxing, analisi e confronti per capire se questi prodotti sono davvero un\u2019alternativa valida ai marchi pi\u00f9 famosi. GUARDA LA PLAYLIST SCOPRI GRAVEL PROJECT ROCKRIDER RACE 940S La Rockrider Race 940S \u00e8 una full in carbonio da [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/dscycling.com\/\" \/>\n<meta property=\"og:site_name\" content=\"DSCYCLING\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-01T10:04:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/507069258-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1920\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\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=\"12 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/dscycling.com\\\/\",\"url\":\"https:\\\/\\\/dscycling.com\\\/\",\"name\":\"- DSCYCLING\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/dscycling.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/dscycling.com\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/dscycling.com\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/dscycling.com\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/507069258-1024x768.jpg\",\"datePublished\":\"2024-03-04T21:14:39+00:00\",\"dateModified\":\"2026-05-01T10:04:48+00:00\",\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/dscycling.com\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/dscycling.com\\\/#primaryimage\",\"url\":\"https:\\\/\\\/dscycling.com\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/507069258-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/dscycling.com\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/507069258-scaled.jpg\",\"width\":2560,\"height\":1920},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/dscycling.com\\\/#website\",\"url\":\"https:\\\/\\\/dscycling.com\\\/\",\"name\":\"dscycling.com\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/dscycling.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/dscycling.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/dscycling.com\\\/#organization\",\"name\":\"dscycling.com\",\"url\":\"https:\\\/\\\/dscycling.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/dscycling.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/dscycling.com\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/DS-1-1.jpg\",\"contentUrl\":\"https:\\\/\\\/dscycling.com\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/DS-1-1.jpg\",\"width\":500,\"height\":500,\"caption\":\"dscycling.com\"},\"image\":{\"@id\":\"https:\\\/\\\/dscycling.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.youtube.com\\\/@LorenzoDelsant\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"- DSCYCLING","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:\/\/dscycling.com\/","og_locale":"it_IT","og_type":"article","og_title":"- DSCYCLING","og_description":"YOUR CYCLING PARTNER SCOPRI I CONTENUTI CICLISMO MADE IN CINA Scopri bici, ruote, gruppi e componenti made in Cina: unboxing, analisi e confronti per capire se questi prodotti sono davvero un\u2019alternativa valida ai marchi pi\u00f9 famosi. GUARDA LA PLAYLIST SCOPRI GRAVEL PROJECT ROCKRIDER RACE 940S La Rockrider Race 940S \u00e8 una full in carbonio da [&hellip;]","og_url":"https:\/\/dscycling.com\/","og_site_name":"DSCYCLING","article_modified_time":"2026-05-01T10:04:48+00:00","og_image":[{"width":2560,"height":1920,"url":"https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/507069258-scaled.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Tempo di lettura stimato":"12 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/dscycling.com\/","url":"https:\/\/dscycling.com\/","name":"- DSCYCLING","isPartOf":{"@id":"https:\/\/dscycling.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/dscycling.com\/#primaryimage"},"image":{"@id":"https:\/\/dscycling.com\/#primaryimage"},"thumbnailUrl":"https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/507069258-1024x768.jpg","datePublished":"2024-03-04T21:14:39+00:00","dateModified":"2026-05-01T10:04:48+00:00","inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/dscycling.com\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/dscycling.com\/#primaryimage","url":"https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/507069258-scaled.jpg","contentUrl":"https:\/\/dscycling.com\/wp-content\/uploads\/2025\/11\/507069258-scaled.jpg","width":2560,"height":1920},{"@type":"WebSite","@id":"https:\/\/dscycling.com\/#website","url":"https:\/\/dscycling.com\/","name":"dscycling.com","description":"","publisher":{"@id":"https:\/\/dscycling.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/dscycling.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/dscycling.com\/#organization","name":"dscycling.com","url":"https:\/\/dscycling.com\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/dscycling.com\/#\/schema\/logo\/image\/","url":"https:\/\/dscycling.com\/wp-content\/uploads\/2024\/04\/DS-1-1.jpg","contentUrl":"https:\/\/dscycling.com\/wp-content\/uploads\/2024\/04\/DS-1-1.jpg","width":500,"height":500,"caption":"dscycling.com"},"image":{"@id":"https:\/\/dscycling.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.youtube.com\/@LorenzoDelsant"]}]}},"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/dscycling.com\/index.php\/wp-json\/wp\/v2\/pages\/2","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dscycling.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/dscycling.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/dscycling.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dscycling.com\/index.php\/wp-json\/wp\/v2\/comments?post=2"}],"version-history":[{"count":84,"href":"https:\/\/dscycling.com\/index.php\/wp-json\/wp\/v2\/pages\/2\/revisions"}],"predecessor-version":[{"id":781,"href":"https:\/\/dscycling.com\/index.php\/wp-json\/wp\/v2\/pages\/2\/revisions\/781"}],"wp:attachment":[{"href":"https:\/\/dscycling.com\/index.php\/wp-json\/wp\/v2\/media?parent=2"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}