/*!
 * LoliMeow Geek Line Aesthetic v13.15
 * 设计哲学：线条，而非盒子。
 * 拆掉硬边框、硬阴影、胶囊框，用发丝线（hairline）、下划线、留白构建层级。
 * 全站一套节奏令牌（--lk-ease / --lk-dur-*），所有过渡共用，动画协调统一。
 * 依赖：无外部字体、无外部请求。等宽字体走系统 ui-monospace 栈（零下载）。
 */

/* ============================================================
   0. 设计令牌
   ============================================================ */
:root {
  --lk-hairline: rgba(39, 39, 39, 0.12);
  --lk-hairline-strong: rgba(39, 39, 39, 0.30);
  --lk-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas,
             "Liberation Mono", "Courier New", monospace;
  --lk-ease: cubic-bezier(0.22, 1, 0.36, 1);
  --lk-dur-fast: 180ms;
  --lk-dur-base: 340ms;
  --lk-dur-slow: 560ms;
  --lk-accent: var(--bs-primary);
  --lk-accent-rgb: var(--bs-primary-rgb);
}
[data-bs-theme="dark"] {
  --lk-hairline: rgba(255, 255, 255, 0.12);
  --lk-hairline-strong: rgba(255, 255, 255, 0.32);
}

/* 选区与滚动条：极客的一抹主色 */
::selection {
  background: rgba(var(--lk-accent-rgb), 0.22);
  color: inherit;
}
* { scrollbar-width: thin; scrollbar-color: var(--lk-hairline-strong) transparent; }
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--lk-hairline-strong); border-radius: 4px; }
::-webkit-scrollbar-thumb:hover { background: rgba(var(--lk-accent-rgb), 0.55); }

/* 焦点环：细线化 */
a:focus-visible, button:focus-visible, input:focus-visible, textarea:focus-visible, select:focus-visible {
  outline: 1px solid rgba(var(--lk-accent-rgb), 0.65);
  outline-offset: 2px;
}

/* ============================================================
   1. 阅读进度条：一条发丝般的顶部光带
   ============================================================ */
