/* ============================================================
 * QVMConsole 官网 - 社区生态样式
 * 赞助者 / 合作伙伴 / 用户评价 / 社区入口
 * ============================================================ */

/* ================= 赞助者（头像卡片墙） ================= */
.sponsors-wall {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 16px;
  max-width: 960px;
  margin-inline: auto;
}
.sponsor-card-item {
  display: flex;
  align-items: center;
  gap: 13px;
  padding: 14px 22px 14px 14px;
  border-radius: 999px;
  background: var(--card);
  border: 1px solid var(--line);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  box-shadow: var(--shadow-sm);
  transition: transform .4s var(--ease-spring), box-shadow .4s ease, border-color .4s ease;
}
.sponsor-card-item:hover {
  transform: translateY(-5px) scale(1.03);
  box-shadow: var(--shadow-glow);
  border-color: rgba(56, 189, 248, .4);
}
.sponsor-card-avatar {
  position: relative;
  width: 46px; height: 46px;
  flex-shrink: 0;
  display: grid;
  place-items: center;
  border-radius: 50%;
  font-size: 18px;
  font-weight: 700;
  color: #fff;
  box-shadow: 0 4px 12px -2px rgba(12, 20, 37, .25);
}
/* 头像光环旋转 */
.sponsor-card-avatar::after {
  content: "";
  position: absolute;
  inset: -4px;
  border-radius: 50%;
  border: 2px dashed rgba(56, 189, 248, .5);
  opacity: 0;
  transform: scale(.85) rotate(0deg);
  transition: opacity .35s ease, transform .5s var(--ease-out);
}
.sponsor-card-item:hover .sponsor-card-avatar::after {
  opacity: 1;
  transform: scale(1) rotate(90deg);
}
.sponsor-card-name { font-size: 14.5px; font-weight: 700; }
.sponsor-card-message { font-size: 12.5px; color: var(--ink-3); max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sponsor-card-message:empty { display: none; }
.sponsor-card-amount {
  margin-left: 6px;
  padding: 4px 12px;
  border-radius: 999px;
  font-family: var(--font-mono);
  font-size: 12.5px;
  font-weight: 700;
  color: var(--qvm-blue);
  background: rgba(56, 189, 248, .1);
  border: 1px solid rgba(56, 189, 248, .25);
}
.sponsor-more {
  margin-top: 34px;
  text-align: center;
}

/* ================= 合作伙伴（网格卡片，logo 作为背景水印） ================= */
.partners-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
  margin-top: 8px;
}
.partner-card {
  position: relative;
  display: flex;
  flex-direction: column;
  border-radius: var(--r-lg);
  overflow: hidden;
  background: var(--card-solid);
  border: 1px solid var(--line);
  box-shadow: var(--shadow-md);
  transition: transform .45s var(--ease-out), box-shadow .45s ease, border-color .45s ease;
}
.partner-card:hover { transform: translateY(-8px); box-shadow: var(--shadow-lg); border-color: rgba(56, 189, 248, .35); }
.partner-bg {
  position: absolute;
  inset: 0;
  background-color: var(--bg-soft);
  background-size: 180px;
  background-position: center;
  background-repeat: no-repeat;
  opacity: .12;
  transition: opacity .5s ease, transform .8s var(--ease-out);
}
.partner-card:hover .partner-bg { opacity: .2; transform: scale(1.06); }
.partner-num {
  position: absolute;
  top: 16px; right: 20px;
  font-family: var(--font-mono);
  font-size: 13px;
  font-weight: 700;
  color: var(--ink-4);
  letter-spacing: .08em;
}
.partner-body { position: relative; padding: 26px 26px 24px; }
.partner-head { display: flex; align-items: center; justify-content: flex-end; }
.partner-tier {
  margin-left: auto;
  padding: 5px 13px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: .04em;
  position: relative;
  overflow: hidden;
}
.partner-tier::after {
  /* 徽标流光 */
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(105deg, transparent 35%, rgba(255, 255, 255, .65) 50%, transparent 65%);
  transform: translateX(-130%);
  animation: tierShine 3.6s ease infinite;
}
@keyframes tierShine {
  0%, 60% { transform: translateX(-130%); }
  100% { transform: translateX(130%); }
}
.partner-tier.platinum { color: #7c3aed; background: rgba(139, 92, 246, .12); border: 1px solid rgba(139, 92, 246, .3); }
.partner-tier.gold { color: #b45309; background: rgba(245, 158, 11, .12); border: 1px solid rgba(245, 158, 11, .3); }
.partner-tier.silver { color: #64748b; background: rgba(100, 116, 139, .1); border: 1px solid rgba(100, 116, 139, .28); }
.partner-quote {
  margin-top: 18px;
  font-size: 14.5px;
  line-height: 1.75;
  color: var(--ink-2);
  min-height: 76px;
}
.partner-quote::before { content: "“"; color: var(--qvm-blue); font-size: 22px; font-weight: 800; margin-right: 2px; }
.partner-quote::after { content: "”"; color: var(--qvm-blue); font-size: 22px; font-weight: 800; margin-left: 2px; }
.partner-foot { margin-top: 16px; padding-top: 14px; border-top: 1px dashed var(--line-strong); }
.partner-foot h4 { font-size: 16px; font-weight: 800; }
.partner-foot p { font-size: 13px; color: var(--ink-3); }
.partner-link {
  margin-top: 18px;
  padding-top: 16px;
  border-top: 1px dashed var(--line-strong);
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13.5px;
  font-weight: 700;
  color: var(--qvm-blue);
}
.partner-link .fa-arrow-right { margin-left: auto; transition: transform .35s var(--ease-spring); }
.partner-card:hover .partner-link .fa-arrow-right { transform: translateX(5px); }

/* ================= 用户评价（纵向滚动墙，默认隐藏） ================= */
.reviews-wall-wrapper {
  position: relative;
  max-height: 560px;
  overflow: hidden;
  border-radius: var(--r-xl);
  mask-image: linear-gradient(180deg, transparent, #000 8%, #000 92%, transparent);
  -webkit-mask-image: linear-gradient(180deg, transparent, #000 8%, #000 92%, transparent);
}
.reviews-columns { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
.review-col { display: flex; flex-direction: column; gap: 18px; animation: reviewScroll 38s linear infinite; }
.review-col:nth-child(2) { animation-duration: 46s; animation-direction: reverse; }
.review-col:nth-child(3) { animation-duration: 42s; }
.reviews-wall-wrapper:hover .review-col { animation-play-state: paused; }
@keyframes reviewScroll {
  0% { transform: translateY(0); }
  100% { transform: translateY(-50%); }
}
.review-card {
  padding: 22px;
  border-radius: var(--r-lg);
  background: var(--card);
  border: 1px solid var(--line);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  box-shadow: var(--shadow-sm);
}
.review-head { display: flex; align-items: center; gap: 12px; }
.review-avatar {
  width: 42px; height: 42px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  font-size: 16px;
  font-weight: 700;
  color: #fff;
}
.review-head h4 { font-size: 14.5px; font-weight: 700; }
.review-body { margin-top: 12px; font-size: 13.5px; line-height: 1.75; color: var(--ink-2); }

/* ================= 社区入口 ================= */
.community-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 22px;
  max-width: 900px;
  margin-inline: auto;
}
.community-card {
  position: relative;
  display: flex;
  align-items: center;
  gap: 20px;
  padding: 30px 28px;
  border-radius: var(--r-xl);
  background: var(--card);
  border: 1px solid var(--line);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  box-shadow: var(--shadow-md);
  overflow: hidden;
  transition: transform .45s var(--ease-out), box-shadow .45s ease, border-color .45s ease;
}
/* 悬停光泽扫过 */
.community-card::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(105deg, transparent 40%, rgba(255, 255, 255, .5) 50%, transparent 60%);
  transform: translateX(-130%);
  transition: transform .9s ease;
  pointer-events: none;
}
.community-card:hover::after { transform: translateX(130%); }
.community-card:hover { transform: translateY(-6px); box-shadow: var(--shadow-lg); border-color: rgba(56, 189, 248, .35); }
.community-icon {
  flex-shrink: 0;
  width: 62px; height: 62px;
  display: grid;
  place-items: center;
  border-radius: 18px;
  font-size: 27px;
  color: #fff;
  box-shadow: var(--shadow-md);
  transition: transform .45s var(--ease-spring);
}
.community-card:hover .community-icon { transform: scale(1.08) rotate(-6deg); }
.community-qq .community-icon { background: linear-gradient(135deg, #38bdf8, #0ea5e9); }
.community-github .community-icon { background: linear-gradient(135deg, #334155, #0f172a); }
.community-body { position: relative; flex: 1; }
.community-body h3 { font-size: 18px; font-weight: 800; }
.community-body p { margin-top: 4px; font-size: 13.5px; color: var(--ink-3); }
.community-cta {
  margin-top: 12px;
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-size: 13.5px;
  font-weight: 700;
  color: var(--qvm-blue);
}
.community-cta i { transition: transform .35s var(--ease-spring); }
.community-card:hover .community-cta i { transform: translateX(5px); }
/* 背景大图标水印 */
.community-card .wm {
  position: absolute;
  right: -14px; bottom: -20px;
  font-size: 110px;
  opacity: .05;
  transform: rotate(-12deg);
  pointer-events: none;
}

/* ================= 对接插件（基于本项目开发的生态插件） ================= */
.plugins-block { margin-top: 48px; }
.plugins-head { text-align: center; margin-bottom: 24px; }
.plugins-head h3 { font-size: 20px; font-weight: 800; }
.plugins-head p { margin-top: 6px; font-size: 14px; color: var(--ink-3); }
.plugins-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
}
.plugin-card {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 14px;
  padding: 22px;
  border-radius: var(--r-lg);
  background: var(--card);
  border: 1px solid var(--line);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  box-shadow: var(--shadow-sm);
  transition: transform .45s var(--ease-out), box-shadow .45s ease, border-color .45s ease;
}
.plugin-card::after {
  /* 悬停光泽扫过 */
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: linear-gradient(105deg, transparent 40%, rgba(255, 255, 255, .4) 50%, transparent 60%);
  transform: translateX(-130%);
  transition: transform .9s ease;
  pointer-events: none;
}
.plugin-card:hover { transform: translateY(-6px); box-shadow: var(--shadow-md); border-color: rgba(56, 189, 248, .35); }
.plugin-card:hover::after { transform: translateX(130%); }
.plugin-icon {
  width: 44px; height: 44px;
  display: grid;
  place-items: center;
  border-radius: 12px;
  font-size: 22px;
  color: #fff;
  background: linear-gradient(135deg, #334155, #0f172a);
  box-shadow: var(--shadow-sm);
  transition: transform .45s var(--ease-spring);
}
.plugin-card:hover .plugin-icon { transform: scale(1.08) rotate(-6deg); }
.plugin-name { font-size: 15.5px; font-weight: 800; line-height: 1.4; }
.plugin-desc { margin-top: 6px; font-size: 13px; line-height: 1.65; color: var(--ink-3); }
.plugin-foot {
  margin-top: auto;
  padding-top: 14px;
  border-top: 1px dashed var(--line-strong);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
}
.plugin-repo {
  font-family: var(--font-mono);
  font-size: 12.5px;
  color: var(--ink-3);
  min-width: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.plugin-go { color: var(--qvm-blue); transition: transform .35s var(--ease-spring); }
.plugin-card:hover .plugin-go { transform: translateX(5px); }

@media (max-width: 1080px) { .plugins-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 680px) { .plugins-grid { grid-template-columns: 1fr; } }

/* ================= 合作自媒体（文章卡片） ================= */
.media-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}
.media-card {
  position: relative;
  display: flex;
  flex-direction: column;
  border-radius: var(--r-xl);
  overflow: hidden;
  background: var(--card-solid);
  border: 1px solid var(--line);
  box-shadow: var(--shadow-md);
  transition: transform .5s var(--ease-out), box-shadow .5s ease, border-color .5s ease;
}
.media-card::after {
  /* 悬停光泽扫过 */
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(105deg, transparent 40%, rgba(255, 255, 255, .35) 50%, transparent 60%);
  transform: translateX(-130%);
  transition: transform 1s ease;
  pointer-events: none;
  z-index: 3;
}
.media-card:hover { transform: translateY(-8px); box-shadow: var(--shadow-lg); border-color: rgba(56, 189, 248, .35); }
.media-card:hover::after { transform: translateX(130%); }

.media-cover {
  position: relative;
  aspect-ratio: 16 / 9;
  overflow: hidden;
  background: var(--bg-deep);
}
.media-cover img {
  width: 100%; height: 100%;
  object-fit: cover;
  transition: transform .8s var(--ease-out);
}
.media-card:hover .media-cover img { transform: scale(1.07); }
/* 封面底部渐变过渡 */
.media-cover::after {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 44%;
  background: linear-gradient(180deg, transparent, rgba(255, 255, 255, .55));
  pointer-events: none;
}
.media-tag {
  position: absolute;
  top: 14px; left: 14px;
  z-index: 2;
  padding: 5px 13px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 700;
  color: #fff;
  background: rgba(12, 20, 37, .55);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border: 1px solid rgba(255, 255, 255, .25);
}
.media-wx {
  position: absolute;
  top: 14px; right: 14px;
  z-index: 2;
  width: 34px; height: 34px;
  display: grid;
  place-items: center;
  border-radius: 10px;
  font-size: 17px;
  color: #fff;
  background: #07c160;
  box-shadow: 0 6px 16px -4px rgba(7, 193, 96, .55);
  transition: transform .45s var(--ease-spring);
}
.media-card:hover .media-wx { transform: scale(1.12) rotate(-8deg); }

.media-body {
  display: flex;
  flex-direction: column;
  flex: 1;
  padding: 20px 22px 22px;
}
.media-author { display: flex; align-items: center; gap: 11px; }
.media-avatar {
  width: 38px; height: 38px;
  border-radius: 50%;
  object-fit: cover;
  border: 2px solid rgba(56, 189, 248, .3);
  box-shadow: var(--shadow-sm);
  background: var(--bg-soft);
}
.media-author-meta { min-width: 0; }
.media-author-name { font-size: 14px; font-weight: 700; }
.media-author-desc {
  font-size: 12px;
  color: var(--ink-3);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.media-title {
  margin-top: 14px;
  font-size: 16px;
  font-weight: 800;
  line-height: 1.5;
  letter-spacing: -.01em;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  transition: color .3s ease;
}
.media-card:hover .media-title { color: #0284c7; }
.media-excerpt {
  margin-top: 9px;
  font-size: 13.5px;
  line-height: 1.7;
  color: var(--ink-3);
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.media-foot {
  margin-top: auto;
  padding-top: 16px;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.media-date { font-family: var(--font-mono); font-size: 12.5px; color: var(--ink-4); }
.media-read {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 13.5px;
  font-weight: 700;
  color: var(--qvm-blue);
}
.media-read i { transition: transform .35s var(--ease-spring); }
.media-card:hover .media-read i { transform: translateX(5px); }

/* ================= 响应式 ================= */
@media (max-width: 1080px) {
  .media-grid { grid-template-columns: repeat(2, 1fr); }
  .partners-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 960px) {
  .community-grid { grid-template-columns: 1fr; }
  .reviews-columns { grid-template-columns: repeat(2, 1fr); }
  .review-col:nth-child(3) { display: none; }
}
@media (max-width: 680px) {
  .media-grid { grid-template-columns: 1fr; }
  .partners-grid { grid-template-columns: 1fr; }
}
@media (max-width: 640px) {
  .sponsor-card-message { max-width: 150px; }
  .reviews-columns { grid-template-columns: 1fr; }
  .review-col:nth-child(2) { display: none; }
}
