* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body {
    display: flex;
    justify-content: center;
    align-items: center;
    min-height: 100vh;
    background: black;
    overflow: hidden;
    cursor: none;
}

ul, ul li {
    list-style: none;
}

ul li a {
    color: #fff;
    font-size: 5em;
    font-weight: 800;
    text-transform: uppercase;
    text-decoration: none;
    transition: 0.5s;
}

ul:hover li a {
    opacity: 0.1;
}

ul li a:hover {
    opacity: 1;
    cursor: none;
}

ul li a img {
    position: absolute;
    top: var(--y);
    left: var(--x);
    transform: translate(-50%, -50%) scale(1);
    transition: 0.2s;
    z-index: -2;
    opacity: 0;
    pointer-events: none;
    width: 30vh;
    height: 30vh;
}

ul li a:hover img {
    transform: translate(-50%, -50%) scale(1);
    opacity: 1;
}

ul li a::before {
    content: attr(data-text);
    position: absolute;
    top: var(--y);
    left: var(--x);
    transform: translate(-50%, -50%);
    pointer-events: none;
    opacity: 0;
    transition: 0.3s;
    font-size: 15vw;
    z-index: -1;
    color: transparent;
    -webkit-text-stroke: 1px #ffffff;
}

ul li a:hover::before {
    opacity: 1;
}

.cursor {
    position: absolute;
    top: var(--y);
    left: var(--x);
    transform: translate(-50%, -50%);
    width: 30px;
    height: 30px;
    background: transparent;
    border: 4px solid rgba(68, 225, 163, 0.78);
    border-radius: 50%;
    pointer-events: none;
    transition: width 0.25s, height 0.25s;
    display: flex;
    justify-content: center;
    align-items: center;
}

ul li:hover ~ .cursor {
    width: 80vh;
    height: 80vh;
    border: 2px solid rgba(68, 225, 163, 0.78);
}

.cursor::before {
    content: "";
    position: absolute;
    width: 20px;
    height: 20px;
    background: rgba(68, 225, 163, 0.78);
    border: 4px solid #2d3b2b;
    border-radius: 50%;
    transition: 0.5s;
    scale: 0;
}

ul li:hover ~ .cursor::before {
    scale: 1;
}
