← back to Exploring Bourboncompare with ground truth →
model output
Gemini 3 Flash Preview
Exploring Bourbon
A 0.75T 0.33
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>