跳转到内容
打开/关闭菜单
  • 450 条目
  • 805 文件
  • 22 用户
  • 9112 编辑
Blockland Wiki
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

MediaWiki:KuranokaPageTransition.css

MediaWiki界面页面
KK​(留言 | 贡献)2026年10月23日 (五) 14:35的版本

注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
  • Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
  • Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5。
/* Kuranoka Page Transition V10 — ASH FRONT
   Load only on /wiki/Kuranoka and /wiki/Kuronata.
   No Citizen.css / Common.css changes. */

#kkpt-toggle {
    --kkpt-tone: #a7e7ff;
    --kkpt-panel: rgba(7,28,49,.87);
    position: fixed;
    z-index: 2147483000;
    right: clamp(12px,2.3vw,34px);
    bottom: clamp(14px,3.4vh,34px);
    display: flex;
    align-items: center;
    gap: 10px;
    max-width: calc(100vw - 24px);
    box-sizing: border-box;
    padding: 12px 17px;
    border: 1px solid color-mix(in srgb,var(--kkpt-tone) 60%,transparent);
    border-radius: 999px;
    background: var(--kkpt-panel);
    box-shadow: 0 8px 35px #0007,0 0 20px color-mix(in srgb,var(--kkpt-tone) 25%,transparent);
    color: #f1fcff !important;
    font: 650 13px/1.3 system-ui,sans-serif;
    letter-spacing: .045em;
    text-decoration: none !important;
    cursor: pointer;
    backdrop-filter: blur(18px) saturate(145%);
    -webkit-backdrop-filter: blur(18px) saturate(145%);
    transition: transform .22s,box-shadow .22s,opacity .22s;
}

/* Easter egg mode: no floating button unless SHOW_FLOATING_BUTTON=true. */
#kkpt-toggle[hidden] {display:none !important}

#kkpt-toggle.kkpt-dark {
    --kkpt-tone: #ff6b7e;
    --kkpt-panel: rgba(41,4,14,.88);
    color: #fff1f1 !important;
}

#kkpt-toggle:hover,#kkpt-toggle:focus-visible {
    transform: translateY(-3px);
    box-shadow: 0 9px 38px #0008,0 0 32px var(--kkpt-tone);
}

#kkpt-toggle:focus-visible {outline: 2px solid var(--kkpt-tone);outline-offset: 4px}
#kkpt-toggle .kkpt-icon {font-size: 23px;color: var(--kkpt-tone);text-shadow: 0 0 13px var(--kkpt-tone)}
#kkpt-toggle .kkpt-text {display: flex;flex-direction: column;gap: 2px}
#kkpt-toggle .kkpt-sub {font-size: 10px;opacity: .74}
#kkpt-toggle.kkpt-busy {pointer-events: none}
#kkpt-toggle.kkpt-quiet {opacity: 0;pointer-events: none}

/* Real interactive Wiki page, retained after the transition finishes. */
#kkpt-preview {
    position: fixed !important;
    z-index: 2147481000 !important;
    inset: 0 !important;
    display: block !important;
    box-sizing: border-box !important;
    width: 100vw !important;
    height: 100vh !important;
    padding: 0 !important;
    margin: 0 !important;
    border: 0 !important;
    border-radius: 0 !important;
    overflow: hidden !important;
    clip-path: inset(0 0 0 100%);
    pointer-events: none !important;
    background: #1f0710;
    transform: translateZ(0);
    will-change: clip-path;
}

body.page-Kuronata #kkpt-preview {background: #c0eafe}
#kkpt-preview.kkpt-active {pointer-events: auto !important;clip-path: inset(0)}

/* V8: residual rolling black smoke, tumbling page shards and blue petals. */
#kkpt-atmosphere {
    position: fixed !important;
    /* Above the fire shader: V5 rendered the smoke UNDER opaque soot,
       making its independently generated particles effectively invisible. */
    z-index: 2147482100 !important;
    inset: 0 !important;
    display: block !important;
    width: 100vw !important;
    height: 100vh !important;
    pointer-events: none !important;
    transition: opacity 180ms linear;
}

/* WebGL incandescent front / pearlescent rebirth; visual only. */
#kkpt-vfx {
    position: fixed !important;
    z-index: 2147482000 !important;
    inset: 0 !important;
    display: block !important;
    width: 100vw !important;
    height: 100vh !important;
    pointer-events: none !important;
    transition: opacity 180ms linear;
}

