미디어위키:Template.css: 두 판 사이의 차이

편집 요약 없음
편집 요약 없음
608번째 줄: 608번째 줄:
         linear-gradient(
         linear-gradient(
             to bottom,
             to bottom,
             rgba(20, 10, 24, 0.95) 0%,
             rgba(18, 8, 28, 0.98) 0%,
             rgba(48, 16, 54, 0.75) 36%,
             rgba(38, 12, 50, 0.82) 34%,
             rgba(92, 28, 86, 0.45) 52%,
             rgba(95, 24, 86, 0.50) 51%,
             rgba(5, 5, 8, 0.96) 53%,
             rgba(6, 5, 10, 0.96) 52%,
             rgba(3, 3, 5, 1) 100%
             rgba(3, 3, 6, 1) 100%
         ) !important;
         ) !important;
}
}


/* 본문은 그리드보다 위 */
/* 본문은 배경 위 */
.retro-grid-bg .crt-glow-content {
.retro-grid-bg .crt-glow-content {
     position: relative;
     position: relative;
     z-index: 3;
     z-index: 5;
}
}


626번째 줄: 626번째 줄:
     content: "";
     content: "";
     position: absolute;
     position: absolute;
     left: -8%;
     left: -10%;
     right: -8%;
     right: -10%;
     top: 47%;
     top: 46%;
     height: 18%;
     height: 16%;
     z-index: 1;
     z-index: 1;
     pointer-events: none;
     pointer-events: none;
635번째 줄: 635번째 줄:
         radial-gradient(
         radial-gradient(
             ellipse at 50% 50%,
             ellipse at 50% 50%,
             rgba(255,255,255,0.50) 0%,
             rgba(255,255,255,0.48) 0%,
             rgba(255,120,210,0.42) 18%,
             rgba(255,120,210,0.42) 20%,
             rgba(255,70,190,0.28) 38%,
             rgba(255,70,190,0.26) 44%,
             transparent 72%
             transparent 76%
         );
         );
     filter: blur(10px);
     filter: blur(10px);
644번째 줄: 644번째 줄:
}
}


/* 아래 바닥 그리드 */
/* 지평선에서 아래로 펼쳐지는 바닥 그리드 */
.retro-grid-bg::after {
.retro-grid-bg::after {
     content: "";
     content: "";
     position: absolute;
     position: absolute;
     left: 50%;
     left: 50%;
     bottom: -22%;
     top: 51%;
     width: 140%;
     width: 150%;
     height: 90%;
     height: 115%;
     z-index: 2;
     z-index: 2;
     pointer-events: none;
     pointer-events: none;
663번째 줄: 663번째 줄:
         linear-gradient(
         linear-gradient(
             to bottom,
             to bottom,
             rgba(255,80,190,0.85) 1px,
             rgba(255,80,190,0.88) 1px,
             transparent 1px
             transparent 1px
         );
         );
669번째 줄: 669번째 줄:
     background-size:
     background-size:
         72px 100%,
         72px 100%,
         100% 38px;
         100% 40px;


     transform-origin: 50% 100%;
     transform-origin: 50% 0%;
     transform:
     transform:
         translateX(-50%)
         translateX(-50%)
         perspective(520px)
         perspective(430px)
         rotateX(62deg);
         rotateX(66deg);
 
    opacity: 0.88;


     filter:
     filter:
681번째 줄: 683번째 줄:
         drop-shadow(0 0 10px rgba(255,80,190,0.45));
         drop-shadow(0 0 10px rgba(255,80,190,0.45));


    opacity: 0.88;
     animation: retro-grid-flow 1.8s linear infinite;
 
     animation: retro-grid-flow 2.2s linear infinite;


     mask-image:
     mask-image:
689번째 줄: 689번째 줄:
             to bottom,
             to bottom,
             transparent 0%,
             transparent 0%,
             black 10%,
             black 4%,
             black 88%,
             black 82%,
             transparent 100%
             transparent 100%
         );
         );
