/**
 * 花更好® 全站视觉特效层 — 背景图 + 动效
 */
:root {
  --bg-body-img: url('/static/images/bg/body-pattern.svg');
  --bg-body-cover: url('/static/images/bg/body-bg.svg');
  --bg-section-img: url('/static/images/bg/section-botanical.svg');
  --bg-hero-img: url('/static/images/bg/hero-garden.svg');
  --fx-glass: rgba(255, 255, 255, 0.72);
  --fx-glass-border: rgba(255, 255, 255, 0.55);
}

/* ═══ 全页背景图层 ═══ */
body.site-page::before {
  display: block !important;
  background:
    var(--bg-body-img) center center / 400px 400px repeat,
    var(--bg-body-cover) center center / cover no-repeat;
  animation: bgPan 45s linear infinite, bgHue 16s ease-in-out infinite alternate;
  opacity: 1;
  filter: saturate(1.25) brightness(1.05);
}
body.site-page::after {
  background:
    radial-gradient(ellipse 100% 80% at 20% 0%, rgba(45, 138, 92, 0.18) 0%, transparent 50%),
    radial-gradient(ellipse 80% 60% at 90% 20%, rgba(212, 168, 67, 0.15) 0%, transparent 45%),
    radial-gradient(ellipse 60% 50% at 50% 100%, rgba(26, 86, 50, 0.12) 0%, transparent 50%),
    linear-gradient(180deg, rgba(248, 250, 249, 0.75) 0%, rgba(240, 247, 243, 0.7) 50%, rgba(235, 245, 238, 0.78) 100%);
  animation: overlayPulse 8s ease-in-out infinite alternate;
}
@keyframes bgHue {
  0% { filter: saturate(1.2) brightness(1.03) hue-rotate(0deg); }
  100% { filter: saturate(1.35) brightness(1.08) hue-rotate(12deg); }
}
@keyframes overlayPulse {
  0% { opacity: 0.92; }
  100% { opacity: 1; }
}
@keyframes bgPan {
  0% { background-position: 0 0, center center; }
  100% { background-position: 400px 400px, center center; }
}

/* 浮动光斑层 */
.fx-aurora {
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  overflow: hidden;
}
.fx-aurora span {
  position: absolute;
  border-radius: 50%;
  filter: blur(90px);
  opacity: 0.62;
  animation: auroraFloat 10s ease-in-out infinite;
}
.fx-aurora span:nth-child(1) {
  width: 420px; height: 420px;
  background: rgba(45, 138, 92, 0.35);
  top: -10%; left: -5%;
  animation-delay: 0s;
}
.fx-aurora span:nth-child(2) {
  width: 380px; height: 380px;
  background: rgba(212, 168, 67, 0.28);
  top: 30%; right: -8%;
  animation-delay: -6s;
  animation-duration: 22s;
}
.fx-aurora span:nth-child(3) {
  width: 320px; height: 320px;
  background: rgba(26, 86, 50, 0.3);
  bottom: 10%; left: 20%;
  animation-delay: -12s;
  animation-duration: 20s;
}
.fx-aurora span:nth-child(4) {
  width: 260px; height: 260px;
  background: rgba(212, 168, 67, 0.22);
  top: 55%; left: 45%;
  animation-delay: -8s;
  animation-duration: 24s;
}
.fx-aurora span:nth-child(5) {
  width: 300px; height: 300px;
  background: rgba(74, 155, 114, 0.25);
  top: 15%; left: 60%;
  animation-delay: -15s;
  animation-duration: 19s;
}
@keyframes auroraFloat {
  0%, 100% { transform: translate(0, 0) scale(1) rotate(0deg); }
  25% { transform: translate(60px, -45px) scale(1.15) rotate(3deg); }
  50% { transform: translate(-40px, 35px) scale(0.9) rotate(-2deg); }
  75% { transform: translate(30px, 20px) scale(1.1) rotate(2deg); }
}

