html,
body {
    margin: 0;
    padding: 0;
    cursor: none;
    overflow: hidden;
}

* {
    box-sizing: border-box;
}

#wrapper {
    width: 100%;
    height: 100vh;
    background: #161616;
    display: flex;
    align-items: center;
    justify-content: center;
}

.cursor {
    position: absolute;
    background: white;
    width: 8px;
    height: 8px;
    border-radius: 100%;
    z-index: 1;
    transition: 0.5s cubic-bezier(0.75, -1.27, 0.3, 2.33) transform,
        0.2s cubic-bezier(0.75, -1.27, 0.3, 2.33) opacity;
    user-select: none;
    pointer-events: none;
    transform: scale(0.8);
}

.cursor::before {
    content: "";
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
    display: block;
    background-image: url("http://mirkozeppieri.emanuelepapale.com/wp-content/uploads/2018/07/project-hover-cursor.jpg");
    background-position: center;
    background-repeat: no-repeat;
    background-size: cover;
    border-radius: 100%;
    opacity: 0;
}

.cursor.active {
    opacity: 1;
    transform: scale(12);
}

.cursor.active::before {
    opacity: 1;
}

.cursor-follower {
    position: absolute;
    background: rgba(255, 255, 255, 0.1);
    width: 40px;
    height: 40px;
    border-radius: 100%;
    z-index: 1;
    transition: 0.6s cubic-bezier(0.75, -1.27, 0.3, 2.33) transform,
        0.4s cubic-bezier(0.75, -1.27, 0.3, 2.33) opacity;
    user-select: none;
    pointer-events: none;
    transform: translate(4px, 4px);
}

.cursor-follower.active {
    opacity: 0.3;
    transform: scale(0);
}

.portfolio-thumb {
    overflow: hidden;
    transition: all 0.5s cubic-bezier(0.25, 1, 0.3, 1);
}

.portfolio-thumb img {
    max-width: 360px;
    opacity: 0.4;
    transition: all 0.5s cubic-bezier(0.25, 1, 0.3, 1);
    transform-origin: 90% center;
}

.portfolio-item:hover .portfolio-thumb {
    transform: translateX(-1.75rem);
}

.portfolio-item:hover .portfolio-thumb img {
    opacity: 0.8;
    transform: scale(1.2);
}