697번째 줄: 697번째 줄:
             to bottom,
             to bottom,
             transparent 0%,
             transparent 0%,
             black 10%,
             black 4%,
             black 88%,
             black 82%,
             transparent 100%
             transparent 100%
         );
         );
733번째 줄: 733번째 줄:
         background-position:
         background-position:
             0 0,
             0 0,
             0 38px;
             0 -40px;
     }
     }
}
}

2026년 4월 24일 (금) 19:34 판

/* Proitem 애니메이션 */
.wip-stripe-layer {
    position: absolute;
    top: 0;
    left: -280px;
    width: calc(100% + 560px);
    height: 100%;
    opacity: 0.08;
    background: repeating-linear-gradient(
        45deg,
        #969696,
        #969696 10px,
        transparent 10px,
        transparent 20px
    );
    z-index: 0;
}
.wip-active .wip-stripe-layer {
    animation: wip-stripe-move 8s linear infinite;
}
.wip-standby .wip-stripe-layer {
    animation: none;
}
@keyframes wip-stripe-move {
    from { transform: translateX(0); }
    to { transform: translateX(280px); }
}

/* 펼접 */

[id^="collapsible"] {
  overflow: hidden;
  transition: max-height .25s ease;
  max-height: 0;
}

/* Color */
.color-text {
    color: var(--text-color);
}

.color-text a,
.color-text a:visited,
.color-text a:hover,
.color-text a:active {
    color: var(--text-color) !important;
    text-decoration-color: var(--text-color) !important;
}

/* =========================================
   CRT Glitch Panel
   ========================================= */

.crt-glitch-panel .vanishing-grid-bg {
    position: relative;
    overflow: hidden;
    border-radius: 5px;
    background:
        radial-gradient(circle at 50% 45%, rgba(212,90,162,0.18) 0%, transparent 32%),
        linear-gradient(to bottom, #111 0%, #090909 58%, #030303 100%) !important;
}

/* 실제 내용 */
.crt-glitch-panel > * {
    position: relative;
    z-index: 2;
}

/* 빛 번짐 대상 */
.crt-glow-content {
    position: relative;
    z-index: 2;
    text-shadow:
        0 0 2px rgba(255,255,255,0.35),
        0 0 6px rgba(212,90,162,0.22),
        0 0 12px rgba(133,67,105,0.18);
    filter: drop-shadow(0 0 5px rgba(212,90,162,0.18));
}

/* 안개 낀 빛 번짐 */
.crt-glow-content::before {
    content: "";
    position: absolute;
    inset: -24px;
    z-index: -1;
    pointer-events: none;
    background:
        radial-gradient(
            circle at 50% 35%,
            rgba(255,255,255,0.08) 0%,
            rgba(212,90,162,0.10) 18%,
            rgba(133,67,105,0.08) 34%,
            transparent 68%
        );
    filter: blur(18px);
    opacity: 0.75;
}

/* 제목류 발광 */
.crt-glitch-panel .fake-h1,
.crt-glitch-panel h1,
.crt-glitch-panel h2,
.crt-glitch-panel strong {
    text-shadow:
        0 0 3px rgba(255,255,255,0.65),
        0 0 10px rgba(255,255,255,0.28),
        0 0 18px rgba(212,90,162,0.35),
        0 0 32px rgba(133,67,105,0.24);
}

/* 위로 올라가는 CRT 가로선 */
.crt-glitch-panel::before {
    content: "";
    position: absolute;
    inset: -80px 0;
    z-index: 3;
    pointer-events: none;
    opacity: 0.22;
    background:
        repeating-linear-gradient(
            to bottom,
            rgba(255,255,255,0.08) 0px,
            rgba(255,255,255,0.08) 1px,
            transparent 2px,
            transparent 5px
        );
    mix-blend-mode: screen;
    animation: crt-scanlines-up 7s linear infinite;
}

/* 위로 지나가는 글리치 빛줄 */
.crt-glitch-panel::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 4;
    pointer-events: none;
    opacity: 0;
    background:
        linear-gradient(
            to bottom,
            transparent 0%,
            rgba(255,255,255,0.18) 48%,
            rgba(212,90,162,0.28) 50%,
            rgba(90,120,255,0.16) 52%,
            transparent 56%
        );
    mix-blend-mode: screen;
    animation: crt-glitch-band-up 6.5s steps(1, end) infinite;
}