/* A truly short combustion / cold-ionization flash, tracking the tear. */
#kkpt-impact {
    --kkpt-impact-x: 50vw;
    position: fixed !important;
    z-index: 2147482200 !important;
    inset: 0 !important;
    display: block !important;
    pointer-events: none !important;
    width: 100vw !important;
    height: 100vh !important;
    opacity: 0;
    mix-blend-mode: screen;
    will-change: opacity;
}
#kkpt-impact.kkpt-impact-red {
    background:
        radial-gradient(ellipse 36vw 82vh at var(--kkpt-impact-x) 51%,
            rgba(255,223,160,.69) 0%,
            rgba(255,121,32,.47) 16%,
            rgba(255,53,17,.21) 48%,
            transparent 78%),
        linear-gradient(90deg,rgba(255,70,18,.12),rgba(255,124,24,.15));
}
#kkpt-impact.kkpt-impact-blue {
    background:
        radial-gradient(ellipse 32vw 80vh at var(--kkpt-impact-x) 51%,
            rgba(255,255,255,.35) 0%,
            rgba(157,235,255,.30) 18%,
            rgba(37,101,255,.08) 49%,
            transparent 79%),
        linear-gradient(90deg,rgba(30,140,255,.04),rgba(165,238,255,.04));
}

/* MediaWiki portal links are normal links until hovered/focused. */
#mw-content-text a.kkpt-portal-link,
.mw-parser-output a.kkpt-portal-link {
    --kkpt-fringe: #ff4662;
    --kkpt-halo: rgba(244,19,51,.30);
    /* Never change inline flow, line breaks or Infobox link dimensions. */
    position: relative;
    isolation: isolate;
    cursor: pointer;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
    transition: color .13s, text-shadow .13s, filter .13s;
}
#mw-content-text a.kkpt-portal-blue,
.mw-parser-output a.kkpt-portal-blue {
    --kkpt-fringe: #55e5ff;
    --kkpt-halo: rgba(23,183,255,.35);
}
#mw-content-text a.kkpt-portal-link:is(:hover,:focus-visible),
.mw-parser-output a.kkpt-portal-link:is(:hover,:focus-visible) {
    color: var(--kkpt-fringe) !important;
    text-shadow: -2px 0 var(--kkpt-halo),2px 0 rgba(108,219,255,.42),
                 0 0 11px var(--kkpt-halo);
    animation: kkpt-hover-jitter 800ms steps(1,end) infinite;
}
#mw-content-text a.kkpt-portal-link::before,
#mw-content-text a.kkpt-portal-link::after,
.mw-parser-output a.kkpt-portal-link::before,
.mw-parser-output a.kkpt-portal-link::after {
    position: absolute;
    inset: 0;
    z-index: 1;
    display: block;
    opacity: 0;
    content: attr(data-kkpt-text);
    color: var(--kkpt-fringe);
    line-height: inherit;
    font: inherit;
    font-weight: inherit;
    letter-spacing: inherit;
    text-decoration: none;
    pointer-events: none;
    white-space: nowrap;
    overflow: hidden;
}
#mw-content-text a.kkpt-portal-link:is(:hover,:focus-visible)::before,
.mw-parser-output a.kkpt-portal-link:is(:hover,:focus-visible)::before {
    opacity: .90;
    text-shadow: -2px 0 #fa345c;
    animation: kkpt-slice-a 680ms steps(1,end) infinite;
}
#mw-content-text a.kkpt-portal-link:is(:hover,:focus-visible)::after,
.mw-parser-output a.kkpt-portal-link:is(:hover,:focus-visible)::after {
    opacity: .80;
    color: #8af5ff;
    text-shadow: 2px 0 #39a7ff;
    animation: kkpt-slice-b 580ms steps(1,end) infinite;
}
@keyframes kkpt-hover-jitter {
    0%,12%,40%,72%,100% {transform:translate(0)}
    13% {transform:translate(1px,-1px)}
    15% {transform:translate(-1px,0)}
    42% {transform:translate(2px,0)}
    44% {transform:translate(0)}
    73% {transform:translate(-1px,1px)}
    75% {transform:translate(0)}
}
@keyframes kkpt-slice-a {
    0%,100% {clip-path:inset(0 0 91% 0);transform:translate(0)}
    15% {clip-path:inset(9% 0 70% 0);transform:translate(-3px,1px)}
    26% {clip-path:inset(40% 0 38% 0);transform:translate(4px,-1px)}
    42% {clip-path:inset(76% 0 9% 0);transform:translate(-2px,0)}
    59% {clip-path:inset(22% 0 59% 0);transform:translate(3px,1px)}
    84% {clip-path:inset(56% 0 22% 0);transform:translate(-4px,-1px)}
}
@keyframes kkpt-slice-b {
    0%,100% {clip-path:inset(78% 0 7% 0);transform:translate(0)}
    14% {clip-path:inset(46% 0 29% 0);transform:translate(2px,-1px)}
    37% {clip-path:inset(11% 0 80% 0);transform:translate(-4px,1px)}
    61% {clip-path:inset(65% 0 20% 0);transform:translate(4px,0)}
    83% {clip-path:inset(28% 0 49% 0);transform:translate(-2px,-1px)}
}

