{"id":8087,"date":"2026-04-27T10:59:20","date_gmt":"2026-04-27T10:59:20","guid":{"rendered":"https:\/\/albertogelpi.com\/?page_id=8087"},"modified":"2026-05-09T09:31:01","modified_gmt":"2026-05-09T09:31:01","slug":"about","status":"publish","type":"page","link":"https:\/\/albertogelpi.com\/index.php\/about\/","title":{"rendered":"About"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"8087\" class=\"elementor elementor-8087\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7c0486e e-flex e-con-boxed e-con e-parent\" data-id=\"7c0486e\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-984bcdb elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"984bcdb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b2e2b51 e-flex e-con-boxed e-con e-parent\" data-id=\"b2e2b51\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation_mobile&quot;:&quot;none&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-b85ef46 e-con-full e-flex e-con e-child\" data-id=\"b85ef46\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t\t\t\n\t\t\t<img class=\"e-image-base e-39d2cf2-48e136b\" \n\t\t\t\t\tdata-interaction-id=\"39d2cf2\" \n\t\t \n\t\t \n\t\t\t\t\t\t\t\t\tid=\"1625\"\n\t\t\t\t\t\t\t\t\t\t\t\tsrc=\"https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/Alberto_Gelpi_profilo-683x1024.jpeg\"\n\t\t\t\t\t\t\t\t\t\t\t\twidth=\"683\"\n\t\t\t\t\t\t\t\t\t\t\t\theight=\"1024\"\n\t\t\t\t\t\t\t\t\t\t\t\tsrcset=\"https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/Alberto_Gelpi_profilo-683x1024.jpeg 683w, https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/Alberto_Gelpi_profilo-200x300.jpeg 200w, https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/Alberto_Gelpi_profilo-768x1152.jpeg 768w, https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/Alberto_Gelpi_profilo.jpeg 800w\"\n\t\t\t\t\t\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\/>\n\t\t\t\t\t<div class=\"elementor-element elementor-element-c36a0d7 elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-text-editor\" data-id=\"c36a0d7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>He teaches Cinematography and Directing at RUFA, Rome University of Fine Arts. <br \/>He sits on the National Board of AIR3, the Italian Directors Association, and works actively with Authors&#8217; Associations on policy matters.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-bbdcf38 e-con-full e-flex e-con e-child\" data-id=\"bbdcf38\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9c11497 animated-slow elementor-invisible elementor-widget elementor-widget-elementskit-heading\" data-id=\"9c11497\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:300}\" data-widget_type=\"elementskit-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" ><div class=\"ekit-heading elementskit-section-title-wraper text_left   ekit_heading_tablet-text_left   ekit_heading_mobile-\"><h2 class=\"ekit-heading--title elementskit-section-title  ekit-heading__title-has-border start\">narrative and visual storyteller<\/h2>\t\t\t\t<div class='ekit-heading__description'>\n\t\t\t\t\t<p>I love telling and directing stories that explore people's inner world, their journey and their emotions, with arcs that surprise and overturn expectations.<\/p>\n<p>\u00a0<\/p>\n\t\t\t\t<\/div>\n\t\t\t<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-98c3367 animated-slow e-n-tabs-mobile elementor-invisible elementor-widget elementor-widget-n-tabs\" data-id=\"98c3367\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;tabs_justify_horizontal&quot;:&quot;stretch&quot;,&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:600,&quot;horizontal_scroll&quot;:&quot;disable&quot;}\" data-widget_type=\"nested-tabs.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"e-n-tabs\" data-widget-number=\"160183143\" aria-label=\"Tabs. Open items with Enter or Space, close with Escape and navigate using the Arrow keys.\">\n\t\t\t<div class=\"e-n-tabs-heading\" role=\"tablist\">\n\t\t\t\t\t<button id=\"e-n-tab-title-1601831431\" data-tab-title-id=\"e-n-tab-title-1601831431\" class=\"e-n-tab-title\" aria-selected=\"true\" data-tab-index=\"1\" role=\"tab\" tabindex=\"0\" aria-controls=\"e-n-tab-content-1601831431\" style=\"--n-tabs-title-order: 1;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tACT1: SETUP\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t<button id=\"e-n-tab-title-1601831432\" data-tab-title-id=\"e-n-tab-title-1601831432\" class=\"e-n-tab-title\" aria-selected=\"false\" data-tab-index=\"2\" role=\"tab\" tabindex=\"-1\" aria-controls=\"e-n-tab-content-1601831432\" style=\"--n-tabs-title-order: 2;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tACT2: CONFRONTATION\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t<button id=\"e-n-tab-title-1601831433\" data-tab-title-id=\"e-n-tab-title-1601831433\" class=\"e-n-tab-title\" aria-selected=\"false\" data-tab-index=\"3\" role=\"tab\" tabindex=\"-1\" aria-controls=\"e-n-tab-content-1601831433\" style=\"--n-tabs-title-order: 3;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tACT3: RESOLUTION\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t<div class=\"e-n-tabs-content\">\n\t\t\t\t<div id=\"e-n-tab-content-1601831431\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-1601831431\" data-tab-index=\"1\" style=\"--n-tabs-title-order: 1;\" class=\"e-active elementor-element elementor-element-9a6e96f e-con-full e-flex e-con e-child\" data-id=\"9a6e96f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t\t\t\t<p class=\"e-500d26a-7f94695 e-paragraph-base\" data-interaction-id=\"500d26a\"  >\n\t\t\t\t\t\t\t\tAs a child I spent hours drawing and painting. Everything started there.<br>I studied photography, then spent years in post production as a 3D graphic designer. When I discovered editing I was immediately captivated: I learned rhythm, felt where the heart of a sequence beat, and shaped stories for more than twenty years.<br>I grew up in advertising, where every second had to earn its right to exist.<br>At some point I knew it was time to step behind the camera.<br>\n\t\t\t\t\t<\/p>\n\t\t\t\t<\/div>\n\t\t<div id=\"e-n-tab-content-1601831432\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-1601831432\" data-tab-index=\"2\" style=\"--n-tabs-title-order: 2;\" class=\" elementor-element elementor-element-1212605 e-con-full e-flex e-con e-child\" data-id=\"1212605\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t\t\t\t<p class=\"e-f55f5a0-93db2c4 e-paragraph-base\" data-interaction-id=\"f55f5a0\"  >\n\t\t\t\t\t\t\t\tEvery project starts from the same pursuit: a credible, cinematic visual aesthetic.<br>In films, series and documentaries this means building a visual world consistent with the story, capable of amplifying its emotions and leaving a mark on the audience. In communication projects it means elevating a brand's narrative with the same care and intention.<br>I am drawn to frames that surprise without distracting. I consider audio a narrative score: music, sound and silence serve the emotion, never merely decorate it.\n\t\t\t\t\t<\/p>\n\t\t\t\t<\/div>\n\t\t<div id=\"e-n-tab-content-1601831433\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-1601831433\" data-tab-index=\"3\" style=\"--n-tabs-title-order: 3;\" class=\" elementor-element elementor-element-f51db90 e-con-full e-flex e-con e-child\" data-id=\"f51db90\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t\t\t\t<p class=\"e-ff7c4fe-faef920 e-paragraph-base\" data-interaction-id=\"ff7c4fe\"  >\n\t\t\t\t\t\t\t\tChange has always fascinated me, from the early days of 3D graphics. Today artificial intelligence is reshaping the production process. I've chosen to approach this shift with awareness: not as a substitute for creative vision, but as a tool capable of amplifying it. Rooted in respect for tradition, I seek a bridge between what emerges on set and what innovation makes possible, moving beyond the limits so often dictated by budgets. Stories, people and technology: a continuous dialogue, always open.<br>\n\t\t\t\t\t<\/p>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<h1 \n\t\tdata-interaction-id=\"5485a10\" \n\t\tclass=\"e-5485a10-33a90d0 e-heading-base\" \n\t\t \n\t\t\n\t>\n\t\n\t\t\tlife\n\t\t<\/h1>\n\t\t\t\t\t\t\t<h1 \n\t\tdata-interaction-id=\"0ab9145\" \n\t\tclass=\"e-0ab9145-23a77db e-heading-base\" \n\t\t \n\t\t\n\t>\n\t\n\t\t\tis a \n\t\t<\/h1>\n\t\t\t\t\t\t\t<h1 \n\t\tdata-interaction-id=\"29e0fbc\" \n\t\tclass=\"e-29e0fbc-a266238 e-heading-base\" \n\t\t \n\t\t\n\t>\n\t\n\t\t\tparty,\n\t\t<\/h1>\n\t\t\t\t\t\t\t<h1 \n\t\tdata-interaction-id=\"e627c89\" \n\t\tclass=\"e-e627c89-fcee2c7 e-heading-base\" \n\t\t \n\t\t\n\t>\n\t\n\t\t\tlet's live it together!\n\t\t<\/h1>\n\t\t\t\t\t\t\t<h1 \n\t\tdata-interaction-id=\"e9942cf\" \n\t\tclass=\"e-e9942cf-c5af35b e-heading-base\" \n\t\t \n\t\t\n\t>\n\t\n\t\t\tFederico Fellini, 8\u00bd, 1963\n\t\t<\/h1>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1aff823 e-flex e-con-boxed e-con e-parent\" data-id=\"1aff823\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;shape_divider_top&quot;:&quot;tilt&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-shape elementor-shape-top\" aria-hidden=\"true\" data-negative=\"false\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 1000 100\" preserveAspectRatio=\"none\">\n\t<path class=\"elementor-shape-fill\" d=\"M0,6V0h1000v100L0,6z\"\/>\n<\/svg>\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-79b12b4 elementor-hidden-desktop elementor-widget elementor-widget-text-editor\" data-id=\"79b12b4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>He teaches Cinematography and Directing at RUFA, Rome University of Fine Arts. <br \/>He sits on the National Board of AIR3, the Italian Directors Association, and works actively with Authors&#8217; Associations on policy matters.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b6f6645 elementor-widget elementor-widget-text-editor\" data-id=\"b6f6645\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u00a0<img decoding=\"async\" class=\"wp-image-1955\" style=\"font-family: Roboto; font-size: small; text-align: right;\" src=\"http:\/\/albertogelpi.com\/wp-content\/uploads\/2019\/06\/Awards-300x247.png\" alt=\"\" width=\"85\" height=\"70\" srcset=\"https:\/\/albertogelpi.com\/wp-content\/uploads\/2019\/06\/Awards-300x247.png 300w, https:\/\/albertogelpi.com\/wp-content\/uploads\/2019\/06\/Awards.png 495w\" sizes=\"(max-width: 85px) 100vw, 85px\" \/><br \/>\u201c7.305 &#8211; the movie\u201d | Il Romanista, shortlisted at Movieland, Digital Media Fest<\/p><p style=\"text-align: center;\">\u201cMy Second Time\u201d<br \/>&#8211; Special award and Opening movie at Giffoni Movie Days<br \/>&#8211; Special Mention at Magna Grecia Film Festival<\/p><p style=\"text-align: center;\">\u201cChicco Family Games\u201d commercial \u2013 Special Star for direction. Mediastar XXIII<\/p><p style=\"text-align: center;\">\u201cIl Biellese\u201d, Golden Palm at \u201cMountain and Tourism\u201d festival<\/p><p style=\"text-align: center;\">\u201cMy Mime\u201d | Haagen Dazs commercial, shortlisted at Shangai International Film Festival<\/p><p style=\"text-align: center;\">\u201cBehind an Emotion\u201d, | TATA Communication commercial, shortlisted at Cannes International Film Festival<\/p><p style=\"text-align: center;\">\u201cFeel the connection\u201d | AT&amp;T commercial, winner at Barcellona International Film Festival<\/p><p style=\"text-align: center;\">\u201cCorale\u201d, best editing at \u201cMen and Trains\u201d festival , Lille (Francia)<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0a913b6 e-con-full e-flex e-con e-parent\" data-id=\"0a913b6\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c7fef4b elementor-widget elementor-widget-html\" data-id=\"c7fef4b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\r\n\/* ==== VARIABILI CSS ==== *\/\r\n:root {\r\n  --gallery-bg: #000000;\r\n  --overlay-color: rgba(0, 0, 0, 0.15);\r\n  --transition-speed: 0.9s;\r\n}\r\n\r\n\/* ==== STILE BASE ==== *\/\r\n.scrolling-gallery {\r\n  overflow: hidden;\r\n  width: 100%;\r\n  background-color: var(--gallery-bg);\r\n  padding: 5px 0;\r\n  position: relative;\r\n  isolation: isolate;\r\n  cursor: grab;\r\n}\r\n\r\n.scrolling-gallery.is-dragging {\r\n  cursor: grabbing;\r\n  user-select: none;\r\n}\r\n\r\n\/* ==== RIGA SCORRIMENTO ==== *\/\r\n.scrolling-row {\r\n  display: flex;\r\n  flex-wrap: nowrap;\r\n  width: auto;\r\n  will-change: transform;\r\n}\r\n\r\n\/* ==== CONTENITORE IMMAGINI ==== *\/\r\n.image-wrapper {\r\n  position: relative;\r\n  display: inline-block;\r\n  margin-right: 15px;\r\n  border-radius: var(--border-radius);\r\n  overflow: hidden;\r\n  flex-shrink: 0;\r\n  cursor: pointer;\r\n}\r\n\r\n.is-dragging .image-wrapper {\r\n  pointer-events: none;\r\n}\r\n\r\n\/* ==== IMMAGINE BASE ==== *\/\r\n.image-wrapper img {\r\n  aspect-ratio: 16 \/ 9;\r\n  width: 25vw;\r\n  height: auto;\r\n  object-fit: cover;\r\n  display: block;\r\n  transition: transform var(--transition-speed) cubic-bezier(0.25, 1, 0.5, 1),\r\n              filter 0.4s ease;\r\n  will-change: filter, transform;\r\n  user-select: none;\r\n  -webkit-user-drag: none;\r\n}\r\n\r\n\/* ==== OVERLAY ARANCIONE ==== *\/\r\n.image-wrapper::before {\r\n  content: '';\r\n  position: absolute;\r\n  inset: 0;\r\n  background-color: var(--overlay-color);\r\n  opacity: 0;\r\n  filter: saturate(100%) sepia(100%) hue-rotate(340deg) brightness(.4) saturate(100%);\r\n  transition: opacity 1s ease-out;\r\n  pointer-events: none;\r\n  z-index: 1;\r\n}\r\n\r\n\/* ==== TESTO HOVER ==== *\/\r\n.hover-text {\r\n  position: absolute;\r\n  top: 50%;\r\n  left: 50%;\r\n  font-family: 'Abel';\r\n  font-size: 12px;\r\n  font-weight: bold;\r\n  letter-spacing: 2px;\r\n  color: #FD8B00;\r\n  text-shadow: 0 4px 12px rgba(0, 0, 0, 0.5);\r\n  white-space: nowrap;\r\n  opacity: 0;\r\n  transform: translate(-50%, -50%);\r\n  transition: opacity 0.5s ease;\r\n  pointer-events: none;\r\n  z-index: 2;\r\n  will-change: opacity;\r\n  background-color: rgba(0, 0, 0, 0.45);\r\n  padding: 3px 3px;\r\n}\r\n\r\n.hover-text .letter {\r\n  display: inline-block;\r\n}\r\n\r\n\/* ==== STATO HOVER ==== *\/\r\n.image-wrapper:hover::before { opacity: 1; }\r\n.image-wrapper:hover .hover-text { opacity: 1; }\r\n.image-wrapper:hover img {\r\n  transform: scale(1.1);\r\n  filter: blur(2px) sepia(60%) hue-rotate(340deg) brightness(0.5);\r\n}\r\n.image-wrapper:focus-visible {\r\n  outline: 3px solid #fff;\r\n  outline-offset: 2px;\r\n}\r\n\r\n\/* ==== LIGHTBOX MODAL ==== *\/\r\n.ag-image-modal {\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  width: 100%;\r\n  height: 100%;\r\n  background-color: rgba(0, 0, 0, 0.9);\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  z-index: 999999;\r\n  padding: 20px;\r\n  opacity: 0;\r\n  animation: agFadeIn 0.3s ease forwards;\r\n}\r\n\r\n@keyframes agFadeIn {\r\n  to { opacity: 1; }\r\n}\r\n\r\n.ag-modal-content {\r\n  position: relative;\r\n  width: auto;\r\n  max-width: min(90vw, 1400px);\r\n  max-height: 90vh;\r\n  background: transparent;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  animation: agScaleIn 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;\r\n}\r\n\r\n@keyframes agScaleIn {\r\n  from { transform: scale(0.9); opacity: 0; }\r\n  to   { transform: scale(1);   opacity: 1; }\r\n}\r\n\r\n\/* --- Immagine lightbox --- *\/\r\n.ag-modal-img {\r\n  display: block;\r\n  max-width: 100%;\r\n  max-height: 90vh;\r\n  width: auto;\r\n  height: auto;\r\n  object-fit: contain;\r\n  border-radius: 2px;\r\n  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.6);\r\n  user-select: none;\r\n  -webkit-user-drag: none;\r\n  \/* Transizione opacity per cambio immagine durante navigazione *\/\r\n  transition: opacity 0.18s ease;\r\n}\r\n\r\n.ag-modal-img.ag-img-hidden {\r\n  opacity: 0;\r\n}\r\n\r\n\/* --- Bottone chiudi: fixed nel viewport, sempre visibile --- *\/\r\n.ag-modal-close {\r\n  position: fixed !important;\r\n  top: 20px !important;\r\n  right: 20px !important;\r\n  width: 32px !important;\r\n  height: 32px !important;\r\n  min-width: 32px !important;\r\n  min-height: 32px !important;\r\n  max-width: 32px !important;\r\n  max-height: 32px !important;\r\n  padding: 0 !important;\r\n  background: #FD8B00 !important;\r\n  border: none !important;\r\n  border-radius: 50% !important;\r\n  color: #fff !important;\r\n  font-size: 20px !important;\r\n  line-height: 32px !important;\r\n  font-family: Arial, sans-serif !important;\r\n  cursor: pointer;\r\n  transition: background 0.2s ease;\r\n  z-index: 1000001;\r\n  display: flex !important;\r\n  align-items: center !important;\r\n  justify-content: center !important;\r\n}\r\n\r\n.ag-modal-close:hover { background: #ff721a !important; }\r\n\r\n.ag-modal-close:focus-visible {\r\n  outline: 3px solid #fff;\r\n  outline-offset: 4px;\r\n}\r\n\r\n\/* --- Frecce navigazione --- *\/\r\n.ag-modal-nav {\r\n  position: fixed;\r\n  top: 50%;\r\n  transform: translateY(-50%);\r\n  width: 32px;\r\n  height: 32px;\r\n  padding: 0;\r\n  background: rgba(253, 139, 0, 0.85);\r\n  border: none;\r\n  border-radius: 50%;\r\n  color: #fff;\r\n  line-height: 0;\r\n  cursor: pointer;\r\n  z-index: 1000001;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  transition: background 0.2s ease, transform 0.15s ease;\r\n}\r\n\r\n.ag-modal-nav:hover {\r\n  background: #ff721a;\r\n  transform: translateY(-50%) scale(1.1);\r\n}\r\n\r\n.ag-modal-nav:focus-visible {\r\n  outline: 3px solid #fff;\r\n  outline-offset: 4px;\r\n}\r\n\r\n.ag-modal-prev { left: 16px; }\r\n.ag-modal-next { right: 16px; }\r\n\r\n\/* --- Contatore immagini (es. \"3 \/ 8\") --- *\/\r\n.ag-modal-counter {\r\n  position: fixed;\r\n  bottom: 16px;\r\n  left: 50%;\r\n  transform: translateX(-50%);\r\n  color: rgba(255, 255, 255, 0.65);\r\n  font-family: Arial, sans-serif;\r\n  font-size: 13px;\r\n  letter-spacing: 2px;\r\n  pointer-events: none;\r\n  z-index: 1000001;\r\n  user-select: none;\r\n}\r\n\r\n\/* Loading Spinner (solo al primo caricamento) *\/\r\n.ag-modal-loading {\r\n  position: absolute;\r\n  inset: 0;\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  background: transparent;\r\n}\r\n\r\n.ag-spinner {\r\n  width: 50px;\r\n  height: 50px;\r\n  border: 4px solid rgba(255, 255, 255, 0.1);\r\n  border-top-color: #FD8B00;\r\n  border-radius: 50%;\r\n  animation: agSpin 0.8s linear infinite;\r\n}\r\n\r\n@keyframes agSpin {\r\n  to { transform: rotate(360deg); }\r\n}\r\n\r\nbody.ag-modal-open { overflow: hidden; }\r\n\r\n\/* ==== RESPONSIVE ==== *\/\r\n@media (max-width: 1024px) {\r\n  .scrolling-gallery,\r\n  .scrolling-gallery.is-dragging { cursor: default; }\r\n  .image-wrapper img { width: 35vw; }\r\n  .hover-text { opacity: 1; }\r\n}\r\n\r\n@media (max-width: 768px) {\r\n  .image-wrapper img { width: 50vw; }\r\n\r\n  .ag-modal-close {\r\n    top: 10px !important;\r\n    right: 10px !important;\r\n    width: 40px !important;\r\n    height: 40px !important;\r\n    font-size: 28px !important;\r\n    line-height: 40px !important;\r\n  }\r\n\r\n  .ag-modal-content {\r\n    max-width: 95vw;\r\n    max-height: 85vh;\r\n  }\r\n\r\n  .ag-modal-img {\r\n    max-height: 85vh;\r\n  }\r\n\r\n  \/* Frecce pi\u00f9 piccole su mobile *\/\r\n  .ag-modal-nav {\r\n    width: 28px;\r\n    height: 28px;\r\n  }\r\n\r\n  .ag-modal-prev { left: 8px; }\r\n  .ag-modal-next { right: 8px; }\r\n}\r\n\r\n@media (max-width: 480px) {\r\n  .image-wrapper img { width: 70vw; }\r\n}\r\n\r\n@media (orientation: landscape) and (max-height: 500px) {\r\n  .ag-image-modal { padding: 0; }\r\n\r\n  .ag-modal-content {\r\n    max-width: 80vw; \/* lascia spazio alle frecce laterali *\/\r\n    max-height: 95dvh;\r\n  }\r\n\r\n  .ag-modal-img {\r\n    max-height: 95dvh;\r\n  }\r\n\r\n  .ag-modal-close {\r\n    top: 8px !important;\r\n    right: 8px !important;\r\n    opacity: 0.85;\r\n  }\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n  *, *::before, *::after {\r\n    animation-duration: 0.01ms !important;\r\n    animation-iteration-count: 1 !important;\r\n    transition-duration: 0.01ms !important;\r\n  }\r\n  .ag-modal-img { transition: none; }\r\n}\r\n<\/style>\r\n\r\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n     WIDGET 1 \u2014 Gallery immagini con navigazione lightbox\r\n     data-image \u2192 URL full-size per il lightbox\r\n     Se data-image \u00e8 assente usa src come fallback\r\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\r\n<div class=\"scrolling-gallery\">\r\n  <div class=\"scrolling-row scroll-left\" style=\"animation-duration: 70s;\">\r\n\r\n    <div class=\"image-wrapper\" tabindex=\"0\" role=\"button\" aria-label=\"Apri immagine\">\r\n      <img decoding=\"async\" src=\"https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/DAY1-34.jpg\"\r\n           data-image=\"https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/DAY1-34.jpg\"\r\n           alt=\"Alberto Backstage\" loading=\"lazy\">\r\n      <span class=\"hover-text\" data-text=\"\"><\/span>\r\n    <\/div>\r\n\r\n    <div class=\"image-wrapper\" tabindex=\"0\" role=\"button\" aria-label=\"Apri immagine\">\r\n      <img decoding=\"async\" src=\"https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/DAY1-101.jpg\"\r\n           data-image=\"https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/DAY1-101.jpg\"\r\n           alt=\"Alberto Backstage\" loading=\"lazy\">\r\n      <span class=\"hover-text\" data-text=\"\"><\/span>\r\n    <\/div>\r\n\r\n    <div class=\"image-wrapper\" tabindex=\"0\" role=\"button\" aria-label=\"Apri immagine\">\r\n      <img decoding=\"async\" src=\"https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/B0001281-Modifica-1-e1540807135736.jpg\"\r\n           data-image=\"https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/B0001281-Modifica-1-e1540807135736.jpg\"\r\n           alt=\"Alberto Backstage\" loading=\"lazy\">\r\n      <span class=\"hover-text\" data-text=\"\"><\/span>\r\n    <\/div>\r\n\r\n    <div class=\"image-wrapper\" tabindex=\"0\" role=\"button\" aria-label=\"Apri immagine\">\r\n      <img decoding=\"async\" src=\"https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/DAY1-95.jpg\"\r\n           data-image=\"https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/DAY1-95.jpg\"\r\n           alt=\"Alberto Backstage\" loading=\"lazy\">\r\n      <span class=\"hover-text\" data-text=\"\"><\/span>\r\n    <\/div>\r\n\r\n    <div class=\"image-wrapper\" tabindex=\"0\" role=\"button\" aria-label=\"Apri immagine\">\r\n      <img decoding=\"async\" src=\"https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/DAY1-81.jpg\"\r\n           data-image=\"https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/DAY1-81.jpg\"\r\n           alt=\"Alberto Backstage\" loading=\"lazy\">\r\n      <span class=\"hover-text\" data-text=\"\"><\/span>\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n(function () {\r\n  'use strict';\r\n\r\n  window.GelpiGallery = window.GelpiGallery || { instances: [] };\r\n\r\n  const CONFIG = {\r\n    minDecryptDuration: 40,\r\n    maxDecryptDuration: 100,\r\n    decryptFrameRate: 8,\r\n    directionThreshold: 6,\r\n    dragSensitivity: 1.0,\r\n    hoverDebounce: 50\r\n  };\r\n\r\n  const CHARS = '\u2580\u2584\u2588\u258c\u2590\u2591\u2592\u2593@#$%&*+=<>?';\r\n\r\n  function debounce(func, wait) {\r\n    let timeout;\r\n    return function (...args) {\r\n      clearTimeout(timeout);\r\n      timeout = setTimeout(() => func(...args), wait);\r\n    };\r\n  }\r\n\r\n  \/\/ \u2500\u2500 GelpiModal: singleton lightbox immagini con navigazione \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  if (!window.GelpiModal) {\r\n    window.GelpiModal = {\r\n\r\n      _images: [],       \/\/ [{ url, alt }, ...]  \u2014 solo originali, no cloni\r\n      _index: 0,         \/\/ indice corrente\r\n      _modal: null,      \/\/ riferimento al DOM del modal aperto\r\n      _swipeStartX: 0,   \/\/ per swipe touch nel modal\r\n\r\n      \/\/ Apre il lightbox.\r\n      \/\/ images: array di { url, alt }\r\n      \/\/ startIndex: indice dell'immagine cliccata\r\n      open(images, startIndex) {\r\n        this._clearExistingModals();\r\n        if (!images || images.length === 0) return;\r\n\r\n        this._images = images;\r\n        this._index  = startIndex;\r\n\r\n        const hasMany = images.length > 1;\r\n        const modal   = document.createElement('div');\r\n        modal.className = 'ag-image-modal';\r\n        modal.setAttribute('role',       'dialog');\r\n        modal.setAttribute('aria-modal', 'true');\r\n        modal.setAttribute('aria-label', 'Visualizzatore immagine');\r\n\r\n        \/\/ Le frecce sono sempre nel DOM ma hidden se c'\u00e8 una sola immagine,\r\n        \/\/ cos\u00ec non serve ricrearle ad ogni navigazione.\r\n        modal.innerHTML = `\r\n          <button type=\"button\" class=\"ag-modal-nav ag-modal-prev\"\r\n                  aria-label=\"Immagine precedente\"\r\n                  ${hasMany ? '' : 'hidden'}>\r\n            <svg width=\"10\" height=\"16\" viewBox=\"0 0 10 16\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n              <path d=\"M8 2L2 8L8 14\" stroke=\"white\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n            <\/svg>\r\n          <\/button>\r\n          <div class=\"ag-modal-content\">\r\n            <button type=\"button\" class=\"ag-modal-close\"\r\n                    aria-label=\"Chiudi immagine\" title=\"Chiudi (ESC)\">&times;<\/button>\r\n            <div class=\"ag-modal-loading\"><div class=\"ag-spinner\"><\/div><\/div>\r\n            <img class=\"ag-modal-img ag-img-hidden\" alt=\"\" \/>\r\n          <\/div>\r\n          <button type=\"button\" class=\"ag-modal-nav ag-modal-next\"\r\n                  aria-label=\"Immagine successiva\"\r\n                  ${hasMany ? '' : 'hidden'}>\r\n            <svg width=\"10\" height=\"16\" viewBox=\"0 0 10 16\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n              <path d=\"M2 2L8 8L2 14\" stroke=\"white\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n            <\/svg>\r\n          <\/button>\r\n          ${hasMany ? `<div class=\"ag-modal-counter\"><\/div>` : ''}\r\n        `;\r\n\r\n        document.body.appendChild(modal);\r\n        document.body.classList.add('ag-modal-open');\r\n        this._modal = modal;\r\n\r\n        const openTime = Date.now();\r\n\r\n        \/\/ Carica la prima immagine con spinner\r\n        this._loadImage(this._index, true);\r\n\r\n        \/\/ Bottone chiudi\r\n        modal.querySelector('.ag-modal-close')\r\n          .addEventListener('click', () => this.close());\r\n\r\n        \/\/ Backdrop click (con ghost-click guard)\r\n        modal.addEventListener('click', (e) => {\r\n          if (Date.now() - openTime < 400) return;\r\n          if (e.target === modal) this.close();\r\n        });\r\n\r\n        \/\/ Frecce prev \/ next\r\n        if (hasMany) {\r\n          modal.querySelector('.ag-modal-prev')\r\n            .addEventListener('click', () => this.navigate(-1));\r\n          modal.querySelector('.ag-modal-next')\r\n            .addEventListener('click', () => this.navigate(+1));\r\n        }\r\n\r\n        \/\/ Tastiera: ESC chiude, \u2190 \u2192 navigano\r\n        const keyHandler = (e) => {\r\n          if (e.key === 'Escape')      { this.close(); document.removeEventListener('keydown', keyHandler); }\r\n          if (e.key === 'ArrowLeft')   { this.navigate(-1); }\r\n          if (e.key === 'ArrowRight')  { this.navigate(+1); }\r\n        };\r\n        document.addEventListener('keydown', keyHandler);\r\n        \/\/ Salva riferimento per cleanup in close()\r\n        this._keyHandler = keyHandler;\r\n\r\n        \/\/ Swipe touch nel modal (\u2190 \u2192)\r\n        if (hasMany) {\r\n          modal.addEventListener('touchstart', (e) => {\r\n            if (e.touches.length === 1) this._swipeStartX = e.touches[0].clientX;\r\n          }, { passive: true });\r\n\r\n          modal.addEventListener('touchend', (e) => {\r\n            if (e.changedTouches.length !== 1) return;\r\n            const delta = e.changedTouches[0].clientX - this._swipeStartX;\r\n            if (Math.abs(delta) > 50) this.navigate(delta < 0 ? +1 : -1);\r\n          }, { passive: true });\r\n        }\r\n\r\n        setTimeout(() => modal.querySelector('.ag-modal-close').focus(), 100);\r\n      },\r\n\r\n      \/\/ Cambia immagine senza ricreare il modal.\r\n      \/\/ delta: +1 (avanti) o -1 (indietro), con loop circolare.\r\n      navigate(delta) {\r\n        if (this._images.length <= 1) return;\r\n        this._index = (this._index + delta + this._images.length) % this._images.length;\r\n        this._loadImage(this._index, false);\r\n      },\r\n\r\n      \/\/ Carica l'immagine all'indice dato.\r\n      \/\/ firstLoad: true \u2192 mostra spinner; false \u2192 usa fade opacity\r\n      _loadImage(index, firstLoad) {\r\n        const modal   = this._modal;\r\n        const imgEl   = modal.querySelector('.ag-modal-img');\r\n        const loading = modal.querySelector('.ag-modal-loading');\r\n        const counter = modal.querySelector('.ag-modal-counter');\r\n        const { url, alt } = this._images[index];\r\n\r\n        if (counter) counter.textContent = `${index + 1} \/ ${this._images.length}`;\r\n\r\n        if (firstLoad && loading) {\r\n          loading.style.display = 'flex';\r\n        }\r\n\r\n        \/\/ Fade out\r\n        imgEl.classList.add('ag-img-hidden');\r\n\r\n        const loader = new Image();\r\n\r\n        loader.onload = () => {\r\n          imgEl.src = url;\r\n          imgEl.alt = alt || '';\r\n          \/\/ Rimuovi spinner al primo load\r\n          if (loading && loading.parentNode) loading.style.display = 'none';\r\n          \/\/ Breve timeout per permettere al browser di applicare il nuovo src\r\n          \/\/ prima di fare fade in (evita flash del vecchio contenuto)\r\n          requestAnimationFrame(() => {\r\n            requestAnimationFrame(() => {\r\n              imgEl.classList.remove('ag-img-hidden');\r\n            });\r\n          });\r\n        };\r\n\r\n        loader.onerror = () => {\r\n          if (loading && loading.parentNode) loading.style.display = 'none';\r\n          imgEl.classList.remove('ag-img-hidden');\r\n          console.error('[GelpiGallery] Errore caricamento immagine:', url);\r\n        };\r\n\r\n        loader.src = url;\r\n      },\r\n\r\n      close() {\r\n        const modal = this._modal;\r\n        if (!modal) return;\r\n\r\n        \/\/ Rimuovi keyboard handler\r\n        if (this._keyHandler) {\r\n          document.removeEventListener('keydown', this._keyHandler);\r\n          this._keyHandler = null;\r\n        }\r\n\r\n        \/\/ Azzera src per liberare risorse\r\n        const imgEl = modal.querySelector('.ag-modal-img');\r\n        if (imgEl) imgEl.src = '';\r\n\r\n        modal.style.animation = 'agFadeIn 0.2s ease reverse';\r\n        setTimeout(() => {\r\n          if (modal.parentNode) modal.parentNode.removeChild(modal);\r\n          document.body.classList.remove('ag-modal-open');\r\n        }, 200);\r\n\r\n        this._modal  = null;\r\n        this._images = [];\r\n      },\r\n\r\n      _clearExistingModals() {\r\n        document.querySelectorAll('.ag-image-modal').forEach(m => {\r\n          const i = m.querySelector('.ag-modal-img');\r\n          if (i) i.src = '';\r\n          m.remove();\r\n        });\r\n        if (this._keyHandler) {\r\n          document.removeEventListener('keydown', this._keyHandler);\r\n          this._keyHandler = null;\r\n        }\r\n        document.body.classList.remove('ag-modal-open');\r\n        this._modal  = null;\r\n        this._images = [];\r\n      }\r\n    };\r\n  }\r\n\r\n  \/\/ \u2500\u2500 ScrollingGallery \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  if (!window.ScrollingGallery) {\r\n    window.ScrollingGallery = class ScrollingGallery {\r\n      constructor(galleryElement, instanceId) {\r\n        this.gallery    = galleryElement;\r\n        this.instanceId = instanceId;\r\n        this.row        = this.gallery.querySelector('.scrolling-row');\r\n        this.loopWidth  = 0;\r\n\r\n        this.dragState = {\r\n          active: false, direction: null,\r\n          startX: 0, startY: 0, currentX: 0,\r\n          translateX: 0, hasMoved: false, startTarget: null\r\n        };\r\n\r\n        this.animationState = {\r\n          isAnimating: true, isPaused: false,\r\n          currentPosition: 0, animationFrame: null,\r\n          speed: 0, lastTime: null\r\n        };\r\n\r\n        this.activeAnimations = new Map();\r\n        this.boundHandlers = {};\r\n        this.init();\r\n      }\r\n\r\n      init() {\r\n        this.setupInfiniteLoop();\r\n        this.calculateInitialSpeed();\r\n        this.attachDragEvents();\r\n        this.attachWrapperEvents();\r\n        this.prefillTextForTouch();\r\n        this.attachHoverPauseEvents();\r\n        this.attachVisibilityHandler();\r\n        this.startManualAnimation();\r\n        console.log(`[GelpiGallery] Istanza #${this.instanceId} inizializzata \u2014 loopWidth: ${this.loopWidth}px`);\r\n      }\r\n\r\n      setupInfiniteLoop() {\r\n        const originalItems = Array.from(this.row.children);\r\n        if (originalItems.length === 0) return;\r\n\r\n        let originalWidth = 0;\r\n        originalItems.forEach(item => {\r\n          const style = getComputedStyle(item);\r\n          originalWidth += item.offsetWidth + parseFloat(style.marginRight || 0);\r\n        });\r\n        this.loopWidth = originalWidth;\r\n\r\n        const copiesNeeded = Math.ceil((this.gallery.offsetWidth * 3) \/ originalWidth) + 1;\r\n\r\n        for (let i = 0; i < copiesNeeded; i++) {\r\n          originalItems.forEach(item => {\r\n            const clone = item.cloneNode(true);\r\n            clone.setAttribute('aria-hidden', 'true');\r\n            clone.removeAttribute('tabindex');\r\n            ScrollingGallery.prepareTextEl(clone.querySelector('.hover-text'));\r\n            this.row.appendChild(clone);\r\n          });\r\n        }\r\n      }\r\n\r\n      calculateInitialSpeed() {\r\n        const durationStr = this.row.style.animationDuration ||\r\n                            getComputedStyle(this.row).animationDuration;\r\n        const duration  = parseFloat(durationStr) || 70;\r\n        const direction = this.row.classList.contains('scroll-left') ? -1 : 1;\r\n        this.animationState.speed = (this.loopWidth \/ duration) * direction;\r\n      }\r\n\r\n      startManualAnimation() {\r\n        const animate = (currentTime) => {\r\n          if (!this.animationState.isAnimating) return;\r\n          if (this.animationState.lastTime === null) this.animationState.lastTime = currentTime;\r\n\r\n          const delta = (currentTime - this.animationState.lastTime) \/ 1000;\r\n          this.animationState.lastTime = currentTime;\r\n\r\n          if (!this.animationState.isPaused && !this.dragState.active) {\r\n            this.animationState.currentPosition += this.animationState.speed * delta;\r\n\r\n            if (this.animationState.speed < 0) {\r\n              if (this.animationState.currentPosition <= -this.loopWidth)\r\n                this.animationState.currentPosition += this.loopWidth;\r\n            } else {\r\n              if (this.animationState.currentPosition >= 0)\r\n                this.animationState.currentPosition -= this.loopWidth;\r\n            }\r\n\r\n            this.row.style.transform = `translate3d(${this.animationState.currentPosition}px, 0, 0)`;\r\n          }\r\n\r\n          this.animationState.animationFrame = requestAnimationFrame(animate);\r\n        };\r\n        this.animationState.animationFrame = requestAnimationFrame(animate);\r\n      }\r\n\r\n      stopManualAnimation() {\r\n        this.animationState.isAnimating = false;\r\n        if (this.animationState.animationFrame) {\r\n          cancelAnimationFrame(this.animationState.animationFrame);\r\n          this.animationState.animationFrame = null;\r\n        }\r\n      }\r\n\r\n      normalizePosition() {\r\n        if (this.animationState.speed < 0) {\r\n          while (this.animationState.currentPosition > 0)\r\n            this.animationState.currentPosition -= this.loopWidth;\r\n          while (this.animationState.currentPosition < -this.loopWidth)\r\n            this.animationState.currentPosition += this.loopWidth;\r\n        } else {\r\n          while (this.animationState.currentPosition < -this.loopWidth)\r\n            this.animationState.currentPosition += this.loopWidth;\r\n          while (this.animationState.currentPosition > 0)\r\n            this.animationState.currentPosition -= this.loopWidth;\r\n        }\r\n      }\r\n\r\n      attachDragEvents() {\r\n        this.boundHandlers.mouseMove = this.onMouseMove.bind(this);\r\n        this.boundHandlers.mouseUp   = this.onMouseUp.bind(this);\r\n        this.boundHandlers.touchMove = this.onTouchMove.bind(this);\r\n        this.boundHandlers.touchEnd  = this.onTouchEnd.bind(this);\r\n\r\n        this.gallery.addEventListener('mousedown',  (e) => this.onMouseDown(e));\r\n        this.gallery.addEventListener('mouseleave', (e) => { if (this.dragState.active) this.onMouseUp(e); });\r\n        this.gallery.addEventListener('touchstart', (e) => this.onTouchStart(e), { passive: false });\r\n      }\r\n\r\n      onMouseDown(e) {\r\n        if (e.target.closest('a, button')) return;\r\n        e.preventDefault();\r\n        this.dragState = { ...this.dragState,\r\n          active: true, direction: 'horizontal',\r\n          startX: e.pageX, currentX: e.pageX,\r\n          hasMoved: false, startTarget: e.target,\r\n          translateX: this.animationState.currentPosition\r\n        };\r\n        this.gallery.classList.add('is-dragging');\r\n        document.addEventListener('mousemove', this.boundHandlers.mouseMove);\r\n        document.addEventListener('mouseup',   this.boundHandlers.mouseUp);\r\n      }\r\n\r\n      onMouseMove(e) {\r\n        if (!this.dragState.active) return;\r\n        e.preventDefault();\r\n        const delta = (e.pageX - this.dragState.currentX) * CONFIG.dragSensitivity;\r\n        this.dragState.currentX    = e.pageX;\r\n        this.dragState.translateX += delta;\r\n        if (Math.abs(e.pageX - this.dragState.startX) > CONFIG.directionThreshold)\r\n          this.dragState.hasMoved = true;\r\n        this.row.style.transform = `translate3d(${this.dragState.translateX}px, 0, 0)`;\r\n      }\r\n\r\n      onMouseUp(e) {\r\n        if (!this.dragState.active) return;\r\n        this.dragState.active = false;\r\n        this.gallery.classList.remove('is-dragging');\r\n        document.removeEventListener('mousemove', this.boundHandlers.mouseMove);\r\n        document.removeEventListener('mouseup',   this.boundHandlers.mouseUp);\r\n\r\n        if (!this.dragState.hasMoved && this.dragState.startTarget)\r\n          this._openFromTarget(this.dragState.startTarget);\r\n        if (this.dragState.hasMoved) {\r\n          this.animationState.currentPosition = this.dragState.translateX;\r\n          this.normalizePosition();\r\n          this.animationState.lastTime = null;\r\n        }\r\n        this.dragState.startTarget = null;\r\n        if (!this.gallery.matches(':hover')) this.animationState.isPaused = false;\r\n      }\r\n\r\n      onTouchStart(e) {\r\n        if (e.touches.length !== 1) return;\r\n        const t = e.touches[0];\r\n        this.dragState = { ...this.dragState,\r\n          active: false, direction: null,\r\n          startX: t.pageX, startY: t.pageY, currentX: t.pageX,\r\n          hasMoved: false, startTarget: e.target,\r\n          translateX: this.animationState.currentPosition\r\n        };\r\n        document.addEventListener('touchmove',   this.boundHandlers.touchMove,  { passive: false });\r\n        document.addEventListener('touchend',    this.boundHandlers.touchEnd,   { passive: true });\r\n        document.addEventListener('touchcancel', this.boundHandlers.touchEnd,   { passive: true });\r\n      }\r\n\r\n      onTouchMove(e) {\r\n        if (e.touches.length !== 1) return;\r\n        const t = e.touches[0];\r\n        const absX = Math.abs(t.pageX - this.dragState.startX);\r\n        const absY = Math.abs(t.pageY - this.dragState.startY);\r\n\r\n        if (this.dragState.direction === null) {\r\n          if (absX < CONFIG.directionThreshold && absY < CONFIG.directionThreshold) return;\r\n          this.dragState.direction = absX >= absY ? 'horizontal' : 'vertical';\r\n        }\r\n        if (absX > CONFIG.directionThreshold || absY > CONFIG.directionThreshold)\r\n          this.dragState.hasMoved = true;\r\n        if (this.dragState.direction === 'vertical') return;\r\n\r\n        e.preventDefault();\r\n        if (!this.dragState.active) {\r\n          this.dragState.active = true;\r\n          this.gallery.classList.add('is-dragging');\r\n          this.animationState.isPaused = true;\r\n        }\r\n        const delta = (t.pageX - this.dragState.currentX) * CONFIG.dragSensitivity;\r\n        this.dragState.currentX    = t.pageX;\r\n        this.dragState.translateX += delta;\r\n        this.row.style.transform = `translate3d(${this.dragState.translateX}px, 0, 0)`;\r\n      }\r\n\r\n      onTouchEnd(e) {\r\n        document.removeEventListener('touchmove',   this.boundHandlers.touchMove);\r\n        document.removeEventListener('touchend',    this.boundHandlers.touchEnd);\r\n        document.removeEventListener('touchcancel', this.boundHandlers.touchEnd);\r\n\r\n        if (!this.dragState.hasMoved && this.dragState.startTarget)\r\n          this._openFromTarget(this.dragState.startTarget);\r\n        if (this.dragState.active) {\r\n          this.gallery.classList.remove('is-dragging');\r\n          if (this.dragState.hasMoved) {\r\n            this.animationState.currentPosition = this.dragState.translateX;\r\n            this.normalizePosition();\r\n            this.animationState.lastTime = null;\r\n          }\r\n        }\r\n        this.dragState.active      = false;\r\n        this.dragState.direction   = null;\r\n        this.dragState.startTarget = null;\r\n        this.animationState.isPaused = false;\r\n      }\r\n\r\n      \/\/ Costruisce l'array immagini dagli item originali (no aria-hidden),\r\n      \/\/ trova l'indice dell'item cliccato, apre il modal.\r\n      _openFromTarget(target) {\r\n        const wrapper = target.closest('.image-wrapper');\r\n        if (!wrapper) return;\r\n\r\n        \/\/ Solo item originali \u2014 i cloni hanno aria-hidden=\"true\"\r\n        const originals = Array.from(\r\n          this.row.querySelectorAll('.image-wrapper:not([aria-hidden])')\r\n        );\r\n\r\n        const images = originals.map(w => {\r\n          const img = w.querySelector('img');\r\n          return {\r\n            url: img?.getAttribute('data-image') || img?.src || '',\r\n            alt: img?.alt || ''\r\n          };\r\n        }).filter(item => item.url);\r\n\r\n        \/\/ Trova l'indice: se il wrapper \u00e8 un clone (non dovrebbe arrivarci,\r\n        \/\/ ma per sicurezza) usa il suo data-image per risalire all'originale.\r\n        const clickedImg = wrapper.querySelector('img');\r\n        const clickedUrl = clickedImg?.getAttribute('data-image') || clickedImg?.src || '';\r\n        let startIndex   = originals.indexOf(wrapper);\r\n        if (startIndex === -1) {\r\n          \/\/ Fallback: cerca per URL\r\n          startIndex = images.findIndex(item => item.url === clickedUrl);\r\n        }\r\n        if (startIndex === -1) startIndex = 0;\r\n\r\n        if (images.length > 0) window.GelpiModal.open(images, startIndex);\r\n      }\r\n\r\n      attachHoverPauseEvents() {\r\n        this.gallery.addEventListener('mouseenter', () => {\r\n          if (!this.dragState.active) this.animationState.isPaused = true;\r\n        }, { passive: true });\r\n        this.gallery.addEventListener('mouseleave', () => {\r\n          if (!this.dragState.active) {\r\n            this.animationState.isPaused = false;\r\n            this.animationState.lastTime = null;\r\n          }\r\n        }, { passive: true });\r\n      }\r\n\r\n      attachWrapperEvents() {\r\n        Array.from(this.row.querySelectorAll('.image-wrapper')).forEach(wrapper => {\r\n          const textEl = wrapper.querySelector('.hover-text');\r\n          const debouncedEnter = debounce(() => {\r\n            if (!this.dragState.active)\r\n              this.activeAnimations.set(wrapper, this.initializeAndAnimateText(textEl));\r\n          }, CONFIG.hoverDebounce);\r\n\r\n          wrapper.addEventListener('mouseenter', debouncedEnter, { passive: true });\r\n          wrapper.addEventListener('mouseleave', () => {\r\n            this.activeAnimations.delete(wrapper);\r\n            this.resetText(textEl);\r\n          }, { passive: true });\r\n\r\n          if (!wrapper.hasAttribute('aria-hidden')) {\r\n            wrapper.addEventListener('keydown', (e) => {\r\n              if (e.key === 'Enter' || e.key === ' ') {\r\n                e.preventDefault();\r\n                this._openFromTarget(wrapper);\r\n              }\r\n            });\r\n          }\r\n        });\r\n      }\r\n\r\n      initializeAndAnimateText(textEl) {\r\n        const text = textEl.getAttribute('data-text');\r\n        if (!text) return;\r\n        textEl.innerHTML = text.split('').map(c =>\r\n          c === ' ' ? `<span class=\"letter\">&nbsp;<\/span>` : `<span class=\"letter\"><\/span>`\r\n        ).join('');\r\n        const nonSpaceIndices = [];\r\n        text.split('').forEach((c, i) => { if (c !== ' ') nonSpaceIndices.push(i); });\r\n        const shuffled  = nonSpaceIndices.sort(() => Math.random() - 0.5);\r\n        const letterEls = textEl.querySelectorAll('.letter');\r\n        return Promise.all(shuffled.map((origIdx, pos) => {\r\n          const dur = CONFIG.minDecryptDuration +\r\n            Math.random() * (CONFIG.maxDecryptDuration - CONFIG.minDecryptDuration);\r\n          return this.decryptLetter(letterEls[origIdx], text[origIdx], pos * 50, dur);\r\n        }));\r\n      }\r\n\r\n      decryptLetter(el, target, delay, duration) {\r\n        return new Promise(resolve => {\r\n          setTimeout(() => {\r\n            const end = Date.now() + duration;\r\n            const iv = setInterval(() => {\r\n              if (Date.now() >= end || el.textContent === target) {\r\n                el.textContent = target; clearInterval(iv); resolve();\r\n              } else {\r\n                el.textContent = target === ' '\r\n                  ? '\\u00A0'\r\n                  : CHARS[Math.floor(Math.random() * CHARS.length)];\r\n              }\r\n            }, CONFIG.decryptFrameRate);\r\n          }, delay);\r\n        });\r\n      }\r\n\r\n      resetText(textEl) {\r\n        const text = textEl.getAttribute('data-text');\r\n        if (text) textEl.innerHTML = text.split('').map(c =>\r\n          c === ' ' ? `<span class=\"letter\">&nbsp;<\/span>` : `<span class=\"letter\"><\/span>`\r\n        ).join('');\r\n      }\r\n\r\n      prefillTextForTouch() {\r\n        if (window.innerWidth > 1024) return;\r\n        Array.from(this.row.querySelectorAll('.image-wrapper')).forEach(wrapper => {\r\n          const textEl = wrapper.querySelector('.hover-text');\r\n          const text   = textEl?.getAttribute('data-text');\r\n          if (!text) return;\r\n          textEl.innerHTML = text.split('').map(c =>\r\n            c === ' ' ? `<span class=\"letter\">&nbsp;<\/span>` : `<span class=\"letter\">${c}<\/span>`\r\n          ).join('');\r\n        });\r\n      }\r\n\r\n      static prepareTextEl(textEl) {\r\n        const text = textEl?.getAttribute('data-text');\r\n        if (!text) return;\r\n        textEl.innerHTML = text.split('').map(c =>\r\n          c === ' ' ? `<span class=\"letter\">&nbsp;<\/span>` : `<span class=\"letter\"><\/span>`\r\n        ).join('');\r\n      }\r\n\r\n      attachVisibilityHandler() {\r\n        const handler = () => {\r\n          if (!this.dragState.active) {\r\n            this.animationState.isPaused = document.hidden;\r\n            if (!document.hidden) this.animationState.lastTime = null;\r\n          }\r\n        };\r\n        document.addEventListener('visibilitychange', handler);\r\n        this.boundHandlers.visibilityHandler = handler;\r\n      }\r\n\r\n      destroy() {\r\n        document.removeEventListener('mousemove',        this.boundHandlers.mouseMove);\r\n        document.removeEventListener('mouseup',          this.boundHandlers.mouseUp);\r\n        document.removeEventListener('touchmove',        this.boundHandlers.touchMove);\r\n        document.removeEventListener('touchend',         this.boundHandlers.touchEnd);\r\n        document.removeEventListener('touchcancel',      this.boundHandlers.touchEnd);\r\n        document.removeEventListener('visibilitychange', this.boundHandlers.visibilityHandler);\r\n        this.stopManualAnimation();\r\n        this.activeAnimations.clear();\r\n        console.log(`[GelpiGallery] Istanza #${this.instanceId} distrutta`);\r\n      }\r\n    };\r\n  }\r\n\r\n  const thisGallery = document.currentScript.previousElementSibling;\r\n  const instanceId  = window.GelpiGallery.instances.length + 1;\r\n  window.GelpiGallery.instances.push(new window.ScrollingGallery(thisGallery, instanceId));\r\n\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3268be7 e-flex e-con-boxed e-con e-parent\" data-id=\"3268be7\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5cd3ae2 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"5cd3ae2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>He teaches Cinematography and Directing at RUFA, Rome University of Fine Arts. He sits on the National Board of AIR3, the Italian Directors Association, and works actively with Authors&#8217; Associations on policy matters. narrative and visual storyteller I love telling and directing stories that explore people&#8217;s inner world, their journey and their emotions, with arcs [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"iawp_total_views":2,"footnotes":""},"class_list":["post-8087","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>About - ALBERTO GELPI<\/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:\/\/albertogelpi.com\/index.php\/about\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"About - ALBERTO GELPI\" \/>\n<meta property=\"og:description\" content=\"He teaches Cinematography and Directing at RUFA, Rome University of Fine Arts. He sits on the National Board of AIR3, the Italian Directors Association, and works actively with Authors&#8217; Associations on policy matters. narrative and visual storyteller I love telling and directing stories that explore people&#8217;s inner world, their journey and their emotions, with arcs [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/albertogelpi.com\/index.php\/about\/\" \/>\n<meta property=\"og:site_name\" content=\"ALBERTO GELPI\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/albertogelpidirector\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-09T09:31:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/Alberto_Gelpi_profilo-683x1024.jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/albertogelpi.com\\\/index.php\\\/about\\\/\",\"url\":\"https:\\\/\\\/albertogelpi.com\\\/index.php\\\/about\\\/\",\"name\":\"About - ALBERTO GELPI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/albertogelpi.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/albertogelpi.com\\\/index.php\\\/about\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/albertogelpi.com\\\/index.php\\\/about\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/albertogelpi.com\\\/wp-content\\\/uploads\\\/2018\\\/10\\\/Alberto_Gelpi_profilo-683x1024.jpeg\",\"datePublished\":\"2026-04-27T10:59:20+00:00\",\"dateModified\":\"2026-05-09T09:31:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/albertogelpi.com\\\/index.php\\\/about\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/albertogelpi.com\\\/index.php\\\/about\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/albertogelpi.com\\\/index.php\\\/about\\\/#primaryimage\",\"url\":\"https:\\\/\\\/albertogelpi.com\\\/wp-content\\\/uploads\\\/2018\\\/10\\\/Alberto_Gelpi_profilo.jpeg\",\"contentUrl\":\"https:\\\/\\\/albertogelpi.com\\\/wp-content\\\/uploads\\\/2018\\\/10\\\/Alberto_Gelpi_profilo.jpeg\",\"width\":800,\"height\":1200},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/albertogelpi.com\\\/index.php\\\/about\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/albertogelpi.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"About\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/albertogelpi.com\\\/#website\",\"url\":\"https:\\\/\\\/albertogelpi.com\\\/\",\"name\":\"ALBERTO GELPI\",\"description\":\"Commercial and Film Director based in Rome - Italy\",\"publisher\":{\"@id\":\"https:\\\/\\\/albertogelpi.com\\\/#\\\/schema\\\/person\\\/66be0b84de075dc41595a2f5355b2925\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/albertogelpi.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/albertogelpi.com\\\/#\\\/schema\\\/person\\\/66be0b84de075dc41595a2f5355b2925\",\"name\":\"Alberto Gelpi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/albertogelpi.com\\\/wp-content\\\/uploads\\\/2018\\\/10\\\/Alberto_Gelpi_profilo.jpeg\",\"url\":\"https:\\\/\\\/albertogelpi.com\\\/wp-content\\\/uploads\\\/2018\\\/10\\\/Alberto_Gelpi_profilo.jpeg\",\"contentUrl\":\"https:\\\/\\\/albertogelpi.com\\\/wp-content\\\/uploads\\\/2018\\\/10\\\/Alberto_Gelpi_profilo.jpeg\",\"width\":800,\"height\":1200,\"caption\":\"Alberto Gelpi\"},\"logo\":{\"@id\":\"https:\\\/\\\/albertogelpi.com\\\/wp-content\\\/uploads\\\/2018\\\/10\\\/Alberto_Gelpi_profilo.jpeg\"},\"sameAs\":[\"https:\\\/\\\/albertogelpi.com\",\"https:\\\/\\\/www.facebook.com\\\/albertogelpidirector\",\"https:\\\/\\\/www.instagram.com\\\/albertogelpi\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/albertogelpi\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"About - ALBERTO GELPI","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:\/\/albertogelpi.com\/index.php\/about\/","og_locale":"en_US","og_type":"article","og_title":"About - ALBERTO GELPI","og_description":"He teaches Cinematography and Directing at RUFA, Rome University of Fine Arts. He sits on the National Board of AIR3, the Italian Directors Association, and works actively with Authors&#8217; Associations on policy matters. narrative and visual storyteller I love telling and directing stories that explore people&#8217;s inner world, their journey and their emotions, with arcs [&hellip;]","og_url":"https:\/\/albertogelpi.com\/index.php\/about\/","og_site_name":"ALBERTO GELPI","article_publisher":"https:\/\/www.facebook.com\/albertogelpidirector","article_modified_time":"2026-05-09T09:31:01+00:00","og_image":[{"url":"https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/Alberto_Gelpi_profilo-683x1024.jpeg","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/albertogelpi.com\/index.php\/about\/","url":"https:\/\/albertogelpi.com\/index.php\/about\/","name":"About - ALBERTO GELPI","isPartOf":{"@id":"https:\/\/albertogelpi.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/albertogelpi.com\/index.php\/about\/#primaryimage"},"image":{"@id":"https:\/\/albertogelpi.com\/index.php\/about\/#primaryimage"},"thumbnailUrl":"https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/Alberto_Gelpi_profilo-683x1024.jpeg","datePublished":"2026-04-27T10:59:20+00:00","dateModified":"2026-05-09T09:31:01+00:00","breadcrumb":{"@id":"https:\/\/albertogelpi.com\/index.php\/about\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/albertogelpi.com\/index.php\/about\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/albertogelpi.com\/index.php\/about\/#primaryimage","url":"https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/Alberto_Gelpi_profilo.jpeg","contentUrl":"https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/Alberto_Gelpi_profilo.jpeg","width":800,"height":1200},{"@type":"BreadcrumbList","@id":"https:\/\/albertogelpi.com\/index.php\/about\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/albertogelpi.com\/"},{"@type":"ListItem","position":2,"name":"About"}]},{"@type":"WebSite","@id":"https:\/\/albertogelpi.com\/#website","url":"https:\/\/albertogelpi.com\/","name":"ALBERTO GELPI","description":"Commercial and Film Director based in Rome - Italy","publisher":{"@id":"https:\/\/albertogelpi.com\/#\/schema\/person\/66be0b84de075dc41595a2f5355b2925"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/albertogelpi.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/albertogelpi.com\/#\/schema\/person\/66be0b84de075dc41595a2f5355b2925","name":"Alberto Gelpi","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/Alberto_Gelpi_profilo.jpeg","url":"https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/Alberto_Gelpi_profilo.jpeg","contentUrl":"https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/Alberto_Gelpi_profilo.jpeg","width":800,"height":1200,"caption":"Alberto Gelpi"},"logo":{"@id":"https:\/\/albertogelpi.com\/wp-content\/uploads\/2018\/10\/Alberto_Gelpi_profilo.jpeg"},"sameAs":["https:\/\/albertogelpi.com","https:\/\/www.facebook.com\/albertogelpidirector","https:\/\/www.instagram.com\/albertogelpi","https:\/\/www.linkedin.com\/in\/albertogelpi"]}]}},"_links":{"self":[{"href":"https:\/\/albertogelpi.com\/index.php\/wp-json\/wp\/v2\/pages\/8087","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/albertogelpi.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/albertogelpi.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/albertogelpi.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/albertogelpi.com\/index.php\/wp-json\/wp\/v2\/comments?post=8087"}],"version-history":[{"count":208,"href":"https:\/\/albertogelpi.com\/index.php\/wp-json\/wp\/v2\/pages\/8087\/revisions"}],"predecessor-version":[{"id":8351,"href":"https:\/\/albertogelpi.com\/index.php\/wp-json\/wp\/v2\/pages\/8087\/revisions\/8351"}],"wp:attachment":[{"href":"https:\/\/albertogelpi.com\/index.php\/wp-json\/wp\/v2\/media?parent=8087"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}