.gk-progress {
  position: fixed; top: 0; left: 0; right: 0;
  height: 2px; z-index: 2100;
  pointer-events: none;
  background: transparent;
}
.gk-progress__bar {
  height: 100%;
  background: linear-gradient(90deg, rgba(var(--lk-accent-rgb), 0.9), var(--lk-accent));
  transform-origin: 0 50%;
  transform: scaleX(0);
  will-change: transform;
}
html.gk-konami .gk-progress__bar {
  background: linear-gradient(90deg, #ff5f9e, #ffb020, #2ee86e, #00d4ff, #8b3dff);
  background-size: 200% 100%;
  animation: lk-rainbow 3s linear infinite;
}
@keyframes lk-rainbow { to { background-position: 200% 0; } }

/* ============================================================
   2. 点阵网格背景（默认开启，极淡）
   ============================================================ */
html.gk-dots body {
  background-image: radial-gradient(var(--lk-hairline) 1px, transparent 1px);
  background-size: 26px 26px;
}

/* ============================================================
   3. 导航：悬浮不再是圆角胶囊，而是发丝下划线
   ============================================================ */
.boxmoe_header .navbar .navbar-nav .nav-item .nav-link {
  border-radius: 0 !important;
  border: 1px solid transparent !important;
  position: relative;
}
.boxmoe_header .navbar .navbar-nav .nav-item .nav-link::after {
  content: '';
  position: absolute; left: 1rem; right: 1rem; bottom: 2px;
  height: 1px;
  background: currentColor;
  transform: scaleX(0);
  transform-origin: 0 50%;
  transition: transform var(--lk-dur-base) var(--lk-ease);
}
.boxmoe_header .navbar .navbar-nav .nav-item .nav-link:hover::after,
.boxmoe_header .navbar .navbar-nav .nav-item .nav-link.active::after {
  transform: scaleX(1);
}
.boxmoe_header .navbar .navbar-nav .nav-item .nav-link::before { display: none; }
.boxmoe_header .navbar.scrolled {
  border-bottom: 1px solid var(--lk-hairline);
}

/* ============================================================
   4. Banner 一言：渐变字放缓 + 打字光标
   ============================================================ */
.text-gradient {
  background-size: 300% 100%;
  animation-duration: 20s;
}
.gk-caret {
  display: inline-block;
  width: 2px; height: 1em;
  margin-left: 3px;
  vertical-align: -0.12em;
  background: currentColor;
  animation: lk-blink 1.05s steps(1) infinite;
}
@keyframes lk-blink { 50% { opacity: 0; } }

/* ============================================================
   5. 标签 / 分类：从胶囊框 → 纯文字 + 下划线
   ============================================================ */
.tag-cloud,
.list-one .category .tags a {
  background: transparent !important;
  border: 0 !important;
  border-radius: 0 !important;
  padding: 0 2px !important;
  font-size: 0.72rem;
  letter-spacing: 0.04em;
  position: relative;
  color: var(--bs-gray-700);
  box-shadow: none !important;
  transform: none !important;
  transition: color var(--lk-dur-fast) var(--lk-ease) !important;
}
.tag-cloud::after,
.list-one .category .tags a::after {
  content: '';
  position: absolute; left: 0; right: 0; bottom: -2px;
  height: 1px;
  background: rgba(var(--lk-accent-rgb), 0.85);
  transform: scaleX(0);
  transform-origin: 0 50%;
  transition: transform var(--lk-dur-base) var(--lk-ease);
}
.tag-cloud:hover,
.list-one .category .tags a:hover {
  color: var(--lk-accent) !important;
}
.tag-cloud:hover::after,
.list-one .category .tags a:hover::after {
  transform: scaleX(1);
}
.tag-cloud .tagfa,
.list-one .category .tags i {
  color: rgba(var(--lk-accent-rgb), 0.9);
}

/* ============================================================
   6. 首页文章列表：卡片之间以发丝线分隔，悬浮时左侧浮现一条主色线
   （用 border-left 颜色过渡实现，不与主题的 ::before/::after 变体冲突）
   ============================================================ */
.blog-post { position: relative; }
.blog-post .post-list.list-one {
  border: 0 !important;
  border-bottom: 1px solid var(--lk-hairline) !important;
  border-left: 2px solid transparent !important;
  box-shadow: none !important;
  border-radius: 0 !important;
  background: transparent !important;
  position: relative;
  transition:
    background-color var(--lk-dur-base) var(--lk-ease),
    border-color var(--lk-dur-base) var(--lk-ease);
}
.blog-post .post-list.list-one:hover {
  background: rgba(var(--lk-accent-rgb), 0.028);
  border-left-color: var(--lk-accent) !important;
}
.blog-post .post-list.list-one:last-of-type { border-bottom: 0 !important; }
/* 卡片边框变体去框：blog-border（双层硬框）、blog-lines（流动边框）、blog-shadow（阴影）
   这些类由控制中心"边框样式"设置附加到 article 上，统一收编进线条体系。 */
.post-list.list-one.blog-border { border: 0 !important; border-bottom: 1px solid var(--lk-hairline) !important; border-left: 2px solid transparent !important; }
.post-list.list-one.blog-border:after { display: none !important; }
.post-list.list-one.blog-lines { border: 0 !important; border-bottom: 1px solid var(--lk-hairline) !important; border-left: 2px solid transparent !important; }
.post-list.list-one.blog-lines::before,
.post-list.list-one.blog-lines::after { display: none !important; }
.post-list.list-one.blog-lines:hover { transform: none !important; box-shadow: none !important; }
.post-list.list-one.blog-shadow { box-shadow: none !important; }
.blog-post .post-list.list-one:hover.blog-border,
.blog-post .post-list.list-one:hover.blog-lines {
  border-left-color: var(--lk-accent) !important;
}
.blog-post .post-list.list-one .post-list-img img {
  border-radius: 6px;
}
.blog-post .post-list.list-one .post-meta {
  border-top: 0;
  padding-top: 12px;
}
/* 列表标题已有下划线扫过动效，保留并统一缓动 */
.post-list .post-title a {
  transition: background-size var(--lk-dur-slow) var(--lk-ease), color var(--lk-dur-fast) var(--lk-ease);
}

/* ============================================================
   7. 分页：去框，只留数字 + 一条主色短线
   ============================================================ */
.pagenav .page-item .page-link {
  border: 0 !important;
  box-shadow: none !important;
  border-radius: 0 !important;
  background: transparent !important;
  position: relative;
  padding: 0.35rem 0.7rem;
  transition: color var(--lk-dur-fast) var(--lk-ease);
}
.pagenav .page-item .page-link::after {
  content: '';
  position: absolute; left: 50%; bottom: 0;
  width: 60%; height: 1px;
  background: var(--lk-accent);
  transform: translateX(-50%) scaleX(0);
  transition: transform var(--lk-dur-base) var(--lk-ease);
}
.pagenav .page-item .page-link:hover,
.pagenav .page-item.active .page-link {
  color: var(--lk-accent) !important;
  transform: none !important;
}
.pagenav .page-item .page-link:hover::after,
.pagenav .page-item.active .page-link::after {
  transform: translateX(-50%) scaleX(1);
}

/* 加载更多：胶囊 → 一条带主色短线的文字 */
.load-more-btn {
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  background: transparent !important;
  color: var(--bs-gray-700);
  font-family: var(--lk-mono);
  font-size: 0.78rem;
  letter-spacing: 0.12em;
  padding: 0.6rem 1.4rem;
  position: relative;
  transition: color var(--lk-dur-fast) var(--lk-ease) !important;
}
.load-more-btn::before,
.load-more-btn::after {
  content: '';
  position: absolute; top: 50%;
  width: 22px; height: 1px;
  background: rgba(var(--lk-accent-rgb), 0.7);
  transition: width var(--lk-dur-base) var(--lk-ease), background-color var(--lk-dur-fast) var(--lk-ease);
}
.load-more-btn::before { right: 100%; margin-right: 10px; }
.load-more-btn::after { left: 100%; margin-left: 10px; }
.load-more-btn:hover {
  color: var(--lk-accent) !important;
  transform: none !important;
  background: transparent !important;
}
.load-more-btn:hover::before,
.load-more-btn:hover::after {
  width: 34px;
  background: var(--lk-accent);
}

/* ============================================================
   8. 侧栏 widget：去盒，标题一条主色短线，内容留白
   ============================================================ */
.blog-sidebar .widget {
  background-color: transparent !important;
  border-radius: 0 !important;
  padding: 10px 0 26px !important;
  margin-bottom: 34px !important;
  border-bottom: 1px solid var(--lk-hairline);
}
.blog-sidebar .widget:last-child { border-bottom: 0; }
.blog-sidebar .widget-title {
  position: relative !important;
  display: inline-flex;
  align-items: center;
  background: transparent !important;
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  padding: 0 0 8px !important;
  margin-bottom: 14px;
  font-family: var(--lk-mono);
  font-size: 0.72rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
}
.blog-sidebar .widget-title::after {
  content: '';
  position: absolute; left: 0; bottom: 0;
  width: 26px; height: 2px;
  background: var(--lk-accent);
  border-radius: 1px;
}
.blog-sidebar .widget ul li {
  border-bottom: 1px dashed var(--lk-hairline);
  padding: 7px 0;
  margin-bottom: 0;
  transition: padding-left var(--lk-dur-base) var(--lk-ease);
}
.blog-sidebar .widget ul li:last-child { border-bottom: 0; }
.blog-sidebar .widget ul li:hover { padding-left: 6px; }

/* ============================================================
   9. 文章页：呼吸感排版，去掉束缚
   ============================================================ */
.blog-single,
.post-single {
  background-color: transparent !important;
  border-radius: 0 !important;
}
/* 文章页容器边框变体同样收编进线条体系（boxmoe_border_setting 附加类） */
.blog-single.blog-border { border: 0 !important; }
.blog-single.blog-border:after { display: none !important; }
.blog-single.blog-lines::before,
.blog-single.blog-lines::after { display: none !important; }
.blog-single.blog-lines { border: 0 !important; }
.blog-single.blog-shadow { box-shadow: none !important; }
.post-single { padding: 26px 6px !important; }
@media (max-width: 767px) { .post-single { padding: 16px 0 !important; } }

.single-title {
  font-weight: 700;
  letter-spacing: 0.01em;
  position: relative;
  padding-bottom: 14px;
}
.single-title::after {
  content: '';
  position: absolute; left: 50%; bottom: 0;
  width: 42px; height: 2px;
  transform: translateX(-50%);
  background: var(--lk-accent);
  border-radius: 1px;
}
.single-meta img.avatar {
  border: 0 !important;
  padding: 0 !important;
  clip-path: none !important;
  -webkit-clip-path: none !important;
  border-radius: 50% !important;
}
hr.horizontal {
  background-image: none !important;
  height: 1px !important;
  opacity: 1 !important;
  background-color: var(--lk-hairline) !important;
}
.single-content {
  font-size: 0.92rem;
  line-height: 1.95;
  letter-spacing: 0.015em;
}
.single-content p { margin-bottom: 1.25em; }
/* 正文图片：厚边框 → 发丝线 */
.single-content img {
  border: 1px solid var(--lk-hairline) !important;
  border-radius: 6px !important;
  box-shadow: none !important;
  transition: border-color var(--lk-dur-base) var(--lk-ease) !important;
}
.single-content img:hover { border-color: rgba(var(--lk-accent-rgb), 0.5) !important; }
/* 行内代码：底色块 → 主色文字 + 发丝底边 */
.single-content code {
  background: transparent !important;
  border-bottom: 1px solid rgba(var(--lk-accent-rgb), 0.35);
  border-radius: 0;
  padding: 0.05em 0.2em;
  color: var(--lk-accent) !important;
  font-family: var(--lk-mono);
  font-size: 0.86em;
}
/* 引用块：实线框 → 左侧一条线 */
.single-content .quote blockquote,
.single-content blockquote {
  border: 0 !important;
  border-left: 2px solid rgba(var(--lk-accent-rgb), 0.7) !important;
  background: rgba(var(--lk-accent-rgb), 0.035) !important;
  border-radius: 0 !important;
  padding: 0.9em 1.2em;
}
/* 正文链接：统一主色 */
.single-content a {
  color: var(--lk-accent);
  border-bottom-color: rgba(var(--lk-accent-rgb), 0.4);
  transition: border-color var(--lk-dur-fast) var(--lk-ease), color var(--lk-dur-fast) var(--lk-ease);
}
.single-content a:hover { border-bottom-color: var(--lk-accent); }

/* 阅读时长徽章（JS 注入） */
.gk-readtime {
  display: block;
  text-align: center;
  font-family: var(--lk-mono);
  font-size: 0.7rem;
  letter-spacing: 0.1em;
  color: var(--bs-gray-700);
  opacity: 0.85;
  margin: 10px 0 4px;
}
.gk-readtime::before { content: '~/post$ '; color: var(--lk-accent); }

/* ============================================================
   10. 文章页交互按钮：去框去杂，统一成一行线式文字按钮
   ============================================================ */
.post-actions {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 2rem;
}
.action-btn {
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  background: transparent !important;
  padding: 4px 2px !important;
  font-size: 0.82rem;
  color: var(--bs-gray-700);
  position: relative;
  transition: color var(--lk-dur-fast) var(--lk-ease), transform var(--lk-dur-fast) var(--lk-ease);
}
.action-btn::after {
  content: '';
  position: absolute; left: 0; right: 0; bottom: -3px;
  height: 1px;
  background: var(--lk-accent);
  transform: scaleX(0);
  transition: transform var(--lk-dur-base) var(--lk-ease);
}
.action-btn:hover,
.like-btn.liked,
.action-btn.favorited {
  color: var(--lk-accent) !important;
  transform: none !important;
}
.action-btn:hover::after,
.like-btn.liked::after,
.action-btn.favorited::after {
  transform: scaleX(1);
}
[data-bs-theme="dark"] .like-btn.liked { background: transparent !important; color: var(--lk-accent) !important; }

/* ============================================================
   11. 上一篇 / 下一篇：框 → 发丝线分隔的两栏
   ============================================================ */
.post-next-previous { border-top: 1px solid var(--lk-hairline); border-bottom: 1px solid var(--lk-hairline); }
.post-navigation a,
[data-bs-theme="dark"] .post-navigation a {
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  background: transparent !important;
  padding: 1.1rem 1.2rem;
  transition: background-color var(--lk-dur-base) var(--lk-ease);
}
.post-navigation a:hover,
[data-bs-theme="dark"] .post-navigation a:hover {
  background: rgba(var(--lk-accent-rgb), 0.04) !important;
  transform: none !important;
  box-shadow: none !important;
}
.post-navigation a span {
  font-family: var(--lk-mono);
  font-size: 0.68rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  opacity: 0.7;
}
.post-navigation a h4 {
  margin-top: 4px;
  font-size: 0.9rem;
  transition: color var(--lk-dur-fast) var(--lk-ease);
}
.post-navigation a:hover h4 { color: var(--lk-accent); }
.post-navigation .row > .col-md-6:first-child { border-right: 1px solid var(--lk-hairline); }
@media (max-width: 767.98px) {
  .post-navigation .row > .col-md-6:first-child { border-right: 0; border-bottom: 1px solid var(--lk-hairline); }
}
.post-nav-empty { border: 0 !important; }

/* ============================================================
   12. 代码块：去掉 mac 红绿灯圆点，换发丝线 + 语言角标
   ============================================================ */
.post-single pre.prettyprint {
  background: var(--bs-white) !important;
  border: 0 !important;
  border-left: 2px solid rgba(var(--lk-accent-rgb), 0.6) !important;
  border-radius: 2px !important;
  box-shadow: none !important;
  padding-top: 2.2em !important;
}
[data-bs-theme="dark"] .post-single pre.prettyprint {
  background: #101014 !important;
}
.post-single pre.prettyprint::before {
  content: 'code';
  display: block;
  position: absolute;
  top: 0; left: 0; right: 0;
  width: auto; height: auto;
  background: none !important;
  box-shadow: none !important;
  border-radius: 0 !important;
  font-family: var(--lk-mono);
  font-size: 0.62rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--lk-accent);
  padding: 6px 12px;
  border-bottom: 1px solid var(--lk-hairline);
}
/* 复制按钮：常驻、线式、跟随主色（boxmoe.js 已内置按钮，只重做样式） */
.post-single pre .btn-copy {
  display: block !important;
  float: none !important;
  margin: 0 !important;
  position: absolute;
  top: 4px; right: 8px;
}
.post-single pre .btn-copy .single-copy {
  background: transparent !important;
  border: 0;
  color: var(--bs-gray-700);
  font-family: var(--lk-mono);
  font-size: 0.68rem;
  letter-spacing: 0.08em;
  padding: 2px 4px;
  cursor: pointer;
  opacity: 0;
  transition: opacity var(--lk-dur-fast) var(--lk-ease), color var(--lk-dur-fast) var(--lk-ease);
}
.post-single pre:hover .btn-copy .single-copy,
.post-single pre:focus-within .btn-copy .single-copy { opacity: 1; }
.post-single pre .btn-copy .single-copy:hover { color: var(--lk-accent) !important; }

