body { background: #fafafa; }
.frame {
    position: relative;

    /* Button dimensions */
    width: 400px; 
    height: 400px; 

    /* Movement distances */
    --hover-travel: 3px;
    --press-travel: 40px;
    
    /* Color customization */
    --color: black;
    --brightness: 1;
    --blend-mode: color;

    /* Transition settings */
    --transition-duration: 0.4s;
    --transition-easing: linear(0, 0.008 1.1%, 0.031 2.2%, 0.129 4.8%, 0.257 7.2%, 0.671 14.2%, 0.789 16.5%, 0.881 18.6%, 0.957 20.7%, 1.019 22.9%, 1.063 25.1%, 1.094 27.4%, 1.114 30.7%, 1.112 34.5%, 1.018 49.9%, 0.99 59.1%, 1);
}

.frame, .recolor-overlay, .button, .text {
    user-select: none;
}

.base {
    width: 100%; height: 100%;
}

.recolor-overlay {
    position: absolute;
    width: 100%; height: 100%;
    color: var(--color);
    top: 0;
    left: 0;
    mix-blend-mode: var(--blend-mode);
    
    transition-property: all;
    transition-duration: var(--transition-duration);
    transition-timing-function: var(--transition-easing);
}

.button {
    position: absolute;
    width: 100%; height: 100%;
    top: 0;
    left: 0;
    filter: brightness(var(--brightness));

    transition-property: all;
    transition-duration: var(--transition-duration);
    transition-timing-function: var(--transition-easing);
}

.cover {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%; height: 100%;
}

.frame:hover .button, .frame:hover .text, .frame:hover .recolor-overlay {
    margin-top: var(--hover-travel);
}

.frame:active .button, .frame:active .text, .frame:active .recolor-overlay {
    margin-top: var(--press-travel);
}

.text {
    font-family: sans-serif;
    font-size: 2rem;
    color: white;
    white-space: nowrap;
    
    position: absolute;
    width: 100%;
    height: 100%;
    top: 50%;
    left: 50%;
    text-align: center;
    align-content: center;
    translate: -50% -50%;
    transform: rotateY(0deg) rotateX(52.3deg) rotateZ(29deg) translateY(-28%) translateX(-16%);
    margin: 0px;
    padding: 0px;

    transition-property: all;
    transition-timing-function: var(--transition-easing);
    transition-duration: var(--transition-duration);
}
