# Parallax
`parallax` tilts the block body in **3D toward the pointer** for an interactive parallax
effect — hover (or, on touch, drag) over it and it leans. Tune the motion with `maxRotation`,
`perspective`, `hoverScale`, and `transitionDuration`, and layer on `lightEffect`,
`glareEffect`, and `shadowEffect` for shine and depth.
A **Community Component** — wraps [Parallax](https://gfazioli.github.io/mantine-parallax/) by
**gfazioli**, **MIT** licensed, npm `@gfazioli/mantine-parallax`.
Use it as `{% parallax %}…{% endParallax %}` in Markdown, or call it from
Python logic (loops, snippets) via `component('aardvark', 'parallax', …)`.
## Demonstrations
The block body is the content to tilt. Give it a width and height (`w` / `h`) and hover over
it to see the effect.
This card tilts in 3D toward your pointer.
```aardvark
{% parallax w=320 h=180 %}
{% card title='Hover me' withBorder=true %}This card tilts in 3D toward your pointer.{% endCard %}
{% endParallax %}
```
### Tilt amount and perspective
`maxRotation` caps how far it leans (degrees); `perspective` sets the 3D depth; `hoverScale`
zooms slightly on hover.
A stronger lean with a slight zoom on hover.
```aardvark
{% parallax w=320 h=180 maxRotation=25 perspective=600 hoverScale=1.05 %}
{% card title='Steep tilt' withBorder=true %}A stronger lean with a slight zoom on hover.{% endCard %}
{% endParallax %}
```
### Light and glare
Turn on `lightEffect` for a moving highlight and `glareEffect` for a glossy sheen that
follows the pointer.
A light highlight and a glare sweep track the pointer.
```aardvark
{% parallax w=320 h=180 lightEffect glareEffect glareMaxOpacity=0.4 %}
{% card title='Shiny' withBorder=true %}A light highlight and a glare sweep track the pointer.{% endCard %}
{% endParallax %}
```
### Spring and shadow
`springEffect` gives the tilt a bouncy spring (tuned by `springStiffness` / `springDamping`),
and `shadowEffect` adds a dynamic drop shadow.
A springy tilt with a moving shadow underneath.
```aardvark
{% parallax w=320 h=180 springEffect shadowEffect shadowColor='black' shadowBlur=24 %}
{% card title='Bouncy' withBorder=true %}A springy tilt with a moving shadow underneath.{% endCard %}
{% endParallax %}
```
## With other components
Parallax wraps any content — a [Card](/components/data-display/card/), an image, a heading.
Here it tilts a title and a line of text.
Parallax
Hover anywhere on this panel to tilt it in 3D.
```aardvark
{% parallax w=340 h=160 lightEffect %}
{% title order=3 %}Parallax{% endTitle %}
Hover anywhere on this panel to tilt it in 3D.
{% endParallax %}
```
## Attributes
Omit any attribute to take its default. Bare flags (e.g. `lightEffect`) become `=True`.
| Attribute | Valid values | Description |
| --- | --- | --- |
| `disabled` | `true` / `false` (default `false`) | Freeze the tilt. |
| `perspective` | A number | 3D perspective depth. |
| `maxRotation` | A number (degrees) | Maximum tilt angle. |
| `hoverScale` | A number (default `1`) | Scale applied on hover. |
| `threshold` | A number | Pointer-movement threshold before tilting. |
| `transitionDuration` | A number (ms, default `300`) | Tilt transition time. |
| `transitionEasing` | A CSS easing (default `ease-out`) | Tilt transition easing. |
| `touchEnabled` | `true` / `false` (default on) | Respond to touch drags. |
| `resetOnLeave` | `true` / `false` (default on) | Return to flat when the pointer leaves. |
| `invertRotation` | `true` / `false` (default `false`) | Flip the tilt direction. |
| `lightEffect` | `true` / `false` (default `false`) | Pointer-following highlight. |
| `lightColor` | A CSS color | Highlight color. |
| `lightIntensity` | A number | Highlight strength. |
| `glareEffect` | `true` / `false` (default `false`) | Glossy glare sweep. |
| `glareColor` | A CSS color | Glare color. |
| `glareMaxOpacity` | A number `0`–`1` | Maximum glare opacity. |
| `shadowEffect` | `true` / `false` (default `false`) | Dynamic drop shadow. |
| `shadowColor` | A CSS color | Shadow color. |
| `shadowBlur` | A number | Shadow blur. |
| `springEffect` | `true` / `false` (default `false`) | Bouncy spring physics. |
| `springStiffness` | A number (default `150`) | Spring stiffness. |
| `springDamping` | A number (default `12`) | Spring damping. |
| `gyroscopeEnabled` | `true` / `false` (default `false`) | Tilt by device gyroscope. |
| `keyboardEnabled` | `true` / `false` (default `false`) | Tilt by arrow keys. |
| `w`, `h` | A number (px) or Mantine size token | Width / height of the panel. |
| `attr={…}` | An object of HTML attributes | Forwards raw HTML attributes onto the rendered element. |
## CSS Selector
The parallax effect is owned by the package's stylesheet (loaded automatically). aardvark
adds one stable hook for site overrides:
| Selector | Element |
| --- | --- |
| `[data-aardvark-parallax]` | The aardvark island wrapper around the Parallax root. |
## Injecting Attributes
Pass `attr={…}` to forward raw HTML attributes (id, class, data-*, ARIA, inline style) onto
the rendered element — an escape hatch for anything not covered by a named attribute above.
Content
Source: Markdown
```aardvark
{% parallax w=320 h=180 lightEffect attr={'id': 'hero-parallax', 'data-analytics': 'tilt'} %}
{% card title='Hover me' withBorder=true %}Content{% endCard %}
{% endParallax %}
```
Source: Python
```python
component('aardvark', 'parallax', w=320, h=180, lightEffect=True,
attr={'id': 'hero-parallax', 'data-analytics': 'tilt'},
children=component('aardvark', 'card', title='Hover me', withBorder=True, children='Content'))
```