/* Pure overlay: NO styles or markup changes to native Infobox/caption. */
.kkpt-fate-gear {
    --kkpt-gear-ink: #f2feff;
    --kkpt-gear-halo: rgba(58,175,220,.42);
    position: fixed !important;
    z-index: 10000;
    box-sizing: border-box;
    top: 0;
    left: 0;
    width: 42px;
    height: 42px;
    display: grid !important;
    place-items: center;
    padding: 7px;
    border-radius: 50%;
    border: 1px solid rgba(255,255,255,.57);
    background: rgba(15,91,142,.15);
    box-shadow: inset 0 0 9px rgba(255,255,255,.18),
        0 0 11px var(--kkpt-gear-halo);
    color: var(--kkpt-gear-ink) !important;
    text-decoration: none !important;
    cursor: pointer;
    backdrop-filter: blur(5px);
    -webkit-backdrop-filter: blur(5px);
    transition: background .25s,box-shadow .25s,border-color .25s;
}

.kkpt-fate-gear[hidden] {display:none !important}

body.page-Kuronata .kkpt-fate-gear {
    --kkpt-gear-ink: #ffe7ec;
    --kkpt-gear-halo: rgba(245,58,82,.43);
    background: rgba(87,11,28,.38);
}

.kkpt-fate-gear:hover,
.kkpt-fate-gear:focus-visible {
    border-color: #fff;
    background: rgba(255,255,255,.15);
    box-shadow: inset 0 0 10px rgba(255,255,255,.22),
        0 0 24px var(--kkpt-gear-halo);
}

.kkpt-fate-gear:focus-visible {outline: 2px solid #fff;outline-offset: 3px}

.mw-parser-output .kkpt-fate-gear-svg,
#mw-content-text .kkpt-fate-gear-svg {
    display: block;
    width: 100%;
    height: 100%;
    overflow: visible;
    filter: drop-shadow(0 0 4px var(--kkpt-gear-halo));
    transform-origin: center;
}
.kkpt-fate-gear-svg path {fill: currentColor}
.kkpt-fate-gear-svg circle:first-of-type {
    fill: rgba(20,71,111,.45);
    stroke: currentColor;
    stroke-width: 1.2;
}
.kkpt-fate-gear-svg circle:last-of-type {fill:currentColor}

.kkpt-fate-gear-turning .kkpt-fate-gear-svg {
    animation: kkpt-fate-rotation 3.85s cubic-bezier(.19,.69,.25,1) both;
}
.kkpt-fate-gear::after {
    position: absolute;
    inset: -8px;
    border: 1px dashed var(--kkpt-gear-ink);
    border-radius: 50%;
    content: '';
    opacity: 0;
    pointer-events: none;
    transform: scale(.72);
}
.kkpt-fate-gear-turning::after {
    animation: kkpt-fate-ripple 1.15s ease-out both;
}
@keyframes kkpt-fate-rotation {
    0% {transform:rotate(0deg)}
    18% {transform:rotate(108deg)}
    57% {transform:rotate(594deg)}
    100% {transform:rotate(1080deg)}
}
@keyframes kkpt-fate-ripple {
    0% {opacity:0;transform:scale(.75) rotate(0deg)}
    20% {opacity:.85}
    100% {opacity:0;transform:scale(1.7) rotate(100deg)}
}

/* ==================================================================
   In-article FORM SWITCH: plain [[Kuronata|...]] / [[Kuranoka|...]].
   Place beside or inside an Infobox; no loader changes or inline JS.
   ================================================================== */
.mw-parser-output .kkpt-form-switch,
#mw-content-text .kkpt-form-switch {
    --kkpt-switch-tone: #58cfff;
    --kkpt-switch-ink: #e9faff;
    --kkpt-switch-background: rgba(9,36,61,.91);
    display: table;
    width: max-content;
    max-width: min(100%,320px);
    margin: .65em 0 1em;
    border-radius: 14px;
    isolation: isolate;
}

