/* =========================================================
   友链页面样式 (css/link.css)
   从 link.pug 抽离:样式统一放 css 文件夹,layout.pug 全局加载
   (pjax 只换 main.main 不换 <head>,页面级样式必须常驻)。
   ========================================================= */

.link-page {

  max-width: var(--max-width);

  margin: 0 auto;

  padding: var(--content-padding);

  padding-top: 5rem;

}



.link-header {

  text-align: center;

  margin-bottom: 3rem;

}



.link-header h1 {

  font-family: var(--font-secondary);

  font-size: 2.5rem;

  color: var(--primary-color);

  margin-bottom: 1rem;

}



.link-description {

  font-size: 1.1rem;

  color: var(--secondary-color);

  max-width: 700px;

  margin: 0 auto;

}



.link-categories {

  margin-top: 2rem;

}



.link-grid {

  display: grid;

  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));

  gap: 1.5rem;

}



.link-card {

  /* 整卡可点击跳转(<a>):去掉链接默认样式与点击高光圈 */

  position: relative;

  display: block;

  text-decoration: none;

  color: inherit;

  cursor: pointer;

  outline: none;

  -webkit-tap-highlight-color: transparent;

  /* 关键:grid 子项默认 min-width:auto,含 white-space:nowrap 的长文本会
     将 min-content 宽度撑给网格轨道,导致手机端页面横向溢出。
     设为 0 后轨道可按 1fr 正确收缩,配合内层 overflow:hidden 实现省略号。 */

  min-width: 0;

}



.link-card:focus,
.link-card:focus-visible,
.link-card:active {

  outline: none;

  box-shadow: none;

}



.link-card-inner {

  background-color: var(--card-background-color);

  border-radius: var(--radius-md);

  padding: 1.5rem;

  display: flex;

  align-items: center;

  transition: transform var(--transition-normal), box-shadow var(--transition-normal);

  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);

  overflow: hidden; /* Constrain flex children so text-overflow ellipsis works */

}



.link-card:hover .link-card-inner {

  transform: translateY(-5px);

  box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1);

}



.link-avatar {

  width: 60px;

  height: 60px;

  border-radius: 50%;

  overflow: hidden;

  margin-right: 1rem;

  flex-shrink: 0;

}



.link-avatar img {

  width: 100%;

  height: 100%;

  object-fit: cover;

}



/* ★ 头像旋转:悬停顺时针转一圈,离开逆时针转回一圈。

   离开动画默认挂在元素上(paused,不占用时长),hover 时切换为

   顺时针动画;两个动画都从 0deg 起播,切换瞬间角度连续。 */

.link-avatar img {

  animation: link-spin-ccw 0.7s cubic-bezier(0.4, 0, 0.2, 1) paused;

}



.link-card:hover .link-avatar img {

  animation: link-spin-cw 0.7s cubic-bezier(0.4, 0, 0.2, 1) running;

}



@keyframes link-spin-cw {

  from { transform: rotate(0deg); }

  to   { transform: rotate(360deg); }

}



@keyframes link-spin-ccw {

  from { transform: rotate(0deg); }

  to   { transform: rotate(-360deg); }

}



.link-info {

  flex-grow: 1;

  min-width: 0; /* 允许 flex 子项收缩 */

  overflow: hidden; /* 创建块级格式化上下文,使块子元素(h3.link-name)宽度受限,保证 text-overflow ellipsis 生效 */

}



.link-name {

  margin-bottom: 0.8rem;

  font-size: 1.2rem;

  font-weight: bold;

  color: var(--primary-color);

  text-decoration: none;

  transition: color var(--transition-fast);

  display: block;

  white-space: nowrap;

  overflow: hidden;

  text-overflow: ellipsis;

}



.link-card:hover .link-name {

  color: var(--accent-color);

}



.link-tooltip {

  position: absolute;

  bottom: calc(100% + 15px);

  left: 50%;

  transform: translateX(-50%);

  opacity: 0;

  visibility: hidden;

  transition: opacity var(--transition-normal), visibility var(--transition-normal);

  z-index: 10;

  width: 250px;

}



.link-card:hover .link-tooltip {

  opacity: 1;

  visibility: visible;

}



.tooltip-content {

  background-color: var(--primary-color);

  color: white;

  padding: 1rem;

  border-radius: var(--radius-md);

  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);

  position: relative;

}



.tooltip-content:after {

  content: "";

  position: absolute;

  top: 100%;

  left: 50%;

  transform: translateX(-50%);

  border: 8px solid transparent;

  border-top-color: var(--primary-color);

}



/* 暗色模式适配 */

@media (prefers-color-scheme: dark) {

  .tooltip-content {

    background-color: #444;

    color: #fff;

  }



  .tooltip-content:after {

    border-top-color: #444;

  }

}