/* 动态网格 */
.fx-grid {
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background-image:
    linear-gradient(rgba(45, 138, 92, 0.06) 1px, transparent 1px),
    linear-gradient(90deg, rgba(45, 138, 92, 0.06) 1px, transparent 1px);
  background-size: 48px 48px;
  animation: gridDrift 18s linear infinite;
  mask-image: radial-gradient(ellipse 80% 70% at 50% 40%, #000 20%, transparent 75%);
  -webkit-mask-image: radial-gradient(ellipse 80% 70% at 50% 40%, #000 20%, transparent 75%);
}
@keyframes gridDrift {
  0% { background-position: 0 0; transform: perspective(800px) rotateX(2deg); }
  100% { background-position: 48px 48px; transform: perspective(800px) rotateX(2deg); }
}

/* 鼠标光晕 */
.fx-cursor-glow {
  position: fixed;
  width: 320px;
  height: 320px;
  border-radius: 50%;
  pointer-events: none;
  z-index: 9997;
  transform: translate(-50%, -50%);
  background:
    radial-gradient(circle, rgba(212, 168, 67, 0.22) 0%, rgba(45, 138, 92, 0.12) 35%, transparent 68%);
  mix-blend-mode: screen;
  opacity: 0;
  transition: opacity 0.35s ease;
  will-change: left, top;
}
body.site-page.fx-cursor-on .fx-cursor-glow {
  opacity: 1;
}

/* 飘落粒子 */
#fxParticles {
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  opacity: 0.72;
}
.site-main { position: relative; z-index: 1; }

/* 扫描光带 */
.fx-scanline {
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background: linear-gradient(180deg, transparent 0%, rgba(255,255,255,0.05) 48%, rgba(212,168,67,0.12) 50%, rgba(45,138,92,0.08) 52%, rgba(255,255,255,0.05) 54%, transparent 100%);
  background-size: 100% 180%;
  animation: scanlineMove 3.5s linear infinite;
  opacity: 0.85;
}
@keyframes scanlineMove {
  0% { background-position: 0 -100%; }
  100% { background-position: 0 200%; }
}

/* ═══ 顶栏闪烁 ═══ */
.site-topbar {
  background: linear-gradient(90deg, #0a261c, #1a5632, #143d2e, #1a5632, #0a261c);
  background-size: 200% 100%;
  animation: topbarShine 4s ease infinite;
}
@keyframes topbarShine {
  0%, 100% { background-position: 0% 50%; }
  50% { background-position: 100% 50%; }
}

/* ═══ Hero 背景图 + 光效 ═══ */
.hero {
  background:
    linear-gradient(135deg, rgba(10, 38, 28, 0.75) 0%, rgba(26, 86, 50, 0.65) 50%, rgba(15, 61, 46, 0.8) 100%),
    var(--bg-hero-img) center center / cover no-repeat !important;
  position: relative;
  overflow: hidden;
}
.hero::after {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(circle at 30% 70%, rgba(212, 168, 67, 0.2) 0%, transparent 40%),
    radial-gradient(circle at 70% 30%, rgba(45, 138, 92, 0.25) 0%, transparent 35%);
  animation: heroPulse 3s ease-in-out infinite;
  pointer-events: none;
}
@keyframes heroPulse {
  0%, 100% { opacity: 0.65; transform: scale(1); }
  50% { opacity: 1; transform: scale(1.03); }
}
.hero .container { position: relative; z-index: 2; }
.hero h1 {
  animation: titleGlow 2s ease-in-out infinite, titleShimmer 4s linear infinite;
  background: linear-gradient(120deg, #ffffff 0%, #f5e6b8 25%, #ffffff 50%, #b8f0d0 75%, #ffffff 100%);
  background-size: 250% auto;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
}
@keyframes titleShimmer {
  0% { background-position: 0% center; }
  100% { background-position: 250% center; }
}
@keyframes titleGlow {
  0%, 100% { filter: drop-shadow(0 0 12px rgba(212, 168, 67, 0.4)) drop-shadow(0 4px 24px rgba(0,0,0,0.35)); }
  50% { filter: drop-shadow(0 0 32px rgba(212, 168, 67, 0.75)) drop-shadow(0 0 48px rgba(45, 138, 92, 0.35)) drop-shadow(0 4px 32px rgba(0,0,0,0.2)); }
}
.hero-premium .hero-eyebrow {
  animation: eyebrowShimmer 3s ease-in-out infinite;
  box-shadow: 0 0 20px rgba(212, 168, 67, 0.2);
}
@keyframes eyebrowShimmer {
  0%, 100% { box-shadow: 0 0 12px rgba(212, 168, 67, 0.15); }
  50% { box-shadow: 0 0 28px rgba(212, 168, 67, 0.4); }
}
.tag {
  animation: tagFloat 4s ease-in-out infinite;
}
.tag:nth-child(2) { animation-delay: -1s; }
.tag:nth-child(3) { animation-delay: -2s; }
.tag:nth-child(4) { animation-delay: -3s; }
@keyframes tagFloat {
  0%, 100% { transform: translateY(0) scale(1); }
  50% { transform: translateY(-8px) scale(1.04); box-shadow: 0 6px 20px rgba(212, 168, 67, 0.25); }
}

/* ═══ 轮播 Ken Burns ═══ */
.carousel-slide img {
  animation: kenBurns 12s ease-in-out infinite alternate;
}
@keyframes kenBurns {
  0% { transform: scale(1) rotate(0deg); }
  100% { transform: scale(1.14) rotate(0.5deg); }
}
.hero-carousel::after {
  background: linear-gradient(180deg, rgba(10,38,28,0.3) 0%, transparent 35%, rgba(10,38,28,0.4) 100%) !important;
}

/* ═══ 区块背景图 ═══ */
.section {
  position: relative;
  overflow: hidden;
}
.section::before {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--bg-section-img) center center / cover no-repeat;
  opacity: 0.4;
  pointer-events: none;
  z-index: 0;
  animation: sectionBgShift 20s ease-in-out infinite alternate;
}
@keyframes sectionBgShift {
  0% { transform: scale(1) translateY(0); opacity: 0.35; }
  100% { transform: scale(1.06) translateY(-12px); opacity: 0.45; }
}
.section > .container {
  position: relative;
  z-index: 1;
  transform: translateY(var(--fx-parallax, 0px));
  transition: transform 0.1s linear;
}
.section-alt::before {
  opacity: 0.5;
  background:
    linear-gradient(180deg, rgba(26, 86, 50, 0.04) 0%, rgba(212, 168, 67, 0.03) 100%),
    var(--bg-section-img) center center / cover no-repeat;
}

/* ═══ 玻璃拟态卡片 + 悬停光晕 ═══ */
.card,
.city-box,
.faq-item,
.package-card,
.process-item,
.feature-hub-card,
.plant-catalog-card,
.portal-login-card {
  background: var(--fx-glass) !important;
  backdrop-filter: blur(18px) saturate(1.4);
  -webkit-backdrop-filter: blur(18px) saturate(1.4);
  border: 1px solid var(--fx-glass-border) !important;
  box-shadow:
    0 4px 24px rgba(12, 46, 34, 0.08),
    inset 0 1px 0 rgba(255, 255, 255, 0.8) !important;
  transition: transform 0.28s cubic-bezier(0.34, 1.56, 0.64, 1), box-shadow 0.28s, border-color 0.28s !important;
  position: relative;
  overflow: hidden;
}
.card::after,
.feature-hub-card::after,
.package-card::after {
  content: "";
  position: absolute;
  inset: -1px;
  border-radius: inherit;
  padding: 1px;
  background: linear-gradient(120deg, #2d8a5c, #d4a843, #4a9b72, #f5e6b8, #2d8a5c);
  background-size: 300% 300%;
  -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
  mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
  -webkit-mask-composite: xor;
  mask-composite: exclude;
  opacity: 0;
  animation: borderFlow 2.5s linear infinite;
  pointer-events: none;
  z-index: 0;
  transition: opacity 0.3s;
}
.card:hover::after,
.feature-hub-card:hover::after,
.package-card:hover::after {
  opacity: 1;
}
@keyframes borderFlow {
  0% { background-position: 0% 50%; }
  100% { background-position: 300% 50%; }
}
.card:hover,
.city-box:hover,
.feature-hub-card:hover,
.plant-catalog-card:hover {
  transform: translateY(-14px) scale(1.04) !important;
  box-shadow:
    0 28px 56px rgba(12, 46, 34, 0.2),
    0 0 0 1px rgba(212, 168, 67, 0.45),
    0 0 60px rgba(45, 138, 92, 0.2),
    0 0 80px rgba(212, 168, 67, 0.1) !important;
  border-color: rgba(212, 168, 67, 0.55) !important;
}
.card::before {
  opacity: 1 !important;
  animation: cardBarShine 3s ease-in-out infinite;
}
@keyframes cardBarShine {
  0%, 100% { filter: brightness(1); }
  50% { filter: brightness(1.6); }
}

/* ═══ 数据看板 ═══ */
.stats-section {
  background:
    linear-gradient(135deg, rgba(10, 38, 28, 0.88) 0%, rgba(26, 86, 50, 0.85) 100%),
    var(--bg-hero-img) center center / cover no-repeat !important;
}
.stat-value {
  animation: statPulse 3s ease-in-out infinite;
  text-shadow: 0 0 30px rgba(212, 168, 67, 0.4);
}
.stat-item:nth-child(2) .stat-value { animation-delay: -0.5s; }
.stat-item:nth-child(3) .stat-value { animation-delay: -1s; }
.stat-item:nth-child(4) .stat-value { animation-delay: -1.5s; }
@keyframes statPulse {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.12); }
}

/* ═══ 区块标题 ═══ */
.section-title h2::before {
  animation: dotPulse 2s ease-in-out infinite;
  box-shadow: 0 0 0 0 rgba(212, 168, 67, 0.5);
}
@keyframes dotPulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(212, 168, 67, 0.4); transform: scale(1); }
  50% { box-shadow: 0 0 0 12px rgba(212, 168, 67, 0); transform: scale(1.15); }
}
.section-title h2::after {
  animation: lineExpand 2.5s ease-in-out infinite;
}
@keyframes lineExpand {
  0%, 100% { width: 56px; opacity: 1; }
  50% { width: 80px; opacity: 0.85; }
}