/* ============================================================
   13. TOC 目录按钮与面板：线式化
   ============================================================ */
.post-toc-btn {
  border: 1px solid var(--lk-hairline-strong) !important;
  border-radius: 50% !important;
  box-shadow: none !important;
  background: var(--bs-white) !important;
  transition: opacity var(--lk-dur-base) var(--lk-ease), border-color var(--lk-dur-fast) var(--lk-ease), color var(--lk-dur-fast) var(--lk-ease) !important;
}
.post-toc-btn:hover { border-color: var(--lk-accent) !important; color: var(--lk-accent) !important; }
.post-toc-btn:hover,
.post-toc-btn:focus-visible { outline: 0 !important; }
.post-toc {
  border: 0 !important;
  border-left: 2px solid rgba(var(--lk-accent-rgb), 0.6) !important;
  border-radius: 0 8px 8px 0 !important;
  box-shadow: 0 12px 34px rgba(0, 0, 0, 0.10) !important;
}
.post-toc .toc-title {
  font-family: var(--lk-mono);
  font-size: 0.7rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
}
/* TOC 跳转后的目标闪烁：一条主色下划线扫过 */
.gk-flash-target {
  animation: lk-flash 1.2s var(--lk-ease);
}
@keyframes lk-flash {
  0% { background-image: linear-gradient(to right, rgba(var(--lk-accent-rgb), 0.28), rgba(var(--lk-accent-rgb), 0.28)); background-size: 100% 100%; background-repeat: no-repeat; }
  100% { background-image: linear-gradient(to right, rgba(var(--lk-accent-rgb), 0), rgba(var(--lk-accent-rgb), 0)); }
}

