:root { --tile-length: 17.5vmin; --animation-duration: 338s; --bg: hsla(314,100%,50%,1); --bg2: hsla(314,100%,50%,1); --ease: cubic-bezier(1.00,1.33,.10,-1.33); --ease2: cubic-bezier(1,-1.33,.10,1.33); --ease3: cubic-bezier(0.59,15.33,.10,14.33); } * { margin: 0; padding: 0; box-sizing: border-box; } section { height: 100vh; width: 100vw; background: var(--bg); display: flex; flex-direction: column; align-items: center; justify-content: space-evenly; overflow: hidden; opacity: 0; -webkit-animation: appear 1050s 1s var(--ease3) 1 forwards; animation: appear 1050s 1s var(--ease3) 1 forwards; } @-webkit-keyframes appear { 100% { opacity: 1; } } @keyframes appear { 100% { opacity: 1; } } .dg { display: none; opacity: 0; z-index: 200 !important; } canvas { display: block; height: 100%; width: 100%; position: absolute; top: 0; left: 0; z-index: 101; mix-blend-mode: exclusion; filter: invert(1) contrast(2); -webkit-animation: appear2 57s 7s var(--ease2) 1 forwards; animation: appear2 57s 7s var(--ease2) 1 forwards; } @-webkit-keyframes appear2 { 100% { mix-blend-mode: difference; filter: invert(1) contrast(1); } } @keyframes appear2 { 100% { mix-blend-mode: difference; filter: invert(1) contrast(1); } } .kaleidoscope { position: relative; width: calc(6 * .866 * var(--tile-length)); height: 90vmin; -webkit-animation: rotation var(--animation-duration) var(--ease) infinite; animation: rotation var(--animation-duration) var(--ease) infinite; border-radius: 50%; overflow: hidden; } .kaleidoscope:after { content: ""; position: absolute; height: inherit; width: inherit; background: radial-gradient(circle at center, transparent 15%, var(--bg2) 60%); z-index: 100; } .container { position: absolute; width: calc(2 * var(--tile-length)); height: calc(2 * var(--tile-length)); border-radius: 50%; overflow: hidden; transform: translate(calc(var(--tile-length) * -0.134 ), -50%); } .container:nth-child(1) { top: 50%; left: 0%; } .container:nth-child(2) { top: 50%; left: calc(2 * calc(var(--tile-length) * 0.866 )); } .container:nth-child(3) { top: 50%; left: calc(4 * calc(var(--tile-length) * 0.866 )); } .container:nth-child(4) { top: calc(50% - calc(1.5 * var(--tile-length))); left: calc(var(--tile-length) * 0.866 ); } .container:nth-child(5) { top: calc(50% - calc(1.5 * var(--tile-length))); left: calc(3 * var(--tile-length) * 0.866 ); } .container:nth-child(6) { top: calc(50% + calc(1.5 * var(--tile-length))); left: calc(var(--tile-length) * 0.866 ); } .container:nth-child(7) { top: calc(50% + calc(1.5 * var(--tile-length))); left: calc(3 * var(--tile-length) * 0.866 ); } @-webkit-keyframes rotation { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } @keyframes rotation { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .tile { position: absolute; top: 28%; left: 25%; width: var(--tile-length); height: calc(var(--tile-length) * 0.866); -webkit-clip-path: polygon(50% 0%, 0% 100%, 100% 100%); clip-path: polygon(50% 0%, 0% 100%, 100% 100%); overflow: hidden; display: flex; align-items: center; justify-content: center; } .tile:nth-child(1) { transform: rotate(30deg) translateY(50%) scaleX(-1); } .tile:nth-child(2) { transform: rotate(90deg) translateY(50%); } .tile:nth-child(3) { transform: rotate(150deg) translateY(50%) scaleX(-1); } .tile:nth-child(4) { transform: rotate(210deg) translateY(50%); } .tile:nth-child(5) { transform: rotate(270deg) translateY(50%) scaleX(-1); } .tile:nth-child(6) { transform: rotate(330deg) translateY(50%); } .texture { position: absolute; height: calc(1.75 * var(--tile-length)); width: calc(1.75 * var(--tile-length)); background-image: url(https://assets.codepen.io/194946/panneau-garden-party-rifle-paper-co.jpg); background-size: 100%; -webkit-animation: rotation var(--animation-duration) var(--ease2) infinite; animation: rotation var(--animation-duration) var(--ease2) infinite; } .link { position: fixed; z-index: 10; left: calc(2.5vmin - .75rem); bottom: calc(2.5vmin - .75rem); font-size: 1.5rem; font-family: arial, sans-serif; color: whitesmoke; display: flex; align-items: center; justify-content: center; cursor: pointer; } .my-name { position: relative; } .before, .after { overflow: hidden; width: 0px; transition: width 0.5s; transform-origin: right; } .before-text { display: inline-block; width: auto; text-align: right; } .after-text { display: flex; align-items: center; width: auto; height: 3rem; transform-origin: top center; } .link:hover .before { width: 2.5rem; } .link:hover .after { width: 4rem; } .link:hover .spin { display: inline-block; transition: 0.5s transform 0.5s ease-in-out; transform: rotate(360deg); }