.hoverButton {
    height: 42px;
    line-height: 42px;
    display: inline-block;
    appearance: none;
    transform: translateZ(0);
    user-select: none;
    cursor: pointer;
    outline: none;
    text-decoration: none;
    vertical-align: middle;
    border-radius: 0;
    position: relative;
    white-space: nowrap;
    padding: 0 2rem;
    font-size: 13px;
    text-transform: uppercase;
    font-weight: 700;
    overflow: hidden;
    letter-spacing: 2px;
    transition: color 0.4s cubic-bezier(.7, 0, .3, 1);
    border: none;
    background: transparent;
}

.hoverButton.dark {
    background-color: #0e0e0e;
    color: #fff;
}

.hoverButton.dark .hoverButton__hover {
    color: #101010;
}

.hoverButton.dark::after {
    background: #fff;
}

.hoverButton.light {
    background-color: #fff;
    color: #1b1b1c;
}

.hoverButton.light .hoverButton__hover {
    color: #ccc;
}

.hoverButton.light::after {
    background: #1b1b1c;
}

.hoverButton.light:hover {
    color: #000;
}

.hoverButton:hover::after {
    transform: translateY(0);
}

.hoverButton:hover .hoverButton__inner > .hoverButton__text {
    transform: translateY(-40px);
}

.hoverButton:hover .hoverButton__inner .hoverButton__hover {
    transform: translateY(0);
}

.hoverButton__inner {
    position: relative;
    z-index: 1;
    display: inline-block;
    width: auto;
    min-width: max-content;
}

.hoverButton__inner > span {
    display: block;
    transition: transform 0.4s cubic-bezier(.7, 0, .3, 1);
}

.hoverButton__text {
    position: relative;
}

.hoverButton__hover {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    transform: translateY(40px);
}

.hoverButton::after {
    content: "";
    display: block;
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    transform: translateY(100%);
    transition: transform 0.4s cubic-bezier(.7, 0, .3, 1);
    z-index: 0;
}

.hoverButton__char {
    display: inline-block;
    will-change: transform;
}

.hoverButton__space {
    white-space: pre;
}