/* ============================================================
   14. 评论区：分隔线化
   ============================================================ */
.comment-item {
  border-bottom: 1px solid var(--lk-hairline);
  padding: 1.2rem 0;
}
.comment-item:last-child { border-bottom: 0; }
.submit-btn {
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  background: transparent !important;
  color: var(--lk-accent) !important;
  font-family: var(--lk-mono);
  font-size: 0.78rem;
  letter-spacing: 0.14em;
  padding: 0.5rem 0.2rem !important;
  position: relative;
  transform: none !important;
  transition: opacity var(--lk-dur-fast) var(--lk-ease);
}
.submit-btn::after {
  content: '';
  position: absolute; left: 0; right: 0; bottom: 0;
  height: 1px;
  background: var(--lk-accent);
  transform: scaleX(0.35);
  transform-origin: 0 50%;
  transition: transform var(--lk-dur-base) var(--lk-ease);
}
.submit-btn:hover { transform: none !important; }
.submit-btn:hover::after { transform: scaleX(1); }

/* ============================================================
   15. 浮动控件：回到顶部按钮、浮动菜单线式化
   ============================================================ */
.boxmoe-article-top,
.boxmoe-article-bottom,
[data-bs-theme="dark"] .boxmoe-article-top,
[data-bs-theme="dark"] .boxmoe-article-bottom {
  border: 1px solid var(--lk-hairline-strong) !important;
  border-radius: 50% !important;
  box-shadow: none !important;
  backdrop-filter: blur(8px);
  transition: border-color var(--lk-dur-fast) var(--lk-ease), color var(--lk-dur-fast) var(--lk-ease), transform var(--lk-dur-base) var(--lk-ease) !important;
}
.boxmoe-article-top:hover,
.boxmoe-article-top:focus-visible,
.boxmoe-article-bottom:hover,
.boxmoe-article-bottom:focus-visible {
  background: var(--bs-white) !important;
  color: var(--lk-accent) !important;
  border-color: var(--lk-accent) !important;
  outline: 0 !important;
}
[data-bs-theme="dark"] .boxmoe-article-top:hover,
[data-bs-theme="dark"] .boxmoe-article-bottom:hover { background: rgba(14, 14, 14, 0.9) !important; }
.float-btn {
  border: 1px solid var(--lk-hairline-strong) !important;
  background: var(--bs-white) !important;
  box-shadow: none !important;
  transition: border-color var(--lk-dur-fast) var(--lk-ease), color var(--lk-dur-fast) var(--lk-ease);
}
.float-btn:hover { border-color: var(--lk-accent) !important; color: var(--lk-accent) !important; }

