1
+ /* Center alignment */
2
+ body {
3
+ margin : 0 ;
4
+ min-height : 100vh ;
5
+ display : flex;
6
+ justify-content : center;
7
+ align-items : center;
8
+ background : # 000 ;
9
+ }
10
+
11
+ .wrapper {
12
+ display : flex;
13
+ justify-content : center;
14
+ align-items : center;
15
+ width : 100% ;
16
+ }
17
+
18
+ /* Scene Setup */
19
+ .scene {
20
+ width : 400px ;
21
+ height : 600px ;
22
+ background : linear-gradient (to bottom, # 0a1128 0% , # 1a237e 100% );
23
+ position : relative;
24
+ overflow : hidden;
25
+ }
26
+
27
+ /* Stars */
28
+ .stars {
29
+ position : absolute;
30
+ width : 100% ;
31
+ height : 100% ;
32
+ }
33
+
34
+ .stars ::before {
35
+ content : '' ;
36
+ position : absolute;
37
+ width : 2px ;
38
+ height : 2px ;
39
+ background : white;
40
+ box-shadow :
41
+ 20px 30px white,
42
+ 60px 50px white,
43
+ 100px 20px white,
44
+ 140px 70px white,
45
+ 180px 40px white,
46
+ 220px 60px white,
47
+ 260px 30px white,
48
+ 300px 50px white,
49
+ 340px 20px white,
50
+ 380px 40px white,
51
+ 40px 80px white,
52
+ 80px 100px white,
53
+ 120px 90px white,
54
+ 160px 120px white,
55
+ 200px 80px white,
56
+ 240px 100px white,
57
+ 280px 90px white,
58
+ 320px 110px white,
59
+ 360px 80px white,
60
+ 30px 150px white;
61
+ animation : twinkle 2s infinite;
62
+ }
63
+
64
+ /* Launch Platform */
65
+ .platform {
66
+ width : 200px ;
67
+ height : 20px ;
68
+ background : # 455a64 ;
69
+ position : absolute;
70
+ bottom : 50px ;
71
+ left : 50% ;
72
+ transform : translateX (-50% );
73
+ }
74
+
75
+ /* Rocket */
76
+ .rocket {
77
+ width : 40px ;
78
+ height : 120px ;
79
+ position : absolute;
80
+ bottom : 70px ;
81
+ left : 50% ;
82
+ transform : translateX (-50% );
83
+ animation : launch 4s infinite;
84
+ }
85
+
86
+ .rocket-body {
87
+ width : 40px ;
88
+ height : 80px ;
89
+ background : # f44336 ;
90
+ border-radius : 50% 50% 0 0 ;
91
+ position : relative;
92
+ }
93
+
94
+ .window {
95
+ width : 15px ;
96
+ height : 15px ;
97
+ background : # 90caf9 ;
98
+ border-radius : 50% ;
99
+ position : absolute;
100
+ top : 30px ;
101
+ left : 50% ;
102
+ transform : translateX (-50% );
103
+ }
104
+
105
+ .fins {
106
+ position : absolute;
107
+ bottom : 0 ;
108
+ }
109
+
110
+ .fin {
111
+ width : 20px ;
112
+ height : 30px ;
113
+ background : # d32f2f ;
114
+ position : absolute;
115
+ bottom : 0 ;
116
+ }
117
+
118
+ .fin .left {
119
+ left : -20px ;
120
+ transform : skewY (45deg );
121
+ }
122
+
123
+ .fin .right {
124
+ right : -20px ;
125
+ transform : skewY (-45deg );
126
+ }
127
+
128
+ /* Flame */
129
+ .flame {
130
+ width : 30px ;
131
+ height : 60px ;
132
+ background : linear-gradient (to bottom, # f57f17, # ffeb3b );
133
+ position : absolute;
134
+ bottom : -60px ;
135
+ left : 50% ;
136
+ transform : translateX (-50% );
137
+ border-radius : 0 0 20px 20px ;
138
+ animation : flicker 0.2s infinite;
139
+ }
140
+
141
+ /* Smoke */
142
+ .smoke {
143
+ position : absolute;
144
+ bottom : 0 ;
145
+ left : 50% ;
146
+ transform : translateX (-50% );
147
+ }
148
+
149
+ .smoke span {
150
+ width : 20px ;
151
+ height : 20px ;
152
+ background : rgba (255 , 255 , 255 , 0.3 );
153
+ border-radius : 50% ;
154
+ position : absolute;
155
+ animation : smoke 2s infinite;
156
+ }
157
+
158
+ .smoke span : nth-child (1 ) { animation-delay : 0.2s ; }
159
+ .smoke span : nth-child (2 ) { animation-delay : 0.4s ; }
160
+ .smoke span : nth-child (3 ) { animation-delay : 0.6s ; }
161
+
162
+ /* Animations */
163
+ @keyframes launch {
164
+ 0% {
165
+ transform : translateX (-50% ) translateY (0 );
166
+ }
167
+ 10% {
168
+ transform : translateX (-50% ) translateY (-5px );
169
+ }
170
+ 30% {
171
+ transform : translateX (-50% ) translateY (-100px );
172
+ }
173
+ 100% {
174
+ transform : translateX (-50% ) translateY (-600px );
175
+ }
176
+ }
177
+
178
+ @keyframes flicker {
179
+ 0% , 100% {
180
+ transform : translateX (-50% ) scaleY (1 );
181
+ }
182
+ 50% {
183
+ transform : translateX (-50% ) scaleY (1.1 );
184
+ }
185
+ }
186
+
187
+ @keyframes smoke {
188
+ 0% {
189
+ transform : translateY (0 ) scale (1 );
190
+ opacity : 0.5 ;
191
+ }
192
+ 100% {
193
+ transform : translateY (-100px ) scale (3 );
194
+ opacity : 0 ;
195
+ }
196
+ }
197
+
198
+ @keyframes twinkle {
199
+ 0% , 100% {
200
+ opacity : 0.3 ;
201
+ }
202
+ 50% {
203
+ opacity : 1 ;
204
+ }
205
+ }
206
+
207
+ /* Responsive Design */
208
+ @media (max-width : 500px ) {
209
+ .scene {
210
+ width : 300px ;
211
+ height : 450px ;
212
+ }
213
+ }
0 commit comments