Content Security Policy: The Easy Way to Prevent Mixed Content

Post pobrano z: Content Security Policy: The Easy Way to Prevent Mixed Content

I recently learned about a browser feature where, if you provide a special HTTP header, it will automatically post to a URL with a report of any non-HTTPS content. This would be a great thing to do when transitioning a site to HTTPS, for example, to root out any mixed content warnings. In this article, we’ll implement this feature via a small WordPress plugin.

What is mixed content?

„Mixed content” means you’re loading a page over HTTPS page, but some of the assets on that page (images, videos, CSS, scripts, scripts called by scripts, etc) are loaded via plain HTTP.

A browser pop up window of a security warning about unsecure content.
A browser warning about mixed content.

I’m going to assume that we’re all too familiar with this warning and refer the reader to this excellent primer for more background on mixed content.

What is Content Security Policy?

A Content Security Policy (CSP) is a browser feature that gives us a way to instruct the browser on how to handle mixed content errors. By including special HTTP headers in our pages, we can tell the browser to block, upgrade, or report on mixed content. This article focuses on reporting because it gives us a simple and useful entry point into CSP’s in general.

CSP is an oddly opaque name. Don’t let it spook you, as it’s very simple to work with. It seems to have terrific support per caniuse. Here’s how the outgoing report is shaped in Chrome:

{
    "csp-report": {
        "document-uri":"http://localhost/wp/2017/03/21/godaddys-micro-dollars/",
        "referrer":"http://localhost/wp/",
        "violated-directive":"style-src",
        "effective-directive":"style-src",
        "original-policy":"default-src https: 'unsafe-inline' 'unsafe-eval'; report-uri http://localhost/wp/wp-json/csst_consecpol/v1/incidents",
        "disposition":"report",
        "blocked-uri":"http://localhost/wp/wp-includes/css/dashicons.min.css?ver=4.8.2",
        "status-code":200,
        "script-sample":""
    }
}

Here’s what it looks like in its natural habitat:

The outgoing report in the network panel of Chrome’s inspector.

What do I do with this?

What you’re going to have to do, is tell the browser what URL to send that report to, and then have some logic on your server to listen for it. From there, you can have it write to a log file, a database table, an email, whatever. Just be aware that you will likely generate an overwhelming amount of reports. Be very much on guard against self-DOSing!

Can I just see an example?

You may! I made a small WordPress plugin to show you. The plugin has no UI, just activate it and go. You could peel most of this out and use it in a non-WordPress environment rather directly, and this article does not assume any particular WordPress knowledge beyond activating a plugin and navigating the file system a bit. We’ll spend the rest of this article digging into said plugin.


Sending the headers

Our first step will be to include our content security policy as an HTTP header. Check out this file from the plugin. It’s quite short, and I think you’ll be delighted to see how simple it is.

The relevant bit is this line:

header( "Content-Security-Policy-Report-Only: default-src https: 'unsafe-inline' 'unsafe-eval'; report-uri $rest_url" );

There a lot of args we can play around with there.

  • With the Content-Security-Policy-Report-Only arg, we’re saying that we want a report of the assets that violate our policy, but we don’t want to actually block or otherwise affect them.
  • With the default-src arg, we’re saying that we’re on the lookout for all types of assets, as opposed to just images or fonts or scripts, say.
  • With the https arg, we’re saying that our policy is to only approve of assets that get loaded via https.
  • With the unsafe-inline and unsafe-eval args, we’re saying we care about both inline resources like a normal image tag, and various methods for concocting code from strings, like JavaScripts eval() function.
  • Finally, most interestingly, with the report-uri $rest_url arg, we’re giving the browser a URL to which it should send the report.

If you want more details about the args, there is an excellent doc on Mozilla.org. It’s also worth noting that we could instead send our CSP as a meta tag although I find the syntax awkward and Google notes that it is not their preferred method.

This article will only utilize the HTTP header technique, and you’ll notice that in my header, I’m doing some work to build the report URL. It happens to be a WP API URL. We’ll dig into that next.

Registering an endpoint

You are likely familiar with the WP API. In the old days before we had the WP API, when I needed some arbitrary URL to listen for a form submission, I would often make a page, or a post of a custom post type. This was annoying and fragile because it was too easy to delete the page in wp-admin without realizing what it was for. With the WP API, we have a much more stable way to register a listener, and I do so in this class. There are three points of interest in this class.

