/* Registry jump components, expressed with the site's static CSS pipeline. */
.animated-shiny-text {
  --shiny-width: 100px;
  display: inline-flex;
  align-items: center;
  gap: inherit;
  color: currentColor;
  background-color: currentColor;
  background-image: linear-gradient(
    112deg,
    transparent 0%,
    transparent 38%,
    rgba(255, 255, 255, 0.88) 50%,
    transparent 62%,
    transparent 100%
  );
  background-position: calc(-100% - var(--shiny-width)) 0;
  background-size: var(--shiny-width) 100%;
  background-repeat: no-repeat;
  background-clip: text;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  animation: animated-shiny-text-sweep 8s cubic-bezier(0.6, 0.6, 0, 1) 1;
  transition: background-position 1s cubic-bezier(0.6, 0.6, 0, 1);
}

@keyframes animated-shiny-text-sweep {
  0%, 90%, 100% { background-position: calc(-100% - var(--shiny-width)) 0; }
  30%, 60% { background-position: calc(100% + var(--shiny-width)) 0; }
}

.interactive-hover-button {
  --interactive-accent: #173139;
  --interactive-foreground: #fff;
  position: relative;
  isolation: isolate;
  display: inline-flex;
  min-height: 44px;
  width: fit-content;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  padding: 0 1.3rem;
  border: 1px solid color-mix(in srgb, var(--interactive-accent) 22%, transparent);
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.78);
  color: var(--interactive-accent);
  cursor: pointer;
  font: inherit;
  font-size: 0.86rem;
  font-weight: 700;
  line-height: 1;
  text-decoration: none;
  box-shadow: 0 8px 20px rgba(23, 49, 57, 0.07);
  transition: color 260ms ease, border-color 260ms ease, box-shadow 260ms ease, transform 260ms cubic-bezier(0.16, 1, 0.3, 1);
}

.interactive-hover-button:not(.interactive-hover-button--static)::before {
  position: absolute;
  inset: 0;
  z-index: 0;
  background: var(--interactive-accent);
  content: "";
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform 300ms cubic-bezier(0.16, 1, 0.3, 1);
}

.interactive-hover-button__front,
.interactive-hover-button__reveal {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.55rem;
  white-space: nowrap;
}

.interactive-hover-button__front {
  position: relative;
  z-index: 1;
  color: var(--interactive-accent);
  transition: color 220ms ease, transform 300ms cubic-bezier(0.16, 1, 0.3, 1);
}

.interactive-hover-button__dot {
  display: inline-block;
  width: 0.48rem;
  height: 0.48rem;
  flex: 0 0 auto;
  border-radius: 50%;
  background: var(--interactive-accent);
  transform-origin: center;
  transition: transform 300ms cubic-bezier(0.16, 1, 0.3, 1);
}

.interactive-hover-button__label { display: inline-block; }

.interactive-hover-button__reveal {
  position: absolute;
  z-index: 2;
  inset: 0;
  color: var(--interactive-foreground);
  opacity: 0;
  transform: translateX(3rem);
  transition: transform 300ms cubic-bezier(0.16, 1, 0.3, 1), opacity 300ms ease;
}

.interactive-hover-button__arrow { width: 1rem; height: 1rem; }

.interactive-hover-button:hover,
.interactive-hover-button:focus-visible {
  border-color: var(--interactive-accent);
  box-shadow: 0 10px 24px rgba(23, 49, 57, 0.14);
  outline: none;
  transform: translateY(-1px);
}

.interactive-hover-button:not(.interactive-hover-button--static):hover::before,
.interactive-hover-button:not(.interactive-hover-button--static):focus-visible::before { transform: scaleX(1); }

.interactive-hover-button:not(.interactive-hover-button--static):hover .interactive-hover-button__front,
.interactive-hover-button:not(.interactive-hover-button--static):focus-visible .interactive-hover-button__front { color: var(--interactive-foreground); }

.interactive-hover-button:not(.interactive-hover-button--static):hover .interactive-hover-button__dot,
.interactive-hover-button:not(.interactive-hover-button--static):focus-visible .interactive-hover-button__dot {
  background: var(--interactive-foreground);
  transform: scale(0.72);
}

.interactive-hover-button:focus-visible {
  box-shadow: 0 0 0 3px rgba(39, 103, 91, 0.2), 0 10px 24px rgba(23, 49, 57, 0.14);
}