/* ═══ 按钮流光 ═══ */
.btn-primary {
  position: relative;
  overflow: hidden;
  background: linear-gradient(135deg, #ecd9a0 0%, #d4a843 50%, #b8922e 100%) !important;
  background-size: 200% 200% !important;
  animation: btnGradient 2.5s ease infinite, btnPulse 2s ease-in-out infinite !important;
}
.btn-primary::after {
  content: "";
  position: absolute;
  top: -50%;
  left: -60%;
  width: 50%;
  height: 200%;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.7), transparent);
  transform: skewX(-20deg);
  animation: btnShine 1.8s ease-in-out infinite;
}
@keyframes btnPulse {
  0%, 100% { box-shadow: 0 4px 20px rgba(212, 168, 67, 0.4); filter: brightness(1); }
  50% { box-shadow: 0 8px 36px rgba(212, 168, 67, 0.7), 0 0 32px rgba(212, 168, 67, 0.45); filter: brightness(1.1); }
}
@keyframes btnGradient {
  0%, 100% { background-position: 0% 50%; }
  50% { background-position: 100% 50%; }
}
@keyframes btnShine {
  0% { left: -60%; }
  60%, 100% { left: 120%; }
}
.btn-phone {
  animation: phonePulse 2.5s ease-in-out infinite;
}
@keyframes phonePulse {
  0%, 100% { box-shadow: 0 4px 16px rgba(212, 168, 67, 0.35); }
  50% { box-shadow: 0 4px 28px rgba(212, 168, 67, 0.6), 0 0 20px rgba(212, 168, 67, 0.3); }
}