In the first function, after checking to make sure my log is not getting too big, I make a call to register_rest_route(), which is a WordPress core function for registering a listener:

function rest_api_init() {

    $check_log_file_size = $this -> check_log_file_size();
    if( ! $check_log_file_size ) { return FALSE; }

    ...                

    register_rest_route(
        CSST_CONSECPOL . '/' . $rest_version,
        '/' . $rest_ep . '/',
        array(
           'methods'  => 'POST',
           'callback' => array( $this, 'cb' ),
        )
    );

}

That function also allows me to register a callback function, which handles the posted CSP report:

function cb( \WP_REST_Request $request ) {

    $body = $request -> get_body();
    $body = json_decode( $body, TRUE );
    $csp_report = $body['csp-report'];

    ...

    $record = new Record( $args );
    $out = $record -> get_log_entry();

}

In that function, I massage the report in it’s raw format, into a PHP array that my logging class will handle.

Creating a log file

In this class, I create a directory in the wp-content folder where my log file will live. I’m not a big fan of checking for stuff like this on every single page load, so notice that this function first checks to see if this is the first page load since a plugin update, before bothering to make the directory.

function make_directory() {

    $out = NULL;

    $update = new Update;
    if( ! $update -> get_is_update() ) { return FALSE; }

    $log_dir_path = $this -> meta -> get_log_dir_path();
    $file_exists = file_exists( $log_dir_path );

    if( $file_exists ) { return FALSE; }

    $out = mkdir( $log_dir_path, 0775, TRUE );

    return $out;

}

That update logic is in a different class and is wildly useful for lots of things, but not of special interest for this article.

Logging mixed content

Now that we have CSP reports getting posted, and we have a directory to log them to, let’s look at how to actually convert a report into a log entry,

In this class I have a function for adding new records to our log file. It’s interesting that much of the heavy lifting is simply a matter of providing the a arg to the fopen() function:

function add_row( $array ) {

    // Open for writing only; place the file pointer at the end of the file. If the file does not exist, attempt to create it.
    $mode = 'a';

    // Open the file.
    $path   = $this -> meta -> get_log_file_path();
    $handle = fopen( $path, $mode );

    // Add the row to the spreadsheet.
    fputcsv( $handle, $array );

    // Close the file.
    fclose( $handle );

    return TRUE;

}

Nothing particular to WordPress here, just a dude adding a row to a csv in a normal-ish PHP manner. Again, if you don’t care for the idea of having a log file, you could have it send an email or write to the database, or whatever seems best.

Caveats

At this point we’ve covered all of the interesting highlights from my plugin, and I’d advice on offer a couple of pitfalls to watch out for.

First, be aware that CSP reports, like any browser feature, are subject to cross-browser differences. Look at this shockingly, painstakingly detailed report on such differences.

Second, be aware that if you have a server configuration that prevents mixed content from being requested, then the browser will never get a chance to report on it. In such a scenario, CSP reports are more useful as a way to prepare for a migration to https, rather than a way to monitor https compliance. An example of this configuration is Cloudflare’s „Always Use HTTPS„.

Finally, the self-DOS issue bears repeating. It’s completely reasonable to assume that a popular site will rack up millions of reports per month. Therefore, rather than track the reports on your own server or database, consider outsourcing this to a service such as httpschecker.net.

Next steps

Some next steps specific to WordPress would be to add a UI for downloading the report file. You could also store the reports in the database instead of in a file. This would make it economical to, say, determine if a new record already exists before adding it as a duplicate.

More generally, I would encourage the curious reader to experiment with the many possible args for the CSP header. It’s impressive that so much power is packed into such a terse syntax. It’s possible to handle requests by asset type, domain, protocol — really almost any combination imaginable.


Content Security Policy: The Easy Way to Prevent Mixed Content is a post from CSS-Tricks

How to Create a Golden Autumn-Inspired Text Effect in Adobe Photoshop

Post pobrano z: How to Create a Golden Autumn-Inspired Text Effect in Adobe Photoshop

Final product image
What You’ll Be Creating

Autumn is all about the beautiful reds and golds and what’s in between. This tutorial will show you how to use Photoshop’s layer styles, filters, and adjustment layers, along with a couple of stock images, to create a glittering, gold, autumn-inspired text effect. Let’s get started!

This text effect was inspired by the many Layer Styles available on GraphicRiver.

Tutorial Assets

The following assets were used during the production of this tutorial:

1. How to Create a Background Layer