/* Static HTML pages use the same expansion without introducing nested markup. */
.interactive-hover-button--static {
  padding-inline: 1.35rem;
  color: var(--interactive-accent);
  transition: color 260ms ease, border-color 260ms ease, box-shadow 260ms ease, transform 260ms cubic-bezier(0.16, 1, 0.3, 1);
}

.interactive-hover-button--static::before {
  position: absolute;
  z-index: 0;
  left: 1.15rem;
  width: 0.48rem;
  height: 0.48rem;
  border-radius: 50%;
  background: var(--interactive-accent);
  content: "";
  transform-origin: center;
  transition: transform 300ms cubic-bezier(0.16, 1, 0.3, 1);
}

.interactive-hover-button--static::after {
  position: absolute;
  z-index: 1;
  inset: 0;
  display: grid;
  place-items: center;
  color: var(--interactive-foreground);
  content: attr(data-label) "  →";
  opacity: 0;
  transform: translateX(3rem);
  transition: transform 300ms cubic-bezier(0.16, 1, 0.3, 1), opacity 300ms ease;
}

.interactive-hover-button--static:hover,
.interactive-hover-button--static:focus-visible {
  color: transparent;
}

.interactive-hover-button--static:hover::before,
.interactive-hover-button--static:focus-visible::before {
  transform: scale(100.8);
}

.interactive-hover-button--static:hover::after,
.interactive-hover-button--static:focus-visible::after {
  opacity: 1;
  transform: translateX(0);
}

@media (prefers-reduced-motion: reduce) {
  .animated-shiny-text { animation: none; }

  .interactive-hover-button,
  .interactive-hover-button:not(.interactive-hover-button--static)::before,
  .interactive-hover-button__front,
  .interactive-hover-button__dot,
  .interactive-hover-button__reveal,
  .interactive-hover-button--static,
  .interactive-hover-button--static::before,
  .interactive-hover-button--static::after {
    transition: none;
  }
}

/* Legacy inner-page resets intentionally freeze broad motion. These explicit
   component selectors restore motion only for the requested jump controls. */
.inner-page .animated-shiny-text {
  /* 扫光只播放一次(元素重新渲染时会再播一次),避免持续闪烁。 */
  animation: animated-shiny-text-sweep 8s cubic-bezier(0.6, 0.6, 0, 1) 1 !important;
  transition: background-position 1s cubic-bezier(0.6, 0.6, 0, 1) !important;
}

.inner-page .interactive-hover-button,
.inner-page .interactive-hover-button__front,
.inner-page .interactive-hover-button__dot,
.inner-page .interactive-hover-button__reveal {
  transition: color 260ms ease, border-color 260ms ease, box-shadow 260ms ease, transform 300ms cubic-bezier(0.16, 1, 0.3, 1), opacity 300ms ease !important;
}

.inner-page .interactive-hover-button--static::before,
.inner-page .interactive-hover-button--static::after {
  transition: transform 300ms cubic-bezier(0.16, 1, 0.3, 1), opacity 300ms ease !important;
}

/* News is an editorial surface. Do not re-enable the global shimmer or the
   expanding hover treatment after inner-news.css has deliberately frozen it. */
html.inner-page body.inner-news-page .animated-shiny-text {
  animation: none !important;
  transition: none !important;
  background: none !important;
  color: inherit !important;
  -webkit-background-clip: initial !important;
  background-clip: initial !important;
  -webkit-text-fill-color: currentColor !important;
}

html.inner-page body.inner-news-page .interactive-hover-button,
html.inner-page body.inner-news-page .interactive-hover-button__front,
html.inner-page body.inner-news-page .interactive-hover-button__dot,
html.inner-page body.inner-news-page .interactive-hover-button__reveal,
html.inner-page body.inner-news-page .interactive-hover-button--static,
html.inner-page body.inner-news-page .interactive-hover-button--static::before,
html.inner-page body.inner-news-page .interactive-hover-button--static::after {
  animation: none !important;
  transition: none !important;
  transform: none !important;
}

html.inner-page body.inner-news-page .interactive-hover-button__dot,
html.inner-page body.inner-news-page .interactive-hover-button__reveal,
html.inner-page body.inner-news-page .interactive-hover-button--static::before,
html.inner-page body.inner-news-page .interactive-hover-button--static::after {
  display: none !important;
}
