
The wrecking-ball logo
Intro, Physics, SVG, Text
NewFree
A logo intro that arrives as a present: the gift drops and bounces, the bow comes undone and the ribbon flies off with real physics, the paper tears along a zigzag and swings open, the lid pops off spinning and the logo springs out on a concertina among strips of tissue paper. In the Playground you type your own name or upload your own logo.
A folder that runs on its own: index.html, style.css, script.js and the libraries from a CDN. The React and Vue tabs hold the same demo as a ready component, which switches its animations off when it leaves the page.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>The gift-box logo</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/baloo-2@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="scena">
<!-- the stage: the script measures it, wraps the gift, drops it, unties it and lets the logo spring out -->
<svg class="palco" data-stage role="img" aria-label="Boxbloom" xmlns="http://www.w3.org/2000/svg">
<defs>
<!-- the room: lighter in the middle -->
<radialGradient id="room" cx="0.5" cy="0.42" r="0.75">
<stop offset="0" class="stanza-luce" />
<stop offset="1" class="stanza" />
</radialGradient>
<!-- the wrapping paper: wide stripes and a thin pale line, at a slant -->
<pattern id="wrap" patternUnits="userSpaceOnUse" width="40" height="40" patternTransform="rotate(35)" data-wrap>
<rect class="carta" width="40" height="40" data-wrap-base />
<rect class="carta-riga" width="17" height="40" data-wrap-band />
<rect class="carta-filo" x="26" width="3" height="40" data-wrap-line />
</pattern>
<!-- the soft shadow on the floor -->
<radialGradient id="shade">
<stop offset="0" class="ombra" stop-opacity="0.32" />
<stop offset="1" class="ombra" stop-opacity="0" />
</radialGradient>
<!-- each half of the paper only shows its own side of the tear -->
<clipPath id="clip-left" clipPathUnits="userSpaceOnUse"><path data-clip-left /></clipPath>
<clipPath id="clip-right" clipPathUnits="userSpaceOnUse"><path data-clip-right /></clipPath>
</defs>
<rect fill="url(#room)" data-room />
<rect class="pavimento" data-floor />
<ellipse fill="url(#shade)" data-shadow />
<!-- things lying on the floor behind the box -->
<g data-back></g>
<!-- the gift: the box, the logo inside it, the lid, the paper -->
<g data-gift>
<g data-inside></g>
<g data-pop>
<g data-spring></g>
<g data-logo-holder><g data-logo></g></g>
</g>
<g data-body></g>
<g data-lid></g>
</g>
<!-- the wrapping paper: two halves that tear apart, swing open and fall flat on the floor -->
<g data-paper></g>
<!-- the ribbon and its bow, then the tissue paper over everything -->
<g data-ribbon></g>
<g data-fly></g>
</svg>
<p class="nota">Click or tap to see it again</p>
</main>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.15.0/dist/gsap.min.js"></script>
<script src="script.js"></script>
</body>
</html>Change values, colours and text with the controls and watch the animation respond live. Or write in the code yourself. Then download the folder with your changes.
36 values to change
With the Animorio connector, Claude Code takes it from here, guide included, and fits it into your project. Paste this request:
Take “The gift-box logo” from Animorio and fit it into my siteThe stage is an SVG whose viewBox is as big as the window, so one unit is one pixel. Everything is counted in box widths: the lid is 1.1 times as wide, the paper covers the lid and the box, the ribbon is a tenth. The letters are measured on a canvas in the same typeface (measureText, actualBoundingBoxAscent for the true height) and their size is chosen so that the logo, the spring and the box fit one above the other with some air at the top; on a tall screen the box is wider.
The ribbon is a chain of 36 points with Verlet integration: each step the points move on with their velocity, gravity pulls them down and eighteen rounds of constraints put every link back to its length (plus a soft one between a point and the one after next, because a ribbon does not fold flat on itself). The points still lying against the gift can only move up; the end is pulled by an invisible hand along an ever faster arc and then let go; the floor has friction and the box is a rectangle the points are pushed out of. The whole simulation runs in build, at 240 steps a second, and stores a frame every sixtieth: the timeline only animates the time and the drawing picks the right frame, so it can be paused, rewound and skipped.
The paper is two halves sharing a zigzag edge down the middle. Each half is a path drawn again every frame: the zigzag points move apart only above the front of the tear, which runs from top to bottom, and a pale line shows the torn paper. The stripes are a pattern cut out by a clipPath of the same shape. To open, each half gets a matrix that squeezes it around its outer edge by the cosine of the angle (with a touch of slant for perspective): when the cosine turns negative, the back shows. To fall flat, the same matrix squashes it towards the floor.
The concertina spring is ten bands, wide and narrow in turn, light and dark, between the bottom of the box and the logo's cap: when it stretches the folds open, when it squashes they close. Its height runs on elastic.out, the top's sideways shift on a series of dying swings, and the bands follow it by the square of their height, so the spring bends. The logo stands on the cap, turns with the top and stretches and squashes with a keyframe for every bounce; the letters rise one after the other from the middle.
The whole intro is one timeline, with the labels start, arrive, land, untie, ribbon, tear, open, knock, pop, happy, rest and timeScale for the speed. The tissue strips are S-shaped paths: they rise with power2.out, fall with sine.in, spin and show their edge with scaleX back and forth, and settle on the rim of the box or on the floor, squashing a little. If IMAGE holds an address, the picture pops out in place of the letters; in the Playground, next to the field, there is a button to upload a file, which goes into the code as a data: address.
| Name | File | Default | What it changes |
|---|---|---|---|
NAME | script.js | 'Boxbloom' | The logo as a word: it pops out of the box on the spring, its letters bouncing from the middle. |
IMAGE | script.js | '' | The logo as a picture: the address of a file, or upload it from your computer. If there is one, it takes the place of the word. |
BOUNCE | script.js | 1 | How springy everything is: the gift's bounces, the squash, the spring's boing and how much it sways (0 = a dead landing). |
SPRING | script.js | 1 | How tall the spring stands with the logo on top: 0.6 short, 1.5 tall (the logo gets smaller to fit). |
TISSUE | script.js | 40 | How many strips of tissue paper fly out of the box (0 = none). |
SPEED | script.js | 1 | The speed of the whole animation: 2 is twice as fast, 0.5 half as fast. |
REST | script.js | 4 | How many seconds the logo stays on show before a new gift arrives. |
LOOP | script.js | true | Whether the logo sinks back and a new gift drops. With false the logo stays out, bobbing on its spring. |
To present a logo as a surprise: the opening of a gift shop's site, a bakery, a children's brand or a party, a launch, a greetings page, a loading screen, a social post. It works with a written wordmark and with a picture.
The same animation with the sizes adapted: on a tall screen the box is wider and the logo is almost as wide as the screen; the halves of the paper open only as far as the screen allows and the ribbon bounces off the edges and settles in front of the box. A tap restarts it.
Nothing moves: the wrapped gift fades in, then fades into the open box with the logo standing on its spring and the tissue strips already lying down. If the animation starts again, everything fades away.
GSAP 3.15.0, Baloo 2 (font variabile) 5.3.0.
Compressed with gzip, the three demo files weigh 16 KB; the libraries: GSAP 28 KB.
Tested on 11 October 2026
Use it in your own projects and in your clients’ projects. Do not resell it or redistribute it as is. GSAP stays under its own Standard license. Full license.
With your account’s email and password.
or with your email
You’re signed in as .
With your account, you can download the zip of every animation and every pack, for free.