{"id":8219,"date":"2026-11-09T16:38:31","date_gmt":"2026-11-09T16:38:31","guid":{"rendered":"https:\/\/bydmb.com\/?p=8219"},"modified":"2026-11-09T19:09:39","modified_gmt":"2026-11-09T19:09:39","slug":"chica-de-revista-music-video-title-design","status":"publish","type":"post","link":"https:\/\/bydmb.com\/es\/music\/chica-de-revista-music-video-title-design\/","title":{"rendered":"Chica de revista de Shoren &#8211; Dise\u00f1o de t\u00edtulo y cr\u00e9ditos"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"8219\" class=\"elementor elementor-8219\">\n\t\t\t\t<div class=\"elementor-element elementor-element-370d9e92 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent\" data-id=\"370d9e92\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-265af951 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"265af951\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-24b86747 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"24b86747\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3263a1fd elementor-widget elementor-widget-heading\" data-id=\"3263a1fd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Chica de Revista \u2014 Hand-Drawn Title Design and Credits<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2663df20 elementor-widget elementor-widget-heading\" data-id=\"2663df20\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Lettering, Title Design, Prop Design, Cover Art.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-db441df elementor-widget elementor-widget-heading\" data-id=\"db441df\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/open.spotify.com\/intl-es\/artist\/6MRCWn4BaMCrfxzseImRuN?si=UF4GKwBfSoexECV7mYWcPg\">Shoren<\/a><\/h3>\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-79cd4e23 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"79cd4e23\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-116d32bf elementor-widget elementor-widget-heading\" data-id=\"116d32bf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">2026<\/h2>\t\t\t\t<\/div>\n\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-41290fdc e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"41290fdc\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-31cc75c8 elementor-widget__width-initial logo-verde elementor-widget elementor-widget-image\" data-id=\"31cc75c8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"760\" src=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/Chicaderevista_Logotipos_Portadaentrada-1024x973.png\" class=\"attachment-large size-large wp-image-8239\" alt=\"\" srcset=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/Chicaderevista_Logotipos_Portadaentrada-1024x973.png 1024w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/Chicaderevista_Logotipos_Portadaentrada-300x285.png 300w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/Chicaderevista_Logotipos_Portadaentrada-768x730.png 768w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/Chicaderevista_Logotipos_Portadaentrada-13x12.png 13w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/Chicaderevista_Logotipos_Portadaentrada.png 1042w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2b2c47ec elementor-widget__width-inherit elementor-widget elementor-widget-text-editor\" data-id=\"2b2c47ec\" 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>Title design, credits, magazine props and a single cover proposal for <em>Chica de Revista<\/em>, the music video by Shoren, directed by Mario Alcal\u00e1.<\/p><p><strong><span style=\"text-decoration: underline;\"><a href=\"https:\/\/youtu.be\/kzOkHCiairY?list=RDkzOkHCiairY\">\u25b6 Watch the full music video on YouTube<\/a><\/span><\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-503458f5 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"503458f5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f292e9a video-play elementor-widget elementor-widget-html\" data-id=\"f292e9a\" 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<div class=\"custom-video-container\">\n  <video autoplay loop muted playsinline>\n    <source src=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-opening-credits-lettering.mp4\" type=\"video\/mp4\">\n    Tu navegador no soporta v\u00eddeos HTML5.\n  <\/video>\n<\/div>\n\n<style>\n  .custom-video-container {\n    width: 700px;\n    height: 500px;\n    overflow: hidden;\n    display: block;\n  }\n\n  .custom-video-container video {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    display: block;\n  }\n\n  \/* M\u00f3vil: ancho completo del contenedor, misma proporci\u00f3n (3:4) *\/\n  @media (max-width: 767px) {\n    .custom-video-container {\n      width: 100%;\n      height: auto;\n      aspect-ratio: 3 \/ 2;\n    }\n  }\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-428659b1 elementor-widget__width-inherit elementor-widget elementor-widget-text-editor\" data-id=\"428659b1\" 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 dir=\"ltr\"><strong>The story<\/strong><\/p><p dir=\"ltr\">The video follows a famous girl, a magazine girl, hounded by journalists and paparazzi in her car. Suddenly, someone in the crowd of cameras hands her a bouquet of flowers, and scenes start to appear of the life she could have with that boy, far from fame. Choosing that other life, she turns against her public image: she grabs a magazine with herself on the cover and scribbles all over it with a marker, drawing horns and angry eyebrows on her face and crossing it all out, like we used to do with magazine photos as kids.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-43cd1565 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"43cd1565\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1312ad4 video-play elementor-widget elementor-widget-html\" data-id=\"1312ad4\" 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<div class=\"custom-video-container-2\">\n  <video autoplay loop muted playsinline>\n    <source src=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-magazine-scribble-scene.mp4\" type=\"video\/mp4\">\n    Tu navegador no soporta v\u00eddeos HTML5.\n  <\/video>\n<\/div>\n\n<style>\n  .custom-video-container-2 {\n    width: 600px;\n    height: 400px;\n    overflow: hidden;\n    display: block;\n  }\n\n  .custom-video-container-2 video {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    display: block;\n  }\n\n  \/* M\u00f3vil: ancho completo del contenedor, misma proporci\u00f3n (3:4) *\/\n  @media (max-width: 767px) {\n    .custom-video-container-2 {\n      width: 100%;\n      height: auto;\n      aspect-ratio: 3 \/ 3;\n    }\n  }\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-329a131a elementor-widget__width-inherit elementor-widget elementor-widget-text-editor\" data-id=\"329a131a\" 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 dir=\"ltr\"><strong>The concept: the gesture becomes the title<\/strong><\/p><p dir=\"ltr\">The title design grows from that gesture. The idea was a stroke that felt imperfect and unplanned, full of overlapping passes, like scribbles in the margin of a notebook. The lettering is hand-drawn with a yellow paint marker, a colour that stands out against the warm, retro, red-toned colour grade of the video. The same hand-drawn language carries through the opening and closing credits.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3fc97065 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"3fc97065\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a387d24 elementor-widget elementor-widget-html\" data-id=\"a387d24\" 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<div class=\"custom-video-container-3\">\n  <video autoplay loop muted playsinline>\n    <source src=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-closing-credits-animation.mp4\" type=\"video\/mp4\">\n    Tu navegador no soporta v\u00eddeos HTML5.\n  <\/video>\n<\/div>\n\n<style>\n  .custom-video-container-3 {\n    width: 600px;\n    height: 400px;\n    overflow: hidden;\n    display: block;\n  }\n\n  .custom-video-container-3 video {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    display: block;\n  }\n\n  \/* M\u00f3vil: ancho completo del contenedor, misma proporci\u00f3n (3:4) *\/\n  @media (max-width: 767px) {\n    .custom-video-container-3 {\n      width: 100%;\n      height: auto;\n      aspect-ratio: 3 \/ 2;\n    }\n  }\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-91092e5 elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-widget elementor-widget-image\" data-id=\"91092e5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"549\" src=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-title-lettering-frame-1024x703.webp\" class=\"attachment-large size-large wp-image-8231\" alt=\"\" srcset=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-title-lettering-frame-1024x703.webp 1024w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-title-lettering-frame-300x206.webp 300w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-title-lettering-frame-768x527.webp 768w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-title-lettering-frame-1536x1055.webp 1536w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-title-lettering-frame-2048x1407.webp 2048w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-title-lettering-frame-18x12.webp 18w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-23b07d2f elementor-widget__width-inherit elementor-widget elementor-widget-text-editor\" data-id=\"23b07d2f\" 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 dir=\"ltr\"><strong>The process: by hand, from start to finish<\/strong><\/p><p dir=\"ltr\">The lettering went through dozens of tests on paper. It started with a ballpoint pen, then brushes and watercolour, before settling on a paint marker. The chosen version was digitised and vectorised to refine its shape. Then, to bring back the real texture of the marker, the final vector was projected onto black card and traced again by hand in yellow marker. The high contrast between yellow and black made it possible to isolate the stroke through the colour channels in post-production without losing any of its nuances: the extra ink where strokes cross, the damp-paper texture of repeated passes and the small accidents that make each line unique.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-18d10c0b e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"18d10c0b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a35620e elementor-widget elementor-widget-html\" data-id=\"a35620e\" 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<div class=\"custom-video-container-4\">\n  <video autoplay loop muted playsinline>\n    <source src=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-closing-credits.mp4\" type=\"video\/mp4\">\n    Tu navegador no soporta v\u00eddeos HTML5.\n  <\/video>\n<\/div>\n\n<style>\n  .custom-video-container-4 {\n    width: 700px;\n    height: 500px;\n    overflow: hidden;\n    display: block;\n  }\n\n  .custom-video-container-4 video {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    display: block;\n  }\n\n  \/* M\u00f3vil: ancho completo del contenedor, misma proporci\u00f3n (3:4) *\/\n  @media (max-width: 767px) {\n    .custom-video-container-4 {\n      width: 100%;\n      height: auto;\n      aspect-ratio: 3 \/ 2;\n    }\n  }\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2538c53 elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-widget elementor-widget-image\" data-id=\"2538c53\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"549\" src=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-hand-lettering-sketches-1024x703.webp\" class=\"attachment-large size-large wp-image-8226\" alt=\"\" srcset=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-hand-lettering-sketches-1024x703.webp 1024w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-hand-lettering-sketches-300x206.webp 300w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-hand-lettering-sketches-768x528.webp 768w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-hand-lettering-sketches-1536x1055.webp 1536w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-hand-lettering-sketches-2048x1407.webp 2048w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-hand-lettering-sketches-18x12.webp 18w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\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-d0e4cf2 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"d0e4cf2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9ac88af elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-widget elementor-widget-image\" data-id=\"9ac88af\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"549\" src=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-credits-poster-design-1024x703.webp\" class=\"attachment-large size-large wp-image-8232\" alt=\"\" srcset=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-credits-poster-design-1024x703.webp 1024w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-credits-poster-design-300x206.webp 300w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-credits-poster-design-768x527.webp 768w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-credits-poster-design-1536x1055.webp 1536w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-credits-poster-design-2048x1407.webp 2048w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-credits-poster-design-18x12.webp 18w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-565753b elementor-widget__width-inherit elementor-widget elementor-widget-text-editor\" data-id=\"565753b\" 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 dir=\"ltr\"><strong>Props and single cover proposal<\/strong><\/p><p dir=\"ltr\">I also designed the magazine the protagonist scribbles on in the video. From it came a cover proposal for the single: a scan of the magazine page showing her face, crossed out in yellow marker, extending the concept of the title beyond the screen.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-24af7975 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"24af7975\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4fcccff6 elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-widget elementor-widget-image\" data-id=\"4fcccff6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"549\" src=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-magazine-prop-still-1024x703.webp\" class=\"attachment-large size-large wp-image-8237\" alt=\"\" srcset=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-magazine-prop-still-1024x703.webp 1024w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-magazine-prop-still-300x206.webp 300w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-magazine-prop-still-768x528.webp 768w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-magazine-prop-still-1536x1055.webp 1536w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-magazine-prop-still-2048x1407.webp 2048w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-magazine-prop-still-18x12.webp 18w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\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-39a49b50 elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-widget elementor-widget-image\" data-id=\"39a49b50\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"974\" src=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-magazine-prop-on-set-841x1024.webp\" class=\"attachment-large size-large wp-image-8236\" alt=\"\" srcset=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-magazine-prop-on-set-841x1024.webp 841w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-magazine-prop-on-set-246x300.webp 246w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-magazine-prop-on-set-768x936.webp 768w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-magazine-prop-on-set-1261x1536.webp 1261w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-magazine-prop-on-set-1681x2048.webp 1681w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-magazine-prop-on-set-10x12.webp 10w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\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-21991cb elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-widget elementor-widget-image\" data-id=\"21991cb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"725\" height=\"1024\" src=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-magazine-prop-design-725x1024.webp\" class=\"attachment-large size-large wp-image-8233\" alt=\"\" srcset=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-magazine-prop-design-725x1024.webp 725w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-magazine-prop-design-212x300.webp 212w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-magazine-prop-design-768x1085.webp 768w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-magazine-prop-design-1087x1536.webp 1087w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-magazine-prop-design-8x12.webp 8w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-magazine-prop-design.webp 1241w\" sizes=\"(max-width: 725px) 100vw, 725px\" \/>\t\t\t\t\t\t\t\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-cf09706 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"cf09706\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-b945c2f e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"b945c2f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4ae9911 elementor-widget__width-inherit elementor-widget-mobile__width-inherit elementor-widget elementor-widget-image\" data-id=\"4ae9911\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"541\" src=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-scanned-cover-tests-1024x692.webp\" class=\"attachment-large size-large wp-image-8234\" alt=\"\" srcset=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-scanned-cover-tests-1024x692.webp 1024w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-scanned-cover-tests-300x203.webp 300w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-scanned-cover-tests-768x519.webp 768w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-scanned-cover-tests-1536x1037.webp 1536w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-scanned-cover-tests-2048x1383.webp 2048w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-scanned-cover-tests-18x12.webp 18w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\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-6bb4e22 elementor-widget__width-inherit elementor-widget-mobile__width-inherit elementor-widget elementor-widget-image\" data-id=\"6bb4e22\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"724\" height=\"1024\" src=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-scanned-cover-tests-grid-724x1024.webp\" class=\"attachment-large size-large wp-image-8235\" alt=\"\" srcset=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-scanned-cover-tests-grid-724x1024.webp 724w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-scanned-cover-tests-grid-212x300.webp 212w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-scanned-cover-tests-grid-768x1086.webp 768w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-scanned-cover-tests-grid-1086x1536.webp 1086w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-scanned-cover-tests-grid-scaled.webp 1810w\" sizes=\"(max-width: 724px) 100vw, 724px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-eb9cd02 elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-widget elementor-widget-image\" data-id=\"eb9cd02\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-single-cover-art-proposal-1024x1024.webp\" class=\"attachment-large size-large wp-image-8222\" alt=\"\" srcset=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-single-cover-art-proposal-1024x1024.webp 1024w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-single-cover-art-proposal-300x300.webp 300w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-single-cover-art-proposal-150x150.webp 150w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-single-cover-art-proposal-768x768.webp 768w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-single-cover-art-proposal-1536x1536.webp 1536w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-single-cover-art-proposal-2048x2048.webp 2048w, https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-single-cover-art-proposal-12x12.webp 12w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\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-2c2a581 elementor-widget elementor-widget-html\" data-id=\"2c2a581\" 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<div class=\"custom-video-container-5\">\n  <video autoplay loop muted playsinline>\n    <source src=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-cover-art-process.mp4\" type=\"video\/mp4\">\n    Tu navegador no soporta v\u00eddeos HTML5.\n  <\/video>\n<\/div>\n\n<style>\n  .custom-video-container-5 {\n    width: 300px;\n    height: 300px;\n    overflow: hidden;\n    display: block;\n  }\n\n  .custom-video-container-5 video {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    display: block;\n  }\n\n  \/* M\u00f3vil: ancho completo del contenedor, misma proporci\u00f3n (3:4) *\/\n  @media (max-width: 767px) {\n    .custom-video-container-5 {\n      width: 100%;\n      height: auto;\n      aspect-ratio: 3 \/ 3;\n    }\n  }\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-19f289fa elementor-widget__width-inherit elementor-widget elementor-widget-text-editor\" data-id=\"19f289fa\" 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 dir=\"ltr\"><strong>Credits<\/strong><br \/>Song \u00b7 Shoren<br \/>Created and directed by \u00b7 Mario Alcal\u00e1<br \/>1st AD (shoot) \u00b7 Sebasti\u00e1n S\u00e1nchez<br \/>1st AD (prep) \u00b7 Josep A. Ruiz<br \/>Head of Production \u00b7 Santiago Witthoeft, Dani Far<br \/>DOP \u00b7 David Vadix<br \/>1st AC, 1st Unit \u00b7 Dan Q. Rojas<br \/>1st AC, 2nd Unit \u00b7 Iv\u00e1n Moreno<br \/>2nd AC \u00b7 Alba Gisbert<br \/>Gaffer \u00b7 Pedro A. Ortega<br \/>Electrician \u00b7 Alba Santiago<br \/>Art Direction \u00b7 Gonzalo Laguarda<br \/>Art Assistant \u00b7 Almudena Feliciano<br \/>Styling \u00b7 Mar\u00eda Molina<br \/>MUA \u00b7 Maite Aliz\u00e9e<br \/>Cast \u00b7 Serena Lotts, Sergi P\u00e9rez<br \/>Stills \u00b7 Pedro A. Ortega<br \/>Editing \u00b7 Mario Alcal\u00e1<br \/>Colour \u00b7 Ana Mart\u00ednez<br \/>Graphic Design (title, credits, props and cover proposal) \u00b7 David M Ballar\u00edn (ByDMB)<br \/>Rental \u00b7 Miracor Rental<br \/>Special thanks \u00b7 Jorge Vargas, Antonio Matoses, Guillermo Velencoso, Ioan A. Georgian<\/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-62593cde elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent\" data-id=\"62593cde\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2f5829a3 elementor-widget elementor-widget-html\" data-id=\"2f5829a3\" 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>\n  .logo-verde {\n    background-color: #00E266;            \/* PERSONALIZAR: color exacto *\/\n    -webkit-mask-repeat: no-repeat;\n    mask-repeat: no-repeat;\n    -webkit-mask-position: center;\n    mask-position: center;\n    -webkit-mask-size: 100% 100%;\n    mask-size: 100% 100%;\n  }\n  .logo-verde img {\n    opacity: 0;                           \/* la imagen se oculta, solo sirve de m\u00e1scara *\/\n  }\n<\/style>\n\n<script>\n  document.querySelectorAll('.logo-verde').forEach(function (el) {\n    var img = el.querySelector('img');\n    if (!img) return;\n    function aplicar() {\n      var url = 'url(\"' + (img.currentSrc || img.src) + '\")';\n      el.style.webkitMaskImage = url;\n      el.style.maskImage = url;\n    }\n    if (img.complete) aplicar();\n    else img.addEventListener('load', aplicar);\n  });\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-81d1169 elementor-widget elementor-widget-html\" data-id=\"81d1169\" 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<!--\n\u2554\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\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\n\u2551  GALER\u00cdA DE PROYECTO \u2014 visualizador de im\u00e1genes y v\u00eddeos             \u2551\n\u2551  L\u00ednea de fotos en BUCLE + ruleta (horizontal en escritorio,         \u2551\n\u2551  vertical en m\u00f3vil)                                                  \u2551\n\u2551                                                                      \u2551\n\u2551  C\u00d3MO USARLO EN ELEMENTOR                                            \u2551\n\u2551  1. Pega TODO este archivo en un widget \"HTML\" al FINAL de la        \u2551\n\u2551     plantilla de proyecto (el widget no muestra nada por s\u00ed mismo).  \u2551\n\u2551  2. Detecta solo las im\u00e1genes (widget Imagen) y los <video> de la    \u2551\n\u2551     plantilla, en el orden en que aparecen en la p\u00e1gina.             \u2551\n\u2551  3. Para EXCLUIR una imagen o v\u00eddeo: ponle la clase CSS              \u2551\n\u2551     \"pgx-ignore\" (Avanzado > Clases CSS). \"logo-verde\" ya est\u00e1       \u2551\n\u2551     excluida. Las im\u00e1genes con enlace tampoco se incluyen.           \u2551\n\u2551  4. NOMBRE DEL PROYECTO Y CATEGOR\u00cdAS (recomendado):                  \u2551\n\u2551       \u00b7 al encabezado con el t\u00edtulo    \u2192 clase CSS \"pgx-titulo\"      \u2551\n\u2551       \u00b7 al encabezado con categor\u00edas   \u2192 clase CSS \"pgx-categorias\"  \u2551\n\u2551     Si no pones las clases, el c\u00f3digo intenta detectarlos solo.     \u2551\n\u2551  5. C\u00d3MO SE MUEVE LA RULETA                                          \u2551\n\u2551       \u00b7 Escritorio: scroll horizontal del trackpad (o rueda), arrastrar\u2551\n\u2551         con el rat\u00f3n, clic en una miniatura o flechas del teclado.   \u2551\n\u2551       \u00b7 M\u00f3vil: la l\u00ednea es vertical; se mueve deslizando el dedo     \u2551\n\u2551         arriba\/abajo o tocando una miniatura.                        \u2551\n\u2551     La p\u00e1gina de fondo queda bloqueada mientras est\u00e1 abierto.        \u2551\n\u2551  6. Funciona en la p\u00e1gina publicada o en la vista previa; dentro     \u2551\n\u2551     del editor de Elementor est\u00e1 desactivado para poder editar.      \u2551\n\u255a\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\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d\n-->\n\n<style>\n  :root{\n    \/* Mismos colores que tu header: el bot\u00f3n de cambio de color tambi\u00e9n afecta a la galer\u00eda *\/\n    --pgx-green: var(--dmb-verde, #00E266);\n    --pgx-bg: var(--dmb-claro, #f9f9f9);\n    --pgx-fg: var(--pgx-green);\n    --pgx-bgc: var(--pgx-bg);\n    --pgx-font: \"Elza\", \"elza\", \"Helvetica Neue\", Arial, sans-serif;\n  }\n  html.dmb-invertido{\n    --pgx-fg: var(--pgx-bg);\n    --pgx-bgc: var(--pgx-green);\n  }\n\n  \/* Bloqueo de scroll de la p\u00e1gina de fondo mientras la galer\u00eda est\u00e1 abierta *\/\n  html.pgx-lock, html.pgx-lock body{ overflow: hidden !important; overscroll-behavior: none; }\n\n  \/* Visualizador (por debajo del header: tu header queda n\u00edtido encima) *\/\n  .pgx-lb{\n    position: fixed; inset: 0; z-index: 500;\n    display: none;\n    overflow: hidden;\n    font-family: var(--pgx-font);\n    user-select: none; -webkit-user-select: none;\n    touch-action: none;\n    overscroll-behavior: none;\n  }\n  .pgx-lb.show{ display: block; }\n\n  \/* Velo desenfocado del fondo *\/\n  .pgx-veil{\n    position: absolute; inset: 0;\n    opacity: 0; pointer-events: none;\n    background: rgba(249,249,249,.28);\n    background: color-mix(in srgb, var(--pgx-bgc) 28%, transparent);\n    -webkit-backdrop-filter: blur(22px); backdrop-filter: blur(22px);\n    transition: opacity .6s ease;\n  }\n  .pgx-lb.veil-on .pgx-veil{ opacity: 1; }\n\n  \/* \u2500\u2500 L\u00ednea de fotos\/v\u00eddeos (la posici\u00f3n de cada una la calcula el script) \u2500\u2500 *\/\n  .pgx-strip{\n    position: absolute; inset: 0;\n    visibility: hidden;\n    pointer-events: none;\n  }\n  .pgx-strip.on{ visibility: visible; }\n\n  .pgx-slide{\n    position: absolute; left: 0; top: 0; width: 0; height: 0;\n    overflow: hidden;\n    opacity: 0; pointer-events: none;\n    transition: opacity .28s ease-out;\n  }\n  .pgx-slide.is-active{ opacity: 1; }\n  .pgx-lb.nav-on .pgx-slide{ opacity: 1; pointer-events: auto; cursor: pointer; }\n  .pgx-lb.nav-on .pgx-slide.is-active{ cursor: default; }\n  .pgx-slide img, .pgx-slide video{\n    display: block; width: 100%; height: 100%;\n    object-fit: cover;\n    -webkit-user-drag: none; pointer-events: none;\n  }\n\n  \/* Foto\/v\u00eddeo que vuela desde su sitio original al abrir y vuelve al cerrar *\/\n  .pgx-hero{\n    position: absolute; left: 0; top: 0;\n    pointer-events: none;\n    will-change: transform, opacity;\n  }\n  .pgx-hero img, .pgx-hero video{\n    display: block; width: 100%; height: 100%;\n    object-fit: cover;\n    -webkit-user-drag: none; pointer-events: none;\n  }\n\n  \/* Textos y bot\u00f3n de cerrar: aparecen cuando la foto ya est\u00e1 en el centro *\/\n  .pgx-nav{ opacity: 0; transition: opacity .28s ease-out; pointer-events: none; }\n  .pgx-lb.nav-on .pgx-nav{ opacity: 1; }\n  .pgx-lb.nav-on .pgx-btn{ pointer-events: auto; }\n\n  .pgx-lb .pgx-btn,\n  .pgx-lb .pgx-btn:hover,\n  .pgx-lb .pgx-btn:focus,\n  .pgx-lb .pgx-btn:focus-visible,\n  .pgx-lb .pgx-btn:active{\n    background: transparent !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    border-radius: 0 !important;\n    box-shadow: none !important;\n    outline: 0 !important;\n    text-decoration: none !important;\n    color: var(--pgx-fg) !important;\n  }\n  .pgx-lb .pgx-btn{\n    position: absolute;\n    font: 500 12px\/1 var(--pgx-font) !important;\n    letter-spacing: 0 !important; text-transform: none !important;\n    padding: 14px !important; margin: 0 !important;\n    cursor: pointer;\n    transition: opacity .2s;\n  }\n  .pgx-lb .pgx-btn:hover{ opacity: .5; }\n  .pgx-btn svg{ display: block; }\n  .pgx-close{ right: 12px; top: 56px; }          \/* la altura exacta la calcula el script *\/\n\n  \/* Contador, nombre del proyecto y categor\u00edas: misma tipograf\u00eda (Elza 500, 12px).\n     Su altura (top) la calcula el script para que el nombre, la X y el contador\n     est\u00e9n a la MISMA distancia de la foto que las categor\u00edas por debajo. *\/\n  .pgx-count, .pgx-name, .pgx-cat{\n    position: absolute;\n    font: 500 12px\/1.2 var(--pgx-font);\n    color: var(--pgx-fg);\n  }\n  .pgx-count{ left: 26px; top: 70px; }\n\n  .pgx-name{\n    left: 50%; top: 70px;\n    transform: translateX(-50%);\n    max-width: calc(100vw - 220px);\n    text-align: center; white-space: nowrap;\n    overflow: hidden; text-overflow: ellipsis;\n  }\n  .pgx-cat{\n    left: 50%; top: 0;\n    transform: translateX(-50%);\n    max-width: calc(100vw - 48px);\n    text-align: center; white-space: nowrap;\n    overflow: hidden; text-overflow: ellipsis;\n  }\n  @media (max-width: 767px){\n    .pgx-count{ left: 16px; }\n    .pgx-name{ max-width: calc(100vw - 150px); }\n  }\n\n  .pgx-lb.single .pgx-count{ display: none; }\n\n  \/* \u2500\u2500 Controles de los v\u00eddeos con la clase CSS \"video-play\" \u2500\u2500\n     Van DENTRO del v\u00eddeo, abajo, y solo se ven en el v\u00eddeo que est\u00e1 en el centro. *\/\n  .pgx-vc{\n    position: absolute; left: 0; right: 0; bottom: 0;\n    display: flex; justify-content: space-between; align-items: center; gap: 16px;\n    --pgx-sq: 10px;                        \/* \u25c0\u25c0 tama\u00f1o del cuadrado de la l\u00ednea de tiempo (el mismo que tu cursor cuadrado) *\/\n    --pgx-line: 1px;                       \/* \u25c0\u25c0 grosor de la l\u00ednea de tiempo (1px o 2px) *\/\n    padding: 28px 10px 2px;                \/* \u25c0\u25c0 el \u00faltimo valor sube\/baja los textos (el texto queda ~10px sobre el borde; con 0 queda a ~8px) *\/\n    background: linear-gradient(to top, rgba(0,0,0,.38), rgba(0,0,0,0));   \/* \u25c0\u25c0 degradado suave para que el verde se lea; b\u00f3rralo si no lo quieres *\/\n    font: 500 12px\/1 var(--pgx-font);\n    color: var(--pgx-fg);\n    opacity: 0; pointer-events: none;\n    transition: opacity .28s ease-out;\n    cursor: default;\n  }\n  .pgx-lb.nav-on .pgx-slide.is-active .pgx-vc{ opacity: 1; pointer-events: auto; }\n  .pgx-vl{ display: flex; align-items: center; gap: 16px; min-width: 0; }\n  .pgx-vc .pgx-vb,\n  .pgx-vc .pgx-vb:hover,\n  .pgx-vc .pgx-vb:focus,\n  .pgx-vc .pgx-vb:active{\n    appearance: none; -webkit-appearance: none;\n    background: none !important; border: 0 !important; border-radius: 0 !important;\n    box-shadow: none !important; outline: 0 !important;\n    margin: 0 !important; padding: 8px 0 !important;\n    font: 500 12px\/1 var(--pgx-font) !important;\n    letter-spacing: 0 !important; text-transform: none !important; text-decoration: none !important;\n    color: var(--pgx-fg) !important;\n    cursor: pointer; white-space: nowrap;\n    text-shadow: 0 0 6px rgba(0,0,0,.35);\n    transition: opacity .2s;\n  }\n  .pgx-vc .pgx-vb:hover{ opacity: .6; }\n  .pgx-vb svg{ display: block; }\n  \/* L\u00ednea de tiempo: entre \"Full screen\" y el contador. Clic o arrastre para ir a cualquier punto del v\u00eddeo *\/\n  .pgx-vs{\n    position: relative; flex: 1 1 auto; min-width: 40px; height: 28px;\n    cursor: pointer; touch-action: none; -webkit-tap-highlight-color: transparent;\n    --p: 0;\n  }\n  .pgx-vs i{ position: absolute; display: block; pointer-events: none; }\n  .pgx-vs::before{                          \/* la l\u00ednea entera (m\u00e1s tenue) *\/\n    content: ''; position: absolute; left: 0; right: 0; top: 50%;\n    height: var(--pgx-line); margin-top: calc(var(--pgx-line) \/ -2);\n    background: var(--pgx-fg); opacity: .4;\n    box-shadow: 0 0 6px rgba(0,0,0,.35);\n  }\n  .pgx-vsf{                                 \/* la parte ya reproducida *\/\n    left: 0; top: 50%;\n    height: var(--pgx-line); margin-top: calc(var(--pgx-line) \/ -2);\n    width: calc(var(--p) * (100% - var(--pgx-sq)) + var(--pgx-sq) \/ 2);\n    background: var(--pgx-fg);\n  }\n  .pgx-vsk{                                 \/* el cuadrado que marca d\u00f3nde vas *\/\n    top: 50%; width: var(--pgx-sq); height: var(--pgx-sq); margin-top: calc(var(--pgx-sq) \/ -2);\n    left: calc(var(--p) * (100% - var(--pgx-sq)));\n    background: var(--pgx-fg);\n  }\n  @media (max-width: 600px){                \/* en m\u00f3vil la l\u00ednea pasa a una fila propia, encima de los botones *\/\n    .pgx-vc{ flex-wrap: wrap; row-gap: 0; }\n    .pgx-vs{ order: -1; flex: 1 0 100%; height: 24px; }\n  }\n  .pgx-vt{ white-space: nowrap; flex: none; text-shadow: 0 0 6px rgba(0,0,0,.35); font-variant-numeric: tabular-nums; }\n  \/* Pantalla completa: el v\u00eddeo entero (con sus controles) sin recortar *\/\n  .pgx-slide:fullscreen{ background: #000; }\n  .pgx-slide:fullscreen video{ object-fit: contain; }\n  .pgx-slide:-webkit-full-screen{ background: #000; }\n  .pgx-slide:-webkit-full-screen video{ object-fit: contain; }\n  .pgx-slide:fullscreen .pgx-vc{ padding: 40px 16px 10px; }\n  .pgx-slide:-webkit-full-screen .pgx-vc{ padding: 40px 16px 10px; }\n  \/* En pantalla completa tu cursor cuadrado (que vive fuera) quedar\u00eda tapado: el script lo mete dentro mientras dura.\n     Si tu web no tiene .cursor, se usa el cursor normal del sistema. *\/\n  \/* Mientras arrastras la l\u00ednea de tiempo, tu cursor cuadrado se oculta (el cuadrado de la l\u00ednea ocupa su lugar) *\/\n  html.pgx-scrub .cursor{ opacity: 0 !important; transition: none !important; }\n  .pgx-slide > .cursor{ position: fixed !important; z-index: 2147483647 !important; pointer-events: none !important; }\n  .pgx-slide.pgx-fs-native, .pgx-slide.pgx-fs-native *{ cursor: auto !important; }\n  .pgx-slide.pgx-fs-native .pgx-vb, .pgx-slide.pgx-fs-native .pgx-vs{ cursor: pointer !important; }\n<\/style>\n\n<script>\n(function(){\n\n  \/* \u2550\u2550\u2550 TEXTOS \u2550\u2550\u2550 *\/\n  const TEXT = {\n    close: 'Close',     \/\/ ES: 'Cerrar'\n    pause: 'Pause',     \/\/ ES: 'Pausa'\n    play:  'Play',      \/\/ ES: 'Reproducir'\n    soundOn:  'Sound on',    \/\/ ES: 'Activar sonido'\n    soundOff: 'Sound off',   \/\/ ES: 'Silenciar'\n    full:  'Full screen',    \/\/ ES: 'Pantalla completa'\n    exitFull: 'Exit full screen',  \/\/ ES: 'Salir de pantalla completa'\n    seek: 'Timeline'               \/\/ ES: 'L\u00ednea de tiempo'\n  };\n\n  \/* \u2550\u2550\u2550 AJUSTES \u2550\u2550\u2550 *\/\n  const CONFIG = {\n    openMs: 750,          \/\/ duraci\u00f3n de la animaci\u00f3n al abrir\n    closeMs: 650,         \/\/ duraci\u00f3n de la animaci\u00f3n al cerrar\n    maxWidth: 1400,       \/\/ ancho m\u00e1ximo de la foto abierta (px)\n\n    \/* Tama\u00f1os *\/\n    heroMaxH: 0.76,           \/\/ alto m\u00e1ximo de la foto abierta en escritorio (fracci\u00f3n del alto de pantalla)\n    heroMaxHMobile: 0.58,     \/\/ \u00eddem en m\u00f3vil (deja sitio a las miniaturas de arriba y abajo)\n    edge: 76,                 \/\/ margen m\u00ednimo arriba y abajo para el header, el nombre y las categor\u00edas (px)\n    thumbHeight: 0.28,        \/\/ alto de las miniaturas en escritorio (fracci\u00f3n del alto de pantalla)\n    thumbWidthMobile: 0.5,    \/\/ ancho de las miniaturas en m\u00f3vil (fracci\u00f3n del ancho de pantalla)\n    mobileBreakpoint: 768,    \/\/ por debajo de este ancho, la l\u00ednea es vertical\n\n    \/* Bucle: n\u00ba m\u00ednimo de fotos en el anillo. Si el proyecto tiene pocas fotos,\n       se repiten para que nunca se vea un hueco a los lados *\/\n    minRing: 12,\n\n    \/* Ruleta al clicar una miniatura *\/\n    rouletteMs: 700,          \/\/ duraci\u00f3n m\u00ednima (al saltar a la foto de al lado)\n    roulettePerStepMs: 90,    \/\/ ms extra por cada foto que se salta\n    rouletteMaxMs: 1500,      \/\/ duraci\u00f3n m\u00e1xima\n    rouletteEase: [.65, 0, .25, 1],\n\n    \/* Scroll, arrastre y ajuste final *\/\n    scrollSensitivity: 1,     \/\/ sube para que el scroll mueva m\u00e1s la ruleta\n    scrollIdleMs: 60,         \/\/ al dejar de hacer scroll, la ruleta se acomoda tras este tiempo\n    snapMinMs: 150,           \/\/ duraci\u00f3n m\u00ednima del ajuste a la foto m\u00e1s cercana\n    snapPerItemMs: 380,       \/\/ ms extra por cada foto de distancia (el ajuste normal dura ~150-340 ms)\n    snapEase: [.3, .5, .25, 1],\n    flingMs: 220,             \/\/ inercia al soltar tras arrastrar\n\n    \/* Nombre del proyecto y categor\u00edas *\/\n    catGap: 16,               \/\/ distancia entre la foto y el nombre \/ las categor\u00edas (px)\n    catSeparator: ', ',       \/\/ separador si hay varias categor\u00edas\n\n    \/* Qu\u00e9 se convierte en galer\u00eda *\/\n    itemSelector: '.elementor-widget-image img, video',\n\n    \/* \u2500\u2500 V\u00eddeos con controles \u2500\u2500\n       Los v\u00eddeos que tengan esta clase CSS (en Elementor: Avanzado > Clases CSS) muestran, al abrirse en el\n       visualizador, controles de pausa, sonido, pantalla completa y tiempo. El resto siguen siendo un loop mudo. *\/\n    videoClass: 'video-play',\n    videoControls: 'text',    \/\/ 'text' = palabras (Pause \u00b7 Sound on \u00b7 Full screen) \u00b7 'icons' = iconos \u00b7 false = sin controles\n\n    \/* Qu\u00e9 se EXCLUYE (cualquier elemento dentro de estos selectores) *\/\n    exclude: [\n      '.logo-verde',                     \/\/ tu png de arriba\n      '.pgx-ignore',                     \/\/ clase para excluir lo que quieras\n      '.dmb-header', 'header', 'footer',\n      '.elementor-location-header', '.elementor-location-footer',\n      '.pg-wrap', '.pgx-lb',\n      'a[href]'                          \/\/ im\u00e1genes con enlace: se respeta su enlace\n    ]\n  };\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 A PARTIR DE AQU\u00cd NO HACE FALTA TOCAR NADA \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  const htmlEl = document.documentElement;\n  const bodyCls = document.body.classList;\n  \/* Dentro del editor de Elementor se desactiva para poder editar con normalidad *\/\n  if (bodyCls.contains('elementor-editor-active') && !bodyCls.contains('elementor-editor-preview')) return;\n\n  const EXCLUDE = CONFIG.exclude.join(',');\n  let items = [], aspects = [], sizes = [], slots = [], rects = [];\n  let N = 0, M = 0;                 \/\/ N = fotos reales \u00b7 M = huecos del anillo (N repetido si hay pocas)\n  let f = 0;                        \/\/ posici\u00f3n de la ruleta (\u00edndice, con decimales mientras se mueve)\n  let vertical = false, textH = 15, btnH = 40, unit = 200, nearest = -1;\n  let hidden = null, raf = 0, anim = null, scrollTimer = 0, down = null;\n  let wheelT = 0, wheelPeak = 0;      \/\/ para detectar la \"cola\" de inercia del trackpad\n  let state = 'closed';             \/\/ closed | opening | open | closing\n\n  \/* \u2500\u2500 Estructura del visualizador \u2500\u2500 *\/\n  const lb = document.createElement('div');\n  lb.className = 'pgx-lb';\n  lb.innerHTML = `\n    <div class=\"pgx-veil\"><\/div>\n    <div class=\"pgx-strip\"><\/div>\n    <div class=\"pgx-hero\"><\/div>\n    <div class=\"pgx-nav\">\n      <div class=\"pgx-count\"><\/div>\n      <div class=\"pgx-name\"><\/div>\n      <div class=\"pgx-cat\"><\/div>\n      <button class=\"pgx-btn pgx-close\" aria-label=\"${TEXT.close}\">\n        <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"square\"><path d=\"M1 1l10 10M11 1L1 11\"\/><\/svg>\n      <\/button>\n    <\/div>`;\n  document.body.appendChild(lb);\n  const strip  = lb.querySelector('.pgx-strip');\n  const hero   = lb.querySelector('.pgx-hero');\n  const count  = lb.querySelector('.pgx-count');\n  const nameEl = lb.querySelector('.pgx-name');\n  const catEl  = lb.querySelector('.pgx-cat');\n  const closeBtn = lb.querySelector('.pgx-close');\n\n  \/* \u2500\u2500 Utilidades \u2500\u2500 *\/\n  const isVideo = el => el.tagName === 'VIDEO';\n  const clean = s => (s || '').replace(\/\\s+\/g, ' ').trim();\n  const uniq = a => a.filter((x, i) => x && a.indexOf(x) === i);\n  const pad = n => String(n).padStart(2, '0');\n  const mod = (a, n) => ((a % n) + n) % n;\n\n  function bezier(x1, y1, x2, y2){\n    const cx = 3 * x1, bx = 3 * (x2 - x1) - cx, ax = 1 - cx - bx;\n    const cy = 3 * y1, by = 3 * (y2 - y1) - cy, ay = 1 - cy - by;\n    const X = t => ((ax * t + bx) * t + cx) * t, Y = t => ((ay * t + by) * t + cy) * t;\n    return x => {\n      if (x <= 0) return 0; if (x >= 1) return 1;\n      let lo = 0, hi = 1, t = x;\n      for (let k = 0; k < 24; k++){\n        const xv = X(t);\n        if (Math.abs(xv - x) < 1e-4) break;\n        if (xv < x) lo = t; else hi = t;\n        t = (lo + hi) \/ 2;\n      }\n      return Y(t);\n    };\n  }\n  const easeRoulette = bezier.apply(null, CONFIG.rouletteEase);\n  const easeSnap = bezier.apply(null, CONFIG.snapEase);\n\n  function collect(){\n    return Array.from(document.querySelectorAll(CONFIG.itemSelector)).filter(el => {\n      if (el.closest(EXCLUDE)) return false;\n      const r = el.getBoundingClientRect();\n      if (r.width < 40 || r.height < 40) return false;\n      const cs = getComputedStyle(el);\n      return cs.display !== 'none' && cs.visibility !== 'hidden';\n    });\n  }\n  function srcOf(el){\n    if (isVideo(el)) return el.currentSrc || el.src || (el.querySelector('source') || {}).src || '';\n    let s = el.currentSrc || el.src || '';\n    if (!s || s.startsWith('data:')) s = el.getAttribute('data-src') || el.getAttribute('data-lazy-src') || s;\n    return s;\n  }\n  function bigSrcOf(el){                 \/\/ la versi\u00f3n m\u00e1s grande disponible (srcset de WordPress)\n    if (isVideo(el)) return null;\n    const ss = el.getAttribute('srcset') || el.getAttribute('data-srcset') || '';\n    let best = null, bw = 0;\n    ss.split(',').forEach(p => {\n      const m = p.trim().match(\/^(\\S+)\\s+(\\d+)w$\/);\n      if (m && +m[2] > bw && +m[2] <= 2600){ bw = +m[2]; best = m[1]; }\n    });\n    return best;\n  }\n  function aspectOf(el){\n    if (isVideo(el) && el.videoWidth) return el.videoWidth \/ el.videoHeight;\n    if (!isVideo(el) && el.naturalWidth) return el.naturalWidth \/ el.naturalHeight;\n    const r = el.getBoundingClientRect();\n    return (r.width \/ r.height) || 1;\n  }\n  function rectOf(el){                   \/\/ null si no se ve en pantalla\n    const r = el.getBoundingClientRect();\n    if (r.bottom < 0 || r.top > innerHeight || r.right < 0 || r.left > innerWidth) return null;\n    return r;\n  }\n  function lockScroll(){\n    const sw = innerWidth - htmlEl.clientWidth;      \/\/ evita el salto al desaparecer la barra de scroll\n    htmlEl.classList.add('pgx-lock');\n    if (sw > 0) htmlEl.style.paddingRight = sw + 'px';\n  }\n  function unlockScroll(){\n    htmlEl.classList.remove('pgx-lock');\n    htmlEl.style.paddingRight = '';\n  }\n\n  \/* \u2500\u2500 Nombre del proyecto y categor\u00edas \u2500\u2500 *\/\n  function getTitle(){\n    \/\/ 1) elemento marcado con la clase \"pgx-titulo\"\n    let el = document.querySelector('.pgx-titulo');\n    if (el && clean(el.textContent)) return clean(el.textContent);\n    \/\/ 2) primer H1 de la p\u00e1gina (fuera de header \/ footer)\n    el = Array.from(document.querySelectorAll('h1')).find(h => !h.closest(EXCLUDE) && clean(h.textContent));\n    if (el) return clean(el.textContent);\n    \/\/ 3) t\u00edtulo de la pesta\u00f1a: \"Nombre \u2014 Resto\" \u2192 \"Nombre\"\n    const og = document.querySelector('meta[property=\"og:title\"]');\n    const t = (og && og.content) || document.title || '';\n    return clean(t.split(\/\\s[\u2014\u2013|\\-]\\s\/)[0]);\n  }\n  function fromJsonLd(){\n    const out = [];\n    document.querySelectorAll('script[type=\"application\/ld+json\"]').forEach(s => {\n      try {\n        const walk = o => {\n          if (!o || typeof o !== 'object') return;\n          if (Array.isArray(o)) return o.forEach(walk);\n          if (o.articleSection) [].concat(o.articleSection).forEach(x => out.push(clean(String(x))));\n          if (o['@graph']) walk(o['@graph']);\n        };\n        walk(JSON.parse(s.textContent));\n      } catch (_) {}\n    });\n    return uniq(out);\n  }\n  function getCats(){\n    const sep = CONFIG.catSeparator;\n    \/\/ 1) elemento marcado con la clase \"pgx-categorias\"\n    const mark = document.querySelector('.pgx-categorias');\n    if (mark && clean(mark.textContent)) return clean(mark.textContent);\n    \/\/ 2) enlaces de categor\u00eda de WordPress \/ widget \"Informaci\u00f3n de la entrada\" de Elementor\n    const links = Array.from(document.querySelectorAll('a[rel~=\"category\"], .elementor-post-info__terms-list-item'))\n      .filter(a => !a.closest('.pgx-lb, header, footer, .elementor-location-header, .elementor-location-footer'));\n    const names = uniq(links.map(a => clean(a.textContent)));\n    if (names.length) return names.join(sep);\n    \/\/ 3) datos del SEO (Yoast \/ Rank Math)\n    const ld = fromJsonLd();\n    if (ld.length) return ld.join(sep);\n    const metas = uniq(Array.from(document.querySelectorAll('meta[property=\"article:section\"]')).map(m => clean(m.content)));\n    if (metas.length) return metas.join(sep);\n    \/\/ 4) la URL: \/es\/branding\/nombre\/ \u2192 \"Branding\"\n    const parts = location.pathname.split('\/').filter(Boolean);\n    if (parts.length > 1 && \/^[a-z]{2}$\/.test(parts[0])) parts.shift();   \/\/ quita el \/es\/\n    if (parts.length > 1) return parts[0].replace(\/[-_]+\/g, ' ').replace(\/\\b\\w\/g, c => c.toUpperCase());\n    return '';\n  }\n\n  \/* \u2500\u2500 Tama\u00f1os (foto abierta y miniaturas) \u2500\u2500 *\/\n  function computeSizes(){\n    const vw = innerWidth, vh = innerHeight;\n    vertical = vw < CONFIG.mobileBreakpoint;\n    const maxW = Math.min(vw * 0.86, CONFIG.maxWidth);\n    const maxH = Math.min(vh * (vertical ? CONFIG.heroMaxHMobile : CONFIG.heroMaxH), vh - 2 * CONFIG.edge);\n    sizes = aspects.map(a => {\n      let hw = maxW, hh = hw \/ a;\n      if (hh > maxH){ hh = maxH; hw = hh * a; }\n      let tw, th;\n      if (vertical){\n        tw = Math.min(vw * CONFIG.thumbWidthMobile, hw); th = tw \/ a;\n        const cap = vh * 0.4; if (th > cap){ th = cap; tw = th * a; }\n      } else {\n        th = Math.min(vh * CONFIG.thumbHeight, hh); tw = th * a;\n        const cap = vw * 0.45; if (tw > cap){ tw = cap; th = tw \/ a; }\n      }\n      return { hw, hh, tw, th };\n    });\n    textH = nameEl.offsetHeight || 15;\n    btnH = closeBtn.offsetHeight || 40;\n    const avg = sizes.reduce((s, z) => s + (vertical ? z.th : z.tw), 0) \/ (sizes.length || 1);\n    unit = Math.max(90, avg);                        \/\/ lo que hay que desplazar para pasar de una foto a la siguiente\n  }\n\n  \/* \u2500\u2500 Colocaci\u00f3n de TODA la l\u00ednea seg\u00fan la posici\u00f3n f de la ruleta \u2500\u2500\n        \u00b7 Las fotos van JUNTAS (sin espacio entre ellas)\n        \u00b7 Es un anillo: tras la \u00faltima vuelven a verse las primeras, y antes de la primera las \u00faltimas\n        \u00b7 Escritorio: l\u00ednea horizontal \u00b7 M\u00f3vil: l\u00ednea vertical \u2500\u2500 *\/\n  function render(fv){\n    const n = M, cx = innerWidth \/ 2, cy = innerHeight \/ 2;\n    let heroH, ia;\n    if (n === 1){\n      const z = sizes[0];\n      rects[0] = { l: cx - z.hw \/ 2, t: cy - z.hh \/ 2, w: z.hw, h: z.hh };\n      heroH = z.hh; ia = 0;\n    } else {\n      const base = Math.floor(fv), t = fv - base;\n      \/* En m\u00f3vil, alrededor de la foto abierta queda un hueco justo para el nombre (arriba) y las categor\u00edas (abajo) *\/\n      const band = vertical ? 2 * CONFIG.catGap + textH : 0;\n      const list = [];\n      for (let i = 0; i < n; i++){\n        let d = mod(i - fv, n);\n        if (d > n \/ 2) d -= n;\n        list.push({ i, d });\n      }\n      list.sort((a, b) => a.d - b.d);\n      const info = new Array(n);\n      let x = 0;\n      for (let k = 0; k < n; k++){\n        const e = list[k], z = sizes[e.i % N];\n        const s = Math.max(0, 1 - Math.abs(e.d));    \/\/ 1 = foto abierta \u00b7 0 = miniatura\n        const w = z.tw + (z.hw - z.tw) * s, h = z.th + (z.hh - z.th) * s;\n        if (k > 0 && band){\n          const p = (list[k - 1].d + e.d) \/ 2;\n          x += band * Math.min(1, Math.max(0, 1.5 - Math.abs(p)));\n        }\n        info[e.i] = { w, h, start: x };\n        x += vertical ? h : w;\n      }\n      ia = mod(base, n);\n      const ib = mod(base + 1, n);\n      const A = info[ia], B = info[ib];\n      const midA = A.start + (vertical ? A.h : A.w) \/ 2;\n      const midB = B.start + (vertical ? B.h : B.w) \/ 2;\n      const c = midA * (1 - t) + midB * t;           \/\/ punto de la l\u00ednea que queda en el centro de la pantalla\n      for (let i = 0; i < n; i++){\n        const q = info[i];\n        rects[i] = vertical\n          ? { l: cx - q.w \/ 2, t: cy + (q.start - c), w: q.w, h: q.h }\n          : { l: cx + (q.start - c), t: cy - q.h \/ 2, w: q.w, h: q.h };\n      }\n      heroH = sizes[ia % N].hh * (1 - t) + sizes[mod(base + 1, n) % N].hh * t;\n    }\n\n    \/* Pintar *\/\n    for (let i = 0; i < n; i++){\n      const s = slots[i], r = rects[i], b = s.box.style;\n      b.left = r.l + 'px'; b.top = r.t + 'px';\n      b.width = r.w + 'px'; b.height = r.h + 'px';\n      if (isVideo(items[i % N])){                    \/\/ solo se reproducen los v\u00eddeos que se ven\n        const vis = r.l + r.w > -40 && r.l < innerWidth + 40 && r.t + r.h > -40 && r.t < innerHeight + 40;\n        if (vis !== s.playing){\n          s.playing = vis;\n          if (vis){ const pr = s.media.play(); if (pr && pr.catch) pr.catch(() => {}); } else s.media.pause();\n        }\n      }\n    }\n\n    \/* Nombre, contador y X a la altura de \"foto menos catGap\"; categor\u00edas a \"foto m\u00e1s catGap\" *\/\n    const heroTop = cy - heroH \/ 2, heroBottom = cy + heroH \/ 2;\n    const titleTop = heroTop - CONFIG.catGap - textH;\n    nameEl.style.top = titleTop + 'px';\n    count.style.top = titleTop + 'px';\n    closeBtn.style.top = (titleTop + textH \/ 2 - btnH \/ 2) + 'px';\n    catEl.style.top = (heroBottom + CONFIG.catGap) + 'px';\n\n    \/* Foto activa (la m\u00e1s cercana al centro) *\/\n    const near = mod(Math.round(fv), n);\n    if (near !== nearest){\n      if (nearest >= 0) resetControls(slots[nearest]);   \/\/ el v\u00eddeo que sale del centro vuelve a loop y sin sonido\n      nearest = near;\n      slots.forEach((s, i) => s.box.classList.toggle('is-active', i === near));\n      count.textContent = pad((near % N) + 1) + ' \/ ' + pad(N);\n      upgrade(near);\n    }\n  }\n\n  function setAspect(it, a){\n    if (!isFinite(a) || a <= 0) return;\n    if (Math.abs(aspects[it] - a) < 0.002) return;\n    aspects[it] = a;\n    if (state === 'open'){ computeSizes(); render(f); }\n  }\n  \/* \u2500\u2500 Controles de v\u00eddeo (clase \"video-play\") \u2500\u2500 *\/\n  const ICONS = {\n    pause:  '<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"currentColor\"><rect x=\"2\" y=\"1\" width=\"3\" height=\"10\"\/><rect x=\"7\" y=\"1\" width=\"3\" height=\"10\"\/><\/svg>',\n    play:   '<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"currentColor\"><path d=\"M2 1l9 5-9 5z\"\/><\/svg>',\n    soundOn:  '<svg width=\"14\" height=\"12\" viewBox=\"0 0 14 12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.2\"><path d=\"M1 4h2.5L7 1v10L3.5 8H1z\" fill=\"currentColor\"\/><path d=\"M9.5 3.5a3.5 3.5 0 010 5M11 1.5a6 6 0 010 9\"\/><\/svg>',\n    soundOff: '<svg width=\"14\" height=\"12\" viewBox=\"0 0 14 12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.2\"><path d=\"M1 4h2.5L7 1v10L3.5 8H1z\" fill=\"currentColor\"\/><path d=\"M9.5 4l4 4M13.5 4l-4 4\"\/><\/svg>',\n    full:   '<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.2\"><path d=\"M1 4.5V1h3.5M7.5 1H11v3.5M11 7.5V11H7.5M4.5 11H1V7.5\"\/><\/svg>',\n    exitFull: '<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.2\"><path d=\"M4.5 1v3.5H1M11 4.5H7.5V1M7.5 11V7.5H11M1 7.5h3.5V11\"\/><\/svg>'\n  };\n  const fsEl = () => document.fullscreenElement || document.webkitFullscreenElement || null;\n  const fmtTime = t => { t = isFinite(t) ? Math.max(0, t) : 0; return Math.floor(t \/ 60) + ':' + pad(Math.floor(t % 60)); };\n  function buildControls(s){\n    const bar = document.createElement('div');\n    bar.className = 'pgx-vc';\n    bar.innerHTML =\n      '<div class=\"pgx-vl\">' +\n        '<button type=\"button\" class=\"pgx-vb\" data-a=\"play\"><\/button>' +\n        '<button type=\"button\" class=\"pgx-vb\" data-a=\"sound\"><\/button>' +\n        '<button type=\"button\" class=\"pgx-vb\" data-a=\"full\"><\/button>' +\n      '<\/div>' +\n      '<div class=\"pgx-vs\" role=\"slider\" aria-label=\"' + TEXT.seek + '\"><i class=\"pgx-vsf\"><\/i><i class=\"pgx-vsk\"><\/i><\/div>' +\n      '<div class=\"pgx-vt\"><\/div>';\n    s.box.appendChild(bar);\n    s.vc = {\n      bar, userPaused: false,\n      play: bar.querySelector('[data-a=play]'), sound: bar.querySelector('[data-a=sound]'),\n      full: bar.querySelector('[data-a=full]'), time: bar.querySelector('.pgx-vt'),\n      seek: bar.querySelector('.pgx-vs'), p: -1\n    };\n    bindSeek(s);\n    const t = () => paintTime(s);\n    ['timeupdate', 'durationchange', 'loadedmetadata', 'seeked'].forEach(ev => s.media.addEventListener(ev, t));\n    paintControls(s);\n  }\n  \/* L\u00ednea de tiempo: clic o arrastre (rat\u00f3n o dedo) para saltar a cualquier punto *\/\n  function bindSeek(s){\n    const el = s.vc.seek;\n    let on = false;\n    const at = e => {\n      const d = s.media.duration;\n      if (!isFinite(d) || d <= 0) return;\n      const r = el.getBoundingClientRect();\n      const sq = parseFloat(getComputedStyle(s.vc.bar).getPropertyValue('--pgx-sq')) || 10;\n      const p = Math.min(1, Math.max(0, (e.clientX - r.left - sq \/ 2) \/ Math.max(1, r.width - sq)));\n      try { s.media.currentTime = p * d; } catch (_) {}\n      paintTime(s);\n    };\n    el.addEventListener('pointerdown', e => {\n      if (e.button !== 0) return;\n      e.stopPropagation(); e.preventDefault();\n      on = true; htmlEl.classList.add('pgx-scrub');\n      try { el.setPointerCapture(e.pointerId); } catch (_) {}\n      at(e);\n    });\n    el.addEventListener('pointermove', e => { if (on) at(e); });\n    const end = e => { on = false; htmlEl.classList.remove('pgx-scrub'); try { el.releasePointerCapture(e.pointerId); } catch (_) {} };\n    el.addEventListener('pointerup', end);\n    el.addEventListener('pointercancel', end);\n  }\n  function paintTime(s){\n    if (!s.vc) return;\n    const m = s.media, d = m.duration;\n    const p = (isFinite(d) && d > 0) ? Math.min(1, Math.max(0, m.currentTime \/ d)) : 0;\n    if (Math.abs(p - s.vc.p) > 0.0005){ s.vc.p = p; s.vc.seek.style.setProperty('--p', p); }\n    const txt = fmtTime(m.currentTime) + (isFinite(d) && d > 0 ? ' \/ ' + fmtTime(d) : '');\n    if (s.vc.time.textContent !== txt) s.vc.time.textContent = txt;\n  }\n  function paintControls(s){\n    if (!s || !s.vc) return;\n    const icons = CONFIG.videoControls === 'icons';\n    const set = (btn, key, label) => {\n      btn.setAttribute('aria-label', label);\n      btn.title = label;\n      btn.innerHTML = icons ? ICONS[key] : label;\n    };\n    set(s.vc.play,  s.vc.userPaused ? 'play' : 'pause', s.vc.userPaused ? TEXT.play : TEXT.pause);\n    set(s.vc.sound, s.media.muted ? 'soundOn' : 'soundOff', s.media.muted ? TEXT.soundOn : TEXT.soundOff);\n    const isFs = fsEl() === s.box;\n    set(s.vc.full,  isFs ? 'exitFull' : 'full', isFs ? TEXT.exitFull : TEXT.full);\n    paintTime(s);\n  }\n  function resetControls(s){                       \/\/ al salir del centro: vuelve a loop, sin sonido\n    if (!s || !s.vc) return;\n    s.vc.userPaused = false;\n    s.media.muted = true;\n    if (fsEl() === s.box && document.exitFullscreen) { try { document.exitFullscreen(); } catch (_) {} }\n    if (s.playing){ const pr = s.media.play(); if (pr && pr.catch) pr.catch(() => {}); }\n    paintControls(s);\n  }\n  function toggleFullscreen(s){\n    const box = s.box, v = s.media;\n    if (fsEl() === box){\n      (document.exitFullscreen || document.webkitExitFullscreen).call(document);\n    } else if (box.requestFullscreen){\n      box.requestFullscreen().catch(() => {});\n    } else if (box.webkitRequestFullscreen){\n      box.webkitRequestFullscreen();\n    } else if (v.webkitEnterFullscreen){            \/\/ iPhone: solo permite pantalla completa nativa del v\u00eddeo\n      v.webkitEnterFullscreen();\n    }\n  }\n  lb.addEventListener('click', e => {\n    const b = e.target.closest && e.target.closest('.pgx-vb');\n    if (!b) return;\n    const box = b.closest('.pgx-slide'), s = box && slots[+box.dataset.i];\n    if (!s || !s.vc) return;\n    e.stopPropagation();\n    const a = b.getAttribute('data-a');\n    if (a === 'play'){\n      s.vc.userPaused = !s.vc.userPaused;\n      if (s.vc.userPaused) s.media.pause(); else { const pr = s.media.play(); if (pr && pr.catch) pr.catch(() => {}); }\n    } else if (a === 'sound'){\n      s.media.muted = !s.media.muted;\n      if (!s.media.muted && s.media.volume === 0) s.media.volume = 1;\n    } else if (a === 'full'){\n      toggleFullscreen(s);\n    }\n    paintControls(s);\n  });\n  \/* Pantalla completa: el cursor cuadrado de la web se traslada DENTRO del v\u00eddeo mientras dura (si no, queda tapado) *\/\n  let curHome = null;\n  function restoreCursor(){\n    if (!curHome) return;\n    const h = curHome; curHome = null;\n    try { h.parent.insertBefore(h.el, h.next && h.next.parentNode === h.parent ? h.next : null); } catch (_) {}\n  }\n  function syncFsCursor(){\n    const box = fsEl();\n    if (box && box.classList && box.classList.contains('pgx-slide')){\n      box.classList.remove('pgx-fs-native');\n      if (!curHome){\n        const cur = document.querySelector('.cursor');\n        if (cur && cur.parentNode) curHome = { el: cur, parent: cur.parentNode, next: cur.nextSibling };\n      }\n      if (curHome) box.appendChild(curHome.el); else box.classList.add('pgx-fs-native');\n    } else {\n      restoreCursor();\n      slots.forEach(s => s.box.classList.remove('pgx-fs-native'));\n    }\n  }\n  ['fullscreenchange', 'webkitfullscreenchange'].forEach(ev => document.addEventListener(ev, () => { syncFsCursor(); slots.forEach(paintControls); }));\n  \/* La l\u00ednea de tiempo se mueve fluida (timeupdate solo avisa ~4 veces por segundo) *\/\n  let vcRaf = 0;\n  function vcTick(){\n    const s = slots[nearest];\n    if (s && s.vc) paintTime(s);\n    vcRaf = state !== 'closed' ? requestAnimationFrame(vcTick) : 0;\n  }\n\n  function buildSlides(){\n    strip.replaceChildren();\n    N = items.length;\n    M = N < 2 ? N : N * Math.max(1, Math.ceil(CONFIG.minRing \/ N));\n    slots = [];\n    for (let i = 0; i < M; i++){\n      const it = i % N, el = items[it];\n      const box = document.createElement('div');\n      box.className = 'pgx-slide';\n      box.dataset.i = i;\n      let media;\n      if (isVideo(el)){\n        media = document.createElement('video');\n        media.muted = true; media.loop = true; media.playsInline = true;\n        media.setAttribute('muted', ''); media.setAttribute('playsinline', '');\n        media.preload = 'auto';\n        media.src = srcOf(el);\n        media.addEventListener('loadedmetadata', () => {\n          try { media.currentTime = el.currentTime || 0; } catch (_) {}\n          if (media.videoWidth) setAspect(it, media.videoWidth \/ media.videoHeight);\n        });\n      } else {\n        media = new Image();\n        media.alt = el.alt || '';\n        media.decoding = 'async';\n        media.draggable = false;\n        media.src = srcOf(el);\n        media.addEventListener('load', () => {\n          if (media.naturalWidth) setAspect(it, media.naturalWidth \/ media.naturalHeight);\n        });\n      }\n      box.appendChild(media);\n      strip.appendChild(box);\n      const slot = { box, media, big: false, playing: false, vc: null };\n      if (isVideo(el) && CONFIG.videoControls && el.closest('.' + CONFIG.videoClass)) buildControls(slot);\n      slots.push(slot);\n    }\n    rects = new Array(M);\n  }\n  function upgrade(i){                                   \/\/ la foto activa pasa a su versi\u00f3n m\u00e1s grande\n    const s = slots[i];\n    if (!s || s.big || isVideo(items[i % N])) return;\n    s.big = true;\n    const big = bigSrcOf(items[i % N]);\n    if (!big || big === s.media.src) return;\n    const pre = new Image();\n    pre.onload = () => { if (s.media.isConnected) s.media.src = pre.src; };\n    pre.src = big;\n  }\n\n  \/* \u2500\u2500 Foto que vuela (apertura y cierre) \u2500\u2500 *\/\n  function setHero(slot){\n    const el = items[slot % N], r = rects[slot];\n    hero.style.width = r.w + 'px'; hero.style.height = r.h + 'px';\n    hero.style.left = r.l + 'px'; hero.style.top = r.t + 'px';\n    hero.style.visibility = 'visible';\n    hero.replaceChildren();\n    if (isVideo(el)){\n      const v = document.createElement('video');\n      v.muted = true; v.loop = true; v.autoplay = true; v.playsInline = true;\n      v.setAttribute('muted', ''); v.setAttribute('playsinline', '');\n      v.src = srcOf(el);\n      v.addEventListener('loadedmetadata', () => { try { v.currentTime = el.currentTime || 0; } catch(_){} });\n      hero.appendChild(v);\n      const p = v.play(); if (p && p.catch) p.catch(() => {});\n    } else {\n      const img = new Image();\n      img.alt = el.alt || '';\n      img.src = srcOf(el);                         \/\/ primero la que ya est\u00e1 cargada (instant\u00e1nea)\u2026\n      hero.appendChild(img);\n      const big = bigSrcOf(el);\n      if (big && big !== img.src){                 \/\/ \u2026y luego se cambia por la grande\n        const pre = new Image();\n        pre.onload = () => { if (img.isConnected) img.src = pre.src; };\n        pre.src = big;\n      }\n    }\n  }\n  function hide(el){ if (hidden) hidden.style.visibility = ''; hidden = el; if (el) el.style.visibility = 'hidden'; }\n\n  \/* \u2500\u2500 Animaci\u00f3n entre el sitio original y el centro \u2500\u2500 *\/\n  const ease = p => p < .5 ? 4 * p * p * p : 1 - Math.pow(-2 * p + 2, 3) \/ 2;\n  function heroState(k, fade, rect){\n    if (rect){\n      const W = hero.offsetWidth, H = hero.offsetHeight;\n      const dx = (rect.left + rect.width \/ 2 - innerWidth \/ 2) * k;\n      const dy = (rect.top + rect.height \/ 2 - innerHeight \/ 2) * k;\n      hero.style.transform = `translate(${dx}px,${dy}px) scale(${1 + (rect.width \/ W - 1) * k},${1 + (rect.height \/ H - 1) * k})`;\n      hero.style.opacity = fade;\n    } else {                                       \/\/ fuera de pantalla: se encoge y desvanece\n      hero.style.transform = `scale(${1 - 0.25 * k})`;\n      hero.style.opacity = 1 - k;\n    }\n  }\n  function flight(mode, rect, onProgress, onDone){\n    const dur = mode === 'open' ? CONFIG.openMs : CONFIG.closeMs;\n    const t0 = performance.now();\n    hero.style.transition = 'none';\n    const step = now => {\n      const p = Math.min(1, (now - t0) \/ dur);\n      const k = mode === 'open' ? 1 - ease(p) : ease(p);\n      const fade = (mode === 'close' && p > 0.8) ? 1 - (p - 0.8) \/ 0.2 : 1;\n      heroState(k, fade, rect);\n      if (onProgress) onProgress(p);\n      if (p < 1) requestAnimationFrame(step); else onDone();\n    };\n    heroState(mode === 'open' ? 1 : 0, 1, rect);\n    requestAnimationFrame(step);\n  }\n\n  \/* \u2500\u2500 Movimiento de la ruleta \u2500\u2500 *\/\n  function stopMotion(){\n    if (raf) cancelAnimationFrame(raf);\n    raf = 0; anim = null;\n    clearTimeout(scrollTimer);\n  }\n  function settle(){                               \/\/ la ruleta se ha parado en una foto\n    f = mod(f, M);\n    render(f);\n    hide(items[mod(Math.round(f), M) % N]);\n  }\n  function animateTo(target, dur, easing, isSnap){\n    if (state !== 'open') return;\n    if (raf) cancelAnimationFrame(raf);\n    const from = f, t0 = performance.now();\n    anim = { to: target, snap: !!isSnap };\n    const step = now => {\n      const p = Math.min(1, (now - t0) \/ dur);\n      f = from + (target - from) * easing(p);\n      render(f);\n      if (p < 1) raf = requestAnimationFrame(step);\n      else { raf = 0; anim = null; settle(); }\n    };\n    raf = requestAnimationFrame(step);\n  }\n  function snap(){                                 \/\/ acomoda la ruleta en la foto m\u00e1s cercana\n    clearTimeout(scrollTimer);\n    const target = Math.round(f);\n    if (Math.abs(target - f) < 0.002){ f = target; render(f); settle(); return; }\n    animateTo(target, snapDur(Math.abs(target - f)), easeSnap, true);\n  }\n  function snapDur(dist){ return Math.min(CONFIG.rouletteMaxMs, CONFIG.snapMinMs + CONFIG.snapPerItemMs * dist); }\n  function rouletteDur(steps){\n    return Math.min(CONFIG.rouletteMaxMs, CONFIG.rouletteMs + CONFIG.roulettePerStepMs * (Math.max(1, steps) - 1));\n  }\n  function goTo(slot){                             \/\/ ruleta hasta la foto \"slot\" por el camino m\u00e1s corto\n    if (state !== 'open' || N < 2) return;\n    const base = anim ? anim.to : Math.round(f);\n    let d = mod(slot - base, M);\n    if (d > M \/ 2) d -= M;\n    if (!d) return;\n    animateTo(base + d, rouletteDur(Math.abs(d)), easeRoulette);\n  }\n  function step(d){\n    if (state !== 'open' || N < 2) return;\n    const base = anim ? anim.to : Math.round(f);\n    animateTo(base + d, rouletteDur(1), easeRoulette);\n  }\n\n  \/* \u2500\u2500 Abrir \/ cerrar \u2500\u2500 *\/\n  function open(list, i){\n    if (state !== 'closed') return;\n    state = 'opening';\n    items = list;\n    aspects = items.map(aspectOf);\n    lockScroll();                                  \/\/ primero se bloquea el scroll y luego se mide\n    blockOn();\n    const el = items[i];\n    lb.classList.toggle('single', items.length < 2);\n    lb.classList.add('show');\n    nameEl.textContent = getTitle() || '\u00a0';\n    catEl.textContent = getCats();\n    buildSlides();\n    computeSizes();\n    cancelAnimationFrame(vcRaf); vcRaf = requestAnimationFrame(vcTick);\n    f = i; nearest = -1;\n    render(f);\n    setHero(i);\n    const rect = rectOf(el);\n    hide(el);\n    void lb.offsetWidth;\n    lb.classList.add('veil-on');                   \/\/ el fondo se desenfoca\n    flight('open', rect, null, () => {\n      hero.style.transform = ''; hero.style.opacity = 1;\n      state = 'open';\n      strip.classList.add('on');                   \/\/ la l\u00ednea se hace visible, con todo a\u00fan a opacidad 0\n      void strip.offsetWidth;                      \/\/ fuerza el estilo inicial (si no, en m\u00f3vil el fade no corre y todo \"salta\")\n      void lb.offsetWidth;\n      requestAnimationFrame(() => {\n        if (state !== 'open') return;\n        lb.classList.add('nav-on');                \/\/ ahora s\u00ed: fade-in r\u00e1pido de vecinas, t\u00edtulo, contador, X y categor\u00edas\n        requestAnimationFrame(() => requestAnimationFrame(() => {\n          if (state === 'open') hero.style.visibility = 'hidden';   \/\/ la foto activa de la l\u00ednea ya ocupa su sitio\n        }));\n      });\n    });\n  }\n  function close(){\n    if (state !== 'open') return;\n    state = 'closing';\n    down = null;\n    if (fsEl() && document.exitFullscreen) { try { document.exitFullscreen(); } catch (_) {} }\n    stopMotion();\n    f = Math.round(f);\n    render(f);\n    const slot = mod(f, M), el = items[slot % N];\n    hide(el);\n    const rect = rectOf(el);\n    setHero(slot);                                 \/\/ la foto activa vuelve a volar desde el centro\n    slots[slot].box.style.visibility = 'hidden';\n    lb.classList.remove('nav-on', 'veil-on');\n    flight('close', rect, p => { if (p > 0.8 && hidden){ hidden.style.visibility = ''; hidden = null; } }, () => {\n      hide(null);\n      restoreCursor();\n      lb.classList.remove('show');\n      strip.classList.remove('on');\n      strip.replaceChildren(); slots = []; rects = []; nearest = -1;\n      hero.replaceChildren();\n      hero.style.transform = ''; hero.style.opacity = 1; hero.style.visibility = '';\n      unlockScroll();\n      blockOff();\n      state = 'closed';\n    });\n  }\n\n  \/* \u2500\u2500 Eventos \u2500\u2500 *\/\n  document.addEventListener('click', e => {\n    if (state !== 'closed' || !e.target.closest) return;\n    const el = e.target.closest(CONFIG.itemSelector);\n    if (!el) return;\n    const list = collect();\n    const i = list.indexOf(el);\n    if (i < 0) return;\n    e.preventDefault();\n    open(list, i);\n  }, true);\n\n  \/* La p\u00e1gina de fondo NO se mueve mientras el visualizador est\u00e1 abierto\n     (los bloqueos solo se activan al abrir y se quitan al cerrar, para no frenar el scroll normal de la web) *\/\n  const blockPage = e => { if (state !== 'closed') e.preventDefault(); };\n  const blockOn  = () => { document.addEventListener('wheel', blockPage, { passive: false }); document.addEventListener('touchmove', blockPage, { passive: false }); };\n  const blockOff = () => { document.removeEventListener('wheel', blockPage); document.removeEventListener('touchmove', blockPage); };\n\n  \/* Scroll horizontal del trackpad (o rueda del rat\u00f3n) \u2192 mueve la ruleta *\/\n  lb.setAttribute('data-lenis-prevent', '');       \/\/ por si la web usa Lenis (scroll suave)\n  lb.addEventListener('wheel', e => {\n    e.preventDefault();\n    e.stopPropagation();\n    if (state !== 'open' || N < 2) return;\n    let dx = e.deltaX, dy = e.deltaY;\n    if (e.deltaMode === 1){ dx *= 16; dy *= 16; } else if (e.deltaMode === 2){ dx *= innerWidth; dy *= innerHeight; }\n    const d = vertical ? dy : (Math.abs(dx) >= Math.abs(dy) ? dx : dy);\n    if (!d) return;\n    const now = performance.now();\n    const gap = now - wheelT; wheelT = now;\n    if (gap > 150) wheelPeak = 0;                    \/\/ gesto nuevo\n    const speed = Math.abs(d) \/ Math.max(1, Math.min(gap, 100));      \/\/ px\/ms\n    wheelPeak = Math.max(wheelPeak, speed);\n    \/* La cola de inercia del trackpad (eventos diminutos que llegan mientras la ruleta ya se est\u00e1 acomodando) se ignora *\/\n    if (anim && anim.snap && Math.abs(d) < 8) return;\n    if (raf){ cancelAnimationFrame(raf); raf = 0; anim = null; }\n    f += (d \/ unit) * CONFIG.scrollSensitivity;\n    render(f);\n    clearTimeout(scrollTimer);\n    \/* Tras un gesto r\u00e1pido, en cuanto la inercia se frena se acomoda YA (sin esperar) *\/\n    const fading = wheelPeak > 0.8 && speed < 0.3;\n    scrollTimer = setTimeout(snap, fading ? 10 : CONFIG.scrollIdleMs);\n  }, { passive: false });\n\n  \/* Arrastrar (rat\u00f3n o dedo) y clic \/ toque *\/\n  const slotOf = t => { const s = t && t.closest ? t.closest('.pgx-slide') : null; return s ? +s.dataset.i : null; };\n  lb.addEventListener('pointerdown', e => {\n    if (e.button !== 0 || state !== 'open' || fsEl() || e.target.closest('.pgx-btn, .pgx-vc')) return;\n    if (raf){ cancelAnimationFrame(raf); raf = 0; anim = null; }\n    clearTimeout(scrollTimer);\n    down = { x: e.clientX, y: e.clientY, f0: f, slot: slotOf(e.target), drag: false, pts: [{ t: performance.now(), f }] };\n  });\n  lb.addEventListener('pointermove', e => {\n    if (!down || state !== 'open' || N < 2) return;\n    const dx = e.clientX - down.x, dy = e.clientY - down.y;\n    if (!down.drag){\n      if (Math.hypot(dx, dy) < 6) return;\n      down.drag = true;\n      try { lb.setPointerCapture(e.pointerId); } catch (_) {}\n    }\n    f = down.f0 - (vertical ? dy : dx) \/ unit;\n    render(f);\n    down.pts.push({ t: performance.now(), f });\n    if (down.pts.length > 6) down.pts.shift();\n  });\n  lb.addEventListener('pointerup', e => {\n    const dn = down; down = null;\n    if (!dn) return;\n    try { lb.releasePointerCapture(e.pointerId); } catch (_) {}\n    if (state !== 'open') return;\n    if (dn.drag){                                  \/\/ soltar tras arrastrar: peque\u00f1a inercia y se acomoda\n      const a = dn.pts[0], b = dn.pts[dn.pts.length - 1];\n      let v = (b.f - a.f) \/ Math.max(1, b.t - a.t);\n      if (performance.now() - b.t > 80) v = 0;\n      let target = Math.round(f + v * CONFIG.flingMs);\n      target = Math.max(f - 6, Math.min(f + 6, target));\n      animateTo(target, snapDur(Math.abs(target - f)), easeSnap, true);\n      return;\n    }\n    if (Math.abs(f - Math.round(f)) > 0.002){ snap(); return; }\n    if (dn.slot !== null) goTo(dn.slot);           \/\/ toque\/clic en una foto de la l\u00ednea \u2192 ruleta hasta ella\n    else if (!e.target.closest('.pgx-btn, .pgx-vc')) close();   \/\/ toque\/clic fuera \u2192 cerrar\n  });\n  lb.addEventListener('pointercancel', () => { const had = down && down.drag; down = null; if (had) snap(); });\n  lb.addEventListener('contextmenu', e => { if (!e.target.closest('.pgx-btn')) e.preventDefault(); });\n\n  closeBtn.onclick = close;\n  window.addEventListener('keydown', e => {\n    if (state === 'closed') return;\n    if (state !== 'open') return;\n    if (e.key === 'Escape'){ close(); return; }\n    if (e.key === 'ArrowLeft' || e.key === 'ArrowUp' || e.key === 'PageUp'){ e.preventDefault(); step(-1); }\n    else if (e.key === 'ArrowRight' || e.key === 'ArrowDown' || e.key === 'PageDown' || e.key === ' '){ e.preventDefault(); step(1); }\n    else if (e.key === 'Home' || e.key === 'End'){ e.preventDefault(); }\n  });\n  window.addEventListener('resize', () => { if (state === 'open'){ computeSizes(); render(f); } });\n\n})();\n<\/script>\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>T\u00edtulo y cr\u00e9ditos hechos a mano para el videoclip de Shoren, inspirados en la protagonista rayando su propia portada de revista. Posca amarillo y textura real, sin atajos.<\/p>","protected":false},"author":1,"featured_media":8221,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[29],"tags":[],"class_list":["post-8219","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-music"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Chica de Revista (Shoren) \u2014 Music Video Title Design | ByDMB<\/title>\n<meta name=\"description\" content=\"Music video title design for Shoren&#039;s Chica de Revista: hand-drawn yellow paint marker lettering, credits and magazine props.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/bydmb.com\/es\/music\/chica-de-revista-music-video-title-design\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Chica de Revista (Shoren) \u2014 Music Video Title Design | ByDMB\" \/>\n<meta property=\"og:description\" content=\"Music video title design for Shoren&#039;s Chica de Revista: hand-drawn yellow paint marker lettering, credits and magazine props.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/bydmb.com\/es\/music\/chica-de-revista-music-video-title-design\/\" \/>\n<meta property=\"og:site_name\" content=\"David M Ballar\u00edn\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-09T16:38:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-09T19:09:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-music-video-title-design-scaled.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1759\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"David M Ballar\u00edn\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Chica de Revista (Shoren) \u2014 Music Video Title Design | ByDMB\" \/>\n<meta name=\"twitter:description\" content=\"Music video title design for Shoren&#039;s Chica de Revista: hand-drawn yellow paint marker lettering, credits and magazine props.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-music-video-title-design-scaled.webp\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"David M Ballar\u00edn\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/bydmb.com\\\/music\\\/chica-de-revista-music-video-title-design\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bydmb.com\\\/music\\\/chica-de-revista-music-video-title-design\\\/\"},\"author\":{\"name\":\"David M Ballar\u00edn\",\"@id\":\"https:\\\/\\\/bydmb.com\\\/#\\\/schema\\\/person\\\/782ed7a7ebdf95447d3d182355446533\"},\"headline\":\"Chica de revista de Shoren &#8211; Dise\u00f1o de t\u00edtulo y cr\u00e9ditos\",\"datePublished\":\"2026-11-09T16:38:31+00:00\",\"dateModified\":\"2026-11-09T19:09:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/bydmb.com\\\/music\\\/chica-de-revista-music-video-title-design\\\/\"},\"wordCount\":534,\"publisher\":{\"@id\":\"https:\\\/\\\/bydmb.com\\\/#\\\/schema\\\/person\\\/782ed7a7ebdf95447d3d182355446533\"},\"image\":{\"@id\":\"https:\\\/\\\/bydmb.com\\\/music\\\/chica-de-revista-music-video-title-design\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/bydmb.com\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/chica-de-revista-shoren-music-video-title-design-scaled.webp\",\"articleSection\":[\"Music\"],\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/bydmb.com\\\/music\\\/chica-de-revista-music-video-title-design\\\/\",\"url\":\"https:\\\/\\\/bydmb.com\\\/music\\\/chica-de-revista-music-video-title-design\\\/\",\"name\":\"Chica de Revista (Shoren) \u2014 Music Video Title Design | ByDMB\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bydmb.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/bydmb.com\\\/music\\\/chica-de-revista-music-video-title-design\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/bydmb.com\\\/music\\\/chica-de-revista-music-video-title-design\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/bydmb.com\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/chica-de-revista-shoren-music-video-title-design-scaled.webp\",\"datePublished\":\"2026-11-09T16:38:31+00:00\",\"dateModified\":\"2026-11-09T19:09:39+00:00\",\"description\":\"Music video title design for Shoren's Chica de Revista: hand-drawn yellow paint marker lettering, credits and magazine props.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/bydmb.com\\\/music\\\/chica-de-revista-music-video-title-design\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/bydmb.com\\\/music\\\/chica-de-revista-music-video-title-design\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/bydmb.com\\\/music\\\/chica-de-revista-music-video-title-design\\\/#primaryimage\",\"url\":\"https:\\\/\\\/bydmb.com\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/chica-de-revista-shoren-music-video-title-design-scaled.webp\",\"contentUrl\":\"https:\\\/\\\/bydmb.com\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/chica-de-revista-shoren-music-video-title-design-scaled.webp\",\"width\":2560,\"height\":1759},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/bydmb.com\\\/music\\\/chica-de-revista-music-video-title-design\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/bydmb.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Chica de revista de Shoren &#8211; Dise\u00f1o de t\u00edtulo y cr\u00e9ditos\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/bydmb.com\\\/#website\",\"url\":\"https:\\\/\\\/bydmb.com\\\/\",\"name\":\"byDMB\",\"description\":\"Portfolio de dise\u00f1o de David M Ballar\u00edn\",\"publisher\":{\"@id\":\"https:\\\/\\\/bydmb.com\\\/#\\\/schema\\\/person\\\/782ed7a7ebdf95447d3d182355446533\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/bydmb.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/bydmb.com\\\/#\\\/schema\\\/person\\\/782ed7a7ebdf95447d3d182355446533\",\"name\":\"David M Ballar\u00edn\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/bydmb.com\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/Branding-BYDMB-2025-12.png\",\"url\":\"https:\\\/\\\/bydmb.com\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/Branding-BYDMB-2025-12.png\",\"contentUrl\":\"https:\\\/\\\/bydmb.com\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/Branding-BYDMB-2025-12.png\",\"width\":1080,\"height\":1080,\"caption\":\"David M Ballar\u00edn\"},\"logo\":{\"@id\":\"https:\\\/\\\/bydmb.com\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/Branding-BYDMB-2025-12.png\"},\"sameAs\":[\"https:\\\/\\\/bydmb.com\",\"https:\\\/\\\/www.instagram.com\\\/by.dmb\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/david-martinez-ballarin\",\"https:\\\/\\\/pin.it\\\/4IYWKC2RZ\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Chica de Revista (Shoren) \u2014 Music Video Title Design | ByDMB","description":"Music video title design for Shoren's Chica de Revista: hand-drawn yellow paint marker lettering, credits and magazine props.","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:\/\/bydmb.com\/es\/music\/chica-de-revista-music-video-title-design\/","og_locale":"es_ES","og_type":"article","og_title":"Chica de Revista (Shoren) \u2014 Music Video Title Design | ByDMB","og_description":"Music video title design for Shoren's Chica de Revista: hand-drawn yellow paint marker lettering, credits and magazine props.","og_url":"https:\/\/bydmb.com\/es\/music\/chica-de-revista-music-video-title-design\/","og_site_name":"David M Ballar\u00edn","article_published_time":"2026-11-09T16:38:31+00:00","article_modified_time":"2026-11-09T19:09:39+00:00","og_image":[{"width":2560,"height":1759,"url":"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-music-video-title-design-scaled.webp","type":"image\/webp"}],"author":"David M Ballar\u00edn","twitter_card":"summary_large_image","twitter_title":"Chica de Revista (Shoren) \u2014 Music Video Title Design | ByDMB","twitter_description":"Music video title design for Shoren's Chica de Revista: hand-drawn yellow paint marker lettering, credits and magazine props.","twitter_image":"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-music-video-title-design-scaled.webp","twitter_misc":{"Escrito por":"David M Ballar\u00edn","Tiempo de lectura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/bydmb.com\/music\/chica-de-revista-music-video-title-design\/#article","isPartOf":{"@id":"https:\/\/bydmb.com\/music\/chica-de-revista-music-video-title-design\/"},"author":{"name":"David M Ballar\u00edn","@id":"https:\/\/bydmb.com\/#\/schema\/person\/782ed7a7ebdf95447d3d182355446533"},"headline":"Chica de revista de Shoren &#8211; Dise\u00f1o de t\u00edtulo y cr\u00e9ditos","datePublished":"2026-11-09T16:38:31+00:00","dateModified":"2026-11-09T19:09:39+00:00","mainEntityOfPage":{"@id":"https:\/\/bydmb.com\/music\/chica-de-revista-music-video-title-design\/"},"wordCount":534,"publisher":{"@id":"https:\/\/bydmb.com\/#\/schema\/person\/782ed7a7ebdf95447d3d182355446533"},"image":{"@id":"https:\/\/bydmb.com\/music\/chica-de-revista-music-video-title-design\/#primaryimage"},"thumbnailUrl":"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-music-video-title-design-scaled.webp","articleSection":["Music"],"inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/bydmb.com\/music\/chica-de-revista-music-video-title-design\/","url":"https:\/\/bydmb.com\/music\/chica-de-revista-music-video-title-design\/","name":"Chica de Revista (Shoren) \u2014 Music Video Title Design | ByDMB","isPartOf":{"@id":"https:\/\/bydmb.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/bydmb.com\/music\/chica-de-revista-music-video-title-design\/#primaryimage"},"image":{"@id":"https:\/\/bydmb.com\/music\/chica-de-revista-music-video-title-design\/#primaryimage"},"thumbnailUrl":"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-music-video-title-design-scaled.webp","datePublished":"2026-11-09T16:38:31+00:00","dateModified":"2026-11-09T19:09:39+00:00","description":"Music video title design for Shoren's Chica de Revista: hand-drawn yellow paint marker lettering, credits and magazine props.","breadcrumb":{"@id":"https:\/\/bydmb.com\/music\/chica-de-revista-music-video-title-design\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/bydmb.com\/music\/chica-de-revista-music-video-title-design\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/bydmb.com\/music\/chica-de-revista-music-video-title-design\/#primaryimage","url":"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-music-video-title-design-scaled.webp","contentUrl":"https:\/\/bydmb.com\/wp-content\/uploads\/2026\/11\/chica-de-revista-shoren-music-video-title-design-scaled.webp","width":2560,"height":1759},{"@type":"BreadcrumbList","@id":"https:\/\/bydmb.com\/music\/chica-de-revista-music-video-title-design\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/bydmb.com\/"},{"@type":"ListItem","position":2,"name":"Chica de revista de Shoren &#8211; Dise\u00f1o de t\u00edtulo y cr\u00e9ditos"}]},{"@type":"WebSite","@id":"https:\/\/bydmb.com\/#website","url":"https:\/\/bydmb.com\/","name":"byDMB","description":"Portfolio de dise\u00f1o de David M Ballar\u00edn","publisher":{"@id":"https:\/\/bydmb.com\/#\/schema\/person\/782ed7a7ebdf95447d3d182355446533"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/bydmb.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":["Person","Organization"],"@id":"https:\/\/bydmb.com\/#\/schema\/person\/782ed7a7ebdf95447d3d182355446533","name":"David M Ballar\u00edn","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/bydmb.com\/wp-content\/uploads\/2025\/01\/Branding-BYDMB-2025-12.png","url":"https:\/\/bydmb.com\/wp-content\/uploads\/2025\/01\/Branding-BYDMB-2025-12.png","contentUrl":"https:\/\/bydmb.com\/wp-content\/uploads\/2025\/01\/Branding-BYDMB-2025-12.png","width":1080,"height":1080,"caption":"David M Ballar\u00edn"},"logo":{"@id":"https:\/\/bydmb.com\/wp-content\/uploads\/2025\/01\/Branding-BYDMB-2025-12.png"},"sameAs":["https:\/\/bydmb.com","https:\/\/www.instagram.com\/by.dmb\/","https:\/\/www.linkedin.com\/in\/david-martinez-ballarin","https:\/\/pin.it\/4IYWKC2RZ"]}]}},"_links":{"self":[{"href":"https:\/\/bydmb.com\/es\/wp-json\/wp\/v2\/posts\/8219","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bydmb.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bydmb.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bydmb.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bydmb.com\/es\/wp-json\/wp\/v2\/comments?post=8219"}],"version-history":[{"count":21,"href":"https:\/\/bydmb.com\/es\/wp-json\/wp\/v2\/posts\/8219\/revisions"}],"predecessor-version":[{"id":8292,"href":"https:\/\/bydmb.com\/es\/wp-json\/wp\/v2\/posts\/8219\/revisions\/8292"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bydmb.com\/es\/wp-json\/wp\/v2\/media\/8221"}],"wp:attachment":[{"href":"https:\/\/bydmb.com\/es\/wp-json\/wp\/v2\/media?parent=8219"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bydmb.com\/es\/wp-json\/wp\/v2\/categories?post=8219"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bydmb.com\/es\/wp-json\/wp\/v2\/tags?post=8219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}