/* =========================================
   CRT Glitch Panel
   ========================================= */

.crt-glitch-panel {
    position: relative;
    overflow: hidden;
    isolation: isolate;
    border-radius: 5px;
    box-shadow:
        inset 0 0 18px rgba(255,255,255,0.04),
        inset 0 0 42px rgba(133,67,105,0.10),
        0 0 18px rgba(133,67,105,0.20);
}

/* 실제 내용 */
.crt-glitch-panel > * {
    position: relative;
    z-index: 2;
}

/* 빛 번짐 대상 */
.crt-glow-content {
    position: relative;
    z-index: 2;
    text-shadow:
        0 0 2px rgba(255,255,255,0.35),
        0 0 6px rgba(212,90,162,0.22),
        0 0 12px rgba(133,67,105,0.18);
    filter: drop-shadow(0 0 5px rgba(212,90,162,0.18));
}

/* 안개 낀 빛 번짐 */
.crt-glow-content::before {
    content: "";
    position: absolute;
    inset: -24px;
    z-index: -1;
    pointer-events: none;
    background:
        radial-gradient(
            circle at 50% 35%,
            rgba(255,255,255,0.08) 0%,
            rgba(212,90,162,0.10) 18%,
            rgba(133,67,105,0.08) 34%,
            transparent 68%
        );
    filter: blur(18px);
    opacity: 0.75;
}

/* 제목류 발광 */
.crt-glitch-panel .fake-h1,
.crt-glitch-panel h1,
.crt-glitch-panel h2,
.crt-glitch-panel strong {
    text-shadow:
        0 0 3px rgba(255,255,255,0.65),
        0 0 10px rgba(255,255,255,0.28),
        0 0 18px rgba(212,90,162,0.35),
        0 0 32px rgba(133,67,105,0.24);
}

/* 위로 올라가는 CRT 가로선 */
.crt-glitch-panel::before {
    content: "";
    position: absolute;
    inset: -80px 0;
    z-index: 3;
    pointer-events: none;
    opacity: 0.22;
    background:
        repeating-linear-gradient(
            to bottom,
            rgba(255,255,255,0.08) 0px,
            rgba(255,255,255,0.08) 1px,
            transparent 2px,
            transparent 5px
        );
    mix-blend-mode: screen;
    animation: crt-scanlines-up 7s linear infinite;
}

/* 위로 지나가는 글리치 빛줄 */
.crt-glitch-panel::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 4;
    pointer-events: none;
    opacity: 0;
    background:
        linear-gradient(
            to bottom,
            transparent 0%,
            rgba(255,255,255,0.18) 48%,
            rgba(212,90,162,0.28) 50%,
            rgba(90,120,255,0.16) 52%,
            transparent 56%
        );
    mix-blend-mode: screen;
    animation: crt-glitch-band-up 6.5s steps(1, end) infinite;
}

/* =========================================
   CRT Glitch Panel
   ========================================= */

.crt-glitch-panel {
    position: relative;
    overflow: hidden;
    isolation: isolate;
    border-radius: 5px;
    box-shadow:
        inset 0 0 18px rgba(255,255,255,0.04),
        inset 0 0 42px rgba(133,67,105,0.10),
        0 0 18px rgba(133,67,105,0.20);
}