Step 1

Create a new 1500 x 950 px document, and go to File > Place Linked to place the Wood Background image as a Smart Object on top of the Background layer.

Resize the Wood Background image as needed and hit the Return key to commit the changes.

Add the Background Image

Step 2

Go to Image > Adjustments > Vibrance, and change the Vibrance value to -20.

Vibrance

Step 3

Double-click the Wood Background layer to apply a Color Overlay effect with these settings:

  • Color: #d2d0cb
  • Blend Mode: Multiply
Color Overlay

This will adjust the coloring.

Adjusted Background

2. How to Create Text Layers

Step 1

Create the text in All Caps using the font Big Bottom Cartoon. Change the Size to 300 pt and the Tracking to 75.

Create the Text

Step 2

Duplicate the text layer to create a copy.

Duplicate the Text Layer

3. How to Create a Drop Shadow Effect

Double-click the original text layer to apply the following layer style:

Step 1

Add a Drop Shadow with these settings:

  • Opacity: 32%
  • Distance: 11
  • Size: 9
Drop Shadow

Step 2

Add another Drop Shadow effect instance with these settings:

  • Color: #121212
  • Opacity: 50%
  • Distance: 36
  • Size: 50
Drop Shadow

Step 3

Right-click the original text layer, choose Copy Layer Style, click the copy text layer, and choose Paste Layer Style.

Change the original text layer’s Fill value to 0.

Copy and Paste Layer Style

4. How to Create a Glittering Effect

Double-click the copy text layer to add the following layer style:

Step 1

Add a Bevel and Emboss with these settings:

  • Size: 3
  • Check the Anti-aliased box
  • Highlight Mode: Linear Light
  • Shadow Mode: Color Burn
    • Opacity: 15%
Bevel and Emboss

Step 2

Add a Contour with these settings:

  • Contour: Half Round
  • Check the Anti-aliased box.
Contour

Step 3

Add an Inner Shadow with these settings:

  • Blend Mode: Linear Burn
  • Opacity: 13%
  • Distance: 0
  • Size: 10
Inner Shadow

Step 4

Add a Pattern Overlay with these settings:

  • Pattern: FDR Glitter Pattern 02
  • Scale: 50%
Pattern Overlay

Step 5

Place both text layers in a group and name it Text Layers.

Text Layers Group

Step 6

Add a Vibrance adjustment layer on top of the Text Layers group, clip it to the group, and change the Vibrance value to -70%.

Vibrance

5. How to Apply Color to an Image

Step 1

Open the Leaves0020 – Image 3 image, right-click the layer, choose Convert to Smart Object, and duplicate it.

Hide the copy layer and make sure that the original is selected.

Convert to Smart Object

Step 2

Go to Filter > Noise > Median, and change the Radius to 3.

Median Filter

Step 3

Double-click the layer to apply a Color Overlay effect with these settings:

Add a Color Overlay with these settings:

  • Color: #9c752a
  • Blend Mode: Color
Color Overlay

This will color the original leaf.

Colored Leaf

Step 4

Show the copy layer, and expand the original’s Filters list.

Press-hold the Option key and click-drag the original leaf layer’s Smart Filters tab to the copy layer.

Duplicate the Smart Filters

6. How to Create a Gold Effect Using Filters

Step 1

Select the copy leaf layer, press Command-U, and change the Saturation value to -100.

Change the Saturation

Step 2

Go to Filter > Filter Gallery > Artistic > Plastic Wrap, and use these settings:

  • Highlight Strength: 20
  • Detail: 10
  • Smoothness: 7
Plastic Wrap Filter

Step 3

Change the copy leaf layer’s Blend Mode to Linear Light.

Change the Blend Mode

Step 4

Double-click the copy leaf layer to adjust its Blending Options.

We are going to adjust the Underlying Layer sliders under the Blend If section.

Press-hold the Option key, and click-drag the right slider to split it. As you move the slider’s ends, you’ll notice how the copy leaf will not affect the lighter areas below it.

Press-hold the Option key, and click-drag the left slider to exclude some of the darker areas as well.

Blending Options

Step 5

This will create a golden leaf. Because we’re going to significantly downsize this when we use it, the effect will look even more refined and realistic. So don’t worry about the details for now.

Save this file and keep it open as we’ll get back to it again.

Save the File

7. How to Use Highlights and Shadows to Increase Contrast

Step 1

Open the Leaves0153 – Image 1 image, convert the layer to a Smart Object, and duplicate it.

