← back to Spinners using Font Iconscompare with ground truth →
model output
Gemini 3 Flash Preview
Spinners using Font Icons
A 0.81T 0.15
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>Loading Spinner Animation</title>
7 <style>
8 /*
9 Analysis of the animation:
10 - Background: Dark charcoal (#1a1a1a)
11 - Elements: 8 circular white dots arranged in a ring
12 - Sizes: Dots have decreasing diameters to create a "trailing" tail effect
13 - Motion: The entire ring rotates counter-clockwise
14 - Timing: A full rotation takes exactly 2 seconds (based on timestamps 0.0s to 2.0s)
15 - Easing: Linear rotation
16 */
17
18 :root {
19 --bg-color: #1a1a1a;
20 --dot-color: #ffffff;
21 --spinner-size: 50px;
22 --rotation-duration: 2s;
23 }
24
25 * {
26 box-sizing: border-box;
27 }
28
29 body {
30 margin: 0;
31 padding: 0;
32 display: flex;
33 justify-content: center;
34 align-items: center;
35 height: 100vh;
36 background-color: var(--bg-color);
37 overflow: hidden;
38 }
39
40 /* Container for the spinner, positioned near the top-center as seen in the video */
41 .container {
42 position: relative;
43 width: var(--spinner-size);
44 height: var(--spinner-size);
45 margin-bottom: 30vh; /* Adjusting to match the high vertical alignment in the video */
46 }
47
48 .loader {
49 position: relative;
50 width: 100%;
51 height: 100%;
52 /* The video shows a counter-clockwise rotation */
53 animation: spin var(--rotation-duration) linear infinite;
54 }
55
56 .dot {
57 position: absolute;
58 background-color: var(--dot-color);
59 border-radius: 50%;
60 top: 50%;
61 left: 50%;
62 /* Center dots initially so they rotate around the middle */
63 transform-origin: center;
64 }
65
66 /*
67 Placing 8 dots around the circle.
68 The first dot is the largest.
69 The following dots are placed 45 degrees apart and decrease in size/opacity.
70 */
71 .dot:nth-child(1) {
72 width: 10px; height: 10px;
73 transform: translate(-50%, -50%) rotate(0deg) translateY(-22px);
74 }
75 .dot:nth-child(2) {
76 width: 8.5px; height: 8.5px; opacity: 0.9;
77 transform: translate(-50%, -50%) rotate(45deg) translateY(-22px);
78 }
79 .dot:nth-child(3) {
80 width: 7.2px; height: 7.2px; opacity: 0.8;
81 transform: translate(-50%, -50%) rotate(90deg) translateY(-22px);
82 }
83 .dot:nth-child(4) {
84 width: 6px; height: 6px; opacity: 0.7;
85 transform: translate(-50%, -50%) rotate(135deg) translateY(-22px);
86 }
87 .dot:nth-child(5) {
88 width: 5px; height: 5px; opacity: 0.6;
89 transform: translate(-50%, -50%) rotate(180deg) translateY(-22px);
90 }
91 .dot:nth-child(6) {
92 width: 4.2px; height: 4.2px; opacity: 0.5;
93 transform: translate(-50%, -50%) rotate(225deg) translateY(-22px);
94 }
95 .dot:nth-child(7) {
96 width: 3.5px; height: 3.5px; opacity: 0.4;
97 transform: translate(-50%, -50%) rotate(270deg) translateY(-22px);
98 }
99 .dot:nth-child(8) {
100 width: 3px; height: 3px; opacity: 0.3;
101 transform: translate(-50%, -50%) rotate(315deg) translateY(-22px);
102 }
103
104 @keyframes spin {
105 from {
106 transform: rotate(0deg);
107 }
108 to {
109 /* Rotating negative degrees for counter-clockwise movement */
110 transform: rotate(-360deg);
111 }
112 }
113 </style>
114</head>
115<body>
116
117 <div class="container">
118 <div class="loader">
119 <div class="dot"></div>
120 <div class="dot"></div>
121 <div class="dot"></div>
122 <div class="dot"></div>
123 <div class="dot"></div>
124 <div class="dot"></div>
125 <div class="dot"></div>
126 <div class="dot"></div>
127 </div>
128 </div>
129
130</body>
131</html>