/* 실제 내용 */
.crt-glitch-panel > * {
    position: relative;
    z-index: 2;
}

/* 빛 번짐 + RGB split 대상 */
.crt-glow-content {
    position: relative;
    z-index: 2;
    text-shadow:
        -1px 0 0 rgba(80,160,255,0.75),
        1px 0 0 rgba(255,55,90,0.65),
        2px 0 0 rgba(255,210,70,0.45),
        0 0 2px rgba(255,255,255,0.35),
        0 0 6px rgba(212,90,162,0.22),
        0 0 12px rgba(133,67,105,0.18);
    filter: drop-shadow(0 0 5px rgba(212,90,162,0.18));
}

/* 안개 낀 빛 번짐 */
.crt-glow-content::before {
    content: "";
    position: absolute;
    inset: -24px;
    z-index: -1;
    pointer-events: none;
    background:
        radial-gradient(
            circle at 50% 35%,
            rgba(255,255,255,0.08) 0%,
            rgba(212,90,162,0.10) 18%,
            rgba(133,67,105,0.08) 34%,
            transparent 68%
        );
    filter: blur(18px);
    opacity: 0.75;
}

/* 제목류 발광 + 더 강한 RGB split */
.crt-glitch-panel .fake-h1,
.crt-glitch-panel h1,
.crt-glitch-panel h2,
.crt-glitch-panel strong {
    text-shadow:
        -1px 0 0 rgba(80,160,255,0.95),
        1px 0 0 rgba(255,55,90,0.85),
        2px 0 0 rgba(255,210,70,0.55),
        0 0 3px rgba(255,255,255,0.65),
        0 0 10px rgba(255,255,255,0.28),
        0 0 18px rgba(212,90,162,0.35),
        0 0 32px rgba(133,67,105,0.24);
}

/* 이미지 외곽 RGB split + 약한 발광 */
.crt-glitch-panel img {
    filter:
        drop-shadow(-1px 0 0 rgba(80,160,255,0.65))
        drop-shadow(1px 0 0 rgba(255,55,90,0.55))
        drop-shadow(2px 0 0 rgba(255,210,70,0.35))
        drop-shadow(0 0 6px rgba(212,90,162,0.18));
}

/* 위로 올라가는 CRT 가로선 */
.crt-glitch-panel::before {
    content: "";
    position: absolute;
    inset: -80px 0;
    z-index: 3;
    pointer-events: none;
    opacity: 0.22;
    background:
        repeating-linear-gradient(
            to bottom,
            rgba(255,255,255,0.08) 0px,
            rgba(255,255,255,0.08) 1px,
            transparent 2px,
            transparent 5px
        );
    mix-blend-mode: screen;
    animation: crt-scanlines-up 7s linear infinite;
}

/* 위로 지나가는 글리치 빛줄 */
.crt-glitch-panel::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 4;
    pointer-events: none;
    opacity: 0;
    background:
        linear-gradient(
            to bottom,
            transparent 0%,
            rgba(255,255,255,0.18) 48%,
            rgba(212,90,162,0.28) 50%,
            rgba(90,120,255,0.16) 52%,
            transparent 56%
        );
    mix-blend-mode: screen;
    animation: crt-glitch-band-up 6.5s steps(1, end) infinite;
}

/* =========================================
   Horizontal CRT Warp
   ========================================= */

.crt-horizontal-warp {
    position: relative;
    overflow: hidden;
    isolation: isolate;
}

/* 내용물 자체의 약한 신호 흔들림 + 얇은 수평 노이즈 */
.crt-horizontal-warp .crt-glow-content {
    animation: crt-base-drift 9s steps(1, end) infinite;
    background-image:
        repeating-linear-gradient(
            to bottom,
            rgba(120,180,255,0.00) 0px,
            rgba(120,180,255,0.00) 3px,
            rgba(120,180,255,0.05) 4px,
            rgba(255,80,170,0.035) 5px,
            rgba(120,180,255,0.00) 7px
        );
    background-blend-mode: screen;
}

