diff --git a/docs/assets/screenshots/social-cards-debug.png b/docs/assets/screenshots/social-cards-debug.png
new file mode 100644
index 000000000..bef1c0a91
Binary files /dev/null and b/docs/assets/screenshots/social-cards-debug.png differ
diff --git a/docs/assets/screenshots/social-cards-layer-0.png b/docs/assets/screenshots/social-cards-layer-0.png
new file mode 100644
index 000000000..063d5f970
Binary files /dev/null and b/docs/assets/screenshots/social-cards-layer-0.png differ
diff --git a/docs/assets/screenshots/social-cards-layer-1.png b/docs/assets/screenshots/social-cards-layer-1.png
new file mode 100644
index 000000000..af66e76c0
Binary files /dev/null and b/docs/assets/screenshots/social-cards-layer-1.png differ
diff --git a/docs/assets/screenshots/social-cards-layer-2.png b/docs/assets/screenshots/social-cards-layer-2.png
new file mode 100644
index 000000000..05efa9d65
Binary files /dev/null and b/docs/assets/screenshots/social-cards-layer-2.png differ
diff --git a/docs/assets/screenshots/social-cards-layer-3.png b/docs/assets/screenshots/social-cards-layer-3.png
new file mode 100644
index 000000000..1511b99f8
Binary files /dev/null and b/docs/assets/screenshots/social-cards-layer-3.png differ
diff --git a/docs/assets/screenshots/social-cards-layer-4.png b/docs/assets/screenshots/social-cards-layer-4.png
new file mode 100644
index 000000000..45ad3cd7b
Binary files /dev/null and b/docs/assets/screenshots/social-cards-layer-4.png differ
diff --git a/docs/assets/screenshots/social-cards-layer-5.png b/docs/assets/screenshots/social-cards-layer-5.png
new file mode 100644
index 000000000..7595600fc
Binary files /dev/null and b/docs/assets/screenshots/social-cards-layer-5.png differ
diff --git a/docs/assets/screenshots/social-cards-layer-background-color.png b/docs/assets/screenshots/social-cards-layer-background-color.png
new file mode 100644
index 000000000..95ade5167
Binary files /dev/null and b/docs/assets/screenshots/social-cards-layer-background-color.png differ
diff --git a/docs/assets/screenshots/social-cards-layer-background-image.png b/docs/assets/screenshots/social-cards-layer-background-image.png
new file mode 100644
index 000000000..d66cff14a
Binary files /dev/null and b/docs/assets/screenshots/social-cards-layer-background-image.png differ
diff --git a/docs/assets/screenshots/social-cards-layer-background.png b/docs/assets/screenshots/social-cards-layer-background.png
new file mode 100644
index 000000000..11d0f99f6
Binary files /dev/null and b/docs/assets/screenshots/social-cards-layer-background.png differ
diff --git a/docs/assets/screenshots/social-cards-layer-icon-circles.png b/docs/assets/screenshots/social-cards-layer-icon-circles.png
new file mode 100644
index 000000000..c30d86f4c
Binary files /dev/null and b/docs/assets/screenshots/social-cards-layer-icon-circles.png differ
diff --git a/docs/assets/screenshots/social-cards-layer-icon.png b/docs/assets/screenshots/social-cards-layer-icon.png
new file mode 100644
index 000000000..d3b82acbf
Binary files /dev/null and b/docs/assets/screenshots/social-cards-layer-icon.png differ
diff --git a/docs/assets/screenshots/social-cards-layer-size.png b/docs/assets/screenshots/social-cards-layer-size.png
new file mode 100644
index 000000000..a0a260ed3
Binary files /dev/null and b/docs/assets/screenshots/social-cards-layer-size.png differ
diff --git a/docs/assets/screenshots/social-cards-layer-typography-align.png b/docs/assets/screenshots/social-cards-layer-typography-align.png
new file mode 100644
index 000000000..e05e4ab4d
Binary files /dev/null and b/docs/assets/screenshots/social-cards-layer-typography-align.png differ
diff --git a/docs/assets/screenshots/social-cards-layer-typography-ellipsis.png b/docs/assets/screenshots/social-cards-layer-typography-ellipsis.png
new file mode 100644
index 000000000..34750aebf
Binary files /dev/null and b/docs/assets/screenshots/social-cards-layer-typography-ellipsis.png differ
diff --git a/docs/assets/screenshots/social-cards-layer-typography.png b/docs/assets/screenshots/social-cards-layer-typography.png
new file mode 100644
index 000000000..c4e97c7f2
Binary files /dev/null and b/docs/assets/screenshots/social-cards-layer-typography.png differ
diff --git a/docs/insiders/index.md b/docs/insiders/index.md
index 3d43da911..7b5d205ac 100644
--- a/docs/insiders/index.md
+++ b/docs/insiders/index.md
@@ -331,7 +331,7 @@ are released for general availability.
- [x] [Code annotations: custom selectors]
- [ ] Code line wrap button
- [Social plugin: custom layouts]: ../setup/setting-up-social-cards.md#custom-layouts
+ [Social plugin: custom layouts]: ../setup/setting-up-social-cards.md#customization
[Social plugin: background images]: ../setup/setting-up-social-cards.md#+social.cards_layout_params.background_image
[Code range selection]: ../reference/code-blocks.md#code-selection-button
[Code annotations: custom selectors]: ../reference/code-blocks.md#custom-selectors
diff --git a/docs/setup/setting-up-social-cards.md b/docs/setup/setting-up-social-cards.md
index 7e220d89d..02bba2946 100644
--- a/docs/setup/setting-up-social-cards.md
+++ b/docs/setup/setting-up-social-cards.md
@@ -6,7 +6,7 @@ status: new
Material for MkDocs can automatically create beautiful social cards for your
documentation, which appear as link previews on social media platforms. You
-can select from a variety of [pre-designed layouts][default layouts] or create
+can select from several [pre-designed layouts][default layouts] or create
[custom layouts] to match your unique style and branding.
- [custom layouts]: #custom-layouts
+ [custom layouts]: #customization
[formatting]: ../reference/formatting.md
## Configuration
@@ -46,8 +46,7 @@ following lines to `mkdocs.yml`:
For this reason, Material for MkDocs again follows its core principle of
making it as simple and powerful as possible, providing an easy-to-use
framework for building [custom layouts] using Python image processing
- libraries. Additionally, this means that there's no necessity for internet
- access in CI environments.
+ libraries.
``` yaml
plugins:
@@ -95,7 +94,7 @@ The following configuration options are available:
#### Social cards
-The following configuration options are available for social card generation:
+The following configuration options are available for card generation:
[`cards`](#+social.cards){ #+social.cards }
@@ -121,7 +120,9 @@ The following configuration options are available for social card generation:
cards_dir: assets/images/social
```
-[`cards_color`](#+social.cards_color){ #+social.cards_color }
+
+
+[`cards_color`](#+social.cards_color){ #+social.cards_color } – :material-trash-can: Deprecated, use [`cards_layout_options`][layout options]
: :octicons-milestone-24: Default: [`theme.palette.primary`][primary color] –
This option specifies the colors for the background `fill` and foreground
@@ -135,9 +136,7 @@ The following configuration options are available for social card generation:
text: "#FFFFFF"
```
- !!! warning "If you're using [Insiders], use [`cards_layout_params`](#+social.cards_layout_params)"
-
-[`cards_font`](#+social.cards_font){ #+social.cards_font }
+[`cards_font`](#+social.cards_font){ #+social.cards_font } – :material-trash-can: Deprecated, use [`cards_layout_options`][layout options]
: :octicons-milestone-24: Default: [`theme.font.text`][font] – This option
specifies which font to use for rendering the social card, which can be
@@ -149,19 +148,19 @@ The following configuration options are available for social card generation:
cards_font: Ubuntu
```
- !!! warning "If you're using [Insiders], use [`cards_layout_params`](#+social.cards_layout_params)"
+
[`cards_layout_dir`](#+social.cards_layout_dir){ #+social.cards_layout_dir }
: [:octicons-tag-24: insiders-4.33.0][Insiders] · :octicons-milestone-24:
- Default: _project root_ – This option specifies where the social plugin
- should try to resolve [custom layouts] from, taking precedence over the
- included layouts:
+ Default: _none_ – This option specifies where the social plugin should try
+ to resolve [custom layouts] from, taking precedence over the included
+ layouts:
``` yaml
plugins:
- social:
- cards_layout_dir: .overrides/social/layouts
+ cards_layout_dir: layouts
```
[`cards_layout`](#+social.cards_layout){ #+social.cards_layout } :material-alert-decagram:{ .mdx-pulse title="Added on May 8, 2023" }
@@ -219,14 +218,15 @@ The following configuration options are available for social card generation:
[![Layout default invert]][Layout default invert]
- All of the `default` layouts use the following variables:
+ All [`default`][default layouts] layouts make use of the following
+ [template variables]:
- :material-page-layout-header: – `config.site_name`
- :material-page-layout-body: – `page.meta.title` or `page.title`
- :material-page-layout-footer: – `page.meta.description` or `config.site_description`
- :material-page-layout-sidebar-right: – `theme.logo` or `theme.icon.logo`
-[`cards_layout_params`](#+social.cards_layout_params){ #+social.cards_layout_params }
+[`cards_layout_options`](#+social.cards_layout_options){ #+social.cards_layout_options }
: [:octicons-tag-24: insiders-4.33.0][Insiders] · :octicons-milestone-24:
Default: _none_ – This option allows to set [parameters] as provided by
@@ -235,21 +235,21 @@ The following configuration options are available for social card generation:
---
- All [`default`][default layouts] layouts specify the following parameters:
+ All [`default`][default layouts] layouts expose the following parameters:
- [`background_color`](#+social.cards_layout_params.background_color){ #+social.cards_layout_params.background_color }
+ [`background_color`](#+social.cards_layout_options.background_color){ #+social.cards_layout_options.background_color }
- : Set a background color, which can be a [CSS color keyword], a 3, 4, 6
+ : Set a background color, which can be a [CSS color keyword], or a 3, 4, 6
or 8 letter HEX color code. Alpha channels are supported as well:
``` yaml
plugins:
- social:
- cards_layout_params:
+ cards_layout_options:
background_color: "#0FF1CE"
```
- [`background_image`](#+social.cards_layout_params.background_image){ #+social.cards_layout_params.background_image }
+ [`background_image`](#+social.cards_layout_options.background_image){ #+social.cards_layout_options.background_image }
: Set a background image. If a `background_color` is set, like for the
[`default`][default layouts] layouts, the image is tinted (overlayed)
@@ -259,27 +259,27 @@ The following configuration options are available for social card generation:
``` yaml
plugins:
- social:
- cards_layout_params:
+ cards_layout_options:
background_color: "#00000000"
- background_image: .overrides/social/background.png
+ background_image: layouts/background.png
```
The path of the image must be defined relative to the project root.
- [`color`](#+social.cards_layout_params.color){ #+social.cards_layout_params.color }
+ [`color`](#+social.cards_layout_options.color){ #+social.cards_layout_options.color }
- : Set a foreground color, which can be a [CSS color keyword], a 3, 4, 6
+ : Set a foreground color, which can be a [CSS color keyword], or a 3, 4, 6
or 8 letter HEX color code. The color is primarily used to tint text and
icons:
``` yaml
plugins:
- social:
- cards_layout_params:
+ cards_layout_options:
color: "#0FF1CE"
```
- [`font_family`](#+social.cards_layout_params.font_family){ #+social.cards_layout_params.font_family }
+ [`font_family`](#+social.cards_layout_options.font_family){ #+social.cards_layout_options.font_family }
: Set a font family. This overrides the [font] that is set as part of the
theme configuration. The [built-in social plugin] will automatically
@@ -288,7 +288,7 @@ The following configuration options are available for social card generation:
``` yaml
plugins:
- social:
- cards_layout_params:
+ cards_layout_options:
font_family: Ubuntu
```
@@ -297,15 +297,86 @@ The following configuration options are available for social card generation:
[accent color]: ./changing-the-colors.md#accent-color
[font]: ./changing-the-fonts.md#regular-font
[Google Fonts]: https://fonts.google.com/
+ [layout options]: #+social.cards_layout_options
[page icon]: ../reference/index.md#setting-the-page-icon
[Layout default]: ../assets/screenshots/social-cards.png
[Layout default variant]: ../assets/screenshots/social-cards-variant.png
[Layout default accent]: ../assets/screenshots/social-cards-accent.png
[Layout default invert]: ../assets/screenshots/social-cards-invert.png
+ [template variables]: https://www.mkdocs.org/dev-guide/themes/#template-variables
[parameters]: #parameters
[default layouts]: #+social.cards_layout
[CSS color keyword]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#color_keywords
+#### Debugging
+
+The following configuration options are available for debugging:
+
+[`debug`](#+social.debug){ #+social.debug }
+
+: [:octicons-tag-24: insiders-4.33.0][Insiders] · :octicons-milestone-24:
+ Default: `false` – This option enables a special debug mode, which renders
+ each layer with an outline and its `x` and `y` offset in order to understand
+ how the layout is composed, and optionally renders a grid for easier
+ alignment:
+
+ ``` yaml
+ plugins:
+ - social:
+ debug: true
+ ```
+
+ === "With debug mode"
+
+ [![Debug mode enabled]][Debug mode enabled]
+
+ === "Without"
+
+ [![Debug mode disabled]][Debug mode disabled]
+
+ [Debug mode enabled]: ../assets/screenshots/social-cards-debug.png
+ [Debug mode disabled]: ../assets/screenshots/social-cards-variant.png
+
+[`debug_grid`](#+social.debug_grid){ #+social.debug_grid }
+
+: [:octicons-tag-24: insiders-4.33.0][Insiders] · :octicons-milestone-24:
+ Default: `true` – This option enables the rendering of a dot grid when
+ [`debug`][debug] is enabled (see screenshot above). The grid can be switched
+ off with:
+
+ ``` yaml
+ plugins:
+ - social:
+ debug_grid: false
+ ```
+
+[`debug_grid_step`](#+social.debug_grid_step){ #+social.debug_grid_step }
+
+: [:octicons-tag-24: insiders-4.33.0][Insiders] · :octicons-milestone-24:
+ Default: `32` – This option specifies the step size of the grid in pixels,
+ if enabled, which can be used to align elements. It can be changed with:
+
+ ``` yaml
+ plugins:
+ - social:
+ debug_grid_step: 64
+ ```
+
+[`debug_color`](#+social.debug_color){ #+social.debug_color }
+
+: [:octicons-tag-24: insiders-4.33.0][Insiders] · :octicons-milestone-24:
+ Default: `grey` – This option sets the color of the layer outlines and
+ the grid which are rendered when [`debug`][debug] is enabled. It can be
+ changed with:
+
+ ``` yaml
+ plugins:
+ - social:
+ debug_color: yellow
+ ```
+
+ [debug]: #+social.debug
+
#### Caching
The [built-in social plugin] implements an intelligent caching mechanism,
@@ -404,17 +475,336 @@ comes with CJK characters, e.g. one from the `Noto Sans` font family:
## Customization
-### Custom layouts
-
[:octicons-heart-fill-24:{ .mdx-heart } Sponsors only][Insiders]{ .mdx-insiders } ·
[:octicons-tag-24: insiders-4.33.0][Insiders] ·
:octicons-beaker-24: Experimental
-!!! info "Custom layout guide coming shortly"
+[Insiders] ships a ground up rewrite of the [built-in social plugin] and
+introduces a brand new layout system based on a combination of YAML and
+[Jinja templates] – the same engine Material for MkDocs uses for HTML
+templating – allowing for the creation of complex custom layouts:
- We're working hard to explain in detail how to build custom layouts. If you
- want to start to build a custom layout right away before we finish the guide,
- check out the [source code of the `default` layout](https://github.com/squidfunk/mkdocs-material-insiders/blob/master/src/plugins/social/layouts/default.yml)
- and watch the [demo on Twitter](https://twitter.com/squidfunk/status/1654832324272431104).
+
+
+
+ Layer 0
+
+
+
+
+
+ Layer 1
+
+
+
+
+
+ Layer 2
+
+
+
+
+
+ Layer 3
+
+
+
+
+
+ Layer 4
+
+
+
+
+
+ Layer 5
+
+
+
+
-#### Parameters
+Social cards are composed of layers, analogous to how they are represented in
+graphic design software such as Adobe Photoshop. As many layers are common
+across the cards generated for each page (e.g., backgrounds or logos), the
+built-in social plugin can automatically deduplicate layers and render them
+just once, substantially accelerating card generation. The generated cards are
+cached to ensure they are only regenerated when their contents change.
+
+Layouts are written in YAML syntax. Before starting to create a custom layout,
+it is a good idea to [study the pre-designed layouts] (link to [Insiders]
+repository), in order to get a better understanding of how they work. Then,
+create a new layout and reference it in `mkdocs.yml`:
+
+=== ":octicons-file-code-16: `layouts/custom.yml`"
+
+ ``` yaml
+ size: { width: 1200, height: 630 }
+ layers: []
+ ```
+
+=== ":octicons-file-code-16: `mkdocs.yml`"
+
+ ``` yaml
+ plugins:
+ - social:
+ cards_layout_dir: layouts
+ cards_layout: custom
+ debug: true
+ ```
+
+Note that the `.yml` file extension should be omitted. Next, run `mkdocs serve`,
+and see how the `.cache` directory is populated with the generated cards. Open
+any card in your editor, so you can see your changes immediately. Since we
+haven't defined any layers, the cards are transparent.
+
+The following sections explain how to create custom layouts.
+
+ [Jinja templates]: https://jinja.palletsprojects.com/en/3.1.x/
+ [study the pre-designed layouts]: https://github.com/squidfunk/mkdocs-material-insiders/tree/master/src/plugins/social/layouts
+
+### Size and offset
+
+Each layer has an associated size and offset, which is defined in pixels. The
+`size` is defined by a `width` and `height` property, and the `offset` by `x`
+and `y` properties:
+
+``` yaml
+size: { width: 1200, height: 630 }
+layers:
+ - size: { width: 1200, height: 630 }
+ offset: { x: 0, y: 0 }
+```
+
+If the `size` is omitted, it defaults to the size of the layout. If the `offset`
+is omitted, it defaults to the top left corner, which is the origin for all
+layers. Saving the layout and reloading renders:
+
+![Layer size]
+
+The layer outline and grid are visible because we enabled [`debug`][debug]
+mode in `mkdocs.yml`. The top left shows the layer index and offset, which is
+useful for alignment and composition.
+
+ [Layer size]: ../assets/screenshots/social-cards-layer-size.png
+
+### Backgrounds
+
+Each layer can be assigned a background color and image. If both are given, the
+color is rendered on top of the image, allowing for semi-transparent, tinted
+backgrounds:
+
+=== "Background color"
+
+ ``` yaml
+ size: { width: 1200, height: 630 }
+ layers:
+ - background:
+ color: "#4051b5"
+ ```
+
+ ![Layer background color]
+
+=== "Background image"
+
+ ``` yaml
+ size: { width: 1200, height: 630 }
+ layers:
+ - background:
+ image: layouts/background.jpg
+ ```
+
+ ![Layer background image]
+
+=== "Background image, tinted"
+
+ ``` yaml
+ size: { width: 1200, height: 630 }
+ layers:
+ - background:
+ image: layouts/background.jpg
+ color: "#4051b5ee" # (1)!
+ ```
+
+ 1. The color value can be set to a [CSS color keyword], or a 3, 4, 6 or 8
+ letter HEX color code, allowing for semi-transparent layers.
+
+ ![Layer background]
+
+Background images are automatically scaled to fit the layer while preserving
+aspect-ratio. Notice how we omitted `size` and `offset`, because we want to
+fill the entire area of the social card.
+
+[Layer background color]: ../assets/screenshots/social-cards-layer-background-color.png
+[Layer background image]: ../assets/screenshots/social-cards-layer-background-image.png
+[Layer background]: ../assets/screenshots/social-cards-layer-background.png
+
+### Typography
+
+Now, we can add dynamic typography that is sourced from Markdown files - this is
+the actual raison d'être of the [built-in social plugin]. [Jinja templates] are
+used to render a text string that is then added to the image:
+
+``` yaml
+size: { width: 1200, height: 630 }
+layers:
+ - size: { width: 832, height: 310 }
+ offset: { x: 62, y: 160 }
+ typography:
+ content: "{{ page.title }}" # (1)!
+ align: start
+ color: white
+ line:
+ amount: 3
+ height: 1.25
+ font:
+ family: Roboto
+ style: Bold
+```
+
+1. The following variables can be used in [Jinja templates]:
+
+ - [`config.*`][config variable]
+ - [`page.*`][page variable]
+ - [`layout.*`][layout options]
+
+ The author is free in defining `layout.*` options, which can be used to pass
+ arbitrary data to the layout from `mkdocs.yml`.
+
+This renders a text layer with the title of the page with a line height of 1.25,
+and a maximum number of 3 lines. The plugin automatically computes the font size
+from the line height, the number of lines, and font metrics like ascender and
+descender.[^2] This renders:
+
+ [^2]:
+ If the plugin would require the author to specify the font size and line
+ height manually, it would be impossible to guarantee that the text fits
+ into the layer. For this reason we implemented a declarative approach,
+ where the author specifies the desired line height and number of lines, and
+ the plugin computes the font size automatically.
+
+![Layer typography]
+
+ [config variable]: https://www.mkdocs.org/dev-guide/themes/#config
+ [page variable]: https://www.mkdocs.org/dev-guide/themes/#page
+ [Layer typography]: ../assets/screenshots/social-cards-layer-typography.png
+
+#### Overflow
+
+If the text overflows the layer, it is automatically truncated and an ellipsis
+is appended, e.g.:
+
+``` { .markdown .no-copy }
+# If we use a very long headline, we can see how the text will be truncated
+```
+
+![Layer typography ellipsis]
+
+ [Layer typography ellipsis]: ../assets/screenshots/social-cards-layer-typography-ellipsis.png
+
+#### Alignment
+
+Text can be aligned to all corners and edges of the layer. For example, if we
+want to align the text to the middle of the layer, we can set `align` to `start center`, which will render as:
+
+![Layer typography align]
+
+ [Layer typography align]: ../assets/screenshots/social-cards-layer-typography-align.png
+
+The following table shows the supported values:
+
+
+
+#### Font
+
+The [built-in social plugin] integrates with [Google Fonts] and will
+automatically download the font files for you. The `font` property accepts a
+`family` and `style` property, where the `family` must be set to the name of the
+font, and the `style` to one of the supported font styles. For example, setting
+`family` to `Roboto` will automatically download the following files:
+
+``` { .sh .no-copy #example }
+.cache/plugins/social/fonts
+└─ Roboto/
+ ├─ Black.ttf
+ ├─ Black Italic.ttf
+ ├─ Bold.ttf
+ ├─ Bold Italic.ttf
+ ├─ Italic.ttf
+ ├─ Light.ttf
+ ├─ Light Italic.ttf
+ ├─ Medium.ttf
+ ├─ Medium Italic.ttf
+ ├─ Regular.ttf
+ ├─ Thin.ttf
+ └─ Thin Italic.ttf
+```
+
+In that case, the author can use `Bold` or `Medium Italic` as the `style`. If
+the font style specified in the layer is not part of the font family, the
+font always falls back to `Regular` and prints a warning in [`debug`][debug]
+mode, as `Regular` is included with all font families.
+
+### Icons
+
+Authors can leverage the full range of icons that are shipped with Material for
+MkDocs, or even provide custom icons by using theme extension and going through
+the process described in the guide on [additional icons]. Icons can even be
+tinted by using the `color` property:
+
+``` yaml
+size: { width: 1200, height: 630 }
+layers:
+ - background:
+ color: "#4051b5"
+ - size: { width: 144, height: 144 }
+ offset: { x: 992, y: 64 }
+ icon:
+ value: material/cat
+ color: white
+```
+
+This will render the icon in the top right corner of the social card:
+
+![Layer icon]
+
+The possibilities are endless. For example, icons can be used to draw shapes
+like circles:
+
+``` yaml
+size: { width: 1200, height: 630 }
+layers:
+ - background:
+ color: "#4051b5"
+ - size: { width: 2400, height: 2400 }
+ offset: { x: -1024, y: 64 }
+ icon:
+ value: material/circle
+ color: "#5c6bc0"
+ - size: { width: 1800, height: 1800 }
+ offset: { x: 512, y: -1024 }
+ icon:
+ value: material/circle
+ color: "#3949ab"
+```
+
+This will add two circles to the background:
+
+![Layer icon circles]
+
+__Are you missing something? Please [open a discussion] and let us know!__
+
+ [additional icons]: ./changing-the-logo-and-icons.md#additional-icons
+ [Layer icon]: ../assets/screenshots/social-cards-layer-icon.png
+ [Layer icon circles]: ../assets/screenshots/social-cards-layer-icon-circles.png
+ [open a discussion]: https://github.com/squidfunk/mkdocs-material/discussions/new
diff --git a/material/.overrides/assets/stylesheets/custom.bea7efe8.min.css b/material/.overrides/assets/stylesheets/custom.bea7efe8.min.css
deleted file mode 100644
index 96e86868e..000000000
--- a/material/.overrides/assets/stylesheets/custom.bea7efe8.min.css
+++ /dev/null
@@ -1 +0,0 @@
-@keyframes heart{0%,40%,80%,to{transform:scale(1)}20%,60%{transform:scale(1.15)}}.md-typeset .twitter{color:#00acee}.md-typeset .mastodon{color:#897ff8}.md-typeset .mdx-video{width:auto}.md-typeset .mdx-video__inner{height:0;padding-bottom:56.138%;position:relative;width:100%}.md-typeset .mdx-video iframe{border:none;height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%}.md-typeset .mdx-heart{animation:heart 1s infinite}.md-typeset .mdx-insiders{color:#e91e63}.md-typeset .mdx-switch button{cursor:pointer;transition:opacity .25s}.md-typeset .mdx-switch button:focus,.md-typeset .mdx-switch button:hover{opacity:.75}.md-typeset .mdx-switch button>code{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);display:block}.md-typeset .mdx-deprecated{opacity:.5;transition:opacity .25s}.md-typeset .mdx-deprecated:focus-within,.md-typeset .mdx-deprecated:hover{opacity:1}.md-typeset .mdx-columns ol,.md-typeset .mdx-columns ul{-moz-columns:2;column-count:2}@media screen and (max-width:29.9375em){.md-typeset .mdx-columns ol,.md-typeset .mdx-columns ul{-moz-columns:initial;columns:initial}}.md-typeset .mdx-columns li{-moz-column-break-inside:avoid;break-inside:avoid}.md-typeset .mdx-flags{margin:2em auto}.md-typeset .mdx-flags ol{list-style:none}.md-typeset .mdx-flags ol li{margin-bottom:1em}.md-typeset .mdx-flags__item{display:flex;gap:.6rem}.md-typeset .mdx-flags__content{display:flex;flex:1;flex-direction:column}.md-typeset .mdx-flags__content span{align-items:baseline;display:inline-flex;justify-content:space-between}.md-typeset .mdx-flags__content>span:nth-child(2){font-size:80%}.md-typeset .mdx-flags__content code{float:right}.md-typeset .mdx-author{display:flex;font-size:.68rem}.md-typeset .mdx-author img{border-radius:100%;height:2rem}.md-typeset .mdx-author p:first-child{flex-shrink:0;margin-right:.8rem}.md-typeset .mdx-author p>span{display:block}.md-banner{color:var(--md-footer-fg-color--lighter)}.md-banner strong{white-space:nowrap}.md-banner a,.md-banner strong{color:var(--md-footer-fg-color)}.md-banner a:focus,.md-banner a:hover{color:currentcolor}.md-banner a:focus .twemoji,.md-banner a:hover .twemoji{background-color:var(--md-footer-fg-color);box-shadow:none}.md-banner .twemoji{border-radius:100%;box-shadow:inset 0 0 0 .05rem currentcolor;display:inline-block;height:1.2rem;padding:.25rem;transition:all .25s;vertical-align:bottom;width:1.2rem}.md-banner .twemoji svg{display:block;max-height:none}.mdx-container{background:url("data:image/svg+xml;utf8,") no-repeat bottom,linear-gradient(to bottom,var(--md-primary-fg-color),#a63fd9 99%,var(--md-default-bg-color) 99%);padding-top:1rem}[data-md-color-scheme=slate] .mdx-container{background:url("data:image/svg+xml;utf8,") no-repeat bottom,linear-gradient(to bottom,var(--md-primary-fg-color),#a63fd9 99%,var(--md-default-bg-color) 99%)}.mdx-hero{color:var(--md-primary-bg-color);margin:0 .8rem}.mdx-hero h1{color:currentcolor;font-weight:700;margin-bottom:1rem}@media screen and (max-width:29.9375em){.mdx-hero h1{font-size:1.4rem}}.mdx-hero__content{padding-bottom:6rem}@media screen and (min-width:60em){.mdx-hero{align-items:stretch;display:flex}.mdx-hero__content{margin-top:3.5rem;max-width:19rem;padding-bottom:14vw}.mdx-hero__image{order:1;transform:translateX(4rem);width:38rem}}@media screen and (min-width:76.25em){.mdx-hero__image{transform:translateX(8rem)}}.mdx-hero .md-button{color:var(--md-primary-bg-color);margin-right:.5rem;margin-top:.5rem}.mdx-hero .md-button:focus,.mdx-hero .md-button:hover{background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.mdx-hero .md-button--primary{background-color:var(--md-primary-bg-color);border-color:var(--md-primary-bg-color);color:#894da8}.md-typeset .mdx-iconsearch{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z1);position:relative;transition:box-shadow 125ms}.md-typeset .mdx-iconsearch:focus-within,.md-typeset .mdx-iconsearch:hover{box-shadow:var(--md-shadow-z2)}.md-typeset .mdx-iconsearch .md-input{background:var(--md-default-bg-color);box-shadow:none}[data-md-color-scheme=slate] .md-typeset .mdx-iconsearch .md-input{background:var(--md-code-bg-color)}.md-typeset .mdx-iconsearch-result{-webkit-backface-visibility:hidden;backface-visibility:hidden;max-height:50vh;overflow-y:auto;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin;touch-action:pan-y}.md-tooltip .md-typeset .mdx-iconsearch-result{max-height:10.25rem}.md-typeset .mdx-iconsearch-result::-webkit-scrollbar{height:.2rem;width:.2rem}.md-typeset .mdx-iconsearch-result::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset .mdx-iconsearch-result::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-typeset .mdx-iconsearch-result__meta{color:var(--md-default-fg-color--lighter);font-size:.64rem;position:absolute;right:.6rem;top:.4rem}[dir=ltr] .md-typeset .mdx-iconsearch-result__list{margin-left:0}[dir=rtl] .md-typeset .mdx-iconsearch-result__list{margin-right:0}.md-typeset .mdx-iconsearch-result__list{list-style:none;margin:0;padding:0}[dir=ltr] .md-typeset .mdx-iconsearch-result__item{margin-left:0}[dir=rtl] .md-typeset .mdx-iconsearch-result__item{margin-right:0}.md-typeset .mdx-iconsearch-result__item{border-bottom:.05rem solid var(--md-default-fg-color--lightest);margin:0;padding:.2rem .6rem}.md-typeset .mdx-iconsearch-result__item:last-child{border-bottom:none}.md-typeset .mdx-iconsearch-result__item>*{margin-right:.6rem}.md-typeset .mdx-iconsearch-result__item img{height:.9rem;width:.9rem}[data-md-color-scheme=slate] .md-typeset .mdx-iconsearch-result__item img[src*=squidfunk]{filter:invert(1)}.md-typeset .mdx-premium p{margin:2em 0;text-align:center}.md-typeset .mdx-premium img{height:3.25rem}.md-typeset .mdx-premium p:last-child{display:flex;flex-wrap:wrap;justify-content:center}.md-typeset .mdx-premium p:last-child>a{display:block;flex-shrink:0}.md-typeset .mdx-sponsorship__list{margin:2em 0}.md-typeset .mdx-sponsorship__list:after{clear:both;content:"";display:block}[dir=ltr] .md-typeset .mdx-sponsorship__item{float:left}[dir=rtl] .md-typeset .mdx-sponsorship__item{float:right}.md-typeset .mdx-sponsorship__item{border-radius:100%;display:block;height:1.6rem;margin:.2rem;overflow:hidden;transform:scale(1);transition:color 125ms,transform 125ms;width:1.6rem}.md-typeset .mdx-sponsorship__item:focus,.md-typeset .mdx-sponsorship__item:hover{transform:scale(1.1)}.md-typeset .mdx-sponsorship__item:focus img,.md-typeset .mdx-sponsorship__item:hover img{filter:grayscale(0)}.md-typeset .mdx-sponsorship__item--private{background:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--lighter);font-size:.6rem;font-weight:700;line-height:1.6rem;text-align:center}.md-typeset .mdx-sponsorship__item img{display:block;filter:grayscale(100%) opacity(75%);height:auto;transition:filter 125ms;width:100%}.md-typeset .mdx-sponsorship-button{font-weight:400}.md-typeset .mdx-sponsorship-count,.md-typeset .mdx-sponsorship-total{font-weight:700}
\ No newline at end of file
diff --git a/material/.overrides/assets/stylesheets/custom.bea7efe8.min.css.map b/material/.overrides/assets/stylesheets/custom.bea7efe8.min.css.map
deleted file mode 100644
index adbaf8bb1..000000000
--- a/material/.overrides/assets/stylesheets/custom.bea7efe8.min.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["src/.overrides/assets/stylesheets/custom/_typeset.scss","../../../../src/.overrides/assets/stylesheets/custom.scss","src/assets/stylesheets/utilities/_break.scss","src/.overrides/assets/stylesheets/custom/layout/_banner.scss","src/.overrides/assets/stylesheets/custom/layout/_hero.scss","src/.overrides/assets/stylesheets/custom/layout/_iconsearch.scss","src/.overrides/assets/stylesheets/custom/layout/_sponsorship.scss"],"names":[],"mappings":"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","file":"custom.css"}
\ No newline at end of file
diff --git a/material/.overrides/assets/stylesheets/custom.f7ec4df2.min.css b/material/.overrides/assets/stylesheets/custom.f7ec4df2.min.css
new file mode 100644
index 000000000..31f774a7a
--- /dev/null
+++ b/material/.overrides/assets/stylesheets/custom.f7ec4df2.min.css
@@ -0,0 +1 @@
+@keyframes heart{0%,40%,80%,to{transform:scale(1)}20%,60%{transform:scale(1.15)}}.md-typeset .twitter{color:#00acee}.md-typeset .mastodon{color:#897ff8}.md-typeset .mdx-video{width:auto}.md-typeset .mdx-video__inner{height:0;padding-bottom:56.138%;position:relative;width:100%}.md-typeset .mdx-video iframe{border:none;height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%}.md-typeset .mdx-heart{animation:heart 1s infinite}.md-typeset .mdx-insiders{color:#e91e63}.md-typeset .mdx-switch button{cursor:pointer;transition:opacity .25s}.md-typeset .mdx-switch button:focus,.md-typeset .mdx-switch button:hover{opacity:.75}.md-typeset .mdx-switch button>code{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);display:block}.md-typeset .mdx-deprecated{opacity:.5;transition:opacity .25s}.md-typeset .mdx-deprecated:focus-within,.md-typeset .mdx-deprecated:hover{opacity:1}.md-typeset .mdx-columns ol,.md-typeset .mdx-columns ul{-moz-columns:2;column-count:2}@media screen and (max-width:29.9375em){.md-typeset .mdx-columns ol,.md-typeset .mdx-columns ul{-moz-columns:initial;columns:initial}}.md-typeset .mdx-columns li{-moz-column-break-inside:avoid;break-inside:avoid}.md-typeset .mdx-flags{margin:2em auto}.md-typeset .mdx-flags ol{list-style:none}.md-typeset .mdx-flags ol li{margin-bottom:1em}.md-typeset .mdx-flags__item{display:flex;gap:.6rem}.md-typeset .mdx-flags__content{display:flex;flex:1;flex-direction:column}.md-typeset .mdx-flags__content span{align-items:baseline;display:inline-flex;justify-content:space-between}.md-typeset .mdx-flags__content>span:nth-child(2){font-size:80%}.md-typeset .mdx-flags__content code{float:right}.md-typeset .mdx-author{display:flex;font-size:.68rem}.md-typeset .mdx-author img{border-radius:100%;height:2rem}.md-typeset .mdx-author p:first-child{flex-shrink:0;margin-right:.8rem}.md-typeset .mdx-author p>span{display:block}.md-typeset .mdx-social{height:min(27rem,80vw);position:relative}.md-typeset .mdx-social:hover .mdx-social__image{background-color:#e4e4e40d}.md-typeset .mdx-social__layer{margin-top:4rem;position:absolute;transform-style:preserve-3d;transition:.25s cubic-bezier(.7,0,.3,1)}.md-typeset .mdx-social__layer:hover .mdx-social__label{opacity:1}.md-typeset .mdx-social__layer:hover .mdx-social__image{background-color:#7f7f7ffc}.md-typeset .mdx-social__layer:hover~.mdx-social__layer{opacity:0}.md-typeset .mdx-social__image{box-shadow:-.25rem .25rem .5rem #0000000d;transform:rotate(-40deg) skew(15deg,15deg) scale(.7);transition:all .25s}.md-typeset .mdx-social__image img{display:block}.md-typeset .mdx-social__label{background-color:var(--md-default-fg-color--light);color:var(--md-default-bg-color);display:block;opacity:0;padding:.2rem .4rem;position:absolute;transition:all .25s}.md-typeset .mdx-social:hover .mdx-social__layer:nth-child(6){transform:translateY(-30px)}.md-typeset .mdx-social:hover .mdx-social__layer:nth-child(5){transform:translateY(-20px)}.md-typeset .mdx-social:hover .mdx-social__layer:nth-child(4){transform:translateY(-10px)}.md-typeset .mdx-social:hover .mdx-social__layer:nth-child(3){transform:translateY(0)}.md-typeset .mdx-social:hover .mdx-social__layer:nth-child(2){transform:translateY(10px)}.md-typeset .mdx-social:hover .mdx-social__layer:first-child{transform:translateY(20px)}.md-typeset .mdx-social:hover .mdx-social__layer:nth-child(0){transform:translateY(30px)}.md-banner{color:var(--md-footer-fg-color--lighter)}.md-banner strong{white-space:nowrap}.md-banner a,.md-banner strong{color:var(--md-footer-fg-color)}.md-banner a:focus,.md-banner a:hover{color:currentcolor}.md-banner a:focus .twemoji,.md-banner a:hover .twemoji{background-color:var(--md-footer-fg-color);box-shadow:none}.md-banner .twemoji{border-radius:100%;box-shadow:inset 0 0 0 .05rem currentcolor;display:inline-block;height:1.2rem;padding:.25rem;transition:all .25s;vertical-align:bottom;width:1.2rem}.md-banner .twemoji svg{display:block;max-height:none}.mdx-container{background:url("data:image/svg+xml;utf8,") no-repeat bottom,linear-gradient(to bottom,var(--md-primary-fg-color),#a63fd9 99%,var(--md-default-bg-color) 99%);padding-top:1rem}[data-md-color-scheme=slate] .mdx-container{background:url("data:image/svg+xml;utf8,") no-repeat bottom,linear-gradient(to bottom,var(--md-primary-fg-color),#a63fd9 99%,var(--md-default-bg-color) 99%)}.mdx-hero{color:var(--md-primary-bg-color);margin:0 .8rem}.mdx-hero h1{color:currentcolor;font-weight:700;margin-bottom:1rem}@media screen and (max-width:29.9375em){.mdx-hero h1{font-size:1.4rem}}.mdx-hero__content{padding-bottom:6rem}@media screen and (min-width:60em){.mdx-hero{align-items:stretch;display:flex}.mdx-hero__content{margin-top:3.5rem;max-width:19rem;padding-bottom:14vw}.mdx-hero__image{order:1;transform:translateX(4rem);width:38rem}}@media screen and (min-width:76.25em){.mdx-hero__image{transform:translateX(8rem)}}.mdx-hero .md-button{color:var(--md-primary-bg-color);margin-right:.5rem;margin-top:.5rem}.mdx-hero .md-button:focus,.mdx-hero .md-button:hover{background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.mdx-hero .md-button--primary{background-color:var(--md-primary-bg-color);border-color:var(--md-primary-bg-color);color:#894da8}.md-typeset .mdx-iconsearch{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z1);position:relative;transition:box-shadow 125ms}.md-typeset .mdx-iconsearch:focus-within,.md-typeset .mdx-iconsearch:hover{box-shadow:var(--md-shadow-z2)}.md-typeset .mdx-iconsearch .md-input{background:var(--md-default-bg-color);box-shadow:none}[data-md-color-scheme=slate] .md-typeset .mdx-iconsearch .md-input{background:var(--md-code-bg-color)}.md-typeset .mdx-iconsearch-result{-webkit-backface-visibility:hidden;backface-visibility:hidden;max-height:50vh;overflow-y:auto;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin;touch-action:pan-y}.md-tooltip .md-typeset .mdx-iconsearch-result{max-height:10.25rem}.md-typeset .mdx-iconsearch-result::-webkit-scrollbar{height:.2rem;width:.2rem}.md-typeset .mdx-iconsearch-result::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset .mdx-iconsearch-result::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-typeset .mdx-iconsearch-result__meta{color:var(--md-default-fg-color--lighter);font-size:.64rem;position:absolute;right:.6rem;top:.4rem}[dir=ltr] .md-typeset .mdx-iconsearch-result__list{margin-left:0}[dir=rtl] .md-typeset .mdx-iconsearch-result__list{margin-right:0}.md-typeset .mdx-iconsearch-result__list{list-style:none;margin:0;padding:0}[dir=ltr] .md-typeset .mdx-iconsearch-result__item{margin-left:0}[dir=rtl] .md-typeset .mdx-iconsearch-result__item{margin-right:0}.md-typeset .mdx-iconsearch-result__item{border-bottom:.05rem solid var(--md-default-fg-color--lightest);margin:0;padding:.2rem .6rem}.md-typeset .mdx-iconsearch-result__item:last-child{border-bottom:none}.md-typeset .mdx-iconsearch-result__item>*{margin-right:.6rem}.md-typeset .mdx-iconsearch-result__item img{height:.9rem;width:.9rem}[data-md-color-scheme=slate] .md-typeset .mdx-iconsearch-result__item img[src*=squidfunk]{filter:invert(1)}.md-typeset .mdx-premium p{margin:2em 0;text-align:center}.md-typeset .mdx-premium img{height:3.25rem}.md-typeset .mdx-premium p:last-child{display:flex;flex-wrap:wrap;justify-content:center}.md-typeset .mdx-premium p:last-child>a{display:block;flex-shrink:0}.md-typeset .mdx-sponsorship__list{margin:2em 0}.md-typeset .mdx-sponsorship__list:after{clear:both;content:"";display:block}[dir=ltr] .md-typeset .mdx-sponsorship__item{float:left}[dir=rtl] .md-typeset .mdx-sponsorship__item{float:right}.md-typeset .mdx-sponsorship__item{border-radius:100%;display:block;height:1.6rem;margin:.2rem;overflow:hidden;transform:scale(1);transition:color 125ms,transform 125ms;width:1.6rem}.md-typeset .mdx-sponsorship__item:focus,.md-typeset .mdx-sponsorship__item:hover{transform:scale(1.1)}.md-typeset .mdx-sponsorship__item:focus img,.md-typeset .mdx-sponsorship__item:hover img{filter:grayscale(0)}.md-typeset .mdx-sponsorship__item--private{background:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--lighter);font-size:.6rem;font-weight:700;line-height:1.6rem;text-align:center}.md-typeset .mdx-sponsorship__item img{display:block;filter:grayscale(100%) opacity(75%);height:auto;transition:filter 125ms;width:100%}.md-typeset .mdx-sponsorship-button{font-weight:400}.md-typeset .mdx-sponsorship-count,.md-typeset .mdx-sponsorship-total{font-weight:700}
\ No newline at end of file
diff --git a/material/.overrides/assets/stylesheets/custom.f7ec4df2.min.css.map b/material/.overrides/assets/stylesheets/custom.f7ec4df2.min.css.map
new file mode 100644
index 000000000..99e7387bd
--- /dev/null
+++ b/material/.overrides/assets/stylesheets/custom.f7ec4df2.min.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["src/.overrides/assets/stylesheets/custom/_typeset.scss","../../../../src/.overrides/assets/stylesheets/custom.scss","src/assets/stylesheets/utilities/_break.scss","src/.overrides/assets/stylesheets/custom/layout/_banner.scss","src/.overrides/assets/stylesheets/custom/layout/_hero.scss","src/.overrides/assets/stylesheets/custom/layout/_iconsearch.scss","src/.overrides/assets/stylesheets/custom/layout/_sponsorship.scss"],"names":[],"mappings":"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","file":"custom.css"}
\ No newline at end of file
diff --git a/material/.overrides/main.html b/material/.overrides/main.html
index 57de96a7a..40ef8131f 100644
--- a/material/.overrides/main.html
+++ b/material/.overrides/main.html
@@ -3,7 +3,7 @@
-#}
{% extends "base.html" %}
{% block extrahead %}
-
+
{% endblock %}
{% block announce %}
For updates follow @squidfunk on
diff --git a/mkdocs.yml b/mkdocs.yml
index 25f00ac59..440c64bae 100755
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -24,7 +24,7 @@ site_url: https://squidfunk.github.io/mkdocs-material/
site_author: Martin Donath
site_description: >-
Write your documentation in Markdown and create a professional static site in
- minutes – searchable, customizable, for all devices
+ minutes – searchable, customizable, in 60+ languages, for all devices
# Repository
repo_name: squidfunk/mkdocs-material
diff --git a/src/.overrides/assets/stylesheets/custom/_typeset.scss b/src/.overrides/assets/stylesheets/custom/_typeset.scss
index 70e8b752e..d9e3fba4f 100644
--- a/src/.overrides/assets/stylesheets/custom/_typeset.scss
+++ b/src/.overrides/assets/stylesheets/custom/_typeset.scss
@@ -211,4 +211,74 @@
}
}
}
+
+ // Social card
+ .mdx-social {
+ position: relative;
+ height: min(#{px2rem(540px)}, 80vw);
+
+ // Social card image on hover
+ &:hover .mdx-social__image {
+ background-color: rgba(228, 228, 228, 0.05);
+ }
+
+ // Social card layer
+ &__layer {
+ position: absolute;
+ margin-top: px2rem(80px);
+ transition: 250ms cubic-bezier(0.7, 0, 0.3, 1);
+ transform-style: preserve-3d;
+
+ // Social card layer on hover
+ &:hover {
+
+ // Social card label
+ .mdx-social__label {
+ opacity: 1;
+ }
+
+ // Social card image
+ .mdx-social__image {
+ background-color: rgba(127, 127, 127, 0.99);
+ }
+
+ // Hide top layers
+ ~ .mdx-social__layer {
+ opacity: 0;
+ }
+ }
+ }
+
+ // Social card image
+ &__image {
+ box-shadow:
+ px2rem(-5px) px2rem(5px) px2rem(10px)
+ rgba(0, 0, 0, 0.05);
+ transition: all 250ms;
+ transform: rotate(-40deg) skew(15deg, 15deg) scale(0.7);
+
+ // Actual image
+ img {
+ display: block;
+ }
+ }
+
+ // Social card label
+ &__label {
+ position: absolute;
+ display: block;
+ padding: px2rem(4px) px2rem(8px);
+ color: var(--md-default-bg-color);
+ background-color: var(--md-default-fg-color--light);
+ opacity: 0;
+ transition: all 250ms;
+ }
+
+ // Transform on hover
+ @for $i from 6 through 0 {
+ &:hover .mdx-social__layer:nth-child(#{$i}) {
+ transform: translateY(#{($i - 3) * -10}px);
+ }
+ }
+ }
}