{"id":69,"date":"2026-08-06T07:14:13","date_gmt":"2026-08-06T07:14:13","guid":{"rendered":"https:\/\/vishnukr.com\/?page_id=69"},"modified":"2026-08-23T09:04:07","modified_gmt":"2026-08-23T09:04:07","slug":"home","status":"publish","type":"page","link":"https:\/\/vishnukr.com\/","title":{"rendered":"Home"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"69\" class=\"elementor elementor-69\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-e16306c elementor-section-content-middle elementor-section-height-full elementor-section-boxed elementor-section-height-default elementor-section-items-middle\" data-id=\"e16306c\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;video&quot;,&quot;background_video_link&quot;:&quot;https:\\\/\\\/vishnukr.com\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/SHOWREEL_BANNER-2.mp4&quot;,&quot;background_play_on_mobile&quot;:&quot;yes&quot;}\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-background-video-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<video class=\"elementor-background-video-hosted\" role=\"presentation\" autoplay muted playsinline loop><\/video>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-background-overlay\"><\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-7734cc3\" data-id=\"7734cc3\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-38ac36d elementor-section-full_width elementor-section-height-default elementor-section-height-default elementor-invisible\" data-id=\"38ac36d\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;animation&quot;:&quot;fadeInDown&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-2612243\" data-id=\"2612243\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7700408 elementor-widget elementor-widget-heading\" data-id=\"7700408\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Editing<\/h2>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-7640dd3\" data-id=\"7640dd3\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4188a8c elementor-widget elementor-widget-heading\" data-id=\"4188a8c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Videography<\/h2>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-ad74de7\" data-id=\"ad74de7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-0db19c2 elementor-widget-mobile__width-initial elementor-widget elementor-widget-heading\" data-id=\"0db19c2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">AI Video<\/h2>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-088b98d elementor-section-boxed elementor-section-height-default elementor-section-height-default elementor-invisible\" data-id=\"088b98d\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;animation&quot;:&quot;fadeInUp&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-086fd69\" data-id=\"086fd69\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7296c83 elementor-widget elementor-widget-heading\" data-id=\"7296c83\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\"> Every Great Brand Deserves <br>a Great Edit<\/h1>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-8608493 e-flex e-con-boxed e-con e-parent\" data-id=\"8608493\" 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-ceed96b elementor-align-center elementor-mobile-align-center elementor-widget__width-initial elementor-widget-mobile__width-initial elementor-widget-tablet__width-initial elementor-invisible elementor-widget elementor-widget-button\" data-id=\"ceed96b\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-md elementor-animation-sink\" href=\"#View\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\"> View My Work<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b79108c elementor-align-center elementor-mobile-align-center elementor-widget__width-initial elementor-widget-mobile__width-initial elementor-widget-tablet__width-initial elementor-invisible elementor-widget elementor-widget-button\" data-id=\"b79108c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-md elementor-animation-sink\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Hire Me<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-dfe9629 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"dfe9629\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-fd66da2 animated-slow elementor-invisible\" data-id=\"fd66da2\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;animation&quot;:&quot;fadeInLeft&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d8eb9b4 elementor-widget elementor-widget-image\" data-id=\"d8eb9b4\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;motion_fx_motion_fx_mouse&quot;:&quot;yes&quot;,&quot;motion_fx_tilt_effect&quot;:&quot;yes&quot;,&quot;motion_fx_tilt_speed&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:1.5,&quot;sizes&quot;:[]}}\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"816\" height=\"1292\" src=\"https:\/\/vishnukr.com\/wp-content\/uploads\/2026\/08\/KR_GREY.jpg\" class=\"attachment-full size-full wp-image-200\" alt=\"\" srcset=\"https:\/\/vishnukr.com\/wp-content\/uploads\/2026\/08\/KR_GREY.jpg 816w, https:\/\/vishnukr.com\/wp-content\/uploads\/2026\/08\/KR_GREY-189x300.jpg 189w, https:\/\/vishnukr.com\/wp-content\/uploads\/2026\/08\/KR_GREY-647x1024.jpg 647w, https:\/\/vishnukr.com\/wp-content\/uploads\/2026\/08\/KR_GREY-768x1216.jpg 768w\" sizes=\"(max-width: 816px) 100vw, 816px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f737554 elementor-widget elementor-widget-image\" data-id=\"f737554\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"199\" height=\"254\" src=\"https:\/\/vishnukr.com\/wp-content\/uploads\/2026\/08\/Profile-Img_border-copy.png\" class=\"attachment-large size-large wp-image-313\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-5382e43 animated-slow elementor-invisible\" data-id=\"5382e43\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;animation&quot;:&quot;fadeInRight&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-18e4f2a elementor-widget elementor-widget-heading\" data-id=\"18e4f2a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">SINCE 2018<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ec7c958 elementor-widget elementor-widget-heading\" data-id=\"ec7c958\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">I'm Vishnu K R, a Creative Video Editor &amp; Visual Storyteller based in UAE, helping hospitality, F&amp;B <br>and lifestyle brands turn raw footage into <br>scroll-stopping stories.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0adf97f animated-slow elementor-widget-divider--view-line elementor-invisible elementor-widget elementor-widget-divider\" data-id=\"0adf97f\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;}\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-69849f7 elementor-widget elementor-widget-text-editor\" data-id=\"69849f7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Since starting my career in 2018 as a Graphic Designer, I&#8217;ve evolved into a creative professional specializing in video editing and videography. Throughout my journey, I&#8217;ve worked across multiple creative roles and collaborated with leading hospitality and lifestyle brands, including Sofitel Dubai, Rotana, Marriott Marquis Dubai Creek, Kempinski, and Address, Vida &amp; Palace Hotels &amp; Resorts. From editing 100+ social media videos to directing a perfume brand launch film, I combine cinematic storytelling, motion design, and AI-powered workflows to create engaging visual content that captures attention and delivers meaningful results.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-4659897 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4659897\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-a8fa39a\" data-id=\"a8fa39a\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-bbaa228 elementor-widget elementor-widget-heading\" data-id=\"bbaa228\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;motion_fx_motion_fx_scrolling&quot;:&quot;yes&quot;,&quot;motion_fx_devices&quot;:[&quot;desktop&quot;,&quot;tablet&quot;,&quot;mobile&quot;]}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Featured Films<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6222af8 animated-slow elementor-widget-divider--view-line elementor-invisible elementor-widget elementor-widget-divider\" data-id=\"6222af8\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;}\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e772c94 elementor-widget elementor-widget-text-editor\" data-id=\"e772c94\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Selected brand films, ads, and social content showcasing my work in video editing, cinematography, and AI-assisted storytelling.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-c3cfd92\" data-id=\"c3cfd92\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7f4b2fe elementor-align-right elementor-mobile-align-left elementor-tablet-align-left elementor-invisible elementor-widget elementor-widget-button\" data-id=\"7f4b2fe\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-md elementor-animation-sink\" href=\"https:\/\/youtu.be\/OYOeT4av_Ls\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">WATCH MY SHOWREEL<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7587fae elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7587fae\" data-element_type=\"section\" data-e-type=\"section\" id=\"View\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation&quot;:&quot;none&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-c8e1000\" data-id=\"c8e1000\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;animation&quot;:&quot;none&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-70010e6 elementor-widget elementor-widget-html\" data-id=\"70010e6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>Work \u2014 Video Portfolio<\/title>\n<!--\n  ============================================================================\n  FILTERABLE VIDEO PORTFOLIO + YOUTUBE LIGHTBOX\n  ============================================================================\n  Drop-in, self-contained. No libraries, no build step.\n  TO USE ON YOUR SITE \u2014 copy 3 blocks into your page:\n      1. the <style> block                          -> into <head>\n      2. <section class=\"pf\">\u2026<\/section> + the modal -> into <body>\n      3. the <script> block                          -> just before <\/body>\n  TO ADD \/ EDIT VIDEOS:\n      Edit ONLY the VIDEOS array in the script. Paste any YouTube link format.\n  WHAT CHANGED IN THIS VERSION\n    * No \"All\" or \"Showreel\" tab \u2014 the section opens on Brand Films, which is\n      simply the first entry in CATEGORIES. Reorder that array to change what\n      loads first; no other edit needed.\n    * Tabs are a ONE-LINE CAROUSEL \u2014 they never wrap onto a second row.\n      Swipe, drag, scroll or arrow-key through them; edges fade to show\n      there is more. Auto-centres to the active tab.\n    * Vertical Shorts get a blurred-fill thumbnail so every tile in the grid\n      stays exactly 16:9 \u2014 no ragged rows \u2014 and open 9:16 in the lightbox.\n    * Thumbnails walk a fallback chain and reject YouTube's 120x90 grey stub,\n      so a Short without a maxres still does not leave a blank tile.\n    * Social icon row under the grid.\n    * Still zero borders \/ zero stray hairlines anywhere.\n  ============================================================================\n-->\n<style>\n\/* ===========================================================================\n   1. THEME TOKENS \u2014 change these to re-skin the whole section\n   =========================================================================== *\/\n.pf, .pf-modal {\n  --pf-bg:          #1c1c1c;   \/* section background            *\/\n  --pf-card-bg:     #1c1c1c;   \/* MUST match --pf-bg, otherwise a lighter\n                                  hairline shows around each thumbnail       *\/\n  --pf-text:        #ffffff;   \/* active tab \/ titles           *\/\n  --pf-muted:       #8f8f8f;   \/* inactive tabs                 *\/\n  --pf-accent:      #ffffff;   \/* focus ring colour             *\/\n  --pf-radius:      6px;       \/* card corner radius            *\/\n  --pf-gap:         22px;      \/* grid gutter                   *\/\n  --pf-max:         1400px;    \/* max content width             *\/\n  --pf-ease:        cubic-bezier(.22,.61,.36,1);\n}\n\/* ===========================================================================\n   2. SECTION SHELL\n   =========================================================================== *\/\n.pf {\n  background: var(--pf-bg);\n  padding: 56px 24px 72px;\n  border: 0;                 \/* kills any rule inherited from the site *\/\n  box-shadow: none;\n  font-family: \"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n  -webkit-font-smoothing: antialiased;\n}\n.pf__inner { max-width: var(--pf-max); margin: 0 auto; }\n\/* ---------- optional section heading (delete if you don't want it) -------- *\/\n.pf__head { text-align: center; margin: 0 0 26px; }\n.pf__title {\n  color: var(--pf-text);\n  font-size: clamp(26px, 4vw, 44px);\n  font-family: 'banner';\n  font-weight: 800 !important;\n  letter-spacing: -.02em;\n  line-height: 1.1;\n  margin: 20px 0 20px;\n}\n.pf__sub { color: var(--pf-muted); font-size: 15px; margin: 0; }\n\/* ===========================================================================\n   3. TAB CAROUSEL \u2014 one line, always. Never wraps.\n   =========================================================================== *\/\n.pf__tabsWrap {\n  position: relative;\n  margin: 0 0 34px;\n  \/* pull to the section's padding edge so the fade happens at the screen\n     edge on mobile, not 24px inside it *\/\n  margin-left: -24px;\n  margin-right: -24px;\n}\n\/* Fade masks. Only visible when there is actually more to scroll to. *\/\n.pf__tabsWrap::before,\n.pf__tabsWrap::after {\n  content: \"\";\n  position: absolute;\n  top: 0; bottom: 0;\n  width: 52px;\n  pointer-events: none;\n  z-index: 2;\n  opacity: 0;\n  transition: opacity .25s var(--pf-ease);\n}\n.pf__tabsWrap::before {\n  left: 0;\n  background: linear-gradient(to right, var(--pf-bg) 20%, rgba(28,28,28,0));\n}\n.pf__tabsWrap::after {\n  right: 0;\n  background: linear-gradient(to left, var(--pf-bg) 20%, rgba(28,28,28,0));\n}\n.pf__tabsWrap.has-left::before  { opacity: 1; }\n.pf__tabsWrap.has-right::after  { opacity: 1; }\n.pf__tabs {\n  display: flex;\n  flex-wrap: nowrap;              \/* <- the fix: one line, always *\/\n  align-items: center;\n  justify-content: flex-start;\n  gap: 34px;\n  margin: 0;\n  padding: 6px 24px;\n  border: 0;\n  overflow-x: auto;\n  overflow-y: hidden;\n  scroll-behavior: smooth;\n  overscroll-behavior-x: contain;\n  -webkit-overflow-scrolling: touch;\n  scrollbar-width: none;          \/* Firefox *\/\n  -ms-overflow-style: none;       \/* old Edge *\/\n  cursor: grab;\n}\n.pf__tabs::-webkit-scrollbar { display: none; }   \/* Chrome \/ Safari *\/\n.pf__tabs.is-dragging { cursor: grabbing; scroll-behavior: auto; }\n.pf__tabs.is-dragging .pf__tab { pointer-events: none; }\n\/* When every tab fits, centre them like a normal nav *\/\n.pf__tabs.fits { justify-content: center; }\n.pf__tab {\n  appearance: none;\n  background: none;\n  border: 0;\n  padding: 6px 2px;\n  cursor: pointer;\n  position: relative;\n  flex: 0 0 auto;                 \/* never squash a label *\/\n  color: var(--pf-muted);\n  font: inherit;\n  font-size: 16px;\n  font-weight: 500;\n  letter-spacing: .01em;\n  line-height: 1.4;\n  white-space: nowrap;            \/* never break a label onto 2 lines *\/\n  transition: color .25s var(--pf-ease);\n  -webkit-tap-highlight-color: transparent;\n}\n\/* Belt and braces: nothing may draw a bar under a tab. *\/\n.pf__tab::after, .pf__tab::before { content: none; }\n.pf__tab:hover { color: var(--pf-text); }\n.pf__tab:focus-visible { outline: 2px solid var(--pf-accent); outline-offset: 4px; border-radius: 3px; }\n.pf__tab.is-active { color: var(--pf-text); font-weight: 700; }\n.pf__count { font-size: 11px; vertical-align: super; opacity: .55; margin-left: 3px; font-weight: 500; }\n@media (max-width: 620px) {\n  .pf__tabs { gap: 26px; }\n  .pf__tab  { font-size: 15px; }\n}\n\/* ===========================================================================\n   4. GRID\n   =========================================================================== *\/\n.pf__grid {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  gap: var(--pf-gap);\n  border: 0;\n}\n@media (max-width: 1024px) { .pf__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }\n@media (max-width: 620px)  { .pf__grid { grid-template-columns: 1fr; --pf-gap: 16px; } }\n\/* ===========================================================================\n   5. CARD \u2014 clean thumbnail, no border, no permanent overlay\n   =========================================================================== *\/\n.pf-card {\n  appearance: none;\n  border: 0;\n  outline: 0;\n  box-shadow: none;\n  padding: 0;\n  margin: 0;\n  display: block;\n  width: 100%;\n  background: var(--pf-card-bg);\n  border-radius: var(--pf-radius);\n  overflow: hidden;\n  cursor: pointer;\n  position: relative;\n  aspect-ratio: 16 \/ 9;          \/* every tile stays the same shape *\/\n  isolation: isolate;\n  opacity: 0;\n  animation: pf-in .45s var(--pf-ease) forwards;\n  animation-delay: calc(var(--i, 0) * 45ms);\n  -webkit-tap-highlight-color: transparent;\n}\n@keyframes pf-in { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }\n@media (prefers-reduced-motion: reduce) {\n  .pf-card { animation: none; opacity: 1; }\n  .pf-card *, .pf__tabs { transition: none !important; scroll-behavior: auto; }\n}\n\/* --- media stack: blurred fill (verticals only) + the real frame --------- *\/\n.pf-card__media { position: absolute; inset: 0; display: block; overflow: hidden; }\n.pf-card__bg {\n  position: absolute;\n  inset: -8%;                    \/* over-bleed so the blur has no soft edge *\/\n  width: 116%; height: 116%;\n  object-fit: cover;\n  filter: blur(26px) saturate(1.15) brightness(.55);\n  transform: scale(1.06);\n  display: none;                 \/* horizontal cards don't need it *\/\n  pointer-events: none;\n}\n.pf-card.is-vertical .pf-card__bg { display: block; }\n.pf-card__img {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  object-fit: cover;             \/* crops YouTube's letterboxing away *\/\n  display: block;\n  border: 0;\n  \/* the 1.01 scale hides sub-pixel rounding, which is what leaves a hairline\n     of card background visible along the edges of the thumbnail *\/\n  transform: scale(1.01);\n  transition: transform .6s var(--pf-ease), filter .4s var(--pf-ease);\n  backface-visibility: hidden;\n  z-index: 1;\n}\n\/* A Short is a tall frame \u2014 show all of it, centred, over its own blur. *\/\n.pf-card.is-vertical .pf-card__img { object-fit: contain; transform: none; }\n.pf-card:hover .pf-card__img,\n.pf-card:focus-visible .pf-card__img { transform: scale(1.055); }\n.pf-card.is-vertical:hover .pf-card__img,\n.pf-card.is-vertical:focus-visible .pf-card__img { transform: scale(1.04); }\n.pf-card:focus-visible { outline: 2px solid var(--pf-accent); outline-offset: 3px; }\n\/* Small \"SHORT\" flag on vertical tiles. Set SHOW_VERTICAL_BADGE = false to hide. *\/\n.pf-card__flag {\n  position: absolute;\n  top: 10px; left: 10px;\n  z-index: 3;\n  font-size: 10px;\n  font-weight: 600;\n  letter-spacing: .1em;\n  text-transform: uppercase;\n  color: #fff;\n  background: rgba(0,0,0,.55);\n  backdrop-filter: blur(6px);\n  padding: 4px 8px;\n  border-radius: 3px;\n  pointer-events: none;\n}\n\/* Hover-only caption strip \u2014 grid stays clean until you point at a tile. *\/\n.pf-card__cap {\n  position: absolute;\n  inset: auto 0 0 0;\n  z-index: 2;\n  padding: 34px 16px 14px;\n  background: linear-gradient(to top, rgba(0,0,0,.86), rgba(0,0,0,0));\n  color: #fff;\n  text-align: left;\n  opacity: 0;\n  transform: translateY(8px);\n  transition: opacity .3s var(--pf-ease), transform .3s var(--pf-ease);\n  pointer-events: none;\n}\n.pf-card:hover .pf-card__cap,\n.pf-card:focus-visible .pf-card__cap { opacity: 1; transform: none; }\n.pf-card__t { display: block; font-size: 15px; font-weight: 600; line-height: 1.3; margin: 0; }\n.pf-card__c { display: block; font-size: 12px; opacity: .75; margin: 3px 0 0; letter-spacing: .04em; text-transform: uppercase; }\n\/* Optional play badge (off by default \u2014 SHOW_PLAY_ICON in the script) *\/\n.pf-card__play {\n  position: absolute;\n  inset: 0;\n  margin: auto;\n  z-index: 2;\n  width: 62px; height: 62px;\n  border-radius: 50%;\n  background: rgba(0,0,0,.45);\n  backdrop-filter: blur(4px);\n  border: 1.5px solid rgba(255,255,255,.7);\n  display: grid; place-items: center;\n  opacity: 0;\n  transform: scale(.86);\n  transition: opacity .3s var(--pf-ease), transform .3s var(--pf-ease);\n  pointer-events: none;\n}\n.pf-card:hover .pf-card__play,\n.pf-card:focus-visible .pf-card__play { opacity: 1; transform: scale(1); }\n.pf-card__play svg { width: 20px; height: 20px; fill: #fff; margin-left: 3px; }\n\/* Last-resort state: YouTube has no usable still for this video. Rather than a\n   blank hole in the grid, the tile becomes a titled plate. *\/\n.pf-card.no-thumb { background: linear-gradient(135deg, #2b2b2b, #191919); }\n.pf-card.no-thumb .pf-card__media { display: none; }\n.pf-card.no-thumb .pf-card__cap {\n  inset: 0;\n  display: grid;\n  align-content: center;\n  justify-items: center;\n  gap: 6px;\n  text-align: center;\n  padding: 20px;\n  background: none;\n  opacity: 1;\n  transform: none;\n}\n.pf-card.no-thumb .pf-card__t { font-size: 17px; }\n.pf__empty { color: var(--pf-muted); text-align: center; padding: 60px 0; grid-column: 1 \/ -1; font-size: 15px; }\n\/* ===========================================================================\n   6. SOCIAL ICON ROW\n   =========================================================================== *\/\n.pf__social {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  gap: 26px;\n  margin: 52px 0 0;\n  padding: 0;\n  border: 0;\n}\n.pf__social a {\n  display: grid;\n  place-items: center;\n  width: 40px; height: 40px;\n  border-radius: 50%;\n  color: var(--pf-muted);\n  text-decoration: none;\n  transition: color .25s var(--pf-ease), background .25s var(--pf-ease), transform .25s var(--pf-ease);\n}\n.pf__social a:hover { color: var(--pf-text); background: rgba(255,255,255,.08); transform: translateY(-2px); }\n.pf__social a:focus-visible { outline: 2px solid var(--pf-accent); outline-offset: 2px; }\n.pf__social svg { width: 19px; height: 19px; fill: currentColor; display: block; }\n\/* ===========================================================================\n   7. MODAL \/ LIGHTBOX\n   =========================================================================== *\/\n.pf-modal {\n  position: fixed;\n  inset: 0;\n  z-index: 99999;\n  display: grid;\n  place-items: center;\n  padding: 24px;\n  visibility: hidden;\n  opacity: 0;\n  transition: opacity .3s var(--pf-ease), visibility 0s linear .3s;\n  font-family: \"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n}\n.pf-modal.is-open {\n  visibility: visible;\n  opacity: 1;\n  transition: opacity .3s var(--pf-ease), visibility 0s linear 0s;\n}\n.pf-modal__backdrop {\n  position: absolute;\n  inset: 0;\n  background: rgba(0,0,0,.9);\n  backdrop-filter: blur(6px);\n  -webkit-backdrop-filter: blur(6px);\n}\n.pf-modal__dialog {\n  position: relative;\n  width: min(1100px, 100%);\n  transform: scale(.96) translateY(10px);\n  transition: transform .35s var(--pf-ease);\n}\n.pf-modal.is-open .pf-modal__dialog { transform: none; }\n\/* Vertical (Reels \/ Shorts) videos get a 9:16 stage instead.\n   The calc() keeps a tall video fully inside short laptop screens: it caps the\n   width at whatever still leaves room for the close button + caption. *\/\n.pf-modal__dialog.is-vertical { width: min(400px, 100%, calc((100vh - 170px) * 9 \/ 16)); }\n.pf-modal__stage {\n  position: relative;\n  width: 100%;\n  aspect-ratio: 16 \/ 9;\n  background: #000;\n  border: 0;\n  border-radius: 8px;\n  overflow: hidden;\n  box-shadow: 0 30px 80px rgba(0,0,0,.6);\n}\n.pf-modal__dialog.is-vertical .pf-modal__stage { aspect-ratio: 9 \/ 16; }\n.pf-modal__stage iframe { width: 100%; height: 100%; border: 0; display: block; position: relative; z-index: 1; }\n\/* Spinner shown while YouTube boots *\/\n.pf-modal__stage::before {\n  content: \"\";\n  position: absolute; inset: 0; margin: auto;\n  width: 34px; height: 34px;\n  border: 2px solid rgba(255,255,255,.2);\n  border-top-color: #fff;\n  border-radius: 50%;\n  animation: pf-spin .8s linear infinite;\n}\n@keyframes pf-spin { to { transform: rotate(360deg); } }\n.pf-modal__meta { padding: 16px 2px 0; color: #fff; text-align: center; }\n.pf-modal__title { font-size: 18px; font-weight: 600; margin: 0; }\n.pf-modal__client { font-size: 13px; color: #9a9a9a; margin: 4px 0 0; letter-spacing: .04em; text-transform: uppercase; }\n.pf-modal__client:empty { display: none; }\n.pf-modal__close {\n  position: absolute;\n  top: -46px; right: 0;\n  width: 38px; height: 38px;\n  display: grid; place-items: center;\n  background: rgba(255,255,255,.1);\n  border: 0;\n  border-radius: 50%;\n  color: #fff;\n  cursor: pointer;\n  transition: background .25s var(--pf-ease), transform .25s var(--pf-ease);\n}\n.pf-modal__close:hover { background: rgba(255,255,255,.22); transform: rotate(90deg); }\n.pf-modal__close:focus-visible { outline: 2px solid #fff; outline-offset: 3px; }\n.pf-modal__close svg { width: 16px; height: 16px; stroke: #fff; stroke-width: 2; }\n@media (max-width: 640px) {\n  .pf-modal { padding: 16px; }\n  .pf-modal__close { top: -44px; right: -2px; }\n  .pf-modal__dialog.is-vertical { width: min(400px, 100%, calc((100vh - 200px) * 9 \/ 16)); }\n}\nbody.pf-lock { overflow: hidden; }\n<\/style>\n<\/head>\n<body style=\"margin:0;background:#1c1c1c;\">\n<!-- ==========================================================================\n     MARKUP \u2014 paste this into your page\n     ========================================================================== -->\n<section class=\"pf\" id=\"work\">\n  <div class=\"pf__inner\">\n    <!-- Optional heading. Delete this block if your page already has one. -->\n    <div class=\"pf__head\">\n      <h2 class=\"pf__title\">View My Work<\/h2>\n      <p class=\"pf__sub\">Selected films, campaigns and content.<\/p>\n    <\/div>\n    <!-- Tabs: one scrolling line, generated from the CATEGORIES array -->\n    <div class=\"pf__tabsWrap\" id=\"pfTabsWrap\">\n      <div class=\"pf__tabs\" role=\"tablist\" aria-label=\"Filter work by category\" id=\"pfTabs\"><\/div>\n    <\/div>\n    <!-- Cards are generated from the VIDEOS array -->\n    <div class=\"pf__grid\" id=\"pfGrid\" role=\"region\" aria-live=\"polite\"><\/div>\n    <!-- Social links -->\n    <!--<nav class=\"pf__social\" aria-label=\"Social links\">-->\n    <!--  <a href=\"https:\/\/www.instagram.com\/kr_photo_impression\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Instagram\" title=\"Instagram\">-->\n    <!--    <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M12 2.16c3.2 0 3.58.01 4.85.07 1.17.05 1.8.25 2.23.41.56.22.96.48 1.38.9.42.42.68.82.9 1.38.16.42.36 1.06.41 2.23.06 1.27.07 1.65.07 4.85s-.01 3.58-.07 4.85c-.05 1.17-.25 1.8-.41 2.23-.22.56-.48.96-.9 1.38-.42.42-.82.68-1.38.9-.42.16-1.06.36-2.23.41-1.27.06-1.65.07-4.85.07s-3.58-.01-4.85-.07c-1.17-.05-1.8-.25-2.23-.41-.56-.22-.96-.48-1.38-.9-.42-.42-.68-.82-.9-1.38-.16-.42-.36-1.06-.41-2.23C2.17 15.58 2.16 15.2 2.16 12s.01-3.58.07-4.85c.05-1.17.25-1.8.41-2.23.22-.56.48-.96.9-1.38.42-.42.82-.68 1.38-.9.42-.16 1.06-.36 2.23-.41C8.42 2.17 8.8 2.16 12 2.16M12 0C8.74 0 8.33.01 7.05.07 5.78.13 4.9.33 4.14.63c-.79.3-1.46.72-2.12 1.38C1.36 2.67.94 3.34.63 4.14.33 4.9.13 5.78.07 7.05.01 8.33 0 8.74 0 12s.01 3.67.07 4.95c.06 1.27.26 2.15.56 2.91.3.79.72 1.46 1.38 2.12.66.66 1.33 1.08 2.12 1.38.76.3 1.64.5 2.91.56C8.33 23.99 8.74 24 12 24s3.67-.01 4.95-.07c1.27-.06 2.15-.26 2.91-.56.79-.3 1.46-.72 2.12-1.38.66-.66 1.08-1.33 1.38-2.12.3-.76.5-1.64.56-2.91.06-1.28.07-1.69.07-4.95s-.01-3.67-.07-4.95c-.06-1.27-.26-2.15-.56-2.91-.3-.79-.72-1.46-1.38-2.12C21.33 1.36 20.66.94 19.86.63c-.76-.3-1.64-.5-2.91-.56C15.67.01 15.26 0 12 0zm0 5.84a6.16 6.16 0 1 0 0 12.32 6.16 6.16 0 0 0 0-12.32zm0 10.16a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm7.85-10.4a1.44 1.44 0 1 1-2.88 0 1.44 1.44 0 0 1 2.88 0z\"\/><\/svg>-->\n    <!--  <\/a>-->\n    <!--  <a href=\"https:\/\/www.youtube.com\/@editorvishnukr\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"YouTube\" title=\"YouTube\">-->\n    <!--    <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M23.5 6.19a3.02 3.02 0 0 0-2.12-2.14C19.5 3.55 12 3.55 12 3.55s-7.5 0-9.38.5A3.02 3.02 0 0 0 .5 6.19C0 8.08 0 12 0 12s0 3.92.5 5.81a3.02 3.02 0 0 0 2.12 2.14c1.88.5 9.38.5 9.38.5s7.5 0 9.38-.5a3.02 3.02 0 0 0 2.12-2.14C24 15.92 24 12 24 12s0-3.92-.5-5.81zM9.55 15.57V8.43L15.82 12l-6.27 3.57z\"\/><\/svg>-->\n    <!--  <\/a>-->\n    <!--  <a href=\"https:\/\/www.linkedin.com\/in\/vishnu-k-r-337421155\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"LinkedIn\" title=\"LinkedIn\">-->\n    <!--    <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M20.45 20.45h-3.55v-5.57c0-1.33-.02-3.04-1.85-3.04-1.85 0-2.14 1.45-2.14 2.94v5.67H9.35V9h3.41v1.56h.05a3.74 3.74 0 0 1 3.37-1.85c3.6 0 4.27 2.37 4.27 5.45v6.29zM5.34 7.43a2.06 2.06 0 1 1 0-4.13 2.06 2.06 0 0 1 0 4.13zM7.12 20.45H3.56V9h3.56v11.45zM22.22 0H1.77C.79 0 0 .77 0 1.72v20.56C0 23.23.79 24 1.77 24h20.45c.98 0 1.78-.77 1.78-1.72V1.72C24 .77 23.2 0 22.22 0z\"\/><\/svg>-->\n    <!--  <\/a>-->\n    <!--  <a href=\"https:\/\/www.facebook.com\/share\/1C3SvikSgG\/\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Facebook\" title=\"Facebook\">-->\n    <!--    <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M24 12.07C24 5.4 18.63 0 12 0S0 5.4 0 12.07C0 18.1 4.39 23.1 10.13 24v-8.44H7.08v-3.49h3.05V9.41c0-3.02 1.79-4.69 4.53-4.69 1.31 0 2.68.24 2.68.24v2.96h-1.51c-1.49 0-1.96.93-1.96 1.89v2.26h3.33l-.53 3.49h-2.8V24C19.61 23.1 24 18.1 24 12.07z\"\/><\/svg>-->\n    <!--  <\/a>-->\n    <!--<\/nav>-->\n  <\/div>\n<\/section>\n<!-- Lightbox. Keep it as a direct child of <body> so nothing can clip it. -->\n<div class=\"pf-modal\" id=\"pfModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"pfModalTitle\" aria-hidden=\"true\">\n  <div class=\"pf-modal__backdrop\" data-pf-close><\/div>\n  <div class=\"pf-modal__dialog\" id=\"pfDialog\">\n    <button class=\"pf-modal__close\" id=\"pfClose\" type=\"button\" aria-label=\"Close video\">\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke-linecap=\"round\"><path d=\"M5 5l14 14M19 5L5 19\"\/><\/svg>\n    <\/button>\n    <div class=\"pf-modal__stage\" id=\"pfStage\"><!-- iframe is injected here --><\/div>\n    <div class=\"pf-modal__meta\">\n      <h3 class=\"pf-modal__title\" id=\"pfModalTitle\"><\/h3>\n      <p class=\"pf-modal__client\" id=\"pfModalClient\"><\/p>\n    <\/div>\n  <\/div>\n<\/div>\n<!-- ==========================================================================\n     SCRIPT\n     ========================================================================== -->\n<script>\n(function () {\n  \"use strict\";\n  \/* =========================================================================\n     \u25bc\u25bc\u25bc  EDIT EVERYTHING BELOW THIS LINE  \u25bc\u25bc\u25bc\n     ========================================================================= *\/\n  \/* --- Tabs. `id` must match the `category` values used in VIDEOS below.\n         Reorder \/ rename freely \u2014 the strip scrolls, so add as many as you like. *\/\n  var CATEGORIES = [\n    { id: \"brand-films\", label: \"Brand Films\"     },\n    { id: \"ads\",         label: \"Ads\"             },\n    { id: \"social\",      label: \"Social Media\"    },\n    { id: \"motion\",      label: \"Motion Graphics\" },\n    { id: \"ai\",          label: \"AI Videos\"       }\n  ];\n  \/* --- Your videos. Paste ANY YouTube link shape:\n           https:\/\/www.youtube.com\/watch?v=ID\n           https:\/\/youtu.be\/ID\n           https:\/\/www.youtube.com\/shorts\/ID\n           https:\/\/www.youtube.com\/embed\/ID\n           or just the bare ID.\n         Fields:\n           url       (required)  YouTube link\n           title     (required)  shown in the lightbox + used as image alt text\n           client    (optional)  small line under the title\n           category  (required)  one of the CATEGORIES ids (not \"all\")\n           vertical  (optional)  true for Shorts\/Reels \u2014 9:16 popup + tall thumb\n           thumb     (optional)  your own image URL; overrides the YouTube frame\n     ------------------------------------------------------------------------ *\/\n  var VIDEOS = [\n    \/* ---------------- BRAND FILMS ------------- *\/\n    { url: \"https:\/\/youtu.be\/xyTRLVYw7_c\", title: \"Hotel Brand Film\",              client: \"Marriott Marquis Dubai\",        category: \"brand-films\" },\n    { url: \"https:\/\/youtu.be\/Z1KYb-6TWms\", title: \"Hotel Brand Film\",              client: \"Emirates Palace Abu Dhabi\",     category: \"brand-films\" },\n    { url: \"https:\/\/youtu.be\/uZgKv3dY1FY\", title: \"Hotel Brand Film\",              client: \"Towers Rotana Dubai\",           category: \"brand-films\" },\n    { url: \"https:\/\/youtu.be\/XUZTf6jNxmM\", title: \"Brand Film\",                    client: \"Sofitel Al Hamra Beach Resort\", category: \"brand-films\" },\n    { url: \"https:\/\/youtu.be\/aXOA7uebwno\", title: \"Brasserie Boulud\",              client: \"Sofitel Dubai The Obelisk\",     category: \"brand-films\" },\n    { url: \"https:\/\/youtu.be\/TEMQGnLRarE\", title: \"Brand Video\",                   client: \"Reef & Beef\",                   category: \"brand-films\" },\n    { url: \"https:\/\/youtu.be\/y0LZp51HS2Q\", title: \"Dinner & Entertainment Reel\",   client: \"Bijoux at Cove Beach\",          category: \"brand-films\" },\n    { url: \"https:\/\/youtu.be\/INAQiH-2-GI\", title: \"City Centre Deira \u2014 Now Open\",  client: \"TGI Fridays\",                   category: \"brand-films\" },\n    { url: \"https:\/\/youtu.be\/_vGl61xToFI\", title: \"Emirati-Centric Video\",         client: \"\",                              category: \"brand-films\" },\n    \/* ---------------- ADS --------------------- *\/\n    { url: \"https:\/\/youtu.be\/t5MC1uw2p34\", title: \"Summer Campaign Film\",          client: \"Vilebrequin\",                   category: \"ads\" },\n    { url: \"https:\/\/youtu.be\/8QW2FCJPyVs\", title: \"Summer Campaign Film\",          client: \"Vilebrequin\",                   category: \"ads\" },\n    { url: \"https:\/\/youtu.be\/2bwpYnm9nRI\", title: \"FIFA World Cup Campaign\",       client: \"TGI Fridays\",                   category: \"ads\" },\n    \/* ---------------- SOCIAL MEDIA (Shorts) --- *\/\n    { url: \"https:\/\/youtube.com\/shorts\/d4A-wgSPxpU\", title: \"Food Reel\",                       client: \"The Grazer\",              category: \"social\", vertical: true },\n    { url: \"https:\/\/youtube.com\/shorts\/Yq_R682M890\", title: \"Social Media Reel\",               client: \"Juyi Restaurant & Lounge\", category: \"social\", vertical: true },\n    { url: \"https:\/\/youtube.com\/shorts\/a_L6h_UHsog\", title: \"Christmas Eve\",                   client: \"Ladur\u00e9e Turkey\",          category: \"social\", vertical: true },\n    { url: \"https:\/\/youtube.com\/shorts\/vjVKK4N6mgo\", title: \"Luxury Steakhouse & Seafood\",     client: \"Reef & Beef\",             category: \"social\", vertical: true },\n    { url: \"https:\/\/youtube.com\/shorts\/_TIAypV3qhY\", title: \"Reel 02\",                         client: \"Reef & Beef\",             category: \"social\", vertical: true },\n    { url: \"https:\/\/youtube.com\/shorts\/EkgTLfWW0pU\", title: \"City Centre Deira \u2014 Now Open\",    client: \"TGI Fridays\",             category: \"social\", vertical: true },\n    \/* ---------------- MOTION GRAPHICS --------- *\/\n    { url: \"https:\/\/youtu.be\/9Qo5-vfWA70\", title: \"Animated Explainer Video\",      client: \"Clarity Systems Inc.\",          category: \"motion\" },\n    \/* ---------------- AI VIDEOS --------------- *\/\n    { url: \"https:\/\/youtu.be\/Q2KzLsEYLo4\", title: \"The Lineage Collection\",        client: \"Riggs London\",                  category: \"ai\" }\n  ];\n  \/* --- Display switches --- *\/\n  var SHOW_HOVER_CAPTION   = true;   \/\/ title + client fade in on hover\n  var SHOW_PLAY_ICON       = false;  \/\/ circular play badge on hover\n  var SHOW_TAB_COUNTS      = false;  \/\/ little number next to each tab label\n  var SHOW_VERTICAL_BADGE  = true;   \/\/ \"SHORT\" flag on vertical tiles\n  var HIDE_EMPTY_TABS      = true;   \/\/ drop a tab that has no videos in it\n  var AUTOPLAY             = true;   \/\/ start playing as soon as the popup opens\n  \/* =========================================================================\n     \u25b2\u25b2\u25b2  EDIT EVERYTHING ABOVE THIS LINE  \u25b2\u25b2\u25b2\n     ========================================================================= *\/\n  var wrapEl   = document.getElementById(\"pfTabsWrap\");\n  var tabsEl   = document.getElementById(\"pfTabs\");\n  var gridEl   = document.getElementById(\"pfGrid\");\n  var modalEl  = document.getElementById(\"pfModal\");\n  var dialogEl = document.getElementById(\"pfDialog\");\n  var stageEl  = document.getElementById(\"pfStage\");\n  var closeEl  = document.getElementById(\"pfClose\");\n  var mTitleEl = document.getElementById(\"pfModalTitle\");\n  var mClientEl= document.getElementById(\"pfModalClient\");\n  \/* Set from the tab list below \u2014 whichever tab is first is what loads.\n     Add a { id: \"all\", label: \"All\" } entry at the top of CATEGORIES if you\n     ever want an unfiltered view back; it is handled, just not present. *\/\n  var activeCat   = \"\";\n  var lastFocused = null;\n  \/* ---------------------------------------------------------------------\n     Pull the 11-character video id out of any YouTube URL shape.\n     --------------------------------------------------------------------- *\/\n  function youTubeId(url) {\n    if (!url) return \"\";\n    url = String(url).trim();\n    if (\/^[a-zA-Z0-9_-]{11}$\/.test(url)) return url;           \/\/ already an id\n    var m = url.match(\n      \/(?:youtube\\.com\\\/(?:watch\\?(?:.*&)?v=|embed\\\/|shorts\\\/|live\\\/|v\\\/)|youtu\\.be\\\/)([a-zA-Z0-9_-]{11})\/\n    );\n    return m ? m[1] : \"\";\n  }\n  \/* -------------------------------------------------------------------------\n     THUMBNAILS \u2014 why this is more than one URL\n     maxresdefault only exists if the upload was HD. Shorts keep their tall\n     frame under a different name again, and which name works varies by when\n     the Short was posted. Worse, YouTube does NOT always 404 a missing size:\n     quite often it answers 200 with a 120x90 grey stub, which is why a tile\n     can come out blank with no error in the console.\n     So each <img> walks down a chain, and we treat BOTH a load failure and a\n     stub-sized image as \"try the next one\".\n     ------------------------------------------------------------------------- *\/\n  var CHAIN_WIDE = [\"maxresdefault\", \"hq720\", \"sddefault\", \"hqdefault\", \"mqdefault\"];\n  var CHAIN_TALL = [\"oardefault\", \"oar2\", \"maxresdefault\", \"hq720\", \"sddefault\", \"hqdefault\", \"mqdefault\"];\n  function chainFor(vertical) { return vertical ? CHAIN_TALL : CHAIN_WIDE; }\n  function thumbUrl(id, quality) {\n    return \"https:\/\/i.ytimg.com\/vi\/\" + id + \"\/\" + quality + \".jpg\";\n  }\n  \/* YouTube's \"nothing here\" stub is 120x90. Anything that small is not a\n     usable thumbnail, whatever status code came with it. *\/\n  function isStubImage(img) {\n    return img.naturalWidth > 0 && img.naturalWidth <= 121 && img.naturalHeight <= 91;\n  }\n  function embedUrl(id) {\n    var p = [\n      \"rel=0\",                 \/\/ no unrelated videos at the end\n      \"modestbranding=1\",\n      \"playsinline=1\",\n      \"color=white\",\n      \"autoplay=\" + (AUTOPLAY ? \"1\" : \"0\")\n    ];\n    \/\/ youtube-nocookie = no tracking cookies until playback. Swap the host for\n    \/\/ [www.youtube.com](https:\/\/www.youtube.com) if you rely on YouTube analytics for these views.\n    return \"https:\/\/www.youtube-nocookie.com\/embed\/\" + id + \"?\" + p.join(\"&\");\n  }\n  function escapeHtml(s) {\n    return String(s == null ? \"\" : s).replace(\/[&<>\"']\/g, function (c) {\n      return { \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\", \"'\": \"&#39;\" }[c];\n    });\n  }\n  \/* ---------------------------------------------------------------------\n     Normalise the data once: bad\/blank URLs are dropped instead of\n     rendering a broken tile.\n     --------------------------------------------------------------------- *\/\n  var ITEMS = VIDEOS.map(function (v, i) {\n    return {\n      i: i,\n      id: youTubeId(v.url),\n      title: v.title || \"\",\n      client: v.client || \"\",\n      category: v.category || \"\",\n      vertical: !!v.vertical,\n      thumb: v.thumb || \"\"\n    };\n  }).filter(function (v) {\n    if (!v.id) { console.warn(\"[portfolio] Skipped \u2014 not a valid YouTube URL:\", VIDEOS[v.i] && VIDEOS[v.i].url); return false; }\n    return true;\n  });\n  \/* ---------------------------------------------------------------------\n     TABS \u2014 single-line carousel\n     --------------------------------------------------------------------- *\/\n  function countFor(catId) {\n    return catId === \"all\" ? ITEMS.length : ITEMS.filter(function (v) { return v.category === catId; }).length;\n  }\n  var TABS = CATEGORIES.filter(function (c) {\n    return !HIDE_EMPTY_TABS || c.id === \"all\" || countFor(c.id) > 0;\n  });\n  if (!TABS.length) TABS = CATEGORIES.slice();          \/\/ never end up tab-less\n  activeCat = TABS.length ? TABS[0].id : \"all\";         \/\/ first tab is the landing view\n  \/* Warn about a video parked in a category that has no tab \u2014 with no \"All\"\n     tab there is nothing to fall back to, so it would silently never appear. *\/\n  ITEMS.forEach(function (v) {\n    if (!TABS.some(function (c) { return c.id === v.category; })) {\n      console.warn('[portfolio] \"' + v.title + '\" has category \"' + v.category +\n                   '\", which is not in CATEGORIES \u2014 it will not be shown.');\n    }\n  });\n  function renderTabs() {\n    tabsEl.innerHTML = TABS.map(function (c) {\n      var isActive = c.id === activeCat;\n      return '<button type=\"button\" role=\"tab\" class=\"pf__tab' + (isActive ? \" is-active\" : \"\") + '\"' +\n             ' data-cat=\"' + c.id + '\"' +\n             ' aria-selected=\"' + isActive + '\"' +\n             ' tabindex=\"' + (isActive ? \"0\" : \"-1\") + '\">' +\n             escapeHtml(c.label) +\n             (SHOW_TAB_COUNTS ? '<span class=\"pf__count\">' + countFor(c.id) + \"<\/span>\" : \"\") +\n             \"<\/button>\";\n    }).join(\"\");\n    updateEdges();\n  }\n  \/* Show a fade only on the side that still has content off-screen, and\n     centre the row when everything already fits. *\/\n  function updateEdges() {\n    var max = tabsEl.scrollWidth - tabsEl.clientWidth;\n    var fits = max <= 1;\n    tabsEl.classList.toggle(\"fits\", fits);\n    wrapEl.classList.toggle(\"has-left\",  !fits && tabsEl.scrollLeft > 4);\n    wrapEl.classList.toggle(\"has-right\", !fits && tabsEl.scrollLeft < max - 4);\n  }\n  function scrollTabIntoView(cat) {\n    var btn = tabsEl.querySelector('.pf__tab[data-cat=\"' + cat + '\"]');\n    if (!btn || tabsEl.scrollWidth <= tabsEl.clientWidth) return;\n    var target = btn.offsetLeft - (tabsEl.clientWidth - btn.offsetWidth) \/ 2;\n    var max = tabsEl.scrollWidth - tabsEl.clientWidth;\n    tabsEl.scrollTo({ left: Math.max(0, Math.min(target, max)), behavior: \"smooth\" });\n  }\n  tabsEl.addEventListener(\"scroll\", updateEdges, { passive: true });\n  window.addEventListener(\"resize\", updateEdges);\n  \/* Drag-to-scroll with a mouse. `moved` stops a drag from also firing a click.\n     NOTE: deliberately no setPointerCapture() here \u2014 capturing the pointer makes\n     Chrome retarget the follow-up click to this container instead of the button\n     that was actually pressed, which silently kills the filtering. Listening on\n     window instead keeps the drag working past the edge of the strip. *\/\n  var dragging = false, startX = 0, startScroll = 0, moved = 0;\n  tabsEl.addEventListener(\"pointerdown\", function (e) {\n    if (e.pointerType === \"touch\" || e.button !== 0) return;  \/\/ native touch scroll is better\n    dragging = true; moved = 0;\n    startX = e.clientX;\n    startScroll = tabsEl.scrollLeft;\n  });\n  window.addEventListener(\"pointermove\", function (e) {\n    if (!dragging) return;\n    var dx = e.clientX - startX;\n    if (Math.abs(dx) > 4) { moved = 1; tabsEl.classList.add(\"is-dragging\"); }\n    if (moved) { e.preventDefault(); tabsEl.scrollLeft = startScroll - dx; }\n  }, { passive: false });\n  [\"pointerup\", \"pointercancel\"].forEach(function (evt) {\n    window.addEventListener(evt, function () {\n      if (!dragging) return;\n      dragging = false;\n      tabsEl.classList.remove(\"is-dragging\");\n      \/\/ cleared after the click event has come and gone\n      setTimeout(function () { moved = 0; }, 0);\n    });\n  });\n  \/* Turn a vertical trackpad\/wheel gesture into horizontal travel, so the\n     strip is usable on a mouse that has no sideways scroll. *\/\n  tabsEl.addEventListener(\"wheel\", function (e) {\n    if (Math.abs(e.deltaY) <= Math.abs(e.deltaX)) return;\n    var max = tabsEl.scrollWidth - tabsEl.clientWidth;\n    if (max <= 1) return;\n    var next = tabsEl.scrollLeft + e.deltaY;\n    if (next < 0 || next > max) return;               \/\/ let the page scroll at the ends\n    e.preventDefault();\n    tabsEl.scrollLeft = next;\n  }, { passive: false });\n  tabsEl.addEventListener(\"click\", function (e) {\n    if (moved) return;\n    var btn = e.target.closest(\".pf__tab\");\n    if (!btn) return;\n    setCategory(btn.dataset.cat);\n  });\n  \/\/ Left\/right arrow keys move between tabs (expected behaviour for a tablist)\n  tabsEl.addEventListener(\"keydown\", function (e) {\n    if (e.key !== \"ArrowRight\" && e.key !== \"ArrowLeft\") return;\n    var tabs = Array.prototype.slice.call(tabsEl.querySelectorAll(\".pf__tab\"));\n    var idx = tabs.indexOf(document.activeElement);\n    if (idx === -1) return;\n    e.preventDefault();\n    var next = tabs[(idx + (e.key === \"ArrowRight\" ? 1 : -1) + tabs.length) % tabs.length];\n    var cat = next.dataset.cat;\n    setCategory(cat);\n    var el = tabsEl.querySelector('.pf__tab[data-cat=\"' + cat + '\"]');\n    if (el) el.focus({ preventScroll: true });\n  });\n  function setCategory(cat) {\n    if (!cat || cat === activeCat) return;\n    activeCat = cat;\n    renderTabs();\n    renderGrid();\n    scrollTabIntoView(cat);\n  }\n  \/* ---------------------------------------------------------------------\n     GRID\n     --------------------------------------------------------------------- *\/\n  function renderGrid() {\n    var list = activeCat === \"all\"\n      ? ITEMS\n      : ITEMS.filter(function (v) { return v.category === activeCat; });\n    if (!list.length) {\n      gridEl.innerHTML = '<p class=\"pf__empty\">Nothing here yet.<\/p>';\n      return;\n    }\n    gridEl.innerHTML = list.map(function (v, n) {\n      var img = v.thumb || thumbUrl(v.id, chainFor(v.vertical)[0]);\n      var alt = escapeHtml((v.client ? v.client + \" \u2014 \" : \"\") + v.title);\n      return '' +\n        '<button type=\"button\" class=\"pf-card' + (v.vertical ? \" is-vertical\" : \"\") + '\" style=\"--i:' + n + '\"' +\n        ' data-id=\"' + v.id + '\"' +\n        ' data-vertical=\"' + (v.vertical ? \"1\" : \"0\") + '\"' +\n        ' data-title=\"' + escapeHtml(v.title) + '\"' +\n        ' data-client=\"' + escapeHtml(v.client) + '\"' +\n        ' aria-label=\"Play video: ' + alt + '\">' +\n          '<span class=\"pf-card__media\">' +\n            (v.vertical && !v.thumb\n              ? '<img class=\"pf-card__bg\" src=\"' + img + '\" alt=\"\" aria-hidden=\"true\" data-step=\"0\" decoding=\"async\">'\n              : \"\") +\n            '<img class=\"pf-card__img\" src=\"' + img + '\" alt=\"' + alt + '\"' +\n            ' loading=\"lazy\" decoding=\"async\" data-step=\"0\">' +\n          \"<\/span>\" +\n          (v.vertical && SHOW_VERTICAL_BADGE ? '<span class=\"pf-card__flag\">Short<\/span>' : \"\") +\n          (SHOW_PLAY_ICON\n            ? '<span class=\"pf-card__play\"><svg viewBox=\"0 0 24 24\"><path d=\"M8 5v14l11-7z\"\/><\/svg><\/span>'\n            : \"\") +\n          (SHOW_HOVER_CAPTION\n            ? '<span class=\"pf-card__cap\">' +\n                '<span class=\"pf-card__t\">' + escapeHtml(v.title) + \"<\/span>\" +\n                (v.client ? '<span class=\"pf-card__c\">' + escapeHtml(v.client) + \"<\/span>\" : \"\") +\n              \"<\/span>\"\n            : \"\") +\n        \"<\/button>\";\n    }).join(\"\");\n  }\n  \/* Thumbnail fallback: step down the chain on a 404 OR on a 200 that turned\n     out to be YouTube's grey stub. Both events are listened for in capture\n     mode, because <img> load\/error events do not bubble. *\/\n  function isThumb(img) {\n    return img.classList && (img.classList.contains(\"pf-card__img\") || img.classList.contains(\"pf-card__bg\"));\n  }\n  function nextThumb(img) {\n    var card = img.closest(\".pf-card\");\n    if (!card) return;\n    var chain = chainFor(card.dataset.vertical === \"1\");\n    var step = parseInt(img.dataset.step || \"0\", 10) + 1;\n    if (step >= chain.length) {\n      \/\/ Chain exhausted \u2014 show the title instead of an empty tile.\n      card.classList.add(\"no-thumb\");\n      return;\n    }\n    img.dataset.step = step;\n    img.src = thumbUrl(card.dataset.id, chain[step]);\n  }\n  gridEl.addEventListener(\"error\", function (e) {\n    if (isThumb(e.target)) nextThumb(e.target);\n  }, true);\n  gridEl.addEventListener(\"load\", function (e) {\n    if (isThumb(e.target) && isStubImage(e.target)) nextThumb(e.target);\n  }, true);\n  gridEl.addEventListener(\"click\", function (e) {\n    var card = e.target.closest(\".pf-card\");\n    if (!card) return;\n    openModal(card.dataset);\n  });\n  \/* ---------------------------------------------------------------------\n     MODAL\n     --------------------------------------------------------------------- *\/\n  function openModal(data) {\n    lastFocused = document.activeElement;\n    mTitleEl.textContent  = data.title || \"\";\n    mClientEl.textContent = data.client || \"\";\n    dialogEl.classList.toggle(\"is-vertical\", data.vertical === \"1\");\n    \/\/ Build the iframe fresh each time, so playback always starts at 0:00.\n    var iframe = document.createElement(\"iframe\");\n    iframe.src = embedUrl(data.id);\n    iframe.title = data.title || \"Video player\";\n    iframe.allow = \"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\";\n    iframe.setAttribute(\"allowfullscreen\", \"\");\n    iframe.setAttribute(\"referrerpolicy\", \"strict-origin-when-cross-origin\");\n    stageEl.appendChild(iframe);\n    lockScroll(true);\n    modalEl.classList.add(\"is-open\");\n    modalEl.setAttribute(\"aria-hidden\", \"false\");\n    \/\/ A visibility:hidden element can't take focus, so force the style to\n    \/\/ apply first, then move focus into the dialog.\n    void modalEl.offsetHeight;\n    closeEl.focus({ preventScroll: true });\n  }\n  function closeModal() {\n    if (!modalEl.classList.contains(\"is-open\")) return;\n    modalEl.classList.remove(\"is-open\");\n    modalEl.setAttribute(\"aria-hidden\", \"true\");\n    lockScroll(false);\n    \/\/ Destroy the iframe \u2014 this is what actually stops the audio.\n    \/\/ Delayed so it disappears after the fade-out, not during it.\n    window.setTimeout(function () {\n      if (!modalEl.classList.contains(\"is-open\")) stageEl.innerHTML = \"\";\n    }, 320);\n    if (lastFocused && lastFocused.focus) lastFocused.focus({ preventScroll: true });\n  }\n  function lockScroll(on) {\n    if (on) {\n      var sbw = window.innerWidth - document.documentElement.clientWidth;\n      document.body.style.paddingRight = sbw > 0 ? sbw + \"px\" : \"\";\n      document.body.classList.add(\"pf-lock\");\n    } else {\n      document.body.classList.remove(\"pf-lock\");\n      document.body.style.paddingRight = \"\";\n    }\n  }\n  closeEl.addEventListener(\"click\", closeModal);\n  modalEl.addEventListener(\"click\", function (e) {\n    if (e.target.hasAttribute(\"data-pf-close\")) closeModal();  \/\/ click outside\n  });\n  document.addEventListener(\"keydown\", function (e) {\n    if (!modalEl.classList.contains(\"is-open\")) return;\n    if (e.key === \"Escape\") { closeModal(); return; }\n    \/\/ Keep Tab focus inside the dialog while it's open\n    if (e.key === \"Tab\") {\n      var f = dialogEl.querySelectorAll('button, [href], iframe, [tabindex]:not([tabindex=\"-1\"])');\n      if (!f.length) return;\n      var first = f[0], last = f[f.length - 1];\n      if (e.shiftKey && document.activeElement === first) { e.preventDefault(); last.focus(); }\n      else if (!e.shiftKey && document.activeElement === last) { e.preventDefault(); first.focus(); }\n    }\n  });\n  \/* ---------------------------------------------------------------------\n     GO\n     --------------------------------------------------------------------- *\/\n  renderTabs();\n  renderGrid();\n  window.addEventListener(\"load\", updateEdges);\n  \/\/ Deep link: link straight to a clip with  yoursite.com\/page#play=VIDEO_ID\n  var hash = (location.hash || \"\").match(\/play=([a-zA-Z0-9_-]{11})\/);\n  if (hash) {\n    var match = ITEMS.filter(function (v) { return v.id === hash[1]; })[0];\n    if (match) openModal({ id: match.id, title: match.title, client: match.client, vertical: match.vertical ? \"1\" : \"0\" });\n  }\n})();\n<\/script>\n<\/body>\n<\/html> \t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-99abc9a elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"99abc9a\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-406bb38\" data-id=\"406bb38\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d8ba31e elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"d8ba31e\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Every Frame Has a Story. Let\u2019s Create Yours !<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-594a89c elementor-align-center elementor-mobile-align-center elementor-invisible elementor-widget elementor-widget-button\" data-id=\"594a89c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-md elementor-animation-sink\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Let's Talk<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Editing Videography AI Video Every Great Brand Deserves a Great Edit View My Work Hire Me SINCE 2018 I&#8217;m Vishnu K R, a Creative Video Editor &amp; Visual Storyteller based in UAE, helping hospitality, F&amp;B and lifestyle brands turn raw footage into scroll-stopping stories. Since starting my career in 2018 as a Graphic Designer, I&#8217;ve [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-69","page","type-page","status-publish","hentry"],"_hostinger_reach_plugin_has_subscription_block":false,"_hostinger_reach_plugin_is_elementor":false,"_links":{"self":[{"href":"https:\/\/vishnukr.com\/index.php?rest_route=\/wp\/v2\/pages\/69","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vishnukr.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/vishnukr.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/vishnukr.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vishnukr.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=69"}],"version-history":[{"count":261,"href":"https:\/\/vishnukr.com\/index.php?rest_route=\/wp\/v2\/pages\/69\/revisions"}],"predecessor-version":[{"id":560,"href":"https:\/\/vishnukr.com\/index.php?rest_route=\/wp\/v2\/pages\/69\/revisions\/560"}],"wp:attachment":[{"href":"https:\/\/vishnukr.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=69"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}