
The dinosaur-bitten logo
Intro, SVG, Text
NewFree
A minimal logo intro: three thin circles roll in along a line, come to rest rocking like wheels, the middle one rises on a spring and the three become a Venn diagram; the area they share fills with colour, the initial drops into it and the circles retract into the edge of that shape, which stays as a monogram beside the name. In the Playground you type your own name, choose the letter, how much the circles overlap, 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 three-circle logo</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/instrument-sans@5.3.0/wdth.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="scena">
<!-- the stage: the script measures it, rolls three thin circles into a Venn diagram and fills what they share -->
<svg class="palco" data-stage role="img" aria-label="trevo" xmlns="http://www.w3.org/2000/svg">
<defs>
<clipPath id="shared-area"><path data-shared /></clipPath>
<clipPath id="name-box"><rect data-name-box /></clipPath>
</defs>
<g data-mark>
<!-- the floor the circles roll on -->
<line class="suolo" data-floor />
<!-- what the three circles share: a disc of colour that grows inside it, and the initial cut out of it -->
<g clip-path="url(#shared-area)">
<circle class="comune" data-fill r="0" />
<text class="iniziale" data-initial></text>
</g>
<!-- the three circles, each with a small tick on its rim that shows it turning -->
<g data-circles></g>
</g>
<!-- the name, one letter at a time, or the picture -->
<g data-name></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.
14 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 three-circle logo” from Animorio and fit it into my siteThe centres sit on the corners of an equilateral triangle, two below and one above, at a distance measured in radii (OVERLAP). Two circles cross on a line that runs through the centre of the third: the inner point lies at the midpoint between the two centres plus the square root of (1 minus a quarter of the distance squared), towards the centre of the three. The shared area is made of three arcs, one per circle, between its two crossing points; it is drawn as a path of over 200 points sorted by angle around the centre, and becomes a clipPath. With OVERLAP at 1 each circle runs through the centres of the other two and the area is a Reuleaux triangle, as wide as it is tall.
Each circle is a group moved with translate; inside it a second group carries the tick and turns with rotate. The angle is not animated: it comes from the distance travelled, (x minus the place it stops) divided by the radius, in radians, so the wheel never slides and at rest the tick stands straight up. The x arrives a few pixels past with power3.out and comes back with elastic.out(1, 0.38): it is the rocking of a wheel coming to rest, and the tick rocks with it.
The path of each circle starts opposite the arc it gives to the shared area. stroke-dasharray shows a stretch of length v, and stroke-dashoffset centres it on the middle of the path, which is that arc: as v goes down from the circumference to the length of the arc, the circle shortens from both ends at once and settles on the edge of the coloured shape. When v is the whole circle the dashes are removed, because a seam would show where the stroke meets its own start.
The colour is a solid circle growing from the centre inside the clipPath of the shared area, so it takes its exact shape. The initial is a text in the colour of the ground, clipped by the same clipPath: its ink box, measured on a canvas, must fit the biggest circle inside the area (radius 1 minus the distance between centres divided by the square root of 3). It comes in at width 75 and weight 400 and reaches 100 and 700 with font-variation-settings, rising from below with back.out.
The whole drawing is in a group with translate, scale and translate: a camera that looks at the big diagram in the middle and then moves to the final logo with power3.inOut. The line thickness is divided by the scale, so the lines stay one and a half pixels. The name is set in Instrument Sans, a variable typeface with width and weight: each letter is a text measured on a canvas and comes in narrow and light. The whole intro is one timeline with the labels start, roll, rise, fill, reveal, name, rest and leave. If IMAGE holds an address, the picture takes the place of the name and is uncovered by a widening clip; in the Playground there is a button to upload a file.
| Name | File | Default | What it changes |
|---|---|---|---|
NAME | script.js | 'trevo' | The brand name, written beside the monogram. Its first letter is also the initial in the monogram, if MONOGRAM is empty. |
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 name beside the monogram. |
MONOGRAM | script.js | '' | The letter cut out of the shared area. Empty means the first letter of the name; any letter works. |
OVERLAP | script.js | 1 | How far apart the centres of the circles are, in radii: 1 means each circle runs through the centres of the other two; below 1 they overlap more and the shared area is bigger and rounder, above 1 it is smaller and sharper. |
SETTLE | script.js | 6 | How many pixels a circle rolls past its place before it rocks back (0 = it stops dead). |
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 it starts again. |
LOOP | script.js | true | Whether the colour drains away and the circles roll in again. With false the logo stays, and now and then a wave of weight runs through the name. |
To present a brand born from a meeting: a studio with three partners, an agency, a consultancy, a service that brings three things together, a design brand, a portfolio, a loading screen, a preview for a client, a social post. The Venn diagram speaks of what is shared; it suits pages where everything else is quiet. It works with a written name and with a picture.
The same animation with the sizes adapted: the diagram takes nearly the whole width of the screen and the final logo shrinks to fit, with the lines always one and a half pixels. A tap restarts it.
Nothing rolls and nothing moves: the diagram fades in already made, the shared area fades into colour with the initial, then everything fades and the logo appears already in place beside the name. If the animation starts again, the logo leaves with a fade too.
GSAP 3.15.0, Instrument Sans (font variabile) 5.3.0.
Compressed with gzip, the three demo files weigh 9.0 KB; the libraries: GSAP 28 KB.
Tested on 15 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.