/* 例なのでbodyにflexかけて上下左右中央揃えにしてます */
body {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    background: #000;
}
/* Hello Worldの後ろの黒い背景です。 */
.wrap {
    position: relative;
    background: #000;
    transition: .3s;
}
/*
Hello Worldの直下の背景です
clipでテキストをマスクしています
animationで背景の虹色と同じアニメーションをつけています。
*/
.box {
    display: block;
    text-decoration: none;
    color: transparent;
    padding: 50px;
    font-size: 32px;
    font-weight: bold;
    transition: .3s;
    background: linear-gradient(45deg,#E60012,#F39800,#FFF100,#009944,#0068B7,#1D2088,#920783,#E60012,#F39800,#FFF100,#009944,#0068B7,#1D2088,#920783);
    background-size: 200%;
    background-clip: text;
    -webkit-background-clip: text;
    animation: bgAnimation 5s linear infinite;
}
/* 一番後ろの背景に上下左右2pxずつ大きい虹色の背景を作っています */
.wrap::before,
.wrap::after {
    transition: .6s;
    content: '';
    position: absolute;
    top: -2px;
    left: -2px;
    background: linear-gradient(45deg,#E60012,#F39800,#FFF100,#009944,#0068B7,#1D2088,#920783,#E60012,#F39800,#FFF100,#009944,#0068B7,#1D2088,#920783);
    background-size: 200%;
    width: calc(100% + 4px);
    height: calc(100% + 4px);
    z-index: -1;
    animation: bgAnimation 5s linear infinite;
}
/* afterだけにぼかしをつけています */
.wrap::after {
    filter: blur(10px);
}
/* ホバーのエフェクトです */
.wrap:hover::before,
.wrap:hover::after {
    top: -25px;
    left: -25px;
    width: calc(100% + 50px);
    height: calc(100% + 50px);
    border-radius: 25px;
}
.wrap:hover {
    border-radius: 25px;
    background: rgba(0, 0, 0,0.9);
}
.wrap:hover .box {
    transform: rotate(-35deg) scale(1.2);
}
.wrap:hover::after {
    filter: blur(50px);
}

/* animationで一番下の背景のポジションを動かしています */
@keyframes bgAnimation {
    0% {
        background-position: 0 0;
    }
    50% {
        background-position: 100% 0;
    }
    100% {
        background-position: 0 0;
    }
}