/* ============================================================
   16. 页脚与分类项：接管原独立 fadeInUp，统一进显现引擎
   原 CSS：opacity:0 + animation forwards。这里先恢复可见，
   再由 geek.js 的 reveal 引擎（或直出）接管。
   ============================================================ */
footer.mt-7 {
  opacity: 1 !important;
  transform: none !important;
  animation: none !important;
}
footer.mt-7 hr.horizontal { margin-bottom: 1.5rem; }
.boxmoe_cat_items .cat_list_item {
  opacity: 1 !important;
  transform: none !important;
  animation: none !important;
}

/* ============================================================
   17. 统一显现引擎（JS 标记 .gk-reveal，进视口加 .gk-in）
   首屏元素永不被标记，杜绝闪烁。
   ============================================================ */
.gk-reveal {
  opacity: 0;
  transform: translateY(14px);
  transition:
    opacity var(--lk-dur-slow) var(--lk-ease),
    transform var(--lk-dur-slow) var(--lk-ease);
  transition-delay: var(--gk-delay, 0ms);
}
.gk-reveal.gk-in {
  opacity: 1;
  transform: none;
}

/* ============================================================
   18. 降级模式：减弱动态 / 弱网 / 省流 → 全部直出
   ============================================================ */
html.gk-degraded .gk-reveal { opacity: 1 !important; transform: none !important; transition: none !important; }
html.gk-degraded *,
html.gk-degraded *::before,
html.gk-degraded *::after {
  animation-duration: 0.01ms !important;
  animation-iteration-count: 1 !important;
  transition-duration: 0.01ms !important;
}
html.gk-degraded .gk-caret { display: none; }
html.gk-degraded .gk-progress { display: none; }

