/* Animated role effects: fx-admin (pixel sparkle + sheen), fx-mod (purple pixel sparkle), fx-diamond (diamond shine) */
.rbadge.fx-admin,.rbadge.fx-mod,.rbadge.fx-diamond{position:relative;overflow:visible;isolation:isolate}
.uname.fx-admin,.uname.fx-mod,.uname.fx-diamond{position:relative}
/* pixel stars: a 2px square + 4 arms drawn with hard box-shadows (crisp, blocky) */
.fx-admin::before,.fx-admin::after,.fx-mod::before,.fx-mod::after,.rbadge.fx-diamond::after{content:"";position:absolute;width:2px;height:2px;pointer-events:none;image-rendering:pixelated;opacity:0;z-index:2}
.fx-admin::before,.fx-admin::after{background:#fff;color:#ffe27a;box-shadow:0 -2px currentColor,0 2px currentColor,-2px 0 currentColor,2px 0 currentColor,0 -4px #fff8,0 4px #fff8,-4px 0 #fff8,4px 0 #fff8}
.fx-mod::before,.fx-mod::after{background:#f3e8ff;color:#a855f7;box-shadow:0 -2px currentColor,0 2px currentColor,-2px 0 currentColor,2px 0 currentColor,0 -4px #c084fc99,0 4px #c084fc99,-4px 0 #c084fc99,4px 0 #c084fc99}
.fx-admin::before,.fx-mod::before{top:-3px;right:-2px;animation:fxTwinkle 1.8s steps(4,end) infinite}
.fx-admin::after,.fx-mod::after{bottom:-3px;left:3px;animation:fxTwinkle 1.8s steps(4,end) .9s infinite}
.uname.fx-admin::after,.uname.fx-mod::after{left:auto;right:30%;bottom:auto;top:-4px;animation-delay:1.3s}
@keyframes fxTwinkle{0%,55%,100%{opacity:0;transform:scale(.5)}65%{opacity:1;transform:scale(1)}75%{opacity:.8;transform:scale(1.5)}85%{opacity:.3;transform:scale(1)}}
/* admin: sweeping sheen across badge + name */
.rbadge.fx-admin{background:linear-gradient(110deg,transparent 35%,rgba(255,255,255,.55) 48%,rgba(255,240,180,.25) 52%,transparent 65%) no-repeat,color-mix(in srgb,currentColor 14%,transparent);background-size:250% 100%,auto;background-position:150% 0,0 0;animation:fxSheen 3s ease-in-out infinite;box-shadow:0 0 6px color-mix(in srgb,currentColor 45%,transparent)}
@keyframes fxSheen{0%,40%{background-position:150% 0,0 0}100%{background-position:-60% 0,0 0}}
.uname.fx-admin{background:linear-gradient(110deg,currentColor 40%,#fff 50%,currentColor 60%) 0 0/250% 100% repeat-x;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;animation:fxSheenTxt 3s ease-in-out infinite}
@keyframes fxSheenTxt{0%,40%{background-position:120% 0}100%{background-position:-20% 0}}
/* mod: purple glow pulse */
.rbadge.fx-mod{color:#d8b4fe!important;border-color:#a855f7!important;background:#a855f71f;box-shadow:0 0 0 1px #a855f744,0 0 8px #a855f755;animation:fxPurple 2.4s ease-in-out infinite}
.uname.fx-mod{color:#c084fc!important;text-shadow:0 0 6px #a855f7aa;animation:fxPurpleTxt 2.4s ease-in-out infinite}
@keyframes fxPurple{50%{box-shadow:0 0 0 1px #c084fc88,0 0 14px #a855f799}}
@keyframes fxPurpleTxt{50%{text-shadow:0 0 10px #c084fc,0 0 2px #e9d5ff}}
/* diamond: icy faceted gradient, glint sweep, sparkle flash */
.rbadge.fx-diamond{color:#e0fbff!important;border-color:#a5f3fc!important;text-shadow:0 0 4px #67e8f9;background:linear-gradient(115deg,transparent 40%,rgba(255,255,255,.85) 50%,transparent 60%) no-repeat,linear-gradient(135deg,#0e3a4a 0%,#1d6f86 22%,#0b2a38 38%,#5fc9dd 52%,#123e50 66%,#3aa6bf 82%,#0c3040 100%);background-size:250% 100%,100% 100%;animation:fxGlint 2.6s ease-in-out infinite;box-shadow:0 0 8px #67e8f966,inset 0 0 4px #ffffff55}
@keyframes fxGlint{0%,50%{background-position:160% 0,0 0}100%{background-position:-60% 0,0 0}}
.rbadge.fx-diamond::after{width:3px;height:3px;background:#fff;top:-2px;right:3px;border-radius:0;box-shadow:0 0 6px 2px #fff,0 0 12px 3px #67e8f9;transform:rotate(45deg);animation:fxFlash 2.6s ease-out infinite}
@keyframes fxFlash{0%,82%,100%{opacity:0;transform:rotate(45deg) scale(.2)}88%{opacity:1;transform:rotate(45deg) scale(1.6)}94%{opacity:.4;transform:rotate(45deg) scale(.8)}}
.uname.fx-diamond{background:linear-gradient(110deg,#a5f3fc 0%,#ffffff 20%,#67e8f9 40%,#ffffff 50%,#22d3ee 65%,#e0fbff 85%,#a5f3fc 100%) 0 0/250% 100%;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;filter:drop-shadow(0 0 3px #67e8f988);animation:fxIce 3.5s linear infinite}
@keyframes fxIce{to{background-position:-250% 0}}
@media (prefers-reduced-motion:reduce){.fx-admin,.fx-mod,.fx-diamond,.fx-admin::before,.fx-admin::after,.fx-mod::before,.fx-mod::after,.fx-diamond::after{animation:none!important}.fx-admin::before,.fx-mod::before{opacity:1}}
