animation2code benchmark
For best compatibility, please view this dashboard in a Chrome browser.
← back to Exploring Bourbon

model output

Gemini 3 Flash Preview

Exploring Bourbon

A 0.75T 0.33
compare with ground truth →
1<!DOCTYPE html>
2<html lang="en">
3<head>
4    <meta charset="UTF-8">
5    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6    <title>Symmetrical Loading Animation</title>
7    <style>
8        /*
9        * Animation Analysis:
10        * - Background: Soft beige-pink (#e7d7d2)
11        * - Shapes: White (#ffffff)
12        * - Configuration: [Square] [Circle] [Square] in a line
13        * - Timing: A complete visual cycle every 1.0 seconds
14        * - Motion: 
15        *   - The entire group rotates 90 degrees every second.
16        *   - At the diagonal phase (0s, 1s), the shapes are closer together.
17        *   - At the vertical phase (0.5s), the shapes spread apart.
18        *   - The shapes rotate with the container, transitioning from diamonds (at 45deg) to upright squares (at 0deg).
19        */
20
21        :root {
22            --bg-color: #e7d7d2;
23            --shape-color: #ffffff;
24            --shape-size: 14px;
25            --compact-dist: 18px; /* distance from center to center */
26            --stretched-dist: 26px; /* distance from center to center */
27            --anim-duration: 1s;
28        }
29
30        body {
31            margin: 0;
32            padding: 0;
33            display: flex;
34            justify-content: center;
35            align-items: center;
36            height: 100vh;
37            background-color: var(--bg-color);
38            overflow: hidden;
39        }
40
41        .loader {
42            position: relative;
43            width: 80px;
44            height: 80px;
45            display: flex;
46            justify-content: center;
47            align-items: center;
48            /* The rotation moves the group from -45 to 45 degrees.
49               Because squares and the arrangement have 90-degree symmetry, 
50               this creates a seamless looping visual. */
51            animation: rotate var(--anim-duration) infinite ease-in-out;
52        }
53
54        .shape {
55            position: absolute;
56            width: var(--shape-size);
57            height: var(--shape-size);
58            background-color: var(--shape-color);
59        }
60
61        .square {
62            border-radius: 2px;
63        }
64
65        .circle {
66            border-radius: 50%;
67            /* The middle circle stays centered */
68        }
69
70        .square.left {
71            /* Moves away from and toward the center */
72            animation: slide-left var(--anim-duration) infinite ease-in-out;
73        }
74
75        .square.right {
76            /* Moves away from and toward the center */
77            animation: slide-right var(--anim-duration) infinite ease-in-out;
78        }
79
80        @keyframes rotate {
81            0% {
82                transform: rotate(-45deg);
83            }
84            100% {
85                transform: rotate(45deg);
86            }
87        }
88
89        @keyframes slide-left {
90            0%, 100% {
91                transform: translateX(calc(var(--compact-dist) * -1));
92            }
93            50% {
94                transform: translateX(calc(var(--stretched-dist) * -1));
95            }
96        }
97
98        @keyframes slide-right {
99            0%, 100% {
100                transform: translateX(var(--compact-dist));
101            }
102            50% {
103                transform: translateX(var(--stretched-dist));
104            }
105        }
106    </style>
107</head>
108<body>
109
110    <div class="loader">
111        <div class="shape square left"></div>
112        <div class="shape circle"></div>
113        <div class="shape square right"></div>
114    </div>
115
116</body>
117</html>