mirror of
https://git.shipoclu.com/moon/plspace.git
synced 2026-08-13 02:42:30 +00:00
add mfm support
This commit is contained in:
@@ -0,0 +1,369 @@
|
||||
/*
|
||||
* MFM presentation ported from Pleroma-FE RichContent at
|
||||
* 38317bee99fbc9d680334eae5dcc33a37bb9777f.
|
||||
*/
|
||||
|
||||
.rich-text {
|
||||
--emoji-size: var(--ms-emoji-size);
|
||||
}
|
||||
|
||||
.rich-text .mfm {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.rich-text .mfm.-scale {
|
||||
font-size: calc(var(--emoji-size) / 2);
|
||||
}
|
||||
|
||||
.rich-text .mfm:not(.-scale) {
|
||||
--emoji-size: 2em;
|
||||
}
|
||||
|
||||
.rich-text .mfm.-pause {
|
||||
animation-play-state: paused;
|
||||
}
|
||||
|
||||
.rich-text .mfm[data-mfm-operator='x2'] {
|
||||
font-size: 300%;
|
||||
}
|
||||
|
||||
.rich-text .mfm[data-mfm-operator='x3'] {
|
||||
font-size: 400%;
|
||||
}
|
||||
|
||||
.rich-text .mfm[data-mfm-operator='x4'] {
|
||||
font-size: 600%;
|
||||
}
|
||||
|
||||
.rich-text .mfm[data-mfm-operator='sparkle'] {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.rich-text .mfm[data-mfm-operator='sparkle']::before,
|
||||
.rich-text .mfm[data-mfm-operator='sparkle']::after {
|
||||
content: '✨';
|
||||
position: absolute;
|
||||
opacity: 0.4;
|
||||
z-index: -1;
|
||||
animation-name: cheap-sparkle;
|
||||
animation-duration: 1s;
|
||||
animation-timing-function: ease-in-out;
|
||||
animation-iteration-count: infinite;
|
||||
}
|
||||
|
||||
.rich-text .mfm[data-mfm-operator='sparkle']::before {
|
||||
left: 0;
|
||||
animation-direction: alternate;
|
||||
}
|
||||
|
||||
.rich-text .mfm[data-mfm-operator='sparkle']::after {
|
||||
right: 0;
|
||||
animation-direction: alternate-reverse;
|
||||
}
|
||||
|
||||
.rich-text .mfm .custom-emoji {
|
||||
/* Misskey's emoji width knows no bounds. */
|
||||
max-width: unset !important;
|
||||
}
|
||||
|
||||
.rich-text:hover .mfm {
|
||||
animation-play-state: running;
|
||||
}
|
||||
|
||||
@keyframes mfm-spin {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes mfm-spinX {
|
||||
0% {
|
||||
transform: perspective(8em) rotateX(0);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: perspective(8em) rotateX(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes mfm-spinY {
|
||||
0% {
|
||||
transform: perspective(8em) rotateY(0);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: perspective(8em) rotateY(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes mfm-jump {
|
||||
0% {
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
25% {
|
||||
transform: translateY(-1em);
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
75% {
|
||||
transform: translateY(-0.5em);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes mfm-bounce {
|
||||
0% {
|
||||
transform: translateY(0) scale(1);
|
||||
}
|
||||
|
||||
25% {
|
||||
transform: translateY(-16px) scale(1);
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: translateY(0) scale(1);
|
||||
}
|
||||
|
||||
75% {
|
||||
transform: translateY(0) scale(1.5, 0.75);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: translateY(0) scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes mfm-twitch {
|
||||
0% {
|
||||
transform: translate(7px, -2px);
|
||||
}
|
||||
|
||||
5% {
|
||||
transform: translate(-3px, 1px);
|
||||
}
|
||||
|
||||
10% {
|
||||
transform: translate(-7px, -1px);
|
||||
}
|
||||
|
||||
15% {
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
20% {
|
||||
transform: translate(-8px, 6px);
|
||||
}
|
||||
|
||||
25% {
|
||||
transform: translate(-4px, -3px);
|
||||
}
|
||||
|
||||
30% {
|
||||
transform: translate(-4px, -6px);
|
||||
}
|
||||
|
||||
35% {
|
||||
transform: translate(-8px, -8px);
|
||||
}
|
||||
|
||||
40% {
|
||||
transform: translate(4px, 6px);
|
||||
}
|
||||
|
||||
45% {
|
||||
transform: translate(-3px, 1px);
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: translate(2px, -10px);
|
||||
}
|
||||
|
||||
55% {
|
||||
transform: translate(-7px);
|
||||
}
|
||||
|
||||
60% {
|
||||
transform: translate(-2px, 4px);
|
||||
}
|
||||
|
||||
65% {
|
||||
transform: translate(3px, -8px);
|
||||
}
|
||||
|
||||
70% {
|
||||
transform: translate(6px, 7px);
|
||||
}
|
||||
|
||||
75% {
|
||||
transform: translate(-7px, -2px);
|
||||
}
|
||||
|
||||
80% {
|
||||
transform: translate(-7px, -8px);
|
||||
}
|
||||
|
||||
85% {
|
||||
transform: translate(9px, 3px);
|
||||
}
|
||||
|
||||
90% {
|
||||
transform: translate(-3px, -2px);
|
||||
}
|
||||
|
||||
95% {
|
||||
transform: translate(-10px, 2px);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: translate(-2px, -6px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes mfm-shake {
|
||||
0% {
|
||||
transform: translate(-3px, -1px) rotate(-8deg);
|
||||
}
|
||||
|
||||
5% {
|
||||
transform: translateY(-1px) rotate(-10deg);
|
||||
}
|
||||
|
||||
10% {
|
||||
transform: translate(1px, -3px) rotate(0);
|
||||
}
|
||||
|
||||
15% {
|
||||
transform: translate(1px, 1px) rotate(11deg);
|
||||
}
|
||||
|
||||
20% {
|
||||
transform: translate(-2px, 1px) rotate(1deg);
|
||||
}
|
||||
|
||||
25% {
|
||||
transform: translate(-1px, -2px) rotate(-2deg);
|
||||
}
|
||||
|
||||
30% {
|
||||
transform: translate(-1px, 2px) rotate(-3deg);
|
||||
}
|
||||
|
||||
35% {
|
||||
transform: translate(2px, 1px) rotate(6deg);
|
||||
}
|
||||
|
||||
40% {
|
||||
transform: translate(-2px, -3px) rotate(-9deg);
|
||||
}
|
||||
|
||||
45% {
|
||||
transform: translateY(-1px) rotate(-12deg);
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: translate(1px, 2px) rotate(10deg);
|
||||
}
|
||||
|
||||
55% {
|
||||
transform: translateY(-3px) rotate(8deg);
|
||||
}
|
||||
|
||||
60% {
|
||||
transform: translate(1px, -1px) rotate(8deg);
|
||||
}
|
||||
|
||||
65% {
|
||||
transform: translateY(-1px) rotate(-7deg);
|
||||
}
|
||||
|
||||
70% {
|
||||
transform: translate(-1px, -3px) rotate(6deg);
|
||||
}
|
||||
|
||||
75% {
|
||||
transform: translateY(-2px) rotate(4deg);
|
||||
}
|
||||
|
||||
80% {
|
||||
transform: translate(-2px, -1px) rotate(3deg);
|
||||
}
|
||||
|
||||
85% {
|
||||
transform: translate(1px, -3px) rotate(-10deg);
|
||||
}
|
||||
|
||||
90% {
|
||||
transform: translate(1px) rotate(3deg);
|
||||
}
|
||||
|
||||
95% {
|
||||
transform: translate(-2px) rotate(-3deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: translate(2px, 1px) rotate(2deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes mfm-rubberBand {
|
||||
0% {
|
||||
transform: scale(1);
|
||||
}
|
||||
|
||||
30% {
|
||||
transform: scale(1.25, 0.75);
|
||||
}
|
||||
|
||||
40% {
|
||||
transform: scale(0.75, 1.25);
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: scale(1.15, 0.85);
|
||||
}
|
||||
|
||||
65% {
|
||||
transform: scale(0.95, 1.05);
|
||||
}
|
||||
|
||||
75% {
|
||||
transform: scale(1.05, 0.95);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes mfm-rainbow {
|
||||
0% {
|
||||
filter: hue-rotate() contrast(150%) saturate(150%);
|
||||
}
|
||||
|
||||
100% {
|
||||
filter: hue-rotate(360deg) contrast(150%) saturate(150%);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes cheap-sparkle {
|
||||
0% {
|
||||
filter: hue-rotate() contrast(150%) saturate(150%);
|
||||
transform: translateY(-0.5em);
|
||||
}
|
||||
|
||||
100% {
|
||||
filter: hue-rotate(360deg) contrast(150%) saturate(150%);
|
||||
transform: translateY(0.5em);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user