{"browserTitle":"Commercial Food, Beverage & Product Photographer New York | Adrian Mueller","copyright":"<div id=\"mySidemenu\" class=\"sidemenu menuClass no-lazy-load\">\n<button style=\"background-color: transparent; color:#FFF; padding-top: 30px; cursor:pointer;\" href=\"javascript:void(0)\" class=\"DXAdamCloseBtn\" onclick=\"closeNav()\">&times;</button>\n<div class=\"menucontainerDXAdam\">\n<ul>\n<li>\n<div class=\"DXarrowAdam\">\n<a href=\"/overview/thumbs\" onclick=\"dx.address.setValue('overview/thumbs'); closeNav(); return false;\" style=\"cursor:pointer;\">\n<span class=\"arrowAdamANI\">&#62;</span>overview\n</a>\n</div>\n</li>\n<li>\n<div class=\"DXarrowAdam\">\n<a href=\"/beverage/thumbs\" onclick=\"dx.address.setValue('/beverage/thumbs'); closeNav(); return false;\" style=\"cursor:pointer;\">\n<span class=\"arrowAdamANI\">&#62;</span>beverage\n</a>\n</div>\n</li>\n<li>\n<div class=\"DXarrowAdam\">\n<a href=\"/food/thumbs\" onclick=\"dx.address.setValue('food/thumbs'); closeNav(); return false;\" style=\"cursor:pointer;\">\n<span class=\"arrowAdamANI\">&#62;</span>food\n</a>\n</div>\n</li>\n<li>\n<div class=\"DXarrowAdam\">\n<a href=\"/fast-food/thumbs\" onclick=\"dx.address.setValue('/fast-food/thumbs'); closeNav(); return false;\" style=\"cursor:pointer;\">\n<span class=\"arrowAdamANI\">&#62;</span>fast food\n</a>\n</div>\n</li>\n<li>\n<div class=\"DXarrowAdam\">\n<a href=\"/motion/thumbs\" onclick=\"dx.address.setValue('/motion/thumbs'); closeNav(); return false;\" style=\"cursor:pointer;\">\n<span class=\"arrowAdamANI\">&#62;</span>motion\n</a>\n</div>\n</li>\n<li>\n<div class=\"DXarrowAdam\">\n<a href=\"/product/thumbs\" onclick=\"dx.address.setValue('/product/thumbs'); closeNav(); return false;\" style=\"cursor:pointer;\">\n<span class=\"arrowAdamANI\">&#62;</span>product\n</a>\n</div>\n</li>\n<li>\n<div class=\"DXarrowAdam\">\n<a href=\"/packaging/thumbs\" onclick=\"dx.address.setValue('/packaging/thumbs'); closeNav(); return false;\" style=\"cursor:pointer;\">\n<span class=\"arrowAdamANI\">&#62;</span> packaging\n</a>\n</div>\n</li>\n<li>\n<div class=\"DXarrowAdam\">\n<a href=\"/liquids/thumbs\" onclick=\"dx.address.setValue('/liquids/thumbs'); closeNav(); return false;\" style=\"cursor:pointer;\">\n<span class=\"arrowAdamANI\">&#62;</span>liquids\n</a>\n</div>\n</li>\n<li>\n<div class=\"DXarrowAdam\">\n<a href=\"/coffee/thumbs\" onclick=\"dx.address.setValue('/coffee/thumbs'); closeNav(); return false;\" style=\"cursor:pointer;\">\n<span class=\"arrowAdamANI\">&#62;</span>coffee\n</a>\n</div>\n</li>\n<li>\n<div class=\"DXarrowAdam\">\n<a href=\"/commissions/thumbs\" onclick=\"dx.address.setValue('/commissions/thumbs'); closeNav(); return false;\" style=\"cursor:pointer;\">\n<span class=\"arrowAdamANI\">&#62;</span>commissions\n</a>\n</div>\n</li>\n<li>\n<div class=\"DXarrowAdam\">\n<a href=\"/bts/thumbs\" onclick=\"dx.address.setValue('/bts/thumbs'); closeNav(); return false;\" style=\"cursor:pointer;\">\n<span class=\"arrowAdamANI\">&#62;</span>bts\n</a>\n</div>\n</li>\n</ul>\n<br>\n<br>\n<ul>\n<li>\n<div class=\"DXarrowAdam\">\n<a href=\"/contact/1\" onclick=\"dx.address.setValue('/contact/1'); closeNav(); return false;\" style=\"cursor:pointer;\">\n<span class=\"arrowAdamANI\">&#62;</span>bio\n</a>\n</div>\n</li>\n<li>\n<div class=\"DXarrowAdam\">\n<a href=\"mailto:adrian@amueller.com\" style=\"cursor:pointer;\">\n<span class=\"arrowAdamANI\">&#62;</span>contact\n</a>\n</div>\n</li>\n<li>\n<div class=\"DXarrowAdam\">\n<a href=\"/awards/1\" onclick=\"dx.address.setValue('/awards/1'); closeNav(); return false;\" style=\"cursor:pointer;\">\n<span class=\"arrowAdamANI\">&#62;</span>awards\n</a>\n</div>\n</li>\n</ul>\n</div>\n</div>\n<div style=\"width:40%;\">\n<div class=\"AdamDXMenuStationary\">\n<div class=\"IconContainer\">\n<div class=\"AdamButtonBoxDX\" onclick=\"openNav()\">\n<div class=\"custommenuIconburger\"></div>\n<div class=\"custommenuIconburger\"></div>\n<div class=\"custommenuIconburger\"></div>\n</div>\n</div>\n<div class=\"IconContainer1\">\n<a href=\"https://www.instagram.com/mueller.adrian/?hl=en\" target=\"_blank\" rel=\"noopener\" style=\"display:inline-block;vertical-align:middle;\">\n<img src=\"https://fabrikstudios.live.photofolio.com/pf-media/Artboard1__at__3xa.png\"\nalt=\"INSTAGRAM\"\nstyle=\"padding-right:30px;position:relative; top:13.7px; width:15.07px; height:15.07px; display:block;\">\n</a>\n<div class=\"tooltip\" style=\"display:inline-block;vertical-align:middle;\">\n<a href=\"mailto:adrian@amueller.com\" style=\"cursor:pointer;display:inline-block;\">\n<img alt=\"Email\"\nsrc=\"https://fabrikstudios.live.photofolio.com/pf-media/emaila.png\"\nstyle=\"padding-right:30px;position:relative;top:15.6px;width:21px;height:21px;display:block;\">\n</a>\n<span class=\"tooltiptext\">contact</span>\n</div>\n<div class=\"tooltip\" style=\"display:inline-block;vertical-align:middle;\">\n<a href=\"/overview/thumbs\"\nonclick=\"dx.address.setValue('/overview/thumbs'); closeNav(); return false;\"\nstyle=\"cursor:pointer;display:inline-block;\">\n<img src=\"https://fabrikstudios.live.photofolio.com/pf-media/Home2a.png\"\nalt=\"overview\"\nstyle=\"padding-right:30px;position:relative;top:15.3px;width:19.1px;height:19.1px;display:block;\">\n</a>\n<span  class=\"tooltiptext\">overview</span>\n</div>\n<!-- Boutique Commissions Return Button -->\n<div class=\"pfTinyNav\" id=\"pfTinyNav\">\n<a id=\"pfTinyCommissions\" href=\"/commissions/thumbs\"\n   onclick=\"if(window.dx && dx.address && typeof dx.address.setValue==='function'){ event.preventDefault(); dx.address.setValue('/commissions/thumbs'); }\"\n   aria-label=\"Back to Commissions\">\n<i style=\"font-size:17.5px; position: relative; top: 8.5px;\" class=\"fas fa-reply\"></i>\n</a>\n</a>\n</div>\n<!-- End Button -->\n</div>\n</div>\n</div> ","metaDescription":"Award-winning New York commercial food, beverage & product photographer and table top director serving agencies, CPG & hospitality brands.","metaKeywords":"Food Photographer NYC, Best Food Photographer New York, Beverage Photographer NYC, Best Beverage Photographer New York, Drinks Photographer New York, Best Drinks Photographer New York, Liquids Photographer NYC, Best Liquids Photographer New York, Product Photographer New York, Best CPG Photographer NYC, Tabletop Director New York, Best Tabletop Director NYC","localMasterVersion":"16.0","backgroundImages":[],"filters":["BIO","BTS","CUSTOM FONT","CUSTOM FONTS (KEEP)","CUSTOM ICONS","REEL","TEXT PAGES","abercrombie&fitch","adidas born from light","adidas crazy","adidas nite jogger","adidas nite jogger","adidas parley","adidas sleek","adidas supercourt","adidas yung continental 80","adidas zx","ajinomoto","akkermansia","alcohol","alcon","amma greek food","android","anheuser busch","animals","apothecare","architecture","atkins","atkins campaign","baby lion verizon","babylion","bacardi","bacardi rum","bad ass coffee","bastille","bdrb","beer-motion","better than butter","big spaceship","blue diamond","boars head","bodum 2012","bodum 2020","bodum coffee","bodum drinks","bored cow","botanicals","bouley","bouley wsj","broderville aspen dental","brooks","brooks running","brunch","bubbles","buitoni","bulletproof","burger king","burgers","burgers new","cadillac magazine","cadillac magazine butter","cadillac magazine edible insects","calabash jumby bay","campaigns","campbells","campbells chunky soup","capri sun","caress","carr's","casa dragones","cassecou","cereal","chap chae","cheese","chef tobi","chobani","chocolate","cinco de mayo","ciroc vs","clarisonic usage","clients","clif bars","coffee","coffee drinks test shoot","coffee machines","coffee mate","coffee social media","coffee stop motion","coffee tea","colorful","comparti","constellation brands","cook book","cookunity","coravin","corona","corona campaign gsdm","cosmetic","cosmetics","cosmetics people","cosmetics tbwa","costa del mar","costa-making tuna","costa-making vid 1","costa-making vid 2","courvoisier","covid19 protocols","crate&barrel","cuisinart","culture of eating","daffinois","ddb pure leaf","detox book","direction2","direction3","dogs bbdo","dominos","donuts","drinks","drinks test shoot","drinks with environment","dupixent","earth company","eggland","eleven madison park","epa general work gallery","exxon","fast food","feinschmecker ny","fishers island","flor de cana","food","food breakfast and frittata","food maison","food network drinks","food network-thanks","fresh energy cookbook","fruit","gogo squeez","golden platter","gourmet germany-back to the roots","grace hotel","halo top","halo top publicis pxp","havas product photography","hellman's hogarth","hennessy","hersheys lancaster","highland park whiskey","hollister","honey and crackers","hospitality lifestyle","hp","husky","ice cream","ice cream new","icelandic provisions","icelandic provisions oat skyr","icons","ihealth","ingredients","interiors","interiors hotel","javis tequila water","jet","jewelry","jif","jim beam","johnnie walker","juice","kagaya","kajitsu","keurig","kfc","kids","kk social fruits","knorr","knorr campaign","la esquina","lamar","lance","land o lakes","landing page images","landscapes","las californias","lg","lifestyle","lifestyle product","linnea johansson-cook book","liquid","liquid flowers","liquids","live stream system","lobster","location","locations","loews","loews regency hotel","loreal powder","luerzers archive 200 best","luggage","lyons press - new energy","mac cosmetics","makers mark 46","malka","mandarin oriental","martha stewart","masterclass","matthew kenney","mcdonalds","mealco","mealco hot ones","meat","mekanism","micro cotton","mojito cubano","mslo","new you cosmetics","new you edible flowers","new you lollipops","new you-drinks","noodles food test shoot","ntidote","nutella","nutrilite-liquid","ny bakery","offset","omc","oofos","oops","overview old","packshots","patron","patron holiday 2022","patron stills","pbj","pdn creators lounge","pearlfisher del real","pearlfisher husky","pedigree","pedigree campaign","peppermint patties","pepsi lipton pure leaf","pernod ricard","pharma","pharma II","pizza","pizza 2","pizza lifestyle","plant food and wine","plantlab","plantlab new","plantmade","pork","portrait","portraits","portraits bw","prada","purity vodka","qmixers","quaker oats","ragu","ragu weber shandwick","rao's lifestyle food test","remote shooting","remy martin","restaurant hospitality","restaurants","salinas","sams club","san pellegrino","santa teresa","sapporo","scen","sephora","shoes","simply spiked","skol beer","sneakers","snickers","soba","splashes","starbucks coffee spcshp","starbucks stop motion","stella artois","stills   liquids","stop motion","subway","summer drinks","sushi by bou","sweets","sweets & chocolate gallery","swiss cheese","tamboo rum","tbwa pharma","teavana","tequila 1800-motion","the gothic","thirsty fox","tim hortons","titos vodka","tokyo empty","tumi mariella","tumi v3","uber eats","uber eats ooh","unbound","under armour","unshackled wines","vegetables","visual comforts","wab","watches","westfield","white wave-motion","white wave-stills","whitewave","wilder","wilder sea food","wine enthusiast","wine enthusiast fat cocktails","wine enthusiast holiday","wine enthusiast jbbq","wine enthusiast new german","woodford reserve","workshop","yogurt"],"portfolioEmailMessage":"Check out this photograph:","socialLinks":[],"useHTML":true,"globalBrowserTitle":false,"facebookImage":"amueller_thumb.com.jpg","facebookAdmins":"","facebookUseMeta":true,"podUseDesktop":false,"padUseDesktop":true,"generalEmail":"adrian@amueller.com","inquiryTitle":"","inquiryInfo":"","lang":"en","betaProgramVisible":true,"betaProgramEnabled":false,"advancedSeo":true,"adminSortDefault":"dateAdded ascending","enablePinterest":false,"enableCookieBanner":false,"currentTemplate":13,"cookieBannerPosition":"bottom","cookieBannerLink":"http://aboutcookies.org","cookieBannerMessage":"We use cookies to enhance your experience. By continuing to visit this site you agree to our use of cookies.","revision":191,"cdnSslUri":"/pf-media","favicon":"AdrianMueller_FAVICON.ico","siteHead":"<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<meta name=\"robots\" content=\"index,follow\">\n<!-- Google Tag Manager -->\n<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\nj=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n})(window,document,'script','dataLayer','GTM-N3WB76W');</script>\n<!-- End Google Tag Manager -->\n<script type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@graph\": [\n    {\n      \"@type\": \"Person\",\n      \"@id\": \"https://www.amueller.com/#person\",\n      \"name\": \"Adrian Mueller\",\n      \"url\": \"https://www.amueller.com/\",\n      \"image\": \"https://www.amueller.com/\",\n      \"jobTitle\": [\n        \"Beverage Photographer\",\n        \"Food Photographer\",\n        \"Product Photographer\",\n        \"CPG Photographer\",\n        \"Table Top Director\"\n      ],\n      \"description\": \"Adrian Mueller is a New York-based beverage photographer, food photographer, product and CPG photographer, and table top director specializing in advertising and commercial imagery for food, beverage, drinks, cocktails, culinary, hospitality, restaurant, and consumer packaged goods brands.\",\n      \"telephone\": \"+1-917-449-2417\",\n      \"address\": {\n        \"@type\": \"PostalAddress\",\n        \"streetAddress\": \"636 Broadway, 8th Floor\",\n        \"addressLocality\": \"New York\",\n        \"addressRegion\": \"NY\",\n        \"postalCode\": \"10012\",\n        \"addressCountry\": \"US\"\n      },\n      \"sameAs\": [\n        \"https://www.amueller.com/\",\n        \"https://www.instagram.com/mueller.adrian/\"\n      ],\n      \"knowsAbout\": [\n        \"Beverage photography\",\n        \"Food photography\",\n        \"Table top direction\",\n        \"Product photography\",\n        \"CPG photography\",\n        \"Advertising photography\",\n        \"Commercial photography\",\n        \"Fast food photography\",\n        \"Drinks photography\",\n        \"Cocktail photography\",\n        \"Culinary photography\",\n        \"Hospitality photography\",\n        \"Restaurant photography\"\n      ],\n      \"worksFor\": {\n        \"@id\": \"https://www.amueller.com/#business\"\n      }\n    },\n    {\n      \"@type\": \"ProfessionalService\",\n      \"@id\": \"https://www.amueller.com/#business\",\n      \"name\": \"Adrian Mueller Photography\",\n      \"url\": \"https://www.amueller.com/\",\n      \"telephone\": \"+1-917-449-2417\",\n      \"email\": \"info@amueller.com\",\n      \"description\": \"Advertising and commercial photography studio led by Adrian Mueller, specializing in beverage photography, food photography, product photography, CPG photography, and table top direction for brands, agencies, restaurants, hospitality groups, and consumer packaged goods companies.\",\n      \"areaServed\": [\n        {\n          \"@type\": \"City\",\n          \"name\": \"New York City\"\n        },\n        {\n          \"@type\": \"City\",\n          \"name\": \"Los Angeles\"\n        },\n        {\n          \"@type\": \"City\",\n          \"name\": \"Chicago\"\n        }\n      ],\n      \"serviceType\": [\n        \"Beverage photography\",\n        \"Food photography\",\n        \"Product photography\",\n        \"CPG photography\",\n        \"Table top direction\",\n        \"Advertising photography\",\n        \"Commercial photography\",\n        \"Fast food photography\",\n        \"Drinks photography\",\n        \"Cocktail photography\",\n        \"Culinary photography\",\n        \"Hospitality photography\",\n        \"Restaurant photography\"\n      ],\n      \"keywords\": [\n        \"beverage photographer New York\",\n        \"beverage photographer NYC\",\n        \"food photographer New York\",\n        \"food photographer NYC\",\n        \"product photographer New York City\",\n        \"CPG photographer New York City\",\n        \"table top director New York\",\n        \"table top director NYC\",\n        \"advertising food photographer NYC\",\n        \"advertising beverage photographer NYC\",\n        \"commercial product photographer New York\",\n        \"commercial CPG photographer New York\",\n        \"cocktail photographer New York\",\n        \"drinks photographer NYC\",\n        \"culinary photographer New York\",\n        \"hospitality photographer NYC\",\n        \"restaurant photographer New York\"\n      ],\n      \"address\": {\n        \"@type\": \"PostalAddress\",\n        \"streetAddress\": \"636 Broadway, 8th Floor\",\n        \"addressLocality\": \"New York\",\n        \"addressRegion\": \"NY\",\n        \"postalCode\": \"10012\",\n        \"addressCountry\": \"US\"\n      },\n      \"founder\": {\n        \"@id\": \"https://www.amueller.com/#person\"\n      },\n      \"sameAs\": [\n        \"https://www.instagram.com/mueller.adrian/\"\n      ],\n      \"hasOfferCatalog\": {\n        \"@type\": \"OfferCatalog\",\n        \"name\": \"Photography and Table Top Direction Services\",\n        \"itemListElement\": [\n          {\n            \"@type\": \"Offer\",\n            \"itemOffered\": {\n              \"@type\": \"Service\",\n              \"name\": \"Beverage Photography\",\n              \"description\": \"Commercial and advertising beverage photography for brands, campaigns, packaging, and editorial uses.\"\n            }\n          },\n          {\n            \"@type\": \"Offer\",\n            \"itemOffered\": {\n              \"@type\": \"Service\",\n              \"name\": \"Food Photography\",\n              \"description\": \"Food photography for advertising, restaurant, culinary, hospitality, and brand campaigns.\"\n            }\n          },\n          {\n            \"@type\": \"Offer\",\n            \"itemOffered\": {\n              \"@type\": \"Service\",\n              \"name\": \"Product and CPG Photography\",\n              \"description\": \"Commercial product and CPG photography for packaging, ecommerce, advertising, and brand storytelling.\"\n            }\n          },\n          {\n            \"@type\": \"Offer\",\n            \"itemOffered\": {\n              \"@type\": \"Service\",\n              \"name\": \"Table Top Direction\",\n              \"description\": \"Table top direction for food, beverage, drinks, cocktails, and product productions.\"\n            }\n          }\n        ]\n      }\n    },\n    {\n      \"@type\": \"WebSite\",\n      \"@id\": \"https://www.amueller.com/#website\",\n      \"url\": \"https://www.amueller.com/\",\n      \"name\": \"Adrian Mueller\",\n      \"publisher\": {\n        \"@id\": \"https://www.amueller.com/#business\"\n      },\n      \"about\": {\n        \"@id\": \"https://www.amueller.com/#person\"\n      },\n      \"keywords\": [\n        \"Beverage photographer and table top director New York\",\n        \"Food photographer and table top director New York\",\n        \"Product photographer and table top director New York City\",\n        \"CPG photographer and table top director New York City\",\n        \"Advertising food and beverage photographer NYC\",\n        \"Commercial product and CPG photographer New York\"\n      ]\n    }\n  ]\n}\n</script>","siteBody":"<script>\n(function(){\n/* ===== SETTINGS ===== */\nvar COMM=\"/commissions/thumbs\";\nvar BTN_ID=\"pfTinyCommissions\";\n\n/* session keys */\nvar K_LASTKEY=\"PF_LASTKEY_V4\";\nvar K_ARM=\"PF_COMM_ARMED_V4\";\nvar K_TARGETKEY=\"PF_COMM_TARGETKEY_V4\";\n\n/* debounce to let DX settle */\nvar DEBOUNCE_MS=200;\n\n/* DO NOT arm when going to these (add more if needed) */\nvar NO_ARM_KEYS=[\n\"/overview/thumbs\",\n\"/overview\",\n\"/home\",\n\"/home/thumbs\"\n];\n\n/* ===== HELPERS ===== */\nfunction stripDomain(u){\nu=(u||\"\").toString().trim();\nif(!u) return \"\";\nif(u.indexOf(\"http://\")===0||u.indexOf(\"https://\")===0){\ntry{\nvar a=document.createElement(\"a\");\na.href=u;\nu=(a.pathname||\"\")+(a.search||\"\")+(a.hash||\"\");\n}catch(e){}\n}\nreturn u;\n}\nfunction rawClean(u){\nu=stripDomain(u);\nif(!u) return \"\";\nif(u.charAt(0)!==\"/\") u=\"/\"+u;\nu=u.replace(/\\/+/g,\"/\");\nu=u.replace(/\\/$/,\"\");\nreturn u;\n}\nfunction keyOf(u){\nu=rawClean(u).toLowerCase();\nu=u.replace(/%20/g,\" \");\nu=u.replace(/\\s+/g,\" \");\nu=u.replace(/ /g,\"-\");\nu=u.replace(/[_]+/g,\"-\");\nu=u.replace(/-+/g,\"-\");\nreturn u;\n}\nfunction isCommKey(k){ return k===keyOf(COMM); }\nfunction isNoArmKey(k){\nfor(var i=0;i<NO_ARM_KEYS.length;i++){\nif(k===keyOf(NO_ARM_KEYS[i])) return true;\n}\nreturn false;\n}\n/* Only arm when leaving commissions to a thumbs page that is NOT overview/home */\nfunction isEligibleDest(raw){\nvar rc=rawClean(raw).toLowerCase();\nif(!rc) return false;\nif(rc.indexOf(\"/thumbs\")===-1) return false;\nvar k=keyOf(rc);\nif(isCommKey(k)) return false;\nif(isNoArmKey(k)) return false;\nreturn true;\n}\n\nfunction getDxRoute(){\ntry{\nif(window.dx && dx.address){\nif(typeof dx.address.getValue===\"function\") return dx.address.getValue();\nif(typeof dx.address.value===\"function\") return dx.address.value();\nif(typeof dx.address.value===\"string\") return dx.address.value;\n}\n}catch(e){}\nreturn \"\";\n}\nfunction getRoute(){\nreturn getDxRoute() || ((location.pathname||\"\")+(location.search||\"\")+(location.hash||\"\"));\n}\nfunction dxGo(u){\nu=stripDomain(u);\nif(!u) return;\ntry{\nif(window.dx && dx.address && typeof dx.address.setValue===\"function\"){\ndx.address.setValue(u);\n}else{\nlocation.href=u;\n}\n}catch(e){\nlocation.href=u;\n}\n}\n\n/* ===== UI ===== */\nvar btn=null;\nfunction ensureBtn(){\nif(btn) return btn;\nbtn=document.getElementById(BTN_ID);\nif(!btn) return null;\nbtn.style.display=\"none\";\nbtn.addEventListener(\"click\",function(e){\ne.preventDefault();\nsessionStorage.setItem(K_ARM,\"0\");\nsessionStorage.removeItem(K_TARGETKEY);\nsessionStorage.setItem(K_LASTKEY, keyOf(COMM));\ndxGo(COMM);\n},true);\nreturn btn;\n}\nfunction showBtn(){ if(ensureBtn()) btn.style.display=\"inline-flex\"; }\nfunction hideBtn(){ if(ensureBtn()) btn.style.display=\"none\"; }\nfunction disarm(){\nsessionStorage.setItem(K_ARM,\"0\");\nsessionStorage.removeItem(K_TARGETKEY);\n}\n\n/* ===== CORE (ONE-HOP SHOW) ===== */\nfunction applyNow(routeRaw){\nvar curKey=keyOf(routeRaw);\nif(!curKey) return;\n\nvar lastKey=sessionStorage.getItem(K_LASTKEY) || \"\";\nvar armed=(sessionStorage.getItem(K_ARM)===\"1\");\nvar targetKey=sessionStorage.getItem(K_TARGETKEY) || \"\";\n\n/* Arm ONLY for eligible destination */\nif(isCommKey(lastKey) && !isCommKey(curKey) && isEligibleDest(routeRaw)){\nsessionStorage.setItem(K_ARM,\"1\");\nsessionStorage.setItem(K_TARGETKEY, curKey);\narmed=true;\ntargetKey=curKey;\n}\n\n/* store last */\nsessionStorage.setItem(K_LASTKEY, curKey);\n\n/* commissions: always hide + disarm */\nif(isCommKey(curKey)){\nhideBtn();\ndisarm();\nreturn;\n}\n\n/* armed: show only on target page; second nav away disarms */\nif(armed){\nif(curKey===targetKey){\nshowBtn();\n}else{\nhideBtn();\ndisarm();\n}\n}else{\nhideBtn();\n}\n}\n\n/* Debounce */\nvar pendingTimer=null;\nfunction apply(routeRaw){\nif(pendingTimer) clearTimeout(pendingTimer);\npendingTimer=setTimeout(function(){ applyNow(routeRaw); }, DEBOUNCE_MS);\n}\n\n/* ===== INIT ===== */\nvar tries=0;\nvar t=setInterval(function(){\ntries++;\nif(ensureBtn()){\nclearInterval(t);\nif(!sessionStorage.getItem(K_LASTKEY)){\nsessionStorage.setItem(K_LASTKEY, keyOf(getRoute()));\n}\napply(getRoute());\n}\nif(tries>120) clearInterval(t);\n},200);\n\n/* ===== HOOK DX ===== */\n(function hookDx(){\nvar tries2=0;\nvar t2=setInterval(function(){\ntries2++;\ntry{\nif(window.dx && dx.address && typeof dx.address.setValue===\"function\" && !dx.__pfCommRedoHookedV4){\ndx.__pfCommRedoHookedV4=true;\nvar orig=dx.address.setValue;\ndx.address.setValue=function(url){\ntry{ apply(url); }catch(e){}\nreturn orig.apply(this,arguments);\n};\nclearInterval(t2);\n}\n}catch(e){}\nif(tries2>160) clearInterval(t2);\n},150);\n})();\n\n/* ===== FALLBACK ===== */\nsetInterval(function(){ apply(getRoute()); },500);\n\n})();\n</script>\n<script>\n(function(){\nfunction getMenu(){\nreturn document.getElementById('mySidemenu');\n}\n\nwindow.openNav=function(){\nvar menu=getMenu();\nif(!menu){return;}\nmenu.style.width='320px';\nmenu.style.maxWidth='85vw';\nmenu.setAttribute('aria-hidden','false');\ndocument.documentElement.style.overflow='hidden';\ndocument.body.style.overflow='hidden';\n};\n\nwindow.closeNav=function(){\nvar menu=getMenu();\nif(!menu){return;}\nmenu.style.width='0px';\nmenu.setAttribute('aria-hidden','true');\ndocument.documentElement.style.overflow='';\ndocument.body.style.overflow='';\n};\n\nfunction bind(){\nvar menu=getMenu();\nif(!menu){return;}\n\n/* click outside to close (only when open) */\ndocument.addEventListener('mousedown',function(e){\nvar m=getMenu();\nif(!m){return;}\nif(m.style.width && m.style.width!=='0px'){\nif(!m.contains(e.target)){\nwindow.closeNav();\n}\n}\n},{passive:true});\n\n/* esc to close */\ndocument.addEventListener('keydown',function(e){\nif(e.key==='Escape'){window.closeNav();}\n},{passive:true});\n}\n\n/* PF/DX pages can mount late — keep trying briefly */\nvar tries=0;\nvar t=setInterval(function(){\ntries++;\nif(getMenu()){\nclearInterval(t);\nbind();\n}\nif(tries>40){clearInterval(t);}\n},250);\n})();\n</script>\n<script>\n(function () {\n  var FOOTER_ID = \"adrianSEOFooter\";\n  var STYLE_ID = \"adrianSEOFooterStyles\";\n  var OBSERVER_KEY = \"__adrianFooterObserver\";\n  var RESIZE_KEY = \"__adrianFooterResizeBound\";\n  var UPDATE_TIMER = null;\n\n  function getPath() {\n    try {\n      return (window.location.pathname || \"\").toLowerCase();\n    } catch (e) {\n      return \"\";\n    }\n  }\n\n  function shouldShowFooter() {\n    var path = getPath();\n    return path.indexOf(\"/overview\") > -1 || path.indexOf(\"/thumbs\") > -1 || path === \"/\";\n  }\n\n  function injectStyles() {\n    if (document.getElementById(STYLE_ID)) return;\n\nvar css = `\n  #${FOOTER_ID}{\n    position:absolute;\n    box-sizing:border-box;\n    color:#000;\n    font-family:SuisseIntlLight, Arial, sans-serif;\n    font-weight:200;\n    z-index:220;\n  }\n\n  #${FOOTER_ID},\n  #${FOOTER_ID} *{\n    box-sizing:border-box;\n  }\n\n  #${FOOTER_ID} a{\n    color:#000;\n    text-decoration:none;\n  }\n\n  #${FOOTER_ID} a:hover{\n    opacity:.65;\n  }\n\n  #${FOOTER_ID} .adrianFooterInner{\n    width:100%;\n    margin:0 auto;\n    padding:0;\n    position:relative;\n    min-height:96px;\n  }\n\n  #${FOOTER_ID} .adrianFooterGrid{\n    position:relative;\n    width:100%;\n    min-height:96px;\n  }\n\n  /* LEFT + RIGHT stay locked to the bottom edge */\n  #${FOOTER_ID} .adrianFooterLeft{\n    position:absolute;\n    left:0;\n    bottom:0;\n    text-align:left;\n  }\n\n  #${FOOTER_ID} .adrianFooterRight{\n    position:absolute;\n    right:0;\n    bottom:0;\n    text-align:right;\n  }\n\n  /* CENTER stays in normal flow and defines the height */\n  #${FOOTER_ID} .adrianFooterCenter{\n    width:100%;\n    max-width:720px;\n    margin:0 auto;\n    text-align:center;\n  }\n\n  #${FOOTER_ID} .adrianFooterLink,\n  #${FOOTER_ID} .adrianFooterCopy{\n    display:block;\n    font-size:15px;\n    line-height:1;\n    letter-spacing:0;\n    white-space:nowrap;\n    margin:0;\n    padding:0;\n  }\n\n  #${FOOTER_ID} .adrianFooterTitle{\n    margin:0 0 14px 0;\n    font-size:21.5px;\n    line-height:1.2;\n    font-weight:200;\n    letter-spacing:0;\n  }\n\n  #${FOOTER_ID} .adrianFooterBody{\n    margin:0 auto;\n    max-width:720px;\n    font-size:15px;\n    line-height:1.45;\n    letter-spacing:0;\n  }\n\n  #${FOOTER_ID} .adrianFooterBody p{\n    margin:0;\n  }\n\n  @media screen and (max-width: 980px){\n    #${FOOTER_ID} .adrianFooterInner,\n    #${FOOTER_ID} .adrianFooterGrid{\n      min-height:0;\n    }\n\n    #${FOOTER_ID} .adrianFooterLeft,\n    #${FOOTER_ID} .adrianFooterRight{\n      position:static;\n      text-align:center;\n      margin-top:18px;\n    }\n\n    #${FOOTER_ID} .adrianFooterCenter{\n      max-width:640px;\n    }\n\n    #${FOOTER_ID} .adrianFooterLink,\n    #${FOOTER_ID} .adrianFooterCopy{\n      font-size:14px;\n      line-height:1.2;\n      white-space:normal;\n    }\n\n    #${FOOTER_ID} .adrianFooterTitle{\n      font-size:21.5px;\n      margin-bottom:12px;\n    }\n\n    #${FOOTER_ID} .adrianFooterBody{\n      font-size:14px;\n      line-height:1.5;\n    }\n  }\n\n  @media screen and (max-width: 640px){\n    #${FOOTER_ID} .adrianFooterTitle{\n      font-size:20px;\n    }\n\n    #${FOOTER_ID} .adrianFooterBody{\n      font-size:13.5px;\n    }\n  }\n`;\n    var style = document.createElement(\"style\");\n    style.id = STYLE_ID;\n    style.appendChild(document.createTextNode(css));\n    document.head.appendChild(style);\n  }\n\n  function buildFooter() {\n    var footer = document.createElement(\"footer\");\n    footer.id = FOOTER_ID;\n    footer.setAttribute(\"aria-label\", \"Site footer\");\n\n    footer.innerHTML = `\n      <div class=\"adrianFooterInner\">\n        <div class=\"adrianFooterGrid\">\n\n          <div class=\"adrianFooterLeft\">\n            <a class=\"adrianFooterLink\" href=\"mailto:adrian@amueller.com\">reach out</a>\n          </div>\n\n          <div class=\"adrianFooterCenter\">\n            <h2 class=\"adrianFooterTitle\">Beverage, Food &amp; Product Photographer | Table Top Director New York</h2>\n            <div class=\"adrianFooterBody\">\n              <p>\n                Adrian Mueller is a commercial photographer and table top director based in New York City, specializing in beverage, food, product / CPG and hospitality imagery, for advertising, digital and social media campaigns. He’s available worldwide for integrated, stills or motion productions\n              </p>\n            </div>\n          </div>\n\n          <div class=\"adrianFooterRight\">\n            <div class=\"adrianFooterCopy\">© adrian mueller</div>\n          </div>\n\n        </div>\n      </div>\n    `;\n\n    return footer;\n  }\n\n  function getGrid() {\n    return document.querySelector(\".Thumbs\\\\.grid\");\n  }\n\n  function getGridContainer() {\n    return document.querySelector(\".Thumbs\\\\.grid\\\\.container\");\n  }\n\n  function getMask() {\n    return document.querySelector(\".Thumbs\\\\.mask\");\n  }\n\n  function getFooter() {\n    return document.getElementById(FOOTER_ID);\n  }\n\n  function scheduleUpdate() {\n    clearTimeout(UPDATE_TIMER);\n    UPDATE_TIMER = setTimeout(updateFooterPosition, 80);\n  }\n\n  function updateFooterPosition() {\n    var existing = getFooter();\n\n    if (!shouldShowFooter()) {\n      if (existing) existing.remove();\n      return;\n    }\n\n    injectStyles();\n\n    var grid = getGrid();\n    var gridContainer = getGridContainer();\n    var mask = getMask();\n    if (!grid || !gridContainer || !mask) return;\n\n    var footer = existing || buildFooter();\n\n    if (footer.parentNode !== gridContainer) {\n      gridContainer.appendChild(footer);\n    }\n\n    var gridHeight = grid.offsetHeight || parseInt(grid.style.height || \"0\", 10) || 0;\n    var gap = 130;\n    var footerTop = gridHeight + gap;\n\n    var containerRect = gridContainer.getBoundingClientRect();\n    var maskRect = mask.getBoundingClientRect();\n\nvar footerLeft = maskRect.left - containerRect.left;\nvar footerWidth = maskRect.width;\n\nfooter.style.top = footerTop + \"px\";\nfooter.style.left = footerLeft + \"px\";\nfooter.style.width = footerWidth + \"px\";\n\n    try {\n      gridContainer.style.overflow = \"visible\";\n    } catch (e) {}\n\n    var footerHeight = footer.offsetHeight || 0;\n    var neededHeight = footerTop + footerHeight + 40;\n    var currentHeight = gridContainer.offsetHeight || parseInt(gridContainer.style.height || \"0\", 10) || 0;\n\n    if (neededHeight > currentHeight) {\n      gridContainer.style.height = neededHeight + \"px\";\n    }\n  }\n\n  function bindResize() {\n    if (window[RESIZE_KEY]) return;\n    window[RESIZE_KEY] = true;\n\n    window.addEventListener(\"resize\", scheduleUpdate);\n    window.addEventListener(\"orientationchange\", scheduleUpdate);\n  }\n\n  function observePF() {\n    if (window[OBSERVER_KEY]) return;\n\n    var observer = new MutationObserver(function () {\n      scheduleUpdate();\n    });\n\n    observer.observe(document.body, {\n      childList: true,\n      subtree: true,\n      attributes: true,\n      attributeFilter: [\"style\", \"class\"]\n    });\n\n    window[OBSERVER_KEY] = observer;\n  }\n\n  function boot() {\n    updateFooterPosition();\n    setTimeout(updateFooterPosition, 200);\n    setTimeout(updateFooterPosition, 700);\n    setTimeout(updateFooterPosition, 1500);\n    setTimeout(updateFooterPosition, 2500);\n\n    bindResize();\n    observePF();\n\n    var lastPath = getPath();\n    setInterval(function () {\n      var path = getPath();\n      if (path !== lastPath) {\n        lastPath = path;\n        setTimeout(updateFooterPosition, 120);\n        setTimeout(updateFooterPosition, 500);\n        setTimeout(updateFooterPosition, 1200);\n        setTimeout(updateFooterPosition, 2200);\n      }\n    }, 700);\n  }\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", boot);\n  } else {\n    boot();\n  }\n})();\n</script>\n\n<script>\n(function () {\n  var MAX_WAIT_MS = 30000;\n  var POLL_MS = 250;\n\n  function findSectionKey(target) {\n    if (!window.DX_MODEL || !DX_MODEL.sections) return null;\n\n    var keys = Object.keys(DX_MODEL.sections);\n    target = String(target || \"\").toLowerCase();\n\n    for (var i = 0; i < keys.length; i++) {\n      if (String(keys[i]).toLowerCase() === target) return keys[i];\n    }\n\n    return null;\n  }\n\n  function shuffle(arr) {\n    var a = arr.slice();\n\n    for (var i = a.length - 1; i > 0; i--) {\n      var j = Math.floor(Math.random() * (i + 1));\n      var tmp = a[i];\n      a[i] = a[j];\n      a[j] = tmp;\n    }\n\n    return a;\n  }\n\n  function isVideoLike(media) {\n    if (!media) return true;\n\n    var content = String(media.content || \"\").toLowerCase();\n    var type = String(media.type || media.mediaType || media.kind || \"\").toLowerCase();\n    var mime = String(media.mime || media.mimeType || \"\").toLowerCase();\n\n    if (content.indexOf(\"vimeo:\") > -1) return true;\n    if (content.indexOf(\"youtube:\") > -1) return true;\n    if (content.indexOf(\".mp4\") > -1) return true;\n    if (content.indexOf(\".mov\") > -1) return true;\n    if (content.indexOf(\".m4v\") > -1) return true;\n    if (content.indexOf(\".webm\") > -1) return true;\n    if (type.indexOf(\"video\") > -1) return true;\n    if (mime.indexOf(\"video\") > -1) return true;\n\n    return false;\n  }\n\n  function getUrls(sectionName, count) {\n    if (!window.DX_MODEL) return [];\n\n    var actualKey = findSectionKey(sectionName);\n    if (!actualKey) {\n      console.log(\"No DX section found for:\", sectionName);\n      return [];\n    }\n\n    var model = window.DX_MODEL;\n    var cdn = String(model.settings && model.settings.cdnSslUri || \"\").replace(/\\/+$/, \"\");\n    var ids = model.sections[actualKey] && model.sections[actualKey].mediaItems || [];\n\n    var urls = ids\n      .map(function (id) {\n        return model.media && model.media[id] ? model.media[id] : null;\n      })\n      .filter(function (media) {\n        return media && media.content && !isVideoLike(media);\n      })\n      .map(function (media) {\n        return cdn + \"/\" + String(media.content).replace(/^\\/+/, \"\");\n      });\n\n    urls = shuffle(urls).slice(0, count);\n\n    console.log(\"Using section:\", actualKey);\n    console.log(\"Resolved urls:\", urls);\n\n    return urls;\n  }\n\n  function openLightbox(src, alt) {\n    var lb = document.getElementById(\"adrianLightbox\");\n    var img = document.getElementById(\"adrianLightboxImg\");\n    if (!lb || !img) return;\n\n    img.src = src;\n    img.alt = alt || \"\";\n    lb.classList.add(\"open\");\n    document.documentElement.style.overflow = \"hidden\";\n    document.body.style.overflow = \"hidden\";\n  }\n\n  function closeLightbox() {\n    var lb = document.getElementById(\"adrianLightbox\");\n    var img = document.getElementById(\"adrianLightboxImg\");\n    if (!lb || !img) return;\n\n    lb.classList.remove(\"open\");\n    img.src = \"\";\n    document.documentElement.style.overflow = \"\";\n    document.body.style.overflow = \"\";\n  }\n\n  function bindLightbox() {\n    var lb = document.getElementById(\"adrianLightbox\");\n    var img = document.getElementById(\"adrianLightboxImg\");\n    if (!lb || !img || document.body.__adrianLightboxBound) return;\n\n    document.body.__adrianLightboxBound = true;\n\n    document.addEventListener(\"click\", function (e) {\n      var clickedImg = e.target.closest(\".adrianBlogCard img\");\n\n      if (clickedImg) {\n        openLightbox(clickedImg.src, clickedImg.alt || \"\");\n        return;\n      }\n\n      if (e.target === lb) {\n        closeLightbox();\n      }\n    });\n\n    document.addEventListener(\"keydown\", function (e) {\n      if (e.key === \"Escape\") {\n        closeLightbox();\n      }\n    });\n  }\n\n  function renderPage(page) {\n    var sectionName = page.getAttribute(\"data-section\") || \"food\";\n    var count = parseInt(page.getAttribute(\"data-count\") || \"10\", 10);\n    var mount = page.querySelector(\"[data-adrian-images]\");\n    if (!mount || !window.DX_MODEL) return false;\n\n    var urls = getUrls(sectionName, count);\n\n    mount.innerHTML = \"\";\n\n    if (!urls.length) {\n      mount.innerHTML = '<div class=\"adrianBlogBody\">No images found for section: ' + sectionName + '</div>';\n      return true;\n    }\n\n    urls.forEach(function (src, index) {\n      var card = document.createElement(\"div\");\n      card.className = \"adrianBlogCard\";\n\n      var img = document.createElement(\"img\");\n      img.src = src;\n      img.alt = sectionName + \" photography by Adrian Mueller\";\n      img.loading = \"eager\";\n      img.decoding = \"async\";\n\n      img.onerror = function () {\n        card.remove();\n      };\n\n      img.onload = function () {\n        setTimeout(function () {\n          card.classList.add(\"isIn\");\n        }, index * 60);\n      };\n\n      card.appendChild(img);\n      mount.appendChild(card);\n    });\n\n    return true;\n  }\n\n  function run() {\n    var pages = document.querySelectorAll(\"[data-adrian-blog]\");\n    if (!pages.length || !window.DX_MODEL) return false;\n\n    bindLightbox();\n\n    for (var i = 0; i < pages.length; i++) {\n      if (!pages[i].__adrianRendered) {\n        pages[i].__adrianRendered = true;\n        renderPage(pages[i]);\n      }\n    }\n\n    return true;\n  }\n\n  function boot() {\n    var started = Date.now();\n\n    var timer = setInterval(function () {\n      var ready = !!window.DX_MODEL;\n      var timedOut = (Date.now() - started) > MAX_WAIT_MS;\nç\n      if (ready) {\n        run();\n        clearInterval(timer);\n      } else if (timedOut) {\n        clearInterval(timer);\n        console.log(\"Timed out waiting for DX_MODEL\");\n      }\n    }, POLL_MS);\n  }\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", boot);\n  } else {\n    boot();\n  }\n})();\n</script>","customFonts":["SuisseIntlRegular:400:SuisseIntl-Regular:custom","SuisseIntlLight:200:SuisseIntl-Light:custom"],"defaultEditorMode":"source","adminLockout":false,"logoFile":"mynewlogo__at__2x2_3.png","tabletLogoFile":"","mobileLogoFile":"","enableMessagesLog":true,"redirects":[],"introFile":"","logoText":"","logoHtml":"","disableRightClick":false,"googleSiteVerification":"google8a4db6c6861acd18.html","contactInfo":"Adrian Mueller\n636 Broadway, 8th Floor New York, NY 10012\n","globalMasterVersion":"16.0","globalBetaVersion":"16.1","accountName":"fabrikstudios","rsSslUri":"/pf-media"}