@keyframes loading { 0% { cy: 10; } 25% { cy: 3; } 50% { cy: 10; } } body { -webkit-font-smoothing: antialiased; background-color: #f4f7ff; } canvas { height: 100vh; pointer-events: none; position: fixed; width: 100%; z-index: 2; } button { background: none; border: none; color: #f4f7ff; cursor: pointer; font-family: "Quicksand", sans-serif; font-size: 14px; font-weight: 500; height: 40px; left: 50%; outline: none; overflow: hidden; padding: 0 10px; position: fixed; top: 50%; transform: translate(-50%, -50%); width: 190px; -webkit-tap-highlight-color: transparent; z-index: 1; } button::before { background: #1f2335; border-radius: 50px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.4) inset; content: ""; display: block; height: 100%; margin: 0 auto; position: relative; transition: width 0.2s cubic-bezier(0.39, 1.86, 0.64, 1) 0.3s; width: 100%; } button.ready .submitMessage svg { opacity: 1; top: 1px; transition: top 0.4s ease 600ms, opacity 0.3s linear 600ms; } button.ready .submitMessage .button-text span { top: 0; opacity: 1; transition: all 0.2s ease calc(var(--dr) + 600ms); } button.loading::before { transition: width 0.3s ease; width: 80%; } button.loading .loadingMessage { opacity: 1; } button.loading .loadingCircle { animation-duration: 1s; animation-iteration-count: infinite; animation-name: loading; cy: 10; } button.complete .submitMessage svg { top: -30px; transition: none; } button.complete .submitMessage .button-text span { top: -8px; transition: none; } button.complete .loadingMessage { top: 80px; } button.complete .successMessage .button-text span { left: 0; opacity: 1; transition: all 0.2s ease calc(var(--d) + 1000ms); } button.complete .successMessage svg { stroke-dashoffset: 0; transition: stroke-dashoffset 0.3s ease-in-out 1.4s; } .button-text span { opacity: 0; position: relative; } .message { left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); width: 100%; } .message svg { display: inline-block; fill: none; margin-right: 5px; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2; } .submitMessage .button-text span { top: 8px; transition: all 0.2s ease var(--d); } .submitMessage svg { color: #5c86ff; margin-left: -1px; opacity: 0; position: relative; top: 30px; transition: top 0.4s ease, opacity 0.3s linear; width: 14px; } .loadingMessage { opacity: 0; transition: opacity 0.3s linear 0.3s, top 0.4s cubic-bezier(0.22, 0, 0.41, -0.57); } .loadingMessage svg { fill: #5c86ff; margin: 0; width: 22px; } .successMessage .button-text span { left: 5px; transition: all 0.2s ease var(--dr); } .successMessage svg { color: #5cffa1; stroke-dasharray: 20; stroke-dashoffset: 20; transition: stroke-dashoffset 0.3s ease-in-out; width: 14px; } .loadingCircle:nth-child(2) { animation-delay: 0.1s; } .loadingCircle:nth-child(3) { animation-delay: 0.2s; }