├── preview
└── n223.avif
├── assets
└── favicon.webp
├── README.md
├── license.txt
├── index.html
└── style.css
/preview/n223.avif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20essentials/project-000-223/HEAD/preview/n223.avif
--------------------------------------------------------------------------------
/assets/favicon.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20essentials/project-000-223/HEAD/assets/favicon.webp
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://20essentials.github.io/project-000-223)
2 |
3 |
8 |
--------------------------------------------------------------------------------
/license.txt:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in all
11 | copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 | SOFTWARE.
20 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Octaedro
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/style.css:
--------------------------------------------------------------------------------
1 | *,
2 | *::after,
3 | *::before {
4 | box-sizing: border-box;
5 | margin: 0;
6 | padding: 0;
7 | -webkit-tap-highlight-color: transparent;
8 | }
9 |
10 | html {
11 | scroll-behavior: smooth;
12 | scrollbar-width: thin;
13 | scrollbar-color: transparent transparent;
14 |
15 | }
16 |
17 | body {
18 | height: 100dvh;
19 | width: 100%;
20 | display: flex;
21 | flex-wrap: wrap;
22 | place-content: center;
23 | background-color: #000;
24 | transform-style: preserve-3d;
25 | perspective: 10000px;
26 | }
27 |
28 | .container {
29 | width: 120px;
30 | height: 120px;
31 | transform-style: preserve-3d;
32 | perspective: 10000px;
33 | position: relative;
34 | animation: girar 8s linear infinite alternate both;
35 |
36 | @media (width <= 1111px) {
37 | zoom: 0.6;
38 | }
39 | }
40 |
41 | .cube {
42 | width: 120px;
43 | height: 120px;
44 | position: absolute;
45 | transform-style: preserve-3d;
46 | perspective: 10000px;
47 |
48 | .side {
49 | width: 100%;
50 | height: 100%;
51 | position: absolute;
52 | background-color: #0002;
53 | background-color: #000;
54 | transform-style: preserve-3d;
55 | perspective: 10000px;
56 | overflow: hidden;
57 | top: 0;
58 | left: 0;
59 |
60 | &::before {
61 | content: '';
62 | display: block;
63 | position: absolute;
64 | inset: 0;
65 | width: 100%;
66 | height: 100%;
67 | background-image: linear-gradient(45deg, #60efff, #00ff87, #e81cff);
68 | filter: blur(50px);
69 | }
70 |
71 | &.front {
72 | transform: none;
73 | }
74 |
75 | &.behind {
76 | transform: translateZ(-120px);
77 | }
78 |
79 | &.right {
80 | transform-origin: 100% 0%;
81 | transform: rotateY(-90deg);
82 | }
83 |
84 | &.left {
85 | transform-origin: 0% 0%;
86 | transform: rotateY(90deg);
87 | }
88 |
89 | &.top {
90 | transform-origin: 50% 0%;
91 | transform: rotateX(-90deg);
92 | }
93 | &.bottom {
94 | transform-origin: 50% 100%;
95 | transform: rotateX(90deg);
96 | }
97 | }
98 | }
99 |
100 | .triangle {
101 | width: 120px;
102 | height: 120px;
103 | position: absolute;
104 | bottom: 118px;
105 | transform-style: preserve-3d;
106 | perspective: 10000px;
107 |
108 | .side {
109 | transform-style: preserve-3d;
110 | perspective: 10000px;
111 | }
112 |
113 | &.triangle-top {
114 | bottom: -118px;
115 | transform: scale3d(-1, -1, -1) translateZ(118px);
116 | }
117 |
118 | &.triangle-right {
119 | left: 118px;
120 | bottom: 0;
121 | transform: rotate(-90deg) scale(-1);
122 | }
123 |
124 | &.triangle-left {
125 | left: -118px;
126 | bottom: 0;
127 | transform: rotate(-90deg) scaleX(-1);
128 | }
129 |
130 | &.triangle-frontend {
131 | bottom: -1px;
132 | transform: rotate(90deg) rotateX(-90deg) translate(0px, -60px)
133 | translateZ(-116px);
134 | left: -175px;
135 | }
136 |
137 | &.triangle-backend {
138 | bottom: -36px;
139 | transform: rotate(90deg) rotateX(-90deg) scaleY(-1) translate(-36px, -178px)
140 | translateZ(253px);
141 | left: 194px;
142 | }
143 |
144 | .side {
145 | width: 100%;
146 | height: 100%;
147 | clip-path: polygon(50% 0, 100% 100%, 0 100%);
148 | position: absolute;
149 |
150 | &.front,
151 | &.behind {
152 | transform-origin: 50% 100%;
153 | }
154 |
155 | &.front {
156 | background-color: #fff8;
157 | transform: rotateX(30deg);
158 | }
159 |
160 | &.behind {
161 | background-color: #00f8;
162 | transform: translateZ(-120px) rotateX(-30deg);
163 | }
164 |
165 | &.right {
166 | transform-origin: 100% 100%;
167 | transform: rotateY(-90deg) rotateX(-30deg);
168 | background-color: #f0f8;
169 | }
170 | &.left {
171 | transform-origin: 0% 100%;
172 | transform: rotateY(90deg) rotateX(-30deg);
173 | background-color: #0f08;
174 | }
175 | }
176 | }
177 |
178 | @keyframes girar {
179 | 0% {
180 | transform: rotateX(0deg) rotateY(0deg);
181 | }
182 | 100% {
183 | transform: rotateX(359deg) rotateY(359deg);
184 | }
185 | }
186 |
--------------------------------------------------------------------------------