Convert to a Smart Object

Step 2

Go to Select > Color Range, and choose Highlights from the Select drop-down menu. Adjust the Fuzziness and Range sliders to select the highlights.

Select the Highlights

Step 3

Create a new layer on top of all layers and name it Highlights.

Highlights Layer

Step 4

Fill the layer with White and press Command-D to deselect.

Fill with White

Step 5

Hide the Highlights layer so that it doesn’t affect the Shadows selection we’re going to create next.

Hide the Layer

Step 6

Go to Select > Color Range, and this time choose Shadows from the Select menu. Adjust the Fuzziness and Range sliders to select the shadows.

Select the Shadows

Step 7

Create a new layer on top of all layers, name it Shadows, fill it with Black and deselect, and show the Highlights layer.

Fill with Black

Step 8

Change both the Highlights and Shadows layers’ Blend Mode to Soft Light, and their Opacity value to 50%.

This will help create more contrast.

Change Layer Settings

8. How to Duplicate and Adjust Effects and Filters

Step 1

What you need to do next is repeat the same steps to turn the leaves gold.

You can duplicate the original leaf layers into this document to copy and paste the layer styles and duplicate the filters, but remember to delete the duplicated layers when you’re done.

Apply the Layer Styles and Filters

Step 2

Double-click the original Leaves0153 – Image 1 layer to adjust its Color Overlay effect by changing the Color to #a27412.

Color Overlay

Step 3

Double-click the copy Leaves0153 – Image 1 layer to adjust its Blending Options if needed.

Blending Options

You can adjust any settings needed to get a result you like.

Gold Leaves

9. How to Create Final Smart Objects for the Leaf Layers

Step 1

Go back to the first leaf layer document, duplicate the layers you have, hide the original ones, merge the copy layers, and rename the merged layer to Leaf 01.

Merge Layers

Step 2

Add a Vibrance adjustment layer, clip it to the Leaf 01 layer, and change the Vibrance value to -35.

Vibrance

Step 3

Select both the Leaf 01 and the Vibrance layers and convert them to a Smart Object.

Placing the adjustment layer inside the Smart Object will help make it easily editable if you want to change its values anytime later on.

Final Smart Object

Step 4

Go back to the second leaf image document, group the layers, duplicate the group and hide it, and merge the copy.

Merge the Layers

Step 5

Pick the Lasso Tool and select one of the leaves.

Select a Leaf

Step 6

Press Shift-Command-J to cut and paste the selected leaf into a new layer

Select and cut and paste the second leaf into a new layer, and delete the original empty layer. Rename the first leaf layer to Leaf 02 and the second to Leaf 03.

Separate the Leaf Images

Step 7

Add a clipped Vibrance layer using the same -35 Vibrance value to each of the leaf layers.

Vibrance

Step 8

Convert each leaf layer and its Vibrance layer to Smart Objects.

Convert to Smart Object

10. How to Add the Leaves to the Text

Step 1

Duplicate the Leaf 01 layer to the original document that has the text layers. Place the leaf on top of the first letter and scale it down as you like.

Add the First Leaf Layer

Step 2

Double-click the Leaf 01 layer to apply a Drop Shadow effect with these settings:

  • Opacity: 32%
  • Distance: 11
  • Size: 9
Drop Shadow

This will add a subtle drop shadow effect.

Shadow Effect

Step 3

Press-hold the Option key, and click-drag to duplicate the Leaf 01 layer. Then, you can transform the copy to build a dynamic effect.

Duplicate the Leaf Layer

Step 4

Follow the same steps to add more Leaf 01 copies, as well as adding and duplicating the Leaf 02 and Leaf 03 layers, over a part of the first letter.

Place all the leaf layers in a group with the letter’s name.

Add and Group the Leaf Layers

Step 5

Keep duplicating and transforming the leaf layers to place them over all the remaining letters.

Add More Leaves Over the Rest of the Text

11. How to Add More Leaves

Step 1

Open the autumn leaves image, and use the Lasso Tool to select any of the leaves you want to add to your text, and copy them to the original text document.

Select and Copy the Red Leaves

Step 2

Rename the copied leaf layer to Red Leaf 01, convert it to a Smart Object, and place it anywhere you like.

Add a Red Leaf Layer

Double-click the Red Leaf 01 layer to apply the following layer style:

Step 3

