.ti-stamp-stage {
  position: fixed;
  inset: 0;
  pointer-events: none;
  overflow: hidden;
  z-index: 2147483644;
}
.ti-stamp-art {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: contain;
  flex: none;
  user-select: none;
}
.ti-stamp-burst {
  position: absolute;
  width: var(--stamp-size);
  height: var(--stamp-size);
  pointer-events: none;
  isolation: isolate;
  contain: layout style;
  animation: ti-stamp-flight var(--duration) linear both;
  will-change: transform, opacity;
}
.ti-stamp-face {
  position: relative;
  z-index: 2;
  filter: drop-shadow(0 2px 3px #0003);
}
.ti-stamp-color-glow {
  position: absolute;
  z-index: 1;
  inset: 9%;
  border-radius: 44%;
  background: color-mix(in srgb, var(--stamp-color) 62%, transparent);
  filter: blur(16px);
  opacity: 0.9;
  animation: ti-stamp-color-pulse var(--duration) ease-in-out both;
}
.ti-stamp-look-glow .ti-stamp-face {
  filter: drop-shadow(0 0 7px var(--stamp-color))
    drop-shadow(0 0 15px color-mix(in srgb, var(--stamp-color) 75%, transparent));
}
.ti-stamp-glint {
  position: absolute;
  z-index: 3;
  width: 26%;
  aspect-ratio: 1;
  opacity: 0;
  background: #fff;
  filter: drop-shadow(0 0 5px #fff);
  clip-path: polygon(50% 0, 61% 39%, 100% 50%, 61% 61%, 50% 100%, 39% 61%, 0 50%, 39% 39%);
  animation: ti-stamp-glimmer 650ms var(--delay) ease-in-out 2 both;
}
.ti-stamp-aura {
  position: absolute;
  inset: 8%;
  border-radius: 50%;
  opacity: 0;
  border: 2px solid var(--fx-color);
}
.ti-stamp-particle {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 6px;
  height: 6px;
  border-radius: 2px;
  background: var(--fx-color);
  box-shadow: 0 0 7px var(--fx-color);
  animation: ti-stamp-scatter var(--duration) var(--delay) both;
}
.ti-stamp-sprite {
  position: absolute;
  left: 50%;
  top: 50%;
  width: calc(var(--stamp-size) * var(--sheet-scale, 2.75));
  height: calc(var(--stamp-size) * var(--sheet-scale, 2.75));
  transform: translate(-50%, -50%);
  background-size: 800% 600%;
  z-index: 1;
  pointer-events: none;
  animation: ti-stamp-sprite-frames var(--duration) var(--start-delay, 0ms) steps(1, end) both;
}
.ti-stamp-sprite.is-front { z-index: 3; }
@keyframes ti-stamp-sprite-frames {
  0.000000% { background-position: 0.000000% 0.000000%; }
  2.127660% { background-position: 14.285714% 0.000000%; }
  4.255319% { background-position: 28.571429% 0.000000%; }
  6.382979% { background-position: 42.857143% 0.000000%; }
  8.510638% { background-position: 57.142857% 0.000000%; }
  10.638298% { background-position: 71.428571% 0.000000%; }
  12.765957% { background-position: 85.714286% 0.000000%; }
  14.893617% { background-position: 100.000000% 0.000000%; }
  17.021277% { background-position: 0.000000% 20.000000%; }
  19.148936% { background-position: 14.285714% 20.000000%; }
  21.276596% { background-position: 28.571429% 20.000000%; }
  23.404255% { background-position: 42.857143% 20.000000%; }
  25.531915% { background-position: 57.142857% 20.000000%; }
  27.659574% { background-position: 71.428571% 20.000000%; }
  29.787234% { background-position: 85.714286% 20.000000%; }
  31.914894% { background-position: 100.000000% 20.000000%; }
  34.042553% { background-position: 0.000000% 40.000000%; }
  36.170213% { background-position: 14.285714% 40.000000%; }
  38.297872% { background-position: 28.571429% 40.000000%; }
  40.425532% { background-position: 42.857143% 40.000000%; }
  42.553191% { background-position: 57.142857% 40.000000%; }
  44.680851% { background-position: 71.428571% 40.000000%; }
  46.808511% { background-position: 85.714286% 40.000000%; }
  48.936170% { background-position: 100.000000% 40.000000%; }
  51.063830% { background-position: 0.000000% 60.000000%; }
  53.191489% { background-position: 14.285714% 60.000000%; }
  55.319149% { background-position: 28.571429% 60.000000%; }
  57.446809% { background-position: 42.857143% 60.000000%; }
  59.574468% { background-position: 57.142857% 60.000000%; }
  61.702128% { background-position: 71.428571% 60.000000%; }
  63.829787% { background-position: 85.714286% 60.000000%; }
  65.957447% { background-position: 100.000000% 60.000000%; }
  68.085106% { background-position: 0.000000% 80.000000%; }
  70.212766% { background-position: 14.285714% 80.000000%; }
  72.340426% { background-position: 28.571429% 80.000000%; }
  74.468085% { background-position: 42.857143% 80.000000%; }
  76.595745% { background-position: 57.142857% 80.000000%; }
  78.723404% { background-position: 71.428571% 80.000000%; }
  80.851064% { background-position: 85.714286% 80.000000%; }
  82.978723% { background-position: 100.000000% 80.000000%; }
  85.106383% { background-position: 0.000000% 100.000000%; }
  87.234043% { background-position: 14.285714% 100.000000%; }
  89.361702% { background-position: 28.571429% 100.000000%; }
  91.489362% { background-position: 42.857143% 100.000000%; }
  93.617021% { background-position: 57.142857% 100.000000%; }
  95.744681% { background-position: 71.428571% 100.000000%; }
  97.872340% { background-position: 85.714286% 100.000000%; }
  100.000000% { background-position: 100.000000% 100.000000%; }
}
.ti-stamp-actor {
  position: absolute;
  top: 102%;
  left: 50%;
  max-width: 160px;
  padding: 2px 3px;
  color: #fff;
  font: 600 11px/1.3 sans-serif;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  text-shadow:
    0 1px 2px #000,
    0 0 4px #0009;
  transform: translateX(-50%);
}
.ti-stamp-avatar {
  position: absolute;
  z-index: 5;
  right: -4px;
  bottom: -4px;
  width: 20px;
  height: 20px;
  object-fit: cover;
  border: 1px solid #a970ff;
  border-radius: 50%;
  background: #18181b;
  box-shadow: 0 1px 5px #0009;
}
.ti-stamp-debug-source {
  position: absolute;
  z-index: 8;
  top: -17px;
  right: -12px;
  padding: 2px 5px;
  border: 1px solid #ff9fce;
  border-radius: 3px;
  background: #2b202be8;
  color: #fff;
  font:
    700 9px/1.2 Inter,
    "Yu Gothic UI",
    Meiryo,
    sans-serif;
  white-space: nowrap;
  box-shadow: 0 2px 7px #0005;
}
.ti-stamp-fx-nova .ti-stamp-aura,
.ti-stamp-fx-royal .ti-stamp-aura {
  animation: ti-stamp-ring var(--duration) both;
  box-shadow:
    0 0 0 5px #ffffff15,
    0 0 0 9px var(--fx-color);
}
.ti-stamp-look-glow .ti-stamp-aura {
  animation: ti-stamp-ring var(--duration) both;
  box-shadow:
    0 0 0 4px #ffffff18,
    0 0 0 8px var(--stamp-color);
}
.ti-stamp-fx-royal .ti-stamp-particle {
  width: 8px;
  height: 5px;
  border-radius: 2px;
  background: var(--fx-color);
  animation-name: ti-stamp-confetti;
}
.ti-stamp-fx-royal .ti-stamp-particle:nth-child(4n + 2) {
  background: #ff88b7;
  box-shadow: 0 0 7px #ff88b7;
}
.ti-stamp-fx-royal .ti-stamp-particle:nth-child(4n + 3) {
  background: #ffe36f;
  box-shadow: 0 0 7px #ffe36f;
}
.ti-stamp-fx-royal .ti-stamp-particle:nth-child(4n) {
  background: #70e5e1;
  box-shadow: 0 0 7px #70e5e1;
}
.ti-stamp-fx-royal .ti-stamp-particle:nth-child(4n + 1) {
  background: #a991ff;
  box-shadow: 0 0 7px #a991ff;
}
.ti-stamp-fx-meteor .ti-stamp-aura {
  display: none;
}
.ti-stamp-fx-quiet {
  animation: ti-stamp-fade 650ms linear both;
  transform: translate(-50%, -50%);
}
.ti-stamp-burst {
  animation-delay: var(--start-delay, 0ms);
}
.ti-stamp-burst :is(.ti-stamp-aura, .ti-stamp-color-glow, .ti-stamp-glint, .ti-stamp-particle) {
  animation-delay: calc(var(--start-delay, 0ms) + var(--delay, 0ms));
}
/* Position, scale and opacity share one timeline; ascent never waits for the entrance. */
@keyframes ti-stamp-flight {
  0% {
    opacity: 0;
    transform: translate(calc(-50% - var(--drift)), -50%) scale(0.72);
  }
  12% {
    opacity: 0.9;
    transform: translate(calc(-50% - var(--drift) * 0.88), calc(-50% - var(--rise) * 0.12))
      scale(0.87);
  }
  28% {
    opacity: 1;
    transform: translate(calc(-50% - var(--drift) * 0.72), calc(-50% - var(--rise) * 0.28))
      scale(0.98);
  }
  65% {
    opacity: 1;
    transform: translate(calc(-50% - var(--drift) * 0.35), calc(-50% - var(--rise) * 0.65))
      scale(1.03);
  }
  100% {
    opacity: 0;
    transform: translate(-50%, calc(-50% - var(--rise))) scale(1.05);
  }
}
@keyframes ti-stamp-fade {
  0%,
  100% {
    opacity: 0;
  }
  15%,
  75% {
    opacity: 1;
  }
}
@keyframes ti-stamp-glimmer {
  0%,
  100% {
    opacity: 0;
    transform: translate(-50%, -50%) scale(0.2) rotate(-15deg);
  }
  45% {
    opacity: 1;
    transform: translate(-50%, -50%) scale(1) rotate(15deg);
  }
}
@keyframes ti-stamp-scatter {
  0%,
  8% {
    opacity: 0;
    transform: rotate(var(--angle)) translateY(-15px) scale(0.1);
  }
  22% {
    opacity: 1;
  }
  70%,
  100% {
    opacity: 0;
    transform: rotate(var(--angle)) translateY(calc(var(--stamp-size) * -0.8)) rotate(90deg)
      scale(0.4);
  }
}
@keyframes ti-stamp-rays {
  0%,
  10% {
    opacity: 0;
    transform: rotate(var(--angle)) translateY(-25px) scaleY(0.1);
  }
  28% {
    opacity: 0.9;
  }
  80%,
  100% {
    opacity: 0;
    transform: rotate(var(--angle)) translateY(calc(var(--stamp-size) * -0.95)) scaleY(1.3);
  }
}
@keyframes ti-stamp-confetti {
  0%,
  10% {
    opacity: 0;
    transform: rotate(var(--angle)) translateY(-12px) scale(0.3);
  }
  24% {
    opacity: 1;
  }
  100% {
    opacity: 0;
    transform: rotate(var(--angle)) translateY(calc(var(--stamp-size) * -0.9)) rotate(220deg)
      scale(0.7);
  }
}
@keyframes ti-stamp-ring {
  0%,
  8% {
    opacity: 0;
    transform: scale(0.3);
  }
  25% {
    opacity: 0.85;
  }
  80%,
  100% {
    opacity: 0;
    transform: scale(2);
  }
}
@keyframes ti-stamp-trail {
  0% {
    opacity: 0;
    transform: translate(-60px, 35px) rotate(-30deg) scaleX(0.2);
  }
  25% {
    opacity: 0.65;
  }
  55%,
  100% {
    opacity: 0;
    transform: rotate(-30deg) scaleX(1);
  }
}
@keyframes ti-stamp-color-pulse {
  0%,
  100% {
    opacity: 0;
    transform: scale(0.65);
  }
  24%,
  72% {
    opacity: 0.9;
    transform: scale(1.12);
  }
}
@media (prefers-reduced-motion: reduce) {
  .ti-stamp-burst {
    animation: ti-stamp-fade 650ms linear both;
    transform: translate(-50%, -50%);
  }
  .ti-stamp-particle,
  .ti-stamp-aura,
  .ti-stamp-glint,
  .ti-stamp-sprite,
  .ti-stamp-color-glow {
    display: none;
  }
}