/* 主题暗色模式适配 */

body.dark-mode .tooltip-content {

  background-color: #444;

  color: #fff;

}



body.dark-mode .tooltip-content:after {

  border-top-color: #444;

}



.tooltip-content h4 {

  margin: 0 0 0.5rem;

  font-size: 1.1rem;

}



.tooltip-content p {

  margin: 0;

  font-size: 0.9rem;

  line-height: 1.4;

}



.no-links {

  text-align: center;

  padding: 3rem 0;

  color: var(--secondary-color);

}



.add-link-section {

  margin-top: 4rem;

  margin-bottom: 3rem;

}



.add-link-card {

  background-color: var(--card-background-color);

  border-radius: var(--radius-lg);

  padding: 2rem;

  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);

}



.add-link-title {

  font-family: var(--font-secondary);

  font-size: 1.8rem;

  color: var(--primary-color);

  margin-bottom: 1.5rem;

  padding-bottom: 0.5rem;

  border-bottom: 2px solid var(--border-color);

}



.add-link-content p {

  font-size: 1.1rem;

  color: var(--text-color);

  margin-bottom: 1rem;

}



.add-link-rules {

  padding-left: 1.5rem;

  margin-bottom: 1rem;

}



.add-link-rules li {

  margin-bottom: 1rem;

  font-size: 1rem;

  color: var(--text-color);

  line-height: 1.6;

}



.code-block {

  background-color: #f6f8fa;

  border-radius: var(--radius-md);

  padding: 1rem;

  margin: 1rem 0;

  overflow-x: auto;

}



.code-block code {

  font-family: var(--font-monospace);

  font-size: 0.9rem;

  color: var(--text-color);

  line-height: 1.5;

}



/* 暗色模式适配 */

@media (prefers-color-scheme: dark) {

  .code-block {

    background-color: #2d2d2d;

  }



  .code-block code {

    color: #e6e6e6;

  }

}



/* 主题暗色模式适配 */

body.dark-mode .code-block {

  background-color: #2d2d2d;

}



body.dark-mode .code-block code {

  color: #e6e6e6;

}



.comments-section {

  margin-top: 4rem;

  padding-top: 2rem;

  border-top: 1px solid var(--border-color);

}



@media (max-width: 768px) {

  .link-grid {

    grid-template-columns: 1fr;

  }



  .link-header h1 {

    font-size: 2rem;

  }

}


/* =========================================================
   状态圆点(站点连通性):卡片右侧,绿=可达 红=不可达
   ========================================================= */
.link-status {
  position: absolute;
  top: 14px;
  right: 14px;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--border-color, #ccc);
  opacity: 0;
  transform: scale(0.5);
  transition: opacity 0.35s ease, transform 0.35s ease, box-shadow 0.35s ease;
  pointer-events: none;
}

.link-status.online {
  opacity: 1;
  transform: scale(1);
  background: #34c759;
  box-shadow: 0 0 6px rgba(52, 199, 89, 0.7);
}

.link-status.offline {
  opacity: 1;
  transform: scale(1);
  background: #ff3b30;
  box-shadow: 0 0 6px rgba(255, 59, 48, 0.7);
}

/* =========================================================
   头像跑掉了~:头像加载失败时名字下方显示的主题色小字
   ========================================================= */
.link-avatar-missing {
  display: none;
  font-size: 0.72rem;
  color: var(--accent-color);
  line-height: 1.2;
  opacity: 0.85;
}

.link-card.avatar-missing .link-avatar-missing {
  display: inline-block;
  animation: missing-fade-in 0.4s ease both;
}

@keyframes missing-fade-in {
  from { opacity: 0; transform: translateY(-3px); }
  to   { opacity: 0.85; transform: translateY(0); }
}

/* =========================================================
   点击卡片:头像转一圈(JS 加 spin-once 类触发)
   ========================================================= */
.link-avatar img.spin-once {
  animation: link-spin-click 0.7s cubic-bezier(0.4, 0, 0.2, 1);
}

@keyframes link-spin-click {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}

/* =========================================================
   添加友链:一键复制按钮
   ========================================================= */
.copy-link-info {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  margin-left: 10px;
  padding: 3px 12px;
  border: 1px solid var(--border-color);
  border-radius: 999px;
  background: var(--card-background-color);
  color: var(--secondary-color);
  font-size: 0.78rem;
  cursor: pointer;
  vertical-align: middle;
  transition: all var(--transition-fast);
}

.copy-link-info i {
  font-size: 0.8em;
}

.copy-link-info:hover {
  border-color: var(--accent-color);
  color: var(--accent-color);
  transform: translateY(-1px);
}

.copy-link-info.copied {
  border-color: var(--accent-color);
  color: var(--accent-color);
}