Add a Pattern Overlay with these settings:

  • Blend Mode: Linear Dodge (Add)
  • Opacity: 35
  • Pattern: FDR Glitter Pattern 02
  • Scale: 25%
Pattern Overlay

Step 4

Add a Drop Shadow with these settings:

  • Blend Mode: Darker Color
  • Opacity: 50%
  • Uncheck the Use Global Light box
  • Angle: 99
  • Distance: 6
  • Size: 9
Drop Shadow

Step 5

Add another Drop Shadow effect instance with these settings:

  • Blend Mode: Multiply
  • Opacity: 50%
  • Distance: 36
  • Size: 50
Drop Shadow

Step 6

This will style the leaf layer. Make sure to copy and paste this layer style to any red leaf layers you add next.

Copy the Layer Style

Step 7

Continue adding different red leaves until you get a result you like.

Add More Red Leaves

12. How to Add Pins

Step 1

Open the Mirror ball png image, and go to Image > Trim. Set Based On to Transparent Pixels, and check all the Trim Away boxes.

Trim

Step 2

Double-click the layer to apply a Color Overlay with these settings:

  • Color: #998051
  • Blend Mode: Color
Color Overlay

Step 3

Convert the mirror ball layer to a Smart Object.

Convert to a Smart Object

Step 4

Duplicate the mirror ball’s smart object into the original document, rename its layer to Pin, place it on top of all layers, and resize it to fit inside the center of some of the leaves you have.

Duplicate the Pin Layer

Double-click the Pin layer to apply the following layer style:

Step 5

Add a Pattern Overlay with these settings:

  • Blend Mode: Lighten
  • Pattern: FDR Glitter Pattern 02
  • Scale: 50%
Pattern Overlay

Step 6

Add an Outer Glow with these settings:

  • Blend Mode: Soft Light
  • Opacity: 35%
  • Color: #ffffff
  • Size: 50
Outer Glow

Step 7

Add a Drop Shadow effect with these settings:

  • Opacity: 32%
  • Distance: 11
  • Size: 9
Drop Shadow

This will style the pin.

Styled Pin

Step 8

Duplicate the pin to add it over more parts of the text, and place all the pin layers in a group with the name Pins.

Duplicate More Pins

13. How to Apply Global Adjustments

Step 1

Add a Color Lookup adjustment layer and choose the 3Strip.look table from the 3DLUT File menu, and change the layer’s Opacity to 50%.

Color Lookup

Step 2

Press the Shift-Option-Command-E keys to create a stamp layer on top of all layers. Rename the stamp layer to Lighting Effects and convert it to a Smart Object.

Lighting Effects Layer

Step 3

Go to Filter > Render > Lighting Effects. Choose Spot Light and adjust the rest of the settings as below:

Lighting Effects Filter

Step 4

Create another stamp layer on top of all layers, name it High Pass, convert it to a Smart Object, and change its Blend Mode to Soft Light.

High Pass Layer

Step 5

Go to Filter > Other > High Pass, and set the Radius to 1.

High Pass Filter

Step 6

Change the Lighting Effects layer’s Opacity to 50%.

Lighting Effects Layer Opacity

14. How to Add a Vignette

Step 1

Save the final result as an image, and open it.

Save as an Image

Step 2

Go to Image > Image Size, and change the Width to 1000 px.

Image Size

Step 3

Use the Elliptical Marquee Tool to create an elliptical selection around the text.

Create an Elliptical Selection

Step 4

Add a new Solid Color fill layer and set the Color to Black. The selection will be applied to the mask.

Solid Color

Step 5

Select the mask’s thumbnail and press Command-I to invert it.

Invert the Mask

Step 6

Change the Solid Color layer’s Blend Mode to Soft Light and its Opacity to 35%.

Layer Settings

Step 7

Select the mask’s thumbnail again and open the Properties panel to increase the Feather value until you get a smooth vignette effect.

Mask Feather

Congratulations! You’re Done!

In this tutorial, we used layer styles to create some glittering text. Then, we used layer styles and filters to create gold leaves, and added them along with more red leaves over the text to create the main effect.

Finally, we added some pins, and applied a bunch of adjustment layers and filters to blend everything together.

Please feel free to leave your comments, suggestions, and outcomes below.

Final Result

ASDA Best Christmas Ever

Post pobrano z: ASDA Best Christmas Ever