/* ═══ CTA 区 ═══ */
.cta-bar {
  background:
    linear-gradient(135deg, rgba(10, 38, 28, 0.9) 0%, rgba(26, 86, 50, 0.85) 100%),
    var(--bg-hero-img) center center / cover no-repeat !important;
  position: relative;
  overflow: hidden;
}
.cta-bar::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, transparent, rgba(212, 168, 67, 0.08), transparent);
  animation: ctaSweep 5s ease-in-out infinite;
  pointer-events: none;
}
@keyframes ctaSweep {
  0% { transform: translateX(-100%); }
  100% { transform: translateX(100%); }
}

/* ═══ FAQ ═══ */
.faq-section {
  background:
    linear-gradient(180deg, rgba(240, 247, 243, 0.92) 0%, rgba(232, 245, 238, 0.95) 100%),
    var(--bg-section-img) center center / cover no-repeat !important;
}
.faq-item {
  border-left: 4px solid var(--gold) !important;
  transition: transform 0.3s, box-shadow 0.3s, border-color 0.3s !important;
}
.faq-item:hover {
  transform: translateX(8px) !important;
  border-left-color: var(--green-light) !important;
  box-shadow: 0 8px 32px rgba(26, 86, 50, 0.12) !important;
}

/* ═══ 页脚 ═══ */
.site-footer {
  background:
    linear-gradient(180deg, rgba(8, 20, 16, 0.97) 0%, rgba(4, 12, 10, 0.99) 100%),
    var(--bg-hero-img) center bottom / cover no-repeat !important;
}
.footer-trust-item strong {
  animation: trustGlow 3s ease-in-out infinite;
  text-shadow: 0 0 20px rgba(212, 168, 67, 0.3);
}
.footer-trust-item:nth-child(2) strong { animation-delay: -0.75s; }
.footer-trust-item:nth-child(3) strong { animation-delay: -1.5s; }
.footer-trust-item:nth-child(4) strong { animation-delay: -2.25s; }
@keyframes trustGlow {
  0%, 100% { text-shadow: 0 0 12px rgba(212, 168, 67, 0.2); }
  50% { text-shadow: 0 0 28px rgba(212, 168, 67, 0.5); }
}

