/* 九流页面美化特效 - 前台样式 */
.xjpe-layer,
.xjpe-canvas,
.xjpe-lantern-wrap,
.xjpe-cursor-layer,
.xjpe-ribbon-layer,
.xjpe-welcome,
.xjpe-music-btn,
.xjpe-context-menu {
  box-sizing: border-box;
}
.xjpe-layer,
.xjpe-canvas,
.xjpe-lantern-wrap,
.xjpe-cursor-layer,
.xjpe-ribbon-layer {
  position: fixed;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
  overflow: hidden;
}
.xjpe-canvas {
  display: block;
}
.xjpe-petal,
.xjpe-snowflake,
.xjpe-star-trail,
.xjpe-ribbon-shape {
  position: fixed;
  left: 0;
  top: 0;
  user-select: none;
  pointer-events: none;
  will-change: transform, opacity;
}
.xjpe-petal {
  color: #ff9abb;
  text-shadow: 0 0 8px rgba(255, 135, 180, .35);
}
.xjpe-snowflake {
  color: #fff;
  text-shadow: 0 0 8px rgba(120, 180, 255, .6);
}
.xjpe-lantern {
  position: fixed;
  top: -8px;
  width: var(--xjpe-lantern-size, 82px);
  height: calc(var(--xjpe-lantern-size, 82px) * 1.28);
  pointer-events: none;
  transform-origin: top center;
  animation: xjpe-lantern-swing 3.8s ease-in-out infinite;
}
.xjpe-lantern-line {
  width: 2px;
  height: 28px;
  margin: 0 auto;
  background: linear-gradient(#ad6a00, #f6c96a);
}
.xjpe-lantern-body {
  position: relative;
  height: calc(var(--xjpe-lantern-size, 82px) * .82);
  border-radius: 48% 48% 42% 42%;
  background: radial-gradient(circle at 35% 28%, #ffd27a 0 10%, #ff5555 28%, #d61818 72%, #8e0909 100%);
  border: 3px solid #ffd37a;
  box-shadow: 0 0 22px rgba(255, 80, 40, .35);
  display: flex;
  align-items: center;
  justify-content: center;
  color: #ffe8a6;
  font-size: calc(var(--xjpe-lantern-size, 82px) * .32);
  font-weight: 700;
}
.xjpe-lantern-body::before,
.xjpe-lantern-body::after {
  content: '';
  position: absolute;
  left: 14%;
  right: 14%;
  height: 5px;
  background: #f7c35d;
  border-radius: 99px;
}
.xjpe-lantern-body::before { top: 8px; }
.xjpe-lantern-body::after { bottom: 8px; }
.xjpe-lantern-tail {
  width: 20%;
  height: calc(var(--xjpe-lantern-size, 82px) * .28);
  margin: 0 auto;
  background: repeating-linear-gradient(90deg, #ffd36a 0 2px, #b51313 2px 5px);
  border-radius: 0 0 10px 10px;
}
@keyframes xjpe-lantern-swing {
  0%,100% { transform: rotate(-4deg); }
  50% { transform: rotate(4deg); }
}
.xjpe-grayscale {
  filter: grayscale(var(--xjpe-grayscale, 100%)) !important;
}
.xjpe-context-menu {
  position: fixed;
  min-width: 190px;
  padding: 8px;
  border-radius: 14px;
  background: rgba(255,255,255,.96);
  border: 1px solid rgba(0,0,0,.08);
  box-shadow: 0 14px 40px rgba(0,0,0,.18);
  backdrop-filter: blur(12px);
  z-index: 2147483000;
  display: none;
  font-size: 14px;
  color: #222;
}
.xjpe-context-title {
  padding: 8px 10px;
  color: #888;
  font-size: 12px;
  border-bottom: 1px solid rgba(0,0,0,.06);
  margin-bottom: 5px;
}
.xjpe-context-menu button,
.xjpe-context-menu a {
  display: block;
  width: 100%;
  padding: 9px 10px;
  border: 0;
  background: transparent;
  color: inherit;
  text-decoration: none;
  border-radius: 10px;
  text-align: left;
  cursor: pointer;
  font: inherit;
}
.xjpe-context-menu button:hover,
.xjpe-context-menu a:hover {
  background: rgba(0,0,0,.06);
}
.xjpe-toast {
  position: fixed;
  left: 50%;
  top: 18px;
  transform: translateX(-50%);
  padding: 10px 16px;
  border-radius: 999px;
  background: rgba(25,25,25,.86);
  color: #fff;
  z-index: 2147483000;
  font-size: 14px;
  box-shadow: 0 10px 30px rgba(0,0,0,.2);
}
.xjpe-music-btn {
  position: fixed;
  right: 18px;
  bottom: 18px;
  min-width: 46px;
  height: 46px;
  padding: 0 14px;
  border-radius: 999px;
  border: 0;
  background: rgba(30,30,30,.82);
  color: #fff;
  z-index: 999999;
  cursor: pointer;
  box-shadow: 0 10px 30px rgba(0,0,0,.22);
  backdrop-filter: blur(10px);
}
.xjpe-music-btn.is-playing {
  animation: xjpe-spin 3.5s linear infinite;
}
@keyframes xjpe-spin { to { transform: rotate(360deg); } }
.xjpe-welcome-mask {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,.34);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 2147482999;
  padding: 20px;
}
.xjpe-welcome-box {
  width: min(92vw, 430px);
  background: rgba(255,255,255,.96);
  border-radius: 22px;
  padding: 26px 24px 22px;
  box-shadow: 0 24px 90px rgba(0,0,0,.28);
  text-align: center;
  animation: xjpe-pop .25s ease-out;
}
.xjpe-welcome-box h3 {
  margin: 0 0 10px;
  font-size: 22px;
}
.xjpe-welcome-box p {
  margin: 0 0 18px;
  color: #555;
  line-height: 1.7;
}
.xjpe-welcome-box button {
  border: 0;
  border-radius: 999px;
  padding: 10px 22px;
  color: #fff;
  background: #2271b1;
  cursor: pointer;
}
@keyframes xjpe-pop {
  from { transform: translateY(12px) scale(.96); opacity: 0; }
  to { transform: translateY(0) scale(1); opacity: 1; }
}
@media (prefers-reduced-motion: reduce) {
  .xjpe-respect-motion * { animation: none !important; transition: none !important; }
}

/* 1.7.0: more ambient effects, copy protection and bottom waves. */
.xjpe-leaf,
.xjpe-bubble {
  position: fixed;
  left: 0;
  top: 0;
  user-select: none;
  pointer-events: none;
  will-change: transform, opacity;
}
.xjpe-leaf {
  color: #d97706;
  filter: drop-shadow(0 4px 5px rgba(120, 64, 12, .2));
}
.xjpe-bubble {
  color: rgba(165, 225, 255, .92);
  text-shadow: inset 0 0 8px rgba(255,255,255,.8), 0 0 10px rgba(84,180,255,.35);
}
.xjpe-cursor-firefly { text-shadow: 0 0 8px currentColor, 0 0 16px currentColor; }
.xjpe-cursor-heart { filter: drop-shadow(0 3px 4px rgba(255, 50, 110, .25)); }
.xjpe-cursor-bubble { font-family: Arial, sans-serif; }

.xjpe-waves {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  height: var(--xjpe-wave-height, 72px);
  overflow: hidden;
  opacity: var(--xjpe-wave-opacity, .48);
  pointer-events: none;
}
.xjpe-wave {
  position: absolute;
  left: -50%;
  bottom: -32%;
  width: 200%;
  height: 135%;
  border-radius: 44% 48% 43% 46%;
  transform-origin: 50% 50%;
  animation: xjpe-wave-roll var(--xjpe-wave-speed, 12s) linear infinite;
}
.xjpe-wave-a { background: var(--xjpe-wave-color-1, #5b8cff); }
.xjpe-wave-b {
  bottom: -45%;
  background: var(--xjpe-wave-color-2, #9b5cff);
  animation-direction: reverse;
  animation-duration: calc(var(--xjpe-wave-speed, 12s) * 1.35);
  opacity: .65;
}
@keyframes xjpe-wave-roll { to { transform: rotate(360deg); } }

.xjpe-protect-selection body,
.xjpe-protect-selection body * {
  -webkit-user-select: none !important;
  user-select: none !important;
}
.xjpe-protect-selection input,
.xjpe-protect-selection textarea,
.xjpe-protect-selection select,
.xjpe-protect-selection option,
.xjpe-protect-selection pre,
.xjpe-protect-selection code,
.xjpe-protect-selection [contenteditable="true"],
.xjpe-protect-selection [contenteditable=""] {
  -webkit-user-select: text !important;
  user-select: text !important;
}
.xjpe-toast.is-success { background: rgba(22, 101, 52, .94); }
.xjpe-toast.is-warning { background: rgba(146, 64, 14, .94); }
.xjpe-toast.is-error { background: rgba(153, 27, 27, .94); }

@media (max-width: 782px) {
  .xjpe-waves { height: min(var(--xjpe-wave-height, 72px), 90px); }
  .xjpe-toast { width: min(88vw, 430px); border-radius: 14px; text-align: center; }
}


/* 1.7.1: honest client-side deterrence plus server-rendered access protection. */
.xjpe-server-protected {
  margin: 24px 0;
  padding: 22px;
  border: 1px solid rgba(37, 99, 235, .2);
  border-radius: 18px;
  background: linear-gradient(135deg, rgba(239,246,255,.96), rgba(248,250,252,.96));
  box-shadow: 0 14px 36px rgba(15,23,42,.08);
  color: #1e293b;
}
.xjpe-server-protected strong { display: block; margin-bottom: 8px; font-size: 18px; }
.xjpe-server-protected p { margin: 0 0 14px; line-height: 1.75; }
.xjpe-server-login {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 40px;
  padding: 0 18px;
  border-radius: 999px;
  background: #2563eb;
  color: #fff !important;
  text-decoration: none !important;
  font-weight: 600;
}
.xjpe-server-teaser { margin-bottom: 18px; line-height: 1.9; }
@media print {
  .xjpe-block-print body > * { display: none !important; }
  .xjpe-block-print body::before {
    content: '本站内容不提供打印，请尊重原创与版权。';
    display: block !important;
    padding: 48px;
    font: 18px/1.8 sans-serif;
    color: #111;
  }
}