/* 수평 찢김 레이어 */
.crt-horizontal-warp .crt-glow-content::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 6;
    pointer-events: none;
    opacity: 0;
    background:
        linear-gradient(
            to right,
            transparent 0%,
            rgba(120,180,255,0.18) 10%,
            rgba(255,255,255,0.18) 48%,
            rgba(212,90,162,0.20) 78%,
            transparent 100%
        );
    mix-blend-mode: screen;
    animation: crt-wide-horizontal-tear 3.8s steps(1, end) infinite;
}

/* =========================================
   Animations
   ========================================= */

@keyframes crt-scanlines-up {
    from {
        transform: translateY(0);
    }
    to {
        transform: translateY(-72px);
    }
}

@keyframes crt-glitch-band-up {
    0%, 12%, 27%, 43%, 58%, 76%, 100% {
        opacity: 0;
        transform: translateY(100%);
    }

    13% {
        opacity: 0.75;
        transform: translateY(70%);
    }

    14% {
        opacity: 0.15;
        transform: translateY(62%) skewX(-2deg);
    }

    28% {
        opacity: 0.55;
        transform: translateY(35%);
    }

    29% {
        opacity: 0.18;
        transform: translateY(28%) skewX(2deg);
    }

    44% {
        opacity: 0.65;
        transform: translateY(10%);
    }

    45% {
        opacity: 0.12;
        transform: translateY(4%) skewX(-1deg);
    }

    59% {
        opacity: 0.5;
        transform: translateY(-20%);
    }

    60% {
        opacity: 0.16;
        transform: translateY(-26%) skewX(2deg);
    }

    77% {
        opacity: 0.55;
        transform: translateY(-55%);
    }

    78% {
        opacity: 0;
        transform: translateY(-70%);
    }
}

@keyframes crt-base-drift {
    0%, 88%, 100% {
        transform: translateX(0);
        filter: drop-shadow(0 0 5px rgba(212,90,162,0.18));
    }

    89% {
        transform: translateX(-2px) skewX(-0.4deg);
        filter:
            contrast(1.08)
            brightness(1.05)
            drop-shadow(0 0 7px rgba(212,90,162,0.24));
    }

    90% {
        transform: translateX(3px) skewX(0.5deg);
    }

    91% {
        transform: translateX(-1px);
    }

    92% {
        transform: translateX(0);
        filter: drop-shadow(0 0 5px rgba(212,90,162,0.18));
    }
}

@keyframes crt-wide-horizontal-tear {
    0%, 8%, 17%, 29%, 43%, 61%, 78%, 100% {
        opacity: 0;
        transform: translateX(0);
        clip-path: inset(0 0 0 0);
    }

    9% {
        opacity: 0.45;
        transform: translateX(-18px) skewX(-3deg);
        clip-path: inset(18% 0 70% 0);
    }

    10% {
        opacity: 0.28;
        transform: translateX(24px) skewX(4deg);
        clip-path: inset(21% 0 64% 0);
    }

    18% {
        opacity: 0.38;
        transform: translateX(32px) skewX(5deg);
        clip-path: inset(42% 0 47% 0);
    }

    19% {
        opacity: 0.16;
        transform: translateX(-28px) skewX(-4deg);
        clip-path: inset(46% 0 43% 0);
    }

    30% {
        opacity: 0.48;
        transform: translateX(-36px) skewX(-6deg);
        clip-path: inset(58% 0 30% 0);
    }

    31% {
        opacity: 0.18;
        transform: translateX(20px) skewX(3deg);
        clip-path: inset(61% 0 27% 0);
    }

    44% {
        opacity: 0.36;
        transform: translateX(18px) skewX(3deg);
        clip-path: inset(8% 0 84% 0);
    }

    45% {
        opacity: 0.12;
        transform: translateX(-14px) skewX(-2deg);
        clip-path: inset(11% 0 80% 0);
    }

    62% {
        opacity: 0.44;
        transform: translateX(-42px) skewX(-7deg);
        clip-path: inset(73% 0 16% 0);
    }

    63% {
        opacity: 0.18;
        transform: translateX(30px) skewX(4deg);
        clip-path: inset(76% 0 12% 0);
    }

    79% {
        opacity: 0.42;
        transform: translateX(26px) skewX(4deg);
        clip-path: inset(31% 0 58% 0);
    }

    80% {
        opacity: 0.14;
        transform: translateX(-20px) skewX(-3deg);
        clip-path: inset(34% 0 54% 0);
    }
}