/* ═══ 底栏联系 ═══ */
.contact-bar-primary {
  animation: ctaBarPulse 2s ease-in-out infinite !important;
}
@keyframes ctaBarPulse {
  0%, 100% { filter: brightness(1); }
  50% { filter: brightness(1.15); }
}

/* ═══ 在线客服 ═══ */
.live-chat-toggle {
  animation: chatBounce 3s ease-in-out infinite;
  box-shadow: 0 8px 32px rgba(26, 86, 50, 0.4), 0 0 0 0 rgba(45, 138, 92, 0.4);
}
@keyframes chatBounce {
  0%, 100% { transform: translateY(0) scale(1); box-shadow: 0 8px 32px rgba(26, 86, 50, 0.4), 0 0 0 0 rgba(45, 138, 92, 0.4); }
  50% { transform: translateY(-10px) scale(1.08); box-shadow: 0 20px 48px rgba(26, 86, 50, 0.55), 0 0 0 16px rgba(45, 138, 92, 0); }
}

/* ═══ 滚动入场加强 ═══ */
.reveal {
  transition: opacity 0.8s cubic-bezier(0.22, 1, 0.36, 1), transform 0.8s cubic-bezier(0.22, 1, 0.36, 1) !important;
  transition-delay: var(--reveal-delay, 0s) !important;
}
.reveal.is-visible {
  animation: revealPop 0.75s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
  animation-delay: var(--reveal-delay, 0s);
}
@keyframes revealPop {
  0% { opacity: 0; transform: translateY(70px) scale(0.88) rotateX(14deg); }
  55% { opacity: 1; transform: translateY(-10px) scale(1.04) rotateX(0deg); }
  75% { transform: translateY(4px) scale(0.98); }
  100% { opacity: 1; transform: translateY(0) scale(1) rotateX(0deg); }
}

