.power-switch { --color-invert: #ffffff; --width: 150px; --height: 150px; position: relative; display: flex; justify-content: center; align-items: center; width: var(--width); height: var(--height); } .power-switch .button { width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; position: relative; } .power-switch .button:after { content: ""; width: 100%; height: 100%; position: absolute; background: radial-gradient(circle closest-side, var(--color-invert), transparent); -webkit-filter: blur(20px); filter: blur(20px); opacity: 0; transition: opacity 1s ease, -webkit-transform 1s ease; transition: opacity 1s ease, transform 1s ease; transition: opacity 1s ease, transform 1s ease, -webkit-transform 1s ease; -webkit-transform: perspective(1px) translateZ(0); transform: perspective(1px) translateZ(0); -webkit-backface-visibility: hidden; backface-visibility: hidden; } .power-switch .button .power-on, .power-switch .button .power-off { height: 100%; width: 100%; position: absolute; z-index: 1; fill: none; stroke: var(--color-invert); stroke-width: 8px; stroke-linecap: round; stroke-linejoin: round; } .power-switch .button .power-on .line, .power-switch .button .power-off .line { opacity: .2; } .power-switch .button .power-on .circle, .power-switch .button .power-off .circle { opacity: .2; -webkit-transform: rotate(-58deg); transform: rotate(-58deg); -webkit-transform-origin: center 80px; transform-origin: center 80px; stroke-dasharray: 220; stroke-dashoffset: 40; } .power-switch .button .power-on { -webkit-filter: drop-shadow(0px 0px 6px rgba(255, 255, 255, 0.8)); filter: drop-shadow(0px 0px 6px rgba(255, 255, 255, 0.8)); } .power-switch .button .power-on .line { opacity: 0; transition: opacity .3s ease 1s; } .power-switch .button .power-on .circle { opacity: 1; stroke-dashoffset: 220; transition: stroke-dashoffset 1s ease 0s, -webkit-transform 0s ease; transition: transform 0s ease, stroke-dashoffset 1s ease 0s; transition: transform 0s ease, stroke-dashoffset 1s ease 0s, -webkit-transform 0s ease; } .power-switch input { position: absolute; height: 100%; width: 100%; z-index: 2; cursor: pointer; opacity: 0; } .power-switch input:checked + .button:after { opacity: 0.15; -webkit-transform: scale(2) perspective(1px) translateZ(0); transform: scale(2) perspective(1px) translateZ(0); -webkit-backface-visibility: hidden; backface-visibility: hidden; transition: opacity .5s ease, -webkit-transform .5s ease; transition: opacity .5s ease, transform .5s ease; transition: opacity .5s ease, transform .5s ease, -webkit-transform .5s ease; } .power-switch input:checked + .button .power-on, .power-switch input:checked + .button .power-off { -webkit-animation: click-animation .3s ease forwards; animation: click-animation .3s ease forwards; -webkit-transform: scale(1); transform: scale(1); } .power-switch input:checked + .button .power-on .line, .power-switch input:checked + .button .power-off .line { -webkit-animation: line-animation .8s ease-in forwards; animation: line-animation .8s ease-in forwards; } .power-switch input:checked + .button .power-on .circle, .power-switch input:checked + .button .power-off .circle { -webkit-transform: rotate(302deg); transform: rotate(302deg); } .power-switch input:checked + .button .power-on .line { opacity: 1; transition: opacity .05s ease-in .55s; } .power-switch input:checked + .button .power-on .circle { -webkit-transform: rotate(302deg); transform: rotate(302deg); stroke-dashoffset: 40; transition: stroke-dashoffset .4s ease .2s, -webkit-transform .4s ease .2s; transition: transform .4s ease .2s, stroke-dashoffset .4s ease .2s; transition: transform .4s ease .2s, stroke-dashoffset .4s ease .2s, -webkit-transform .4s ease .2s; } @-webkit-keyframes line-animation { 0% { -webkit-transform: translateY(0); transform: translateY(0); } 10% { -webkit-transform: translateY(10px); transform: translateY(10px); } 40% { -webkit-transform: translateY(-25px); transform: translateY(-25px); } 60% { -webkit-transform: translateY(-25px); transform: translateY(-25px); } 85% { -webkit-transform: translateY(10px); transform: translateY(10px); } 100% { -webkit-transform: translateY(0px); transform: translateY(0px); } } @keyframes line-animation { 0% { -webkit-transform: translateY(0); transform: translateY(0); } 10% { -webkit-transform: translateY(10px); transform: translateY(10px); } 40% { -webkit-transform: translateY(-25px); transform: translateY(-25px); } 60% { -webkit-transform: translateY(-25px); transform: translateY(-25px); } 85% { -webkit-transform: translateY(10px); transform: translateY(10px); } 100% { -webkit-transform: translateY(0px); transform: translateY(0px); } } @-webkit-keyframes click-animation { 0% { -webkit-transform: scale(1); transform: scale(1); } 50% { -webkit-transform: scale(0.9); transform: scale(0.9); } 100% { -webkit-transform: scale(1); transform: scale(1); } } @keyframes click-animation { 0% { -webkit-transform: scale(1); transform: scale(1); } 50% { -webkit-transform: scale(0.9); transform: scale(0.9); } 100% { -webkit-transform: scale(1); transform: scale(1); } } body { background: #1B1A23; height: 100vh; font: 400 16px 'Poppins', sans-serif; display: flex; flex-direction: column; justify-content: center; align-items: center; } body .socials { position: fixed; display: block; left: 20px; bottom: 20px; } body .socials > a { display: block; width: 30px; opacity: .2; -webkit-transform: scale(var(--scale, 0.8)); transform: scale(var(--scale, 0.8)); transition: -webkit-transform 0.3s cubic-bezier(0.38, -0.12, 0.24, 1.91); transition: transform 0.3s cubic-bezier(0.38, -0.12, 0.24, 1.91); transition: transform 0.3s cubic-bezier(0.38, -0.12, 0.24, 1.91), -webkit-transform 0.3s cubic-bezier(0.38, -0.12, 0.24, 1.91); } body .socials > a:hover { --scale: 1; }