Asda has launched its 2017 festive campaign, “Best. Christmas. Ever.”. “Imaginarium”, the commercial at the heart of the Asda Best Christmas Ever campaign, gives viewers a behind-the-scenes glance into the magical world where Asda Christmas treats are created. Set to the iconic track ‘Don’t Stop’ by Fleetwood Mac, the 60” TVC follows a young girl and her grandfather, who sneak into the Christmas Asda headquarters, the Imaginarium, revealing the secrets behind the iconic seasonal ranges and products available in store this festive season. As we follow their journey through weird and wonderful rooms, we discover magical machines, enchanting experiments and the imaginative ways in which Asda will ensure the Best. Christmas. Ever.: from reindeers powering a ginormous food mixer to make Christmas puddings, to canapés and mince pies being assembled by tiny Asda Imaginarium workers, and Christmas Smash Igloo cakes being tested by strapping weightlifters – the ranges offer creativity, innovation and quality. A captivating place with a surprise in every corner – a giant pop-up Christmas cookbook snaps opens to reveal two real life Asda chefs preparing the iconic Christmas meal of roast turkey with all the trimmings, including this year’s special Wagyu dripping roast potatoes. We also catch a glimpse into a futuristic gin room where truffles are being infused with gin by a giant ‘gin laser’. Their expedition comes to its fruition when Walter, the factory’s security guard shows them what other adventures lie in store for them, revealing the whole of the Imaginarium in all its glory.

Asda Best Christmas Ever commercial

Four further 30” adverts will be rolled out over the festive period, which will reveal more mysteries of the Asda Imaginarium. These spots will focus on four key festive shopping moments: Gifting, Home Decorations, Parties & Gatherings and ‘the Big Shop’. The Gifting film will also feature a panel of children selecting toys either as ‘fun’ or ‘boring’, highlighting the ‘Chosen by Kids’ range at Asda, where only the little ones have a say in what makes the cut. Each of the 30” spots will be supported on TV with 10” ads that focus on the essential Christmas staples such as turkey and vegetables and party food. These ads will highlight Asda’s amazing prices and deals, echoed in 6” YouTube bumpers.

Asda Best Christmas Ever commercial

Asda will engage dynamic technology to create tailored Trueview videos, taking audience search terms and linking them thematically with relevant Asda messaging. These will bring contextual relevance to the 6” YouTube Christmas bumpers, and will be supplemented with short-form 2” content and carousel ads on Facebook. The campaign will also feature an innovative, gamified Snapchat filter, where people can become the striped weightlifters from the ad.

Asda Best Christmas Ever commercial

Behind the campaign

Andy Murray, Chief Marketing Officer at Asda, said: “Earlier in the year we held sessions with our customers to get feedback on our Christmas range. As we talked to them about Christmas we could see how much joy and happiness planning their Christmas brought them – we knew we wanted to reflect that in our ad. When we saw their reactions to our food – the way it surprised them and made them smile – as well as the incredible pride and attention to detail our product developers had put into creating it, the inspiration for the Imaginarium was born.”

Eilidh Macaskill, Asda’s Vice President Creative and Media, explains: “By Combining CGI animation and some spectacular real life venues, the ad and the wider campaign is a love letter to our customers and products.”

Sara Rose, Group Creative Director at Saatchi & Saatchi London added: “Although the campaign has a fantastical element to it, our stories are firmly rooted in what Asda has to offer shoppers this Christmas, from old favourites to inventive new treats like gin infused chocolates and massive Christmas puddings. Our first thought was “how do they come up with these things?” And the campaign just grew from there.”

Asda Best Christmas Ever Credits

The Asda Best. Christmas. Ever campaign was developed at Saatchi & Saatchi London by chief creative officer Kate Stanners, group creative director Sara Rose, art director Cece Chu, copywriter Ryan Price, designer Teresa Goncalves, planning director Paul Hackett, account team Danny Josephs, Andy Chisholm, Jennie Gundill, Natasha Griffiths, Patrick Boyce and Walter Bayliss, agency producers Maja McIntosh and Georgie Ford.

Media was handled at Blue 449.

Filming was shot by duo Los Perez via Blink with producer Ewen Brown.

Editor was Joce Hockings at TenThree with producer Zoe Hockings.

Post production was done at MPC by VFX supervisor Bevis Jones and producer Annabel Bennett.

Audio post production was done at 750mph.

Music, “Don’t Stop”, performed by Fleetwood Mac, was licensed at One More Music Company.

Agregator najlepszych postów o designie, webdesignie, cssie i Internecie