{"id":1266,"date":"2026-01-22T19:30:55","date_gmt":"2026-01-22T19:30:55","guid":{"rendered":"https:\/\/greensolv.com\/?page_id=1266"},"modified":"2026-09-29T19:37:07","modified_gmt":"2026-09-29T19:37:07","slug":"centro-de-videos","status":"publish","type":"page","link":"https:\/\/greensolv.com\/es\/video-hub\/","title":{"rendered":"Centro de videos | Greensolv"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1266\" class=\"elementor elementor-1266\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-33a058f e-con-full e-flex e-con e-parent\" data-id=\"33a058f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6d8f30c elementor-widget elementor-widget-html\" data-id=\"6d8f30c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div id=\"gvlx-app\" class=\"gvlx-wrap gvlx-theme-light\">\r\n  <div class=\"gvlx-hero\">\r\n    <span class=\"gvlx-hero-badge\">\r\n      <span class=\"gvlx-hero-dot\"><\/span>\r\n      VIDEO HUB\r\n    <\/span>\r\n    <h1 class=\"gvlx-hero-title\">VIDEO HUB<\/h1>\r\n    <p class=\"gvlx-hero-subtext\" id=\"gvlx-subtitle\">Browse videos by category, search, and watch instantly.<\/p>\r\n  <\/div>\r\n\r\n  <div class=\"gvlx-tools\">\r\n    <div class=\"gvlx-filters\" id=\"gvlx-filters\"><\/div>\r\n\r\n    <div class=\"gvlx-search-wrap\">\r\n      <input type=\"text\" id=\"gvlx-search\" placeholder=\"Search videos...\" autocomplete=\"off\" \/>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div id=\"gvlx-loading\" class=\"gvlx-status\">Loading videos...<\/div>\r\n  <div id=\"gvlx-msg\" class=\"gvlx-status\" style=\"display:none;\">No videos found matching your criteria.<\/div>\r\n\r\n  <div class=\"gvlx-gallery\" id=\"gvlx-grid\"><\/div>\r\n\r\n  <div id=\"gvlx-modal\" class=\"gvlx-modal\" aria-hidden=\"true\" role=\"dialog\" aria-label=\"Video player\">\r\n    <div class=\"gvlx-backdrop\" data-gvlx-close=\"1\"><\/div>\r\n    <div class=\"gvlx-content\" role=\"document\">\r\n      <button class=\"gvlx-close\" type=\"button\" aria-label=\"Close\" data-gvlx-close=\"1\">\u2715<\/button>\r\n\r\n      <div class=\"gvlx-video-box\">\r\n        <iframe\r\n          id=\"gvlx-iframe\"\r\n          src=\"\"\r\n          allow=\"autoplay; encrypted-media\"\r\n          allowfullscreen\r\n          title=\"YouTube video player\"\r\n        ><\/iframe>\r\n      <\/div>\r\n\r\n      <div class=\"gvlx-meta gvlx-meta-left-only\">\r\n        <h3 id=\"gvlx-title\"><\/h3>\r\n        <span id=\"gvlx-tag\" class=\"gvlx-pill\"><\/span>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n  \/* ============================================================\r\n     STYLE DU VIDEO HUB\r\n     ============================================================ *\/\r\n  @import url('https:\/\/fonts.googleapis.com\/css2?family=Roboto:wght@300;400;500;600;700;900&display=swap');\r\n  @import url('https:\/\/fonts.googleapis.com\/css2?family=Oswald:wght@400;500;600;700&display=swap');\r\n\r\n  #gvlx-app.gvlx-wrap {\r\n    --gvlx-radius: 16px;\r\n    --gvlx-gap: clamp(18px, 2.6vw, 30px);\r\n    --gvlx-green: #0CBC41;\r\n    --gvlx-green-light: #e6f7ea;\r\n    --gvlx-bg: #ffffff;\r\n    --gvlx-ink: #111827;\r\n    --gvlx-muted: #6b7280;\r\n    --gvlx-soft: rgba(0,0,0,0.03);\r\n    --gvlx-line: rgba(0,0,0,0.06);\r\n    --gvlx-card-bg: #ffffff;\r\n    --gvlx-card-border: rgba(0,0,0,0.08);\r\n    --gvlx-shadow: 0 4px 20px rgba(0,0,0,0.05);\r\n    --gvlx-shadowHover: 0 10px 30px rgba(0,0,0,0.10);\r\n\r\n    font-family: Roboto, system-ui, -apple-system, sans-serif !important;\r\n    color: var(--gvlx-ink) !important;\r\n    line-height: 1.6 !important;\r\n    max-width: 1280px !important;\r\n    margin: 0 auto !important;\r\n    padding: 0 clamp(20px, 5vw, 64px) !important;\r\n  }\r\n\r\n  #gvlx-app.gvlx-wrap *, #gvlx-app.gvlx-wrap *::before, #gvlx-app.gvlx-wrap *::after { box-sizing: border-box !important; }\r\n\r\n  #gvlx-app .gvlx-hero-title, #gvlx-app .gvlx-tile-title {\r\n    font-family: \"Oswald\", \"DIN Condensed\", \"Arial Narrow\", sans-serif !important;\r\n    font-weight: 700 !important; text-transform: uppercase !important;\r\n  }\r\n\r\n  #gvlx-app p, #gvlx-app span, #gvlx-app div, #gvlx-app input, #gvlx-app button { font-family: Roboto, system-ui, sans-serif !important; }\r\n\r\n  #gvlx-app .gvlx-hero { margin-bottom: 40px !important; padding-top: 10px !important; }\r\n  #gvlx-app .gvlx-hero-badge {\r\n    display: inline-flex !important; align-items: center !important; gap: 8px !important;\r\n    background: var(--gvlx-soft) !important; border: 1px solid var(--gvlx-line) !important;\r\n    color: var(--gvlx-muted) !important; padding: 6px 16px !important; border-radius: 999px !important;\r\n    font-size: 11px !important; font-weight: 700 !important; letter-spacing: 0.1em !important; text-transform: uppercase !important; margin-bottom: 16px !important;\r\n  }\r\n  #gvlx-app .gvlx-hero-dot {\r\n    width: 6px !important; height: 6px !important; border-radius: 50% !important;\r\n    background: var(--gvlx-green) !important; box-shadow: 0 0 8px rgba(12,188,65,0.6) !important;\r\n  }\r\n  #gvlx-app .gvlx-hero-title { font-size: clamp(32px, 4vw, 44px) !important; margin: 0 0 12px 0 !important; line-height: 1.1 !important;}\r\n  #gvlx-app .gvlx-hero-subtext { max-width: 80ch !important; color: var(--gvlx-muted) !important; line-height: 1.75 !important; font-size: clamp(15px, 1.6vw, 17px) !important; margin: 0 !important; }\r\n\r\n  #gvlx-app .gvlx-tools { display: flex !important; gap: 14px !important; justify-content: space-between !important; align-items: center !important; flex-wrap: wrap !important; margin: 0 0 28px !important; }\r\n  #gvlx-app .gvlx-filters { display: flex !important; gap: 8px !important; flex-wrap: wrap !important; align-items: center !important; }\r\n\r\n  #gvlx-app .gvlx-pill-btn, #gvlx-app .gvlx-pill {\r\n    background: var(--gvlx-card-bg) !important; color: var(--gvlx-ink) !important;\r\n    border: 1px solid var(--gvlx-line) !important; border-radius: 999px !important;\r\n    padding: 8px 16px !important; cursor: pointer !important; transition: all 0.2s ease !important;\r\n    font-size: 12px !important; font-weight: 700 !important; letter-spacing: 0.08em !important; text-transform: uppercase !important; white-space: nowrap !important;\r\n  }\r\n  #gvlx-app .gvlx-pill-btn:hover { background: var(--gvlx-green-light) !important; border-color: rgba(12,188,65,0.3) !important; color: var(--gvlx-green) !important; }\r\n  #gvlx-app .gvlx-pill-btn.is-active { background: var(--gvlx-ink) !important; color: #fff !important; border-color: var(--gvlx-ink) !important; }\r\n\r\n  #gvlx-app .gvlx-search-wrap input { padding: 10px 18px !important; border-radius: 999px !important; border: 1px solid var(--gvlx-line) !important; outline: none !important; width: min(340px, 70vw) !important; transition: 0.25s !important; background: #fff !important; font-size: 14px !important; }\r\n  #gvlx-app .gvlx-search-wrap input:focus { border-color: var(--gvlx-green) !important; }\r\n\r\n  #gvlx-app .gvlx-status { text-align: center !important; padding: 26px 16px !important; color: var(--gvlx-muted) !important; border: 1px solid var(--gvlx-line) !important; background: var(--gvlx-soft) !important; border-radius: var(--gvlx-radius) !important; margin-bottom: 18px !important; }\r\n\r\n  #gvlx-app .gvlx-gallery { display: grid !important; grid-template-columns: repeat(4, 1fr) !important; gap: var(--gvlx-gap) !important; align-items: stretch !important; }\r\n  @media (max-width: 1280px) { #gvlx-app .gvlx-gallery { grid-template-columns: repeat(3, 1fr) !important; } }\r\n  @media (max-width: 980px)  { #gvlx-app.gvlx-wrap { padding: 0 20px !important; } #gvlx-app .gvlx-gallery { grid-template-columns: repeat(2, 1fr) !important; } }\r\n  @media (max-width: 620px)  { #gvlx-app .gvlx-gallery { grid-template-columns: 1fr !important; } }\r\n\r\n  #gvlx-app .gvlx-tile { display: flex !important; flex-direction: column !important; border-radius: var(--gvlx-radius) !important; overflow: hidden !important; background: var(--gvlx-card-bg) !important; border: 1px solid var(--gvlx-card-border) !important; box-shadow: var(--gvlx-shadow) !important; transition: box-shadow 0.4s ease, transform 0.4s ease, border-color 0.4s ease !important; text-decoration: none !important; color: inherit !important; height: 100% !important; cursor: pointer !important; position: relative !important; }\r\n  #gvlx-app .gvlx-tile:hover { transform: translateY(-4px) !important; box-shadow: var(--gvlx-shadowHover) !important; border-color: rgba(12,188,65,0.20) !important; }\r\n\r\n  #gvlx-app .gvlx-media { width: 100% !important; aspect-ratio: 16 \/ 10 !important; background: var(--gvlx-soft) !important; position: relative !important; overflow: hidden !important; border-bottom: 1px solid var(--gvlx-line) !important; }\r\n  #gvlx-app .gvlx-media img { position: absolute !important; inset: 0 !important; width: 100% !important; height: 100% !important; object-fit: cover !important; display: block !important; transition: transform 0.5s cubic-bezier(0.2, 0.8, 0.2, 1) !important; }\r\n  #gvlx-app .gvlx-tile:hover .gvlx-media img { transform: scale(1.05) !important; }\r\n\r\n  #gvlx-app .gvlx-play { position: absolute !important; inset: 0 !important; display: grid !important; place-items: center !important; pointer-events: none !important; }\r\n  #gvlx-app .gvlx-play-bubble { width: 56px !important; height: 56px !important; border-radius: 999px !important; background: rgba(255,255,255,0.92) !important; box-shadow: 0 8px 22px rgba(0,0,0,0.18) !important; display: grid !important; place-items: center !important; transition: transform 0.25s ease !important; }\r\n  #gvlx-app .gvlx-tile:hover .gvlx-play-bubble { transform: scale(1.08) !important; }\r\n  #gvlx-app .gvlx-play-bubble:after { content: \"\" !important; display: block !important; margin-left: 3px !important; border-left: 16px solid var(--gvlx-green) !important; border-top: 10px solid transparent !important; border-bottom: 10px solid transparent !important; }\r\n\r\n  #gvlx-app .gvlx-tile-content { padding: 24px !important; display: flex !important; flex-direction: column !important; flex-grow: 1 !important; gap: 12px !important; }\r\n  #gvlx-app .gvlx-tile-cat { font-size: 11px !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.1em !important; color: var(--gvlx-green) !important; }\r\n  \r\n  \/* --- TITRE AJUST\u00c9 : Plus petit et jamais coup\u00e9 --- *\/\r\n  #gvlx-app .gvlx-tile-title { \r\n    font-size: clamp(18px, 1.5vw, 22px) !important; \r\n    line-height: 1.25 !important; \r\n    color: var(--gvlx-ink) !important; \r\n    margin: 0 !important;\r\n    display: block !important; \r\n    word-wrap: break-word !important; \r\n  }\r\n  \r\n  #gvlx-app .gvlx-tile-excerpt { font-size: 14px !important; color: var(--gvlx-muted) !important; line-height: 1.6 !important; flex-grow: 1 !important; display: -webkit-box !important; -webkit-line-clamp: 3 !important; -webkit-box-orient: vertical !important; overflow: hidden !important; }\r\n  #gvlx-app .gvlx-tile-meta { border-top: 1px solid var(--gvlx-line) !important; padding-top: 16px !important; display: flex !important; align-items: center !important; justify-content: space-between !important; gap: 10px !important; color: var(--gvlx-muted) !important; font-size: 12px !important; margin-top: auto !important; }\r\n\r\n  #gvlx-app .gvlx-share { display: flex !important; gap: 8px !important; align-items: center !important; }\r\n  #gvlx-app .gvlx-icon { width: 30px !important; height: 30px !important; border-radius: 999px !important; border: 1px solid var(--gvlx-line) !important; background: #f8fafc !important; display: grid !important; place-items: center !important; transition: transform 0.18s ease, background 0.18s ease, border-color 0.18s ease !important; padding: 0 !important; cursor: pointer !important; }\r\n  #gvlx-app .gvlx-icon svg { width: 14px !important; height: 14px !important; fill: #64748b !important; }\r\n  #gvlx-app .gvlx-icon:hover { transform: translateY(-2px) !important; }\r\n  #gvlx-app .gvlx-icon.gvlx-fb:hover { background: #1877F2 !important; border-color: #1877F2 !important; }\r\n  #gvlx-app .gvlx-icon.gvlx-in:hover { background: #0A66C2 !important; border-color: #0A66C2 !important; }\r\n  #gvlx-app .gvlx-icon.gvlx-x:hover  { background: #000000 !important; border-color: #000000 !important; }\r\n  #gvlx-app .gvlx-icon.gvlx-fb:hover svg, #gvlx-app .gvlx-icon.gvlx-in:hover svg, #gvlx-app .gvlx-icon.gvlx-x:hover svg { fill: #fff !important; }\r\n\r\n  \/* Modal *\/\r\n  #gvlx-app .gvlx-modal { display: none !important; position: fixed !important; inset: 0 !important; z-index: 99999 !important; justify-content: center !important; align-items: center !important; padding: 18px !important; }\r\n  #gvlx-app .gvlx-modal.is-open { display: flex !important; }\r\n  #gvlx-app .gvlx-backdrop { position: absolute !important; inset: 0 !important; background: rgba(0,0,0,0.85) !important; backdrop-filter: blur(4px) !important; }\r\n  #gvlx-app .gvlx-content { position: relative !important; width: min(980px, 96vw) !important; background: #fff !important; border-radius: var(--gvlx-radius) !important; overflow: hidden !important; z-index: 10 !important; box-shadow: 0 25px 50px rgba(0,0,0,0.5) !important; }\r\n  #gvlx-app .gvlx-close { position: absolute !important; top: 12px !important; right: 12px !important; width: 42px !important; height: 42px !important; border-radius: 999px !important; border: 1px solid rgba(0,0,0,0.12) !important; background: rgba(255,255,255,0.95) !important; cursor: pointer !important; font-size: 18px !important; line-height: 1 !important; transition: transform 0.18s ease, border-color 0.18s ease !important; z-index: 20 !important; }\r\n  #gvlx-app .gvlx-close:hover { transform: scale(1.05) !important; border-color: rgba(12,188,65,0.35) !important; }\r\n\r\n  #gvlx-app .gvlx-video-box { position: relative !important; padding-bottom: 56.25% !important; height: 0 !important; background: #000 !important; }\r\n  #gvlx-app .gvlx-video-box iframe { position: absolute !important; inset: 0 !important; width: 100% !important; height: 100% !important; border: 0 !important; }\r\n\r\n  #gvlx-app .gvlx-meta { padding: 18px 18px 20px !important; display: flex !important; flex-direction: column !important; gap: 10px !important; border-top: 1px solid var(--gvlx-line) !important; }\r\n  #gvlx-app .gvlx-meta h3 { margin: 0 !important; font-size: 18px !important; color: var(--gvlx-ink) !important; }\r\n  #gvlx-app .gvlx-pill { cursor: default !important; align-self: flex-start !important; padding: 6px 12px !important; font-size: 11px !important; letter-spacing: 0.08em !important; }\r\n\r\n<\/style>\r\n\r\n<script>\r\n(function () {\r\n  \/\/ =======================================================\r\n  \/\/ 1. D\u00c9TECTION DE LA LANGUE VIA L'ATTRIBUT HTML (TranslatePress)\r\n  \/\/ =======================================================\r\n  const currentLang = document.documentElement.lang.toLowerCase() || 'en';\r\n\r\n  \/\/ =======================================================\r\n  \/\/ 2. VOS LIENS GOOGLE SHEETS CSV \r\n  \/\/ =======================================================\r\n  const CSV_URLS = {\r\n    en: 'https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vTs7I7UFmet_DNE8txNg_GKK0etYP1JSSwvP_ypSjBu99O6_jBnIEX4rZjRKQ6DV_MWpRDvwoNtx_Kf\/pub?gid=0&single=true&output=csv',\r\n    fr: 'https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vTs7I7UFmet_DNE8txNg_GKK0etYP1JSSwvP_ypSjBu99O6_jBnIEX4rZjRKQ6DV_MWpRDvwoNtx_Kf\/pub?gid=667451209&single=true&output=csv',\r\n    es: 'https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vTs7I7UFmet_DNE8txNg_GKK0etYP1JSSwvP_ypSjBu99O6_jBnIEX4rZjRKQ6DV_MWpRDvwoNtx_Kf\/pub?gid=767451074&single=true&output=csv'\r\n  };\r\n\r\n  let activeSheetUrl = CSV_URLS.en;\r\n  let uiTexts = {\r\n    searchPlaceholder: \"Search videos...\",\r\n    loading: \"Loading videos...\",\r\n    empty: \"No videos found matching your criteria.\",\r\n    share: \"Share :\",\r\n    all: \"All\",\r\n    subtitle: \"Browse videos by category, search, and watch instantly.\"\r\n  };\r\n\r\n  if (currentLang.includes('fr')) {\r\n    activeSheetUrl = CSV_URLS.fr;\r\n    uiTexts = {\r\n      searchPlaceholder: \"Rechercher des vid\u00e9os...\",\r\n      loading: \"Chargement des vid\u00e9os...\",\r\n      empty: \"Aucune vid\u00e9o trouv\u00e9e.\",\r\n      share: \"Partager :\",\r\n      all: \"Tout\",\r\n      subtitle: \"Parcourez les vid\u00e9os par cat\u00e9gorie, recherchez et regardez instantan\u00e9ment.\"\r\n    };\r\n  } else if (currentLang.includes('es')) {\r\n    activeSheetUrl = CSV_URLS.es;\r\n    uiTexts = {\r\n      searchPlaceholder: \"Buscar videos...\",\r\n      loading: \"Cargando videos...\",\r\n      empty: \"No se encontraron videos.\",\r\n      share: \"Compartir :\",\r\n      all: \"Todos\",\r\n      subtitle: \"Explora videos por categor\u00eda, busca y mira al instante.\"\r\n    };\r\n  }\r\n\r\n  const root = document.getElementById('gvlx-app');\r\n  if (!root) return;\r\n\r\n  let videos = [];\r\n  let activeTag = 'all';\r\n\r\n  const els = {\r\n    grid: document.getElementById('gvlx-grid'),\r\n    filters: document.getElementById('gvlx-filters'),\r\n    search: document.getElementById('gvlx-search'),\r\n    loading: document.getElementById('gvlx-loading'),\r\n    msg: document.getElementById('gvlx-msg'),\r\n    modal: document.getElementById('gvlx-modal'),\r\n    iframe: document.getElementById('gvlx-iframe'),\r\n    mTitle: document.getElementById('gvlx-title'),\r\n    mTag: document.getElementById('gvlx-tag'),\r\n    subtitle: document.getElementById('gvlx-subtitle')\r\n  };\r\n\r\n  \/\/ Appliquer les traductions\r\n  els.search.placeholder = uiTexts.searchPlaceholder;\r\n  els.loading.textContent = uiTexts.loading;\r\n  els.msg.textContent = uiTexts.empty;\r\n  if(els.subtitle) els.subtitle.textContent = uiTexts.subtitle;\r\n\r\n  function parseCSVLine(line) {\r\n    const result = [];\r\n    let current = '';\r\n    let inQuotes = false;\r\n    for (let i = 0; i < line.length; i++) {\r\n      const c = line[i];\r\n      if (c === '\"') {\r\n        if (inQuotes && line[i + 1] === '\"') { current += '\"'; i++; } else { inQuotes = !inQuotes; }\r\n      } else if (c === ',' && !inQuotes) {\r\n        result.push(current.trim()); current = '';\r\n      } else { current += c; }\r\n    }\r\n    result.push(current.trim());\r\n    return result;\r\n  }\r\n\r\n  function extractYouTubeId(url) {\r\n    if (!url) return '';\r\n    const u = String(url).trim();\r\n    if (u.includes('youtu.be\/')) return u.split('youtu.be\/')[1].split('?')[0].split('&')[0].split('#')[0];\r\n    if (u.includes('v=')) return u.split('v=')[1].split('&')[0].split('#')[0];\r\n    if (u.includes('\/embed\/')) return u.split('\/embed\/')[1].split('?')[0].split('&')[0].split('#')[0];\r\n    return '';\r\n  }\r\n\r\n  function parseCSV(csvText) {\r\n    const lines = csvText.split('\\n');\r\n    const data = [];\r\n    for (let i = 1; i < lines.length; i++) {\r\n      const line = lines[i].trim();\r\n      if (!line) continue;\r\n      const cols = parseCSVLine(line);\r\n      if (cols.length < 3) continue;\r\n\r\n      const tag = (cols[0] || '').trim();\r\n      const title = (cols[1] || '').trim();\r\n      const url = (cols[2] || '').trim();\r\n      const excerpt = (cols[3] || '').trim();\r\n      const id = extractYouTubeId(url);\r\n      \r\n      if (!id || !title) continue;\r\n\r\n      data.push({\r\n        tag: tag || 'General',\r\n        title,\r\n        excerpt,\r\n        id,\r\n        url: `https:\/\/www.youtube.com\/watch?v=${id}`\r\n      });\r\n    }\r\n    return data;\r\n  }\r\n\r\n  function escapeHtml(str) {\r\n    return String(str || '').replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;').replaceAll('\"', '&quot;').replaceAll(\"'\", '&#039;');\r\n  }\r\n\r\n  function renderFilters() {\r\n    const uniqueTags = ['All', ...new Set(videos.map(v => v.tag))];\r\n\r\n    els.filters.innerHTML = uniqueTags.map(label => {\r\n      const val = label === 'All' ? 'all' : label;\r\n      const displayLabel = label === 'All' ? uiTexts.all : label;\r\n      const activeClass = (activeTag === val) ? 'is-active' : '';\r\n      return `<button type=\"button\" class=\"gvlx-pill-btn ${activeClass}\" data-tag=\"${escapeHtml(val)}\">${escapeHtml(displayLabel)}<\/button>`;\r\n    }).join('');\r\n\r\n    els.filters.querySelectorAll('button[data-tag]').forEach(btn => {\r\n      btn.addEventListener('click', () => {\r\n        activeTag = btn.getAttribute('data-tag') || 'all';\r\n        render();\r\n      });\r\n    });\r\n  }\r\n\r\n  function getResults() {\r\n    const q = (els.search.value || '').toLowerCase().trim();\r\n    return videos.filter(v => {\r\n      const tagOk = (activeTag === 'all') || (v.tag === activeTag);\r\n      const searchOk = !q || v.title.toLowerCase().includes(q) || (v.excerpt || '').toLowerCase().includes(q);\r\n      return tagOk && searchOk;\r\n    });\r\n  }\r\n\r\n  function share(platform, url, title = '') {\r\n    let shareUrl = '';\r\n    if (platform === 'in') shareUrl = `https:\/\/www.linkedin.com\/sharing\/share-offsite\/?url=${encodeURIComponent(url)}`;\r\n    if (platform === 'fb') shareUrl = `https:\/\/www.facebook.com\/sharer\/sharer.php?u=${encodeURIComponent(url)}`;\r\n    if (platform === 'x')  shareUrl = `https:\/\/twitter.com\/intent\/tweet?url=${encodeURIComponent(url)}&text=${encodeURIComponent(title)}`;\r\n    window.open(shareUrl, '_blank', 'width=600,height=400');\r\n  }\r\n\r\n  function cardTemplate(v) {\r\n    const thumb = `https:\/\/i.ytimg.com\/vi\/${v.id}\/hqdefault.jpg`;\r\n    const excerpt = v.excerpt ? v.excerpt : '';\r\n\r\n    return `\r\n      <article class=\"gvlx-tile\" data-id=\"${escapeHtml(v.id)}\" role=\"button\" tabindex=\"0\" aria-label=\"Play video: ${escapeHtml(v.title)}\">\r\n        <div class=\"gvlx-media\">\r\n          <img decoding=\"async\" src=\"${escapeHtml(thumb)}\" loading=\"lazy\" alt=\"${escapeHtml(v.title)}\">\r\n          <div class=\"gvlx-play\"><div class=\"gvlx-play-bubble\"><\/div><\/div>\r\n        <\/div>\r\n\r\n        <div class=\"gvlx-tile-content\">\r\n          <span class=\"gvlx-tile-cat\">${escapeHtml(v.tag)}<\/span>\r\n          <h3 class=\"gvlx-tile-title\">${escapeHtml(v.title)}<\/h3>\r\n          <div class=\"gvlx-tile-excerpt\">${escapeHtml(excerpt)}<\/div>\r\n\r\n          <div class=\"gvlx-tile-meta\">\r\n            <span>${uiTexts.share}<\/span>\r\n            <div class=\"gvlx-share\" aria-label=\"Share\">\r\n              <button type=\"button\" class=\"gvlx-icon gvlx-in\" data-share=\"in\" title=\"LinkedIn\" aria-label=\"Share on LinkedIn\"><svg viewBox=\"0 0 24 24\"><path d=\"M19 0h-14c-2.761 0-5 2.239-5 5v14c0 2.761 2.239 5 5 5h14c2.762 0 5-2.239 5-5v-14c0-2.761-2.238-5-5-5zm-11 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.396-2.586 7-2.777 7 2.476v6.759z\"\/><\/svg><\/button>\r\n              <button type=\"button\" class=\"gvlx-icon gvlx-fb\" data-share=\"fb\" title=\"Facebook\" aria-label=\"Share on Facebook\"><svg viewBox=\"0 0 24 24\"><path d=\"M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385h-3.047v-3.47h3.047v-2.641c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953h-1.514c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385c5.737-.9 10.125-5.864 10.125-11.854z\"\/><\/svg><\/button>\r\n              <button type=\"button\" class=\"gvlx-icon gvlx-x\" data-share=\"x\" title=\"X\" aria-label=\"Share on X\"><svg viewBox=\"0 0 24 24\"><path d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z\"\/><\/svg><\/button>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/article>\r\n    `;\r\n  }\r\n\r\n  function renderGrid(results) {\r\n    if (results.length === 0) {\r\n      els.msg.style.display = 'block';\r\n      els.grid.innerHTML = '';\r\n      return;\r\n    }\r\n\r\n    els.msg.style.display = 'none';\r\n    els.grid.innerHTML = results.map(cardTemplate).join('');\r\n\r\n    els.grid.querySelectorAll('.gvlx-tile[data-id]').forEach(tile => {\r\n      const id = tile.getAttribute('data-id');\r\n      const open = () => play(id);\r\n\r\n      tile.addEventListener('click', (e) => {\r\n        const shareBtn = e.target.closest('button[data-share]');\r\n        if (shareBtn) return;\r\n        open();\r\n      });\r\n\r\n      tile.addEventListener('keydown', (e) => {\r\n        if (e.key === 'Enter' || e.key === ' ') {\r\n          e.preventDefault(); open();\r\n        }\r\n      });\r\n\r\n      tile.querySelectorAll('button[data-share]').forEach(btn => {\r\n        btn.addEventListener('click', (e) => {\r\n          e.preventDefault(); e.stopPropagation();\r\n          const platform = btn.getAttribute('data-share');\r\n          const vid = videos.find(v => v.id === id);\r\n          if (!vid) return;\r\n          share(platform, vid.url, vid.title);\r\n        });\r\n      });\r\n    });\r\n  }\r\n\r\n  function render() {\r\n    renderFilters();\r\n    const results = getResults();\r\n    renderGrid(results);\r\n  }\r\n\r\n  function openModal() {\r\n    els.modal.classList.add('is-open');\r\n    els.modal.setAttribute('aria-hidden', 'false');\r\n    document.body.style.overflow = 'hidden';\r\n  }\r\n\r\n  function closeModal() {\r\n    els.modal.classList.remove('is-open');\r\n    els.modal.setAttribute('aria-hidden', 'true');\r\n    els.iframe.src = '';\r\n    document.body.style.overflow = '';\r\n  }\r\n\r\n  function play(id) {\r\n    const vid = videos.find(v => v.id === id);\r\n    if (!vid) return;\r\n    els.iframe.src = `https:\/\/www.youtube.com\/embed\/${id}?autoplay=1&rel=0`;\r\n    els.mTitle.textContent = vid.title;\r\n    els.mTag.textContent = vid.tag;\r\n    openModal();\r\n  }\r\n\r\n  els.modal.addEventListener('click', (e) => {\r\n    if (e.target && e.target.getAttribute && e.target.getAttribute('data-gvlx-close') === '1') {\r\n      closeModal();\r\n    }\r\n  });\r\n\r\n  document.addEventListener('keydown', (e) => {\r\n    if (e.key === 'Escape' && els.modal.classList.contains('is-open')) closeModal();\r\n  });\r\n\r\n  els.search.addEventListener('input', () => render());\r\n\r\n  async function loadVideos() {\r\n    try {\r\n      const response = await fetch(activeSheetUrl, { cache: 'no-store' });\r\n      const csvText = await response.text();\r\n      videos = parseCSV(csvText);\r\n      els.loading.style.display = 'none';\r\n      render();\r\n    } catch (err) {\r\n      console.error('GVLX load error:', err);\r\n      els.loading.textContent = 'Error loading videos. Please refresh the page.';\r\n    }\r\n  }\r\n\r\n  loadVideos();\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","protected":false},"excerpt":{"rendered":"<p>\u00a1El sistema de pelado adecuado para la industria aeroespacial!<\/p>","protected":false},"author":1,"featured_media":3593,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-1266","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Video Hub | Greensolv<\/title>\n<meta name=\"description\" content=\"Watch Greensolv videos showcasing stripping systems, equipment, lab expertise and industrial surface treatment solutions.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/greensolv.com\/es\/centro-de-videos\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Video Hub | Greensolv\" \/>\n<meta property=\"og:description\" content=\"Watch Greensolv videos showcasing stripping systems, equipment, lab expertise and industrial surface treatment solutions.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/greensolv.com\/es\/centro-de-videos\/\" \/>\n<meta property=\"og:site_name\" content=\"Greensolv\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/greensolv\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-29T19:37:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/04\/img-6809.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1620\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\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=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minuto\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/greensolv.com\\\/video-hub\\\/\",\"url\":\"https:\\\/\\\/greensolv.com\\\/video-hub\\\/\",\"name\":\"Video Hub | Greensolv\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/greensolv.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/greensolv.com\\\/video-hub\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/greensolv.com\\\/video-hub\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/greensolv.com\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/img-6809.jpg\",\"datePublished\":\"2026-01-22T19:30:55+00:00\",\"dateModified\":\"2026-09-29T19:37:07+00:00\",\"description\":\"Watch Greensolv videos showcasing stripping systems, equipment, lab expertise and industrial surface treatment solutions.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/greensolv.com\\\/video-hub\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/greensolv.com\\\/video-hub\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/greensolv.com\\\/video-hub\\\/#primaryimage\",\"url\":\"https:\\\/\\\/greensolv.com\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/img-6809.jpg\",\"contentUrl\":\"https:\\\/\\\/greensolv.com\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/img-6809.jpg\",\"width\":1620,\"height\":1080,\"caption\":\"Greensolv laboratory performing paint stripping chemical testing in strip tank\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/greensolv.com\\\/video-hub\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/greensolv.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Video Hub | Greensolv\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/greensolv.com\\\/#website\",\"url\":\"https:\\\/\\\/greensolv.com\\\/\",\"name\":\"Greensolv\",\"description\":\"Greensolv\",\"publisher\":{\"@id\":\"https:\\\/\\\/greensolv.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/greensolv.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/greensolv.com\\\/#organization\",\"name\":\"Greensolv\",\"url\":\"https:\\\/\\\/greensolv.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/greensolv.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/greensolv.com\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/greensolv.png\",\"contentUrl\":\"https:\\\/\\\/greensolv.com\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/greensolv.png\",\"width\":400,\"height\":95,\"caption\":\"Greensolv\"},\"image\":{\"@id\":\"https:\\\/\\\/greensolv.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/greensolv\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/greensolv-inc.\\\/?originalSubdomain=fr\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UC2QinAkroLYi9IWiI535img\",\"https:\\\/\\\/www.instagram.com\\\/greensolv_inc\\\/\",\"https:\\\/\\\/www.tiktok.com\\\/@greensolv?lang=en\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Centro de videos | Greensolv","description":"Mira los videos de Greensolv en los que se muestran sistemas de decapado, equipos, experiencia en laboratorio y soluciones de tratamiento de superficies industriales.","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:\/\/greensolv.com\/es\/centro-de-videos\/","og_locale":"es_MX","og_type":"article","og_title":"Video Hub | Greensolv","og_description":"Watch Greensolv videos showcasing stripping systems, equipment, lab expertise and industrial surface treatment solutions.","og_url":"https:\/\/greensolv.com\/es\/centro-de-videos\/","og_site_name":"Greensolv","article_publisher":"https:\/\/www.facebook.com\/greensolv\/","article_modified_time":"2026-09-29T19:37:07+00:00","og_image":[{"width":1620,"height":1080,"url":"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/04\/img-6809.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Tiempo de lectura":"1 minuto"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/greensolv.com\/video-hub\/","url":"https:\/\/greensolv.com\/video-hub\/","name":"Centro de videos | Greensolv","isPartOf":{"@id":"https:\/\/greensolv.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/greensolv.com\/video-hub\/#primaryimage"},"image":{"@id":"https:\/\/greensolv.com\/video-hub\/#primaryimage"},"thumbnailUrl":"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/04\/img-6809.jpg","datePublished":"2026-01-22T19:30:55+00:00","dateModified":"2026-09-29T19:37:07+00:00","description":"Mira los videos de Greensolv en los que se muestran sistemas de decapado, equipos, experiencia en laboratorio y soluciones de tratamiento de superficies industriales.","breadcrumb":{"@id":"https:\/\/greensolv.com\/video-hub\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/greensolv.com\/video-hub\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/greensolv.com\/video-hub\/#primaryimage","url":"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/04\/img-6809.jpg","contentUrl":"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/04\/img-6809.jpg","width":1620,"height":1080,"caption":"Greensolv laboratory performing paint stripping chemical testing in strip tank"},{"@type":"BreadcrumbList","@id":"https:\/\/greensolv.com\/video-hub\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/greensolv.com\/"},{"@type":"ListItem","position":2,"name":"Video Hub | Greensolv"}]},{"@type":"WebSite","@id":"https:\/\/greensolv.com\/#website","url":"https:\/\/greensolv.com\/","name":"Greensolv","description":"Greensolv","publisher":{"@id":"https:\/\/greensolv.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/greensolv.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/greensolv.com\/#organization","name":"Greensolv","url":"https:\/\/greensolv.com\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/greensolv.com\/#\/schema\/logo\/image\/","url":"https:\/\/greensolv.com\/wp-content\/uploads\/2025\/09\/greensolv.png","contentUrl":"https:\/\/greensolv.com\/wp-content\/uploads\/2025\/09\/greensolv.png","width":400,"height":95,"caption":"Greensolv"},"image":{"@id":"https:\/\/greensolv.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/greensolv\/","https:\/\/www.linkedin.com\/company\/greensolv-inc.\/?originalSubdomain=fr","https:\/\/www.youtube.com\/channel\/UC2QinAkroLYi9IWiI535img","https:\/\/www.instagram.com\/greensolv_inc\/","https:\/\/www.tiktok.com\/@greensolv?lang=en"]}]}},"_links":{"self":[{"href":"https:\/\/greensolv.com\/es\/wp-json\/wp\/v2\/pages\/1266","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/greensolv.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/greensolv.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/greensolv.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/greensolv.com\/es\/wp-json\/wp\/v2\/comments?post=1266"}],"version-history":[{"count":102,"href":"https:\/\/greensolv.com\/es\/wp-json\/wp\/v2\/pages\/1266\/revisions"}],"predecessor-version":[{"id":4954,"href":"https:\/\/greensolv.com\/es\/wp-json\/wp\/v2\/pages\/1266\/revisions\/4954"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/greensolv.com\/es\/wp-json\/wp\/v2\/media\/3593"}],"wp:attachment":[{"href":"https:\/\/greensolv.com\/es\/wp-json\/wp\/v2\/media?parent=1266"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}