/* ═══ 面包屑 ═══ */
.breadcrumb {
  background: linear-gradient(90deg, rgba(10,38,28,0.95), rgba(26,86,50,0.9)) !important;
}

/* ═══ 重庆专题 ═══ */
.hero-cq {
  background:
    linear-gradient(135deg, rgba(42, 24, 16, 0.85) 0%, rgba(184, 98, 62, 0.4) 40%, rgba(26, 86, 50, 0.8) 100%),
    var(--bg-hero-img) center center / cover no-repeat !important;
}

/* 减少动画偏好 */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
  }
  #fxParticles { display: none; }
  .fx-grid, .fx-cursor-glow, .fx-scanline { display: none; }
}

@media (max-width: 768px) {
  .fx-aurora span { opacity: 0.35; }
  #fxParticles { opacity: 0.45; }
  .fx-scanline { opacity: 0.5; }
  .fx-grid { opacity: 0.5; }
  .fx-cursor-glow { display: none; }
  .card:hover { transform: translateY(-8px) scale(1.02) !important; }
  .hero h1 {
    -webkit-text-fill-color: #fff;
    background: none;
    filter: drop-shadow(0 0 16px rgba(212, 168, 67, 0.5));
  }
}

/* ═══ 导航栏光效 ═══ */
.site-header {
  position: relative;
  overflow: hidden;
}
.site-header::after {
  content: "";
  position: absolute;
  bottom: 0;
  left: -100%;
  width: 60%;
  height: 2px;
  background: linear-gradient(90deg, transparent, rgba(212, 168, 67, 0.9), transparent);
  animation: navLineSweep 3s ease-in-out infinite;
}
@keyframes navLineSweep {
  0% { left: -60%; opacity: 0.5; }
  50% { opacity: 1; }
  100% { left: 120%; opacity: 0.5; }
}
.nav-wrap a {
  position: relative;
  transition: color 0.25s, text-shadow 0.25s, transform 0.25s;
}
.nav-wrap a:hover {
  text-shadow: 0 0 16px rgba(212, 168, 67, 0.8), 0 0 32px rgba(45, 138, 92, 0.3);
  transform: translateY(-1px);
}
.nav-wrap a.active {
  text-shadow: 0 0 12px rgba(212, 168, 67, 0.6);
}
.logo {
  transition: filter 0.3s, transform 0.3s;
}
.logo:hover {
  filter: drop-shadow(0 0 8px rgba(212, 168, 67, 0.45));
  transform: scale(1.02);
}

/* ═══ 内容区背景 ═══ */
.page-content {
  position: relative;
}
.page-content::before {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--bg-section-img) center center / cover no-repeat;
  opacity: 0.2;
  pointer-events: none;
  z-index: 0;
}
.page-content > .container {
  position: relative;
  z-index: 1;
}

/* ═══ 新闻 / 列表玻璃卡片 ═══ */
.news-list li {
  background: var(--fx-glass) !important;
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border: 1px solid var(--fx-glass-border) !important;
  border-radius: var(--radius-md, 12px) !important;
  margin-bottom: 12px !important;
  padding: 16px 20px !important;
  box-shadow: 0 4px 20px rgba(12, 46, 34, 0.06) !important;
  transition: transform 0.3s, box-shadow 0.3s, border-color 0.3s !important;
}
.news-list li:hover {
  transform: translateX(8px) translateY(-2px) !important;
  box-shadow: 0 12px 32px rgba(12, 46, 34, 0.12), 0 0 24px rgba(45, 138, 92, 0.08) !important;
  border-color: rgba(212, 168, 67, 0.35) !important;
}

