/* 全站共用：首页的蓝色光标、卡片光晕与进场动效（从 css/dark-system.css 抽出） */
/* Circular magnetic cursor, adapted from the reference interaction language. */
.alchemy-cursor {
  position: fixed;
  inset: 0;
  z-index: 2147483646;
  pointer-events: none;
  opacity: 0;
  transition: opacity .18s ease;
}

.alchemy-cursor.is-visible { opacity: 1; }

.alchemy-cursor-ring,
.alchemy-cursor-dot {
  position: fixed;
  top: 0;
  left: 0;
  border-radius: 50%;
  will-change: transform, width, height;
}

.alchemy-cursor-ring {
  width: 30px;
  height: 30px;
  margin: -15px 0 0 -15px;
  border: 1px solid rgba(122, 152, 255, .82);
  background: rgba(77, 116, 255, .025);
  box-shadow: 0 0 22px rgba(77, 116, 255, .12);
  transition:
    width .22s cubic-bezier(.2, .8, .2, 1),
    height .22s cubic-bezier(.2, .8, .2, 1),
    margin .22s cubic-bezier(.2, .8, .2, 1),
    border-color .22s ease,
    background-color .22s ease,
    box-shadow .22s ease;
}

.alchemy-cursor-dot {
  width: 5px;
  height: 5px;
  margin: -2.5px 0 0 -2.5px;
  background: #6f91ff;
  box-shadow: 0 0 12px rgba(111, 145, 255, .9);
}

.alchemy-cursor.is-magnetic .alchemy-cursor-ring {
  width: 56px;
  height: 56px;
  margin: -28px 0 0 -28px;
  border-color: rgba(137, 164, 255, .95);
  background: rgba(77, 116, 255, .1);
  box-shadow: 0 0 34px rgba(77, 116, 255, .22);
}

.alchemy-cursor.is-pressed .alchemy-cursor-ring {
  width: 42px;
  height: 42px;
  margin: -21px 0 0 -21px;
  background: rgba(77, 116, 255, .18);
}
@media (hover: hover) and (pointer: fine) {
  .has-alchemy-cursor,
  .has-alchemy-cursor * { cursor: none !important; }

  /* <dialog> and fullscreen content render in the top layer above the
     decorative cursor, so they must keep the system pointer. */
  .has-alchemy-cursor dialog[open],
  .has-alchemy-cursor dialog[open] *,
  .has-alchemy-cursor :fullscreen,
  .has-alchemy-cursor :fullscreen * { cursor: auto !important; }

  .has-alchemy-cursor dialog[open] button,
  .has-alchemy-cursor dialog[open] a[href] { cursor: pointer !important; }
}

/*
 * Shared cursor light field. The brighter core follows the pointer while a
 * long transparent falloff keeps the interaction soft at component edges.
 */
.has-interactive-glow {
  --interactive-glow-size: 430px;
  position: relative;
  isolation: isolate;
}

.interactive-glow {
  position: absolute;
  inset: 0;
  z-index: 1;
  display: block;
  pointer-events: none;
  opacity: 0;
  background: radial-gradient(
    var(--interactive-glow-size) circle at var(--pointer-x, 50%) var(--pointer-y, 50%),
    rgba(91,128,255,.30) 0%,
    rgba(77,116,255,.18) 22%,
    rgba(63,96,218,.085) 45%,
    rgba(53,82,180,.028) 62%,
    transparent 76%
  );
  mix-blend-mode: screen;
  transition: opacity .34s cubic-bezier(.22, 1, .36, 1);
  will-change: opacity, background-position;
}

.has-interactive-glow:hover > .interactive-glow,
.has-interactive-glow:focus-within > .interactive-glow {
  opacity: 1;
}

/* 子页面不加悬停边框：卡片没有内边距时，边框会贴着文字，不好看 */
/* Shared motion layer */
.ui-ready .ui-reveal {
  opacity: 0;
  transform: translate3d(0, 34px, 0);
  transition:
    opacity .78s cubic-bezier(.2,.75,.2,1),
    transform .78s cubic-bezier(.2,.75,.2,1);
  transition-delay: var(--ui-delay, 0ms);
}

.ui-ready .ui-reveal.is-ui-visible {
  opacity: 1;
  transform: translate3d(0, 0, 0);
}
@media (prefers-reduced-motion: reduce){.ui-ready .ui-reveal,.ui-ready .ui-reveal.is-ui-visible{opacity:1;transform:none;transition:none}.interactive-glow{display:none}}
@media (hover: none),(pointer: coarse){.interactive-glow{display:none}}
@media print{.alchemy-cursor{display:none!important}.ui-ready .ui-reveal{opacity:1!important;transform:none!important}}
/* 子页面里卡片圆角跟随所在元素 */
.case-overview-figure.has-interactive-glow,.card figure.has-interactive-glow,.scene.has-interactive-glow,.board-shot.has-interactive-glow,.record.has-interactive-glow,.event.has-interactive-glow{overflow:hidden}
.related a.has-interactive-glow,.highlight.has-interactive-glow,.rv-facts>div.has-interactive-glow{border-radius:10px}
