MediaWiki:KuranokaPageTransition.css:修订间差异
MediaWiki界面页面
更多操作
无编辑摘要 |
无编辑摘要 |
||
| 第1行: | 第1行: | ||
/* Kuranoka Page Transition | /* Kuranoka Page Transition V9 — FATE / EROSION | ||
Load only on /wiki/Kuranoka and /wiki/Kuronata. | Load only on /wiki/Kuranoka and /wiki/Kuronata. | ||
No Citizen.css / Common.css changes. */ | No Citizen.css / Common.css changes. */ | ||
| 第75行: | 第75行: | ||
#kkpt-preview.kkpt-active {pointer-events: auto !important;clip-path: inset(0)} | #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 { | #kkpt-atmosphere { | ||
position: fixed !important; | position: fixed !important; | ||
| 第89行: | 第89行: | ||
} | } | ||
/* WebGL incandescent front / | /* WebGL incandescent front / pearlescent rebirth; visual only. */ | ||
#kkpt-vfx { | #kkpt-vfx { | ||
position: fixed !important; | position: fixed !important; | ||
| 第118行: | 第118行: | ||
background: | background: | ||
radial-gradient(ellipse 36vw 82vh at var(--kkpt-impact-x) 51%, | radial-gradient(ellipse 36vw 82vh at var(--kkpt-impact-x) 51%, | ||
rgba(255, | rgba(255,223,160,.69) 0%, | ||
rgba(255, | rgba(255,121,32,.47) 16%, | ||
rgba(255,53,17,. | rgba(255,53,17,.21) 48%, | ||
transparent 78%), | transparent 78%), | ||
linear-gradient(90deg,rgba(255,70,18,.12),rgba(255,124,24,.15)); | linear-gradient(90deg,rgba(255,70,18,.12),rgba(255,124,24,.15)); | ||
| 第127行: | 第127行: | ||
background: | background: | ||
radial-gradient(ellipse 32vw 80vh at var(--kkpt-impact-x) 51%, | radial-gradient(ellipse 32vw 80vh at var(--kkpt-impact-x) 51%, | ||
rgba(255,255,255,. | rgba(255,255,255,.35) 0%, | ||
rgba(157,235,255,. | rgba(157,235,255,.30) 18%, | ||
rgba(37,101,255,. | rgba(37,101,255,.08) 49%, | ||
transparent 79%), | transparent 79%), | ||
linear-gradient(90deg,rgba(30,140,255,. | linear-gradient(90deg,rgba(30,140,255,.04),rgba(165,238,255,.04)); | ||
} | } | ||
| 第215行: | 第215行: | ||
61% {clip-path:inset(65% 0 20% 0);transform:translate(4px,0)} | 61% {clip-path:inset(65% 0 20% 0);transform:translate(4px,0)} | ||
83% {clip-path:inset(28% 0 49% 0);transform:translate(-2px,-1px)} | 83% {clip-path:inset(28% 0 49% 0);transform:translate(-2px,-1px)} | ||
} | |||
/* Fate wheel: mounted automatically in the top-right Infobox title band. */ | |||
.mw-parser-output .kkpt-fate-gear-host, | |||
#mw-content-text .kkpt-fate-gear-host { | |||
position: relative !important; | |||
} | |||
.mw-parser-output .kkpt-fate-gear, | |||
#mw-content-text .kkpt-fate-gear { | |||
--kkpt-gear-ink: #f2feff; | |||
--kkpt-gear-halo: rgba(58,175,220,.42); | |||
position: absolute !important; | |||
z-index: 12; | |||
box-sizing: border-box; | |||
top: 50%; | |||
right: 9px; | |||
transform: translateY(-50%); | |||
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; | |||
} | |||
.mw-parser-output .kkpt-fate-gear-host--box > .kkpt-fate-gear, | |||
#mw-content-text .kkpt-fate-gear-host--box > .kkpt-fate-gear { | |||
top: 12px; | |||
transform: none; | |||
} | |||
body.page-Kuronata .kkpt-fate-gear { | |||
--kkpt-gear-ink: #ffe7ec; | |||
--kkpt-gear-halo: rgba(245,58,82,.43); | |||
background: rgba(87,11,28,.38); | |||
} | |||
.mw-parser-output .kkpt-fate-gear:hover, | |||
.mw-parser-output .kkpt-fate-gear:focus-visible, | |||
#mw-content-text .kkpt-fate-gear:hover, | |||
#mw-content-text .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; | |||
} | |||
/* V9 is icon-only. If V8's text-button wikitext still exists, suppress | |||
the old button visually; the original secret article links keep working. */ | |||
body.page-Kuranoka .kkpt-form-switch, | |||
body.page-Kuronata .kkpt-form-switch { | |||
display: none !important; | |||
} | |||
/* 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; | |||
} | |||
} | } | ||
| 第230行: | 第437行: | ||
.mw-parser-output a.kkpt-portal-link::before, | .mw-parser-output a.kkpt-portal-link::before, | ||
.mw-parser-output a.kkpt-portal-link::after {animation:none !important;opacity:0 !important} | .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 { | @media print { | ||
#kkpt-toggle,#kkpt-preview,#kkpt-vfx,#kkpt-atmosphere,#kkpt-impact {display:none !important} | #kkpt-toggle,#kkpt-preview,#kkpt-vfx,#kkpt-atmosphere,#kkpt-impact, | ||
.kkpt-form-switch {display:none !important} | |||
} | } | ||
2026年10月23日 (五) 14:18的版本
/* Kuranoka Page Transition V9 — FATE / EROSION
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);
display: inline-block;
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)}
}
/* Fate wheel: mounted automatically in the top-right Infobox title band. */
.mw-parser-output .kkpt-fate-gear-host,
#mw-content-text .kkpt-fate-gear-host {
position: relative !important;
}
.mw-parser-output .kkpt-fate-gear,
#mw-content-text .kkpt-fate-gear {
--kkpt-gear-ink: #f2feff;
--kkpt-gear-halo: rgba(58,175,220,.42);
position: absolute !important;
z-index: 12;
box-sizing: border-box;
top: 50%;
right: 9px;
transform: translateY(-50%);
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;
}
.mw-parser-output .kkpt-fate-gear-host--box > .kkpt-fate-gear,
#mw-content-text .kkpt-fate-gear-host--box > .kkpt-fate-gear {
top: 12px;
transform: none;
}
body.page-Kuronata .kkpt-fate-gear {
--kkpt-gear-ink: #ffe7ec;
--kkpt-gear-halo: rgba(245,58,82,.43);
background: rgba(87,11,28,.38);
}
.mw-parser-output .kkpt-fate-gear:hover,
.mw-parser-output .kkpt-fate-gear:focus-visible,
#mw-content-text .kkpt-fate-gear:hover,
#mw-content-text .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;
}
/* V9 is icon-only. If V8's text-button wikitext still exists, suppress
the old button visually; the original secret article links keep working. */
body.page-Kuranoka .kkpt-form-switch,
body.page-Kuronata .kkpt-form-switch {
display: none !important;
}
/* 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}
}