/* ═══ 图库卡片光晕 ═══ */
.gallery-card {
  background: var(--fx-glass) !important;
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  overflow: hidden;
  transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), box-shadow 0.4s !important;
}
.gallery-card:hover {
  transform: translateY(-8px) scale(1.02) !important;
  box-shadow: 0 20px 48px rgba(12, 46, 34, 0.15), 0 0 32px rgba(212, 168, 67, 0.15) !important;
}
.gallery-card .gallery-img {
  transition: transform 0.6s ease !important;
}
.gallery-card:hover .gallery-img {
  transform: scale(1.1) !important;
}

/* ═══ Hero 额外光点 ═══ */
.hero::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image:
    radial-gradient(circle at 20% 30%, rgba(255,255,255,0.15) 0%, transparent 2%),
    radial-gradient(circle at 80% 20%, rgba(212,168,67,0.2) 0%, transparent 3%),
    radial-gradient(circle at 60% 80%, rgba(45,138,92,0.15) 0%, transparent 2%),
    radial-gradient(circle at 40% 60%, rgba(255,255,255,0.1) 0%, transparent 1.5%);
  animation: heroSparkle 5s ease-in-out infinite alternate;
  pointer-events: none;
  z-index: 1;
}
@keyframes heroSparkle {
  0% { opacity: 0.4; transform: scale(1) rotate(0deg); }
  100% { opacity: 1; transform: scale(1.05) rotate(2deg); }
}

/* Hero 能量环 */
.hero .container::before {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: min(90vw, 720px);
  height: min(90vw, 720px);
  transform: translate(-50%, -50%);
  border-radius: 50%;
  border: 1px solid rgba(212, 168, 67, 0.15);
  box-shadow: 0 0 60px rgba(45, 138, 92, 0.2), inset 0 0 80px rgba(212, 168, 67, 0.08);
  animation: heroRing 6s ease-in-out infinite;
  pointer-events: none;
  z-index: -1;
}
@keyframes heroRing {
  0%, 100% { transform: translate(-50%, -50%) scale(0.85); opacity: 0.4; }
  50% { transform: translate(-50%, -50%) scale(1.1); opacity: 0.85; }
}
.hero .container { perspective: 1000px; }

/* ═══ 城市切换 / 标签 ═══ */
.city-switch a,
.region-pill {
  transition: transform 0.25s, box-shadow 0.25s !important;
}
.city-switch a:hover,
.region-pill:hover {
  transform: translateY(-2px) scale(1.05) !important;
  box-shadow: 0 4px 16px rgba(212, 168, 67, 0.3) !important;
}

/* ═══ 表单输入聚焦光效 ═══ */
input:focus, textarea:focus, select:focus {
  box-shadow: 0 0 0 3px rgba(45, 138, 92, 0.2), 0 0 20px rgba(212, 168, 67, 0.15) !important;
  border-color: var(--gold, #d4a843) !important;
}

/* ═══ 门户登录卡 ═══ */
.portal-login-card {
  box-shadow:
    0 8px 40px rgba(12, 46, 34, 0.12),
    0 0 60px rgba(45, 138, 92, 0.08) !important;
  animation: portalFloat 6s ease-in-out infinite;
}
@keyframes portalFloat {
  0%, 100% { transform: translateY(0) rotate(0deg); }
  50% { transform: translateY(-10px) rotate(0.5deg); }
}

/* ═══ 联系底栏加强 ═══ */
.contact-bar {
  background:
    linear-gradient(90deg, rgba(10,38,28,0.97), rgba(26,86,50,0.95), rgba(10,38,28,0.97)) !important;
  background-size: 200% 100% !important;
  animation: topbarShine 10s ease infinite !important;
}