/* =========================================
   Retro Horizon Grid Background
   ========================================= */

.retro-grid-bg {
    position: relative;
    overflow: hidden;
    border-radius: 5px;
    background:
        linear-gradient(
            to bottom,
            rgba(18, 8, 28, 0.98) 0%,
            rgba(38, 12, 50, 0.82) 34%,
            rgba(95, 24, 86, 0.50) 51%,
            rgba(6, 5, 10, 0.96) 52%,
            rgba(3, 3, 6, 1) 100%
        ) !important;
}

/* 본문은 배경 위 */
.retro-grid-bg .crt-glow-content {
    position: relative;
    z-index: 5;
}

/* 지평선 발광 */
.retro-grid-bg::before {
    content: "";
    position: absolute;
    left: -10%;
    right: -10%;
    top: 46%;
    height: 16%;
    z-index: 1;
    pointer-events: none;
    background:
        radial-gradient(
            ellipse at 50% 50%,
            rgba(255,255,255,0.48) 0%,
            rgba(255,120,210,0.42) 20%,
            rgba(255,70,190,0.26) 44%,
            transparent 76%
        );
    filter: blur(10px);
    opacity: 0.85;
}

/* 지평선에서 아래로 펼쳐지는 바닥 그리드 */
.retro-grid-bg::after {
    content: "";
    position: absolute;
    left: 50%;
    top: 51%;
    width: 150%;
    height: 115%;
    z-index: 2;
    pointer-events: none;

    background-image:
        linear-gradient(
            to right,
            rgba(255,80,190,0.90) 1px,
            transparent 1px
        ),
        linear-gradient(
            to bottom,
            rgba(255,80,190,0.88) 1px,
            transparent 1px
        );

    background-size:
        72px 100%,
        100% 40px;

    transform-origin: 50% 0%;
    transform:
        translateX(-50%)
        perspective(430px)
        rotateX(66deg);

    opacity: 0.88;

    filter:
        drop-shadow(0 0 3px rgba(255,80,190,0.85))
        drop-shadow(0 0 10px rgba(255,80,190,0.45));

    animation: retro-grid-flow 1.8s linear infinite;

    mask-image:
        linear-gradient(
            to bottom,
            transparent 0%,
            black 4%,
            black 82%,
            transparent 100%
        );
    -webkit-mask-image:
        linear-gradient(
            to bottom,
            transparent 0%,
            black 4%,
            black 82%,
            transparent 100%
        );
}

/* 중앙 안개빛 */
.retro-grid-bg .crt-glow-content::before {
    content: "";
    position: absolute;
    inset: -42px;
    z-index: -1;
    pointer-events: none;
    background:
        radial-gradient(
            ellipse at 50% 48%,
            rgba(255,255,255,0.08) 0%,
            rgba(255,80,190,0.10) 22%,
            rgba(120,190,255,0.08) 42%,
            transparent 70%
        );
    filter: blur(22px);
    opacity: 0.70;
}

/* 가로선만 지평선 방향으로 흐르게 함 */
@keyframes retro-grid-flow {
    from {
        background-position:
            0 0,
            0 0;
    }

    to {
        background-position:
            0 0,
            0 -40px;
    }
}