@media (prefers-reduced-motion: reduce) {
  html:not(.gk-degraded) .gk-reveal { opacity: 1; transform: none; }
  html:not(.gk-degraded) * {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}

/* ============================================================
   19. 暗色模式微调：线条更亮一点，代码块更"终端"
   ============================================================ */
[data-bs-theme="dark"] .post-single pre.prettyprint::before { color: rgba(var(--lk-accent-rgb), 0.9); }
[data-bs-theme="dark"] .blog-post .post-list.list-one:hover { background: rgba(var(--lk-accent-rgb), 0.05); }
[data-bs-theme="dark"] .single-content blockquote,
[data-bs-theme="dark"] .single-content .quote blockquote { background: rgba(var(--lk-accent-rgb), 0.06) !important; }

/* ============================================================
   20. 终端开机序列（线条极简版：无框，只有打字与光标线）
   每会话一次，点击即跳过，内容页不打扰。
   ============================================================ */
.gk-boot {
  position: fixed; inset: 0;
  z-index: 9999;
  display: flex; align-items: center; justify-content: center;
  background: var(--bs-body-bg);
  cursor: pointer;
  transition: opacity var(--lk-dur-slow) var(--lk-ease);
}
.gk-boot.is-done { opacity: 0; pointer-events: none; }
.gk-boot__console {
  font-family: var(--lk-mono);
  font-size: 0.8rem;
  line-height: 2;
  color: var(--bs-body-color);
  min-width: min(420px, 82vw);
  border-left: 2px solid rgba(var(--lk-accent-rgb), 0.5);
  padding-left: 18px;
}
.gk-boot__line { white-space: pre-wrap; opacity: 0; animation: lk-line-in var(--lk-dur-base) var(--lk-ease) forwards; }
@keyframes lk-line-in { from { opacity: 0; transform: translateX(-6px); } to { opacity: 1; transform: none; } }
.gk-boot__line .ok { color: var(--lk-accent); font-weight: 600; }
.gk-boot__line .prompt { color: var(--lk-accent); }
.gk-boot__line .dim { opacity: 0.5; }

/* ============================================================
   21. 文章标题编号：h2/h3 前缀行号风格（01 / 02…）
   由 JS 注入 span.gk-hnum，纯线条美学的小心意。
   ============================================================ */
.single-content h2,
.single-content h3 {
  position: relative;
  scroll-margin-top: 90px;
}
.single-content h2 .gk-hnum,
.single-content h3 .gk-hnum {
  font-family: var(--lk-mono);
  font-weight: 400;
  color: var(--lk-accent);
  opacity: 0.8;
  margin-right: 0.6em;
  font-size: 0.72em;
  letter-spacing: 0.08em;
}
.single-content h2 .gk-hnum::before { content: '// '; opacity: 0.6; }
.single-content h3 .gk-hnum::before { content: '# '; opacity: 0.6; }

/* ============================================================
   22. 页脚：线式化
   ============================================================ */
footer.mt-7 { padding-top: 0.5rem; }
footer.mt-7 .container { font-size: 0.75rem; }