/* Respect any old in-article switch wikitext: never hide user content.
   Delete its wikitext manually if you prefer only the fate gear. */

/* After a right-floated Infobox, the switch floats alongside it when
   space allows; otherwise it falls below the box on narrow screens. */
.mw-parser-output .kkpt-form-switch--beside,
#mw-content-text .kkpt-form-switch--beside {
    float: right;
    clear: none;
    margin: .35em .8em 1em .5em;
}
.mw-parser-output .kkpt-form-switch--under,
#mw-content-text .kkpt-form-switch--under {
    float: right;
    clear: right;
}

body.page-Kuronata .kkpt-form-switch {
    --kkpt-switch-tone: #ff6279;
    --kkpt-switch-ink: #fff1f0;
    --kkpt-switch-background: rgba(47,7,19,.94);
}

#mw-content-text .kkpt-form-switch a.kkpt-portal-link,
.mw-parser-output .kkpt-form-switch a.kkpt-portal-link,
.mw-parser-output .kkpt-form-switch > a,
#mw-content-text .kkpt-form-switch > a {
    position: relative;
    box-sizing: border-box;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 47px;
    width: 100%;
    max-width: 320px;
    padding: 11px 19px;
    border: 1px solid color-mix(in srgb,var(--kkpt-switch-tone) 73%,transparent);
    border-radius: 14px;
    background: linear-gradient(135deg,
        color-mix(in srgb,var(--kkpt-switch-tone) 15%,transparent),
        transparent 50%),var(--kkpt-switch-background);
    box-shadow: 0 4px 18px rgba(0,0,0,.32),
        inset 0 1px 0 rgba(255,255,255,.12),
        0 0 16px color-mix(in srgb,var(--kkpt-switch-tone) 20%,transparent);
    color: var(--kkpt-switch-ink) !important;
    text-align: center;
    font: 700 12.5px/1.45 system-ui,sans-serif;
    letter-spacing: .075em;
    text-decoration: none !important;
    overflow: hidden;
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    transition: transform .22s,box-shadow .22s,border-color .22s;
}

#mw-content-text .kkpt-form-switch a.kkpt-portal-link:is(:hover,:focus-visible),
.mw-parser-output .kkpt-form-switch a.kkpt-portal-link:is(:hover,:focus-visible) {
    color: #fff !important;
    transform: translateY(-2px);
    border-color: #f5ffff;
    box-shadow: 0 6px 24px rgba(0,0,0,.42),
        0 0 22px color-mix(in srgb,var(--kkpt-switch-tone) 55%,transparent);
}

/* Keep the hidden second copy of the text inside the button's padding,
   so the hover glitch doesn't spill past the rounded silhouette. */
#mw-content-text .kkpt-form-switch a.kkpt-portal-link::before,
#mw-content-text .kkpt-form-switch a.kkpt-portal-link::after,
.mw-parser-output .kkpt-form-switch a.kkpt-portal-link::before,
.mw-parser-output .kkpt-form-switch a.kkpt-portal-link::after {
    inset: 11px 19px;
    text-align: center;
}

@media (max-width: 670px) {
    .mw-parser-output .kkpt-form-switch--beside,
    #mw-content-text .kkpt-form-switch--beside {
        float: none;
        clear: both;
        margin: .75em 0;
    }
}

@media (max-width: 600px) {
    #kkpt-toggle {padding: 10px 13px;gap: 8px}
    #kkpt-toggle .kkpt-sub {display:none}
}
@media (prefers-reduced-motion: reduce) {
    #kkpt-toggle {transition:none !important}
    #kkpt-vfx,#kkpt-atmosphere,#kkpt-impact {display:none !important}
    #mw-content-text a.kkpt-portal-link,
    .mw-parser-output a.kkpt-portal-link {animation:none !important}
    #mw-content-text a.kkpt-portal-link::before,
    #mw-content-text a.kkpt-portal-link::after,
    .mw-parser-output a.kkpt-portal-link::before,
    .mw-parser-output a.kkpt-portal-link::after {animation:none !important;opacity:0 !important}
    .kkpt-fate-gear-turning .kkpt-fate-gear-svg,
    .kkpt-fate-gear-turning::after {animation:none !important}
}
@media print {
    #kkpt-toggle,#kkpt-preview,#kkpt-vfx,#kkpt-atmosphere,#kkpt-impact,
    .kkpt-form-switch {display:none !important}
}