diff --git a/docs/tutorials/additive-loading-scenes.md b/docs/tutorials/additive-loading-scenes.md
index b2b33d9289..314a16031c 100644
--- a/docs/tutorials/additive-loading-scenes.md
+++ b/docs/tutorials/additive-loading-scenes.md
@@ -7,7 +7,7 @@ thumb: https://s3-eu-west-1.amazonaws.com/images.playcanvas.com/projects/12/6850
Full documentation for Loading Scenes is now in the [User Manual][documentation-page].
*See the [full project][1].*
diff --git a/docs/tutorials/animation-blending.md b/docs/tutorials/animation-blending.md
index 2af261b4ba..05be33438f 100644
--- a/docs/tutorials/animation-blending.md
+++ b/docs/tutorials/animation-blending.md
@@ -11,7 +11,7 @@ This tutorial uses the deprecated Model and Animation components. Please refer t
:::
*Click on the various buttons to try out different sound effects.*
diff --git a/docs/tutorials/basic-audio.md b/docs/tutorials/basic-audio.md
index 141f4af9d4..da44e2fa12 100644
--- a/docs/tutorials/basic-audio.md
+++ b/docs/tutorials/basic-audio.md
@@ -5,7 +5,7 @@ thumb: https://s3-eu-west-1.amazonaws.com/images.playcanvas.com/projects/12/4058
---
-
+
*The tank is moving around the robot. You can shoot by clicking anywhere on the game.*
diff --git a/docs/tutorials/changing-scenes.md b/docs/tutorials/changing-scenes.md
index a7bd0e76cc..81d2b6fb1c 100644
--- a/docs/tutorials/changing-scenes.md
+++ b/docs/tutorials/changing-scenes.md
@@ -9,7 +9,7 @@ import Link from '@docusaurus/Link';
Full documentation for Loading Scenes is now in the [User Manual][documentation-page].
*Rigidbodies collide with each other, a sound is played on a collision and a trigger volume resets the shapes.*
diff --git a/docs/tutorials/compound-physics-shapes.md b/docs/tutorials/compound-physics-shapes.md
index 21c77708bb..05f7335ce7 100644
--- a/docs/tutorials/compound-physics-shapes.md
+++ b/docs/tutorials/compound-physics-shapes.md
@@ -9,7 +9,7 @@ import Link from '@docusaurus/Link';
Full documentation for Compound Physics Shapes is now in the [User Manual][documentation-page].
*Press 1, 2 or 3 to enable/disable the spot, point and directional lights respectively.*
diff --git a/docs/tutorials/crash-course.md b/docs/tutorials/crash-course.md
index 836b9af555..1818bc86dd 100644
--- a/docs/tutorials/crash-course.md
+++ b/docs/tutorials/crash-course.md
@@ -23,7 +23,7 @@ This was recorded for [JS GameDev Summit][js-gamedev-summit] and the video is ho
Play below! Try to get as many food items as you can before the timer runs out! Use WASD for movement.
-
+
## Timestamps
diff --git a/docs/tutorials/custom-posteffect.md b/docs/tutorials/custom-posteffect.md
index 01a31b85f0..63aaea2ab1 100644
--- a/docs/tutorials/custom-posteffect.md
+++ b/docs/tutorials/custom-posteffect.md
@@ -7,7 +7,7 @@ thumb: https://s3-eu-west-1.amazonaws.com/images.playcanvas.com/projects/12/4060
In this tutorial, you'll learn how to create a custom watercolor post effect in PlayCanvas that applies a softening filter and a paper grain texture to your scene. By the end of this guide, you'll have a visually appealing watercolor effect that you can apply to any 3D scene.
-
+
## Step 1: Setting Up Your Shaders
diff --git a/docs/tutorials/custom-shaders.md b/docs/tutorials/custom-shaders.md
index cf1c1dd28c..a1ba59d61c 100644
--- a/docs/tutorials/custom-shaders.md
+++ b/docs/tutorials/custom-shaders.md
@@ -5,7 +5,7 @@ thumb: https://s3-eu-west-1.amazonaws.com/images.playcanvas.com/projects/12/4060
---
-
+
:::info
diff --git a/docs/tutorials/entity-picking.md b/docs/tutorials/entity-picking.md
index 9e53bcf17f..53bb907389 100644
--- a/docs/tutorials/entity-picking.md
+++ b/docs/tutorials/entity-picking.md
@@ -7,7 +7,7 @@ thumb: https://s3-eu-west-1.amazonaws.com/images.playcanvas.com/projects/12/4058
Collision Picking - click to select a shape
-
+
---
@@ -15,7 +15,7 @@ Collision Picking - click to select a shape
Frame Buffer Picking - click to select a grey shape. The red shapes are set to be not pickable.
This is an application that implements first person character movement.
diff --git a/docs/tutorials/google-ads-for-games.md b/docs/tutorials/google-ads-for-games.md
index e27f69a37f..4568e008d3 100644
--- a/docs/tutorials/google-ads-for-games.md
+++ b/docs/tutorials/google-ads-for-games.md
@@ -33,7 +33,7 @@ For the tutorial we are going to fork the [Google H5 Ad Tutorial (Start)][tutori
The end result will look like this where we can call the interstitial and rewarded ads via button clicks and the refresh button will be used to check if the rewarded ads can be shown (more on this later).
*You can find the [full project here][9]. If you haven't see [Part 1][1], [Part 2][2], [Part 3][3] and [Part 4][4] read them first.*
diff --git a/docs/tutorials/keepyup-part-four.md b/docs/tutorials/keepyup-part-four.md
index 67b8a4c64d..1dce03ae5a 100644
--- a/docs/tutorials/keepyup-part-four.md
+++ b/docs/tutorials/keepyup-part-four.md
@@ -5,7 +5,7 @@ thumb: https://s3-eu-west-1.amazonaws.com/images.playcanvas.com/projects/12/4060
---
-
+
*You can find the [full project here][6]. If you haven't see [Part 1][1], [Part 2][2] and [Part 3][3] read them first.*
diff --git a/docs/tutorials/keepyup-part-one.md b/docs/tutorials/keepyup-part-one.md
index 91cae1f66b..b67e92ff94 100644
--- a/docs/tutorials/keepyup-part-one.md
+++ b/docs/tutorials/keepyup-part-one.md
@@ -5,7 +5,7 @@ thumb: https://s3-eu-west-1.amazonaws.com/images.playcanvas.com/projects/12/4060
---
-
+
*You can find the [full project here][3]*
diff --git a/docs/tutorials/keepyup-part-six.md b/docs/tutorials/keepyup-part-six.md
index 2d582e08fb..8bfda72077 100644
--- a/docs/tutorials/keepyup-part-six.md
+++ b/docs/tutorials/keepyup-part-six.md
@@ -5,7 +5,7 @@ thumb: https://s3-eu-west-1.amazonaws.com/images.playcanvas.com/projects/12/4060
---
-
+
*You can find the [full project here][11]. If you haven't see [Part 1][1], [Part 2][2], [Part 3][3], [Part 4][4] and [Part 5][5] read them first.*
diff --git a/docs/tutorials/keepyup-part-three.md b/docs/tutorials/keepyup-part-three.md
index ab064b42eb..c4895d7d55 100644
--- a/docs/tutorials/keepyup-part-three.md
+++ b/docs/tutorials/keepyup-part-three.md
@@ -5,7 +5,7 @@ thumb: https://s3-eu-west-1.amazonaws.com/images.playcanvas.com/projects/12/4060
---
-
+
*You can find the [full project here][4]. If you haven't see [Part 1][1] and [Part 2][2] read them first.*
diff --git a/docs/tutorials/keepyup-part-two.md b/docs/tutorials/keepyup-part-two.md
index de37afaf91..1d3943be6c 100644
--- a/docs/tutorials/keepyup-part-two.md
+++ b/docs/tutorials/keepyup-part-two.md
@@ -5,7 +5,7 @@ thumb: https://s3-eu-west-1.amazonaws.com/images.playcanvas.com/projects/12/4060
---
-
+
*You can find the [full project here][16]. If you haven't seen [Part 1][1] read it first.*
diff --git a/docs/tutorials/keyboard-input.md b/docs/tutorials/keyboard-input.md
index eb595ddfc0..aa416c0240 100644
--- a/docs/tutorials/keyboard-input.md
+++ b/docs/tutorials/keyboard-input.md
@@ -5,7 +5,7 @@ thumb: https://s3-eu-west-1.amazonaws.com/images.playcanvas.com/projects/12/4058
---
-
+
*Click to focus, then press `left arrow`, `right arrow` and `spacebar` to rotate the cube. Press and release the 'a' key to change color.*
diff --git a/docs/tutorials/light-cookies.md b/docs/tutorials/light-cookies.md
index 68a23057f5..401c7f0f02 100644
--- a/docs/tutorials/light-cookies.md
+++ b/docs/tutorials/light-cookies.md
@@ -5,7 +5,7 @@ thumb: https://s3-eu-west-1.amazonaws.com/images.playcanvas.com/projects/12/4097
---
-
+
Find out more by forking the [full project][1].
diff --git a/docs/tutorials/light-halos.md b/docs/tutorials/light-halos.md
index 6fe056b9a0..8810a4a004 100644
--- a/docs/tutorials/light-halos.md
+++ b/docs/tutorials/light-halos.md
@@ -5,7 +5,7 @@ thumb: https://s3-eu-west-1.amazonaws.com/images.playcanvas.com/projects/12/4060
---
-
+
Find out more by forking the [full project][4].
diff --git a/docs/tutorials/loading-json.md b/docs/tutorials/loading-json.md
index bb98082d16..c8a2ec4c9e 100644
--- a/docs/tutorials/loading-json.md
+++ b/docs/tutorials/loading-json.md
@@ -5,7 +5,7 @@ thumb: https://s3-eu-west-1.amazonaws.com/images.playcanvas.com/projects/12/4058
---
-
+
[This project][1] shows you how to load JSON data in two ways. First, from an asset in the project. Second, over HTTP from a remote server.
diff --git a/docs/tutorials/more-cameras.md b/docs/tutorials/more-cameras.md
index af0f1110a2..2538ccc391 100644
--- a/docs/tutorials/more-cameras.md
+++ b/docs/tutorials/more-cameras.md
@@ -5,7 +5,7 @@ thumb: https://s3-eu-west-1.amazonaws.com/images.playcanvas.com/projects/12/4058
---
-
+
*Click to focus, then press `space` to zoom in and out, press `left arrow` and `right arrow` to switch to the left and right cameras*
diff --git a/docs/tutorials/mouse-input.md b/docs/tutorials/mouse-input.md
index d6ad587b23..04c8b9b5bf 100644
--- a/docs/tutorials/mouse-input.md
+++ b/docs/tutorials/mouse-input.md
@@ -5,7 +5,7 @@ thumb: https://s3-eu-west-1.amazonaws.com/images.playcanvas.com/projects/12/4058
---
*Find out more by forking the [full project][1].*
diff --git a/docs/tutorials/procedural-levels.md b/docs/tutorials/procedural-levels.md
index 6a2f1326fd..e01f67adfe 100644
--- a/docs/tutorials/procedural-levels.md
+++ b/docs/tutorials/procedural-levels.md
@@ -5,7 +5,7 @@ thumb: https://s3-eu-west-1.amazonaws.com/images.playcanvas.com/projects/12/4058
---
-
+
This project uses [clone()][1] function on the Entity to randomly generate a level from Entities that have been created in the Editor.
diff --git a/docs/tutorials/programmatically-creating.md b/docs/tutorials/programmatically-creating.md
index 9acf50cc78..19ca0ca14b 100644
--- a/docs/tutorials/programmatically-creating.md
+++ b/docs/tutorials/programmatically-creating.md
@@ -5,7 +5,7 @@ thumb: https://s3-eu-west-1.amazonaws.com/images.playcanvas.com/projects/12/4060
---
-
+
Usually you will be creating Entities via the PlayCanvas Editor, building up collections of Components and scripts to create the various parts of your game. However, in some cases it is convenient to create Entities in your scripts. This tutorial shows you how.
diff --git a/docs/tutorials/real-time-multiplayer-colyseus.md b/docs/tutorials/real-time-multiplayer-colyseus.md
index 8bb1061064..eab855f947 100644
--- a/docs/tutorials/real-time-multiplayer-colyseus.md
+++ b/docs/tutorials/real-time-multiplayer-colyseus.md
@@ -5,7 +5,7 @@ thumb: https://avatars.githubusercontent.com/u/28384334?s=300&v=4
---
-
+
> *Select create game to open a new game. And click anywhere on the floor to move the object.*
diff --git a/docs/tutorials/real-time-multiplayer-photon.md b/docs/tutorials/real-time-multiplayer-photon.md
index bb32d03306..9662759408 100644
--- a/docs/tutorials/real-time-multiplayer-photon.md
+++ b/docs/tutorials/real-time-multiplayer-photon.md
@@ -5,7 +5,7 @@ thumb: https://s3-eu-west-1.amazonaws.com/images.playcanvas.com/projects/12/9269
---
-
+
:::info
diff --git a/docs/tutorials/real-time-multiplayer.md b/docs/tutorials/real-time-multiplayer.md
index 23764a341f..a9efa87866 100644
--- a/docs/tutorials/real-time-multiplayer.md
+++ b/docs/tutorials/real-time-multiplayer.md
@@ -11,7 +11,7 @@ This tutorial covers how to start creating your own multiplayer from scratch. If
:::
-
+
*Use WASD to move the player around. If you only see one capsule, try opening this page in another tab or on another computer.*
diff --git a/docs/tutorials/switch-full-scene.md b/docs/tutorials/switch-full-scene.md
index 439427bf02..63ec7e814e 100644
--- a/docs/tutorials/switch-full-scene.md
+++ b/docs/tutorials/switch-full-scene.md
@@ -7,7 +7,7 @@ thumb: https://s3-eu-west-1.amazonaws.com/images.playcanvas.com/projects/12/6919
Full documentation for Loading Scenes is now in the [User Manual][documentation-page].
This project uses the [`pc.Mesh`][1] API to procedurally generate and texture a rolling hillside from a heightmap texture.
diff --git a/docs/tutorials/touch-joypad.md b/docs/tutorials/touch-joypad.md
index e8d9583a99..a9b45d17c9 100644
--- a/docs/tutorials/touch-joypad.md
+++ b/docs/tutorials/touch-joypad.md
@@ -5,7 +5,7 @@ thumb: https://s3-eu-west-1.amazonaws.com/images.playcanvas.com/projects/12/1007
---
-
+
[Click here to see the project][project-link].
diff --git a/docs/tutorials/tweening.md b/docs/tutorials/tweening.md
index 6ebe965bd0..224f13ab62 100644
--- a/docs/tutorials/tweening.md
+++ b/docs/tutorials/tweening.md
@@ -34,7 +34,7 @@ this.entity
Here is an example on how to tween the local rotation of an Entity:
-
+
Here are links to the [Project][2] and the [Editor][4] for this example.
@@ -53,7 +53,7 @@ this.entity
Here's how to tween the local scale of an Entity:
-
+
Here are links to the [Project][2] and the [Editor][5] for this example.
@@ -72,7 +72,7 @@ this.entity
And finally here's a way to tween colors:
-
+
Here are links to the [Project][2] and the [Editor][6] for this example.
diff --git a/docs/user-manual/assets/types/cubemap.md b/docs/user-manual/assets/types/cubemap.md
index 6146469bf9..9399be2be3 100644
--- a/docs/user-manual/assets/types/cubemap.md
+++ b/docs/user-manual/assets/types/cubemap.md
@@ -8,7 +8,7 @@ Cubemaps are a special type of texture asset. They are formed from 6 texture ass
2. A cubemap can add reflections to any material. Imagine a shiny, chrome ball bearing in your scene. The ball reflects the surrounding scene. For open environments, you would normally set the scene's sky box cubemap as the cubemap on a reflective object's materials.
-
+
## Importing Cubemap Textures
diff --git a/docs/user-manual/getting-started/your-first-app.md b/docs/user-manual/getting-started/your-first-app.md
index 5dc8f19aed..aac8b0968c 100644
--- a/docs/user-manual/getting-started/your-first-app.md
+++ b/docs/user-manual/getting-started/your-first-app.md
@@ -6,7 +6,7 @@ sidebar_position: 3
Developing applications in PlayCanvas is easy and fun. Let's spend a few minutes learning the basics. We'll recreate the following simple 3D app:
-
+
*Use the arrow keys to move the red ball around.*
diff --git a/docs/user-manual/graphics/physical-rendering/physical-materials.md b/docs/user-manual/graphics/physical-rendering/physical-materials.md
index da12c5dd63..3d85928d82 100644
--- a/docs/user-manual/graphics/physical-rendering/physical-materials.md
+++ b/docs/user-manual/graphics/physical-rendering/physical-materials.md
@@ -36,7 +36,7 @@ The Diffuse Color is the base color of the material. This is an RGB color value.
It can also be known as **albedo** or **base color**.
-
+
You can often find the charts of recorded values for diffuse/albedo values on the internet.
@@ -62,7 +62,7 @@ The metalness value should almost always be 0 or 1. It is rare that you will nee
You can also supply a metalness map which lets you define specific areas of your material as metal or non-metal.
-
+
### Glossiness
@@ -70,7 +70,7 @@ You can also supply a metalness map which lets you define specific areas of your
Glossiness is used in both **metalness** and **specular** workflows and it defines how smooth your material surface is. The glossiness will affect how blurry or sharp the reflections on the material are, or how broad or narrow the specular highlights are. Glossiness is provided as a single value between 0-100 or a glossiness map.
-
+
Some PBR systems use **Roughness** instead of Glossiness. The roughness is the inverse of the glossiness. If you need to convert a roughness map to a glossiness map, simply invert it.
@@ -84,7 +84,7 @@ These three properties **diffuse**, **metalness** and **glossiness** are the cor
There are many other additional properties to investigate that can be used to make great materials such as Ambient Occlusion, Emissive, Opacity, Normal and Height maps.
-
+
[5]: https://marmoset.co/posts/pbr-texture-conversion/
diff --git a/docs/user-manual/physics/compound-shapes.md b/docs/user-manual/physics/compound-shapes.md
index 003baaa580..ba5849bfcc 100644
--- a/docs/user-manual/physics/compound-shapes.md
+++ b/docs/user-manual/physics/compound-shapes.md
@@ -8,7 +8,7 @@ Compound shapes are custom collision shapes created out of multiple primitive sh
The main advantage is that you are able to have dynamic rigidbody collisions between compound shapes (shown below) which is not possible with mesh collision types.
-
+
[PlayCanvas project link][compound-shapes-project]
diff --git a/docs/user-manual/publishing/playable-ads/fb-playable-ads.md b/docs/user-manual/publishing/playable-ads/fb-playable-ads.md
index 46cd28a85e..684d37dd02 100644
--- a/docs/user-manual/publishing/playable-ads/fb-playable-ads.md
+++ b/docs/user-manual/publishing/playable-ads/fb-playable-ads.md
@@ -14,7 +14,7 @@ The tool can create both the single 2MB (uncompressed) HTML file and the 5MB (un
The [Cube Jump project][5] is ready to be exported for the Facebook Playable Ad format and the expected [HTML output can be found here][6].
-
+
## File size tips
diff --git a/docs/user-manual/publishing/playable-ads/snapchat-playable-ads.md b/docs/user-manual/publishing/playable-ads/snapchat-playable-ads.md
index 541543f63e..04436fef72 100644
--- a/docs/user-manual/publishing/playable-ads/snapchat-playable-ads.md
+++ b/docs/user-manual/publishing/playable-ads/snapchat-playable-ads.md
@@ -16,7 +16,7 @@ There are some limitations to be aware of with the tool which can be found in th
The [Cube Jump project][5] is ready to be exported to the Snapchat Playable Ad format and the expected HTML output can be found [here][6].
-
+
## File size tips
diff --git a/docs/user-manual/publishing/web/self-hosting.md b/docs/user-manual/publishing/web/self-hosting.md
index 701414afe6..d216e12bd6 100644
--- a/docs/user-manual/publishing/web/self-hosting.md
+++ b/docs/user-manual/publishing/web/self-hosting.md
@@ -18,7 +18,7 @@ When you [publish to playcanvas.com][2], your application is assigned a URL. To
My Great Game
-
+