@charset "UTF-8";/* stylelint-disable */
html,
body,
#app {
  height: 100%;
  width: 100%;
}

* {
  margin: 0;
  padding: 0;
  -webkit-tap-highlight-color: transparent;
  -webkit-tap-highlight-color: rgb(0 0 0 / 0%);
}

*,
:after,
:before {
  box-sizing: border-box;
}

main {
  display: block;
}

hr {
  box-sizing: content-box;
  height: 0;
  overflow: visible;
}

a {
  text-decoration: none;
  background-color: transparent;
}

abbr[title] {
  border-bottom: none;
  text-decoration: underline;
  -webkit-text-decoration: underline dotted;
          text-decoration: underline dotted;
}

b,
strong {
  font-weight: bolder;
}

small {
  font-size: 80%;
}

sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}

sub {
  bottom: -0.25em;
}

sup {
  top: -0.5em;
}

img {
  border-style: none;
  vertical-align: bottom;
}

button,
input,
optgroup,
select,
textarea {
  font-family: inherit;
  font-size: 100%;
  line-height: 1.15;
  margin: 0;
}

button,
input {
  overflow: visible;
}

button,
select {
  text-transform: none;
}

button,
[type='button'],
[type='reset'],
[type='submit'] {
  -webkit-appearance: button;
}

button::-moz-focus-inner,
[type='button']::-moz-focus-inner,
[type='reset']::-moz-focus-inner,
[type='submit']::-moz-focus-inner {
  border-style: none;
  padding: 0;
}

button:-moz-focusring,
[type='button']:-moz-focusring,
[type='reset']:-moz-focusring,
[type='submit']:-moz-focusring {
  outline: 0.0625rem dotted ButtonText;
}

fieldset {
  padding: 0.35em 0.75em 0.625em;
}

legend {
  box-sizing: border-box;
  color: inherit;
  display: table;
  max-width: 100%;
  padding: 0;
  white-space: normal;
}

progress {
  vertical-align: baseline;
}

textarea {
  overflow: auto;
}

[type='checkbox'],
[type='radio'] {
  box-sizing: border-box;
  padding: 0;
}

[type='number']::-webkit-inner-spin-button,
[type='number']::-webkit-outer-spin-button {
  height: auto;
}

[type='search'] {
  -webkit-appearance: textfield;
  outline-offset: -0.125rem;
}

[type='search']::-webkit-search-decoration {
  -webkit-appearance: none;
}

::-webkit-file-upload-button {
  -webkit-appearance: button;
  font: inherit;
}

details {
  display: block;
}

summary {
  display: list-item;
}

template {
  display: none;
}

[hidden] {
  display: none;
}

[v-cloak] {
  display: none;
}

input,
button,
textarea {
  color: inherit;
  font: inherit;
}

ol,
ul {
  margin: 0;
  padding: 0;
  list-style: none;
}

input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
  -webkit-appearance: none;
}

input[type='number'] {
  -moz-appearance: textfield;
}

i {
  font-style: normal;
}

img {
  -webkit-user-drag: none;
  -webkit-touch-callout: none;
  vertical-align: middle;
  -webkit-user-select: none;
     -moz-user-select: none;
          user-select: none
}

:focus-visible {
  outline: none;
}

/** 多标签右键：固定 / 取消固定（与 multiple-tabs 菜单同源） */
.vft-fade-in-linear-enter-active,
.vft-fade-in-linear-leave-active {
  transition: var(--vft-transition-fade-linear);
}

.vft-fade-in-linear-enter-from,
.vft-fade-in-linear-leave-to {
  opacity: 0;
}

.vft-fade-in-enter-active,
.vft-fade-in-leave-active {
  transition: all var(--vft-transition-duration) cubic-bezier(0.55, 0, 0.1, 1);
}

.vft-fade-in-enter-from,
.vft-fade-in-leave-active {
  opacity: 0;
}

.vft-zoom-in-center-enter-active,
.vft-zoom-in-center-leave-active {
  transition: all var(--vft-transition-duration) cubic-bezier(0.55, 0, 0.1, 1);
}

.vft-zoom-in-center-enter-from,
.vft-zoom-in-center-leave-active {
  transform: scaleX(0);
  opacity: 0;
}

.vft-zoom-in-top-enter-active,
.vft-zoom-in-top-leave-active {
  transition: var(--vft-transition-md-fade);
  transform: scaleY(1);
  transform-origin: center top;
  opacity: 1;
}
.vft-zoom-in-top-enter-active[data-popper-placement^=top],
.vft-zoom-in-top-leave-active[data-popper-placement^=top] {
  transform-origin: center bottom;
}

.vft-zoom-in-top-enter-from,
.vft-zoom-in-top-leave-active {
  transform: scaleY(0);
  opacity: 0;
}

.vft-zoom-in-top-fast-enter-active {
  transition: var(--vft-transition-md-fade);
  transform: scaleY(1);
  transform-origin: center top;
  opacity: 1;
}
.vft-zoom-in-top-fast-enter-active[data-popper-placement^=top] {
  transform-origin: center bottom;
}

.vft-zoom-in-top-fast-leave-active {
  transform: scaleY(1);
  transform-origin: center top;
  opacity: 1;
}
.vft-zoom-in-top-fast-leave-active[data-popper-placement^=top] {
  transform-origin: center bottom;
}

.vft-zoom-in-top-fast-enter-from,
.vft-zoom-in-top-fast-leave-active {
  transform: scaleY(0);
  opacity: 0;
}

.vft-zoom-in-bottom-enter-active,
.vft-zoom-in-bottom-leave-active {
  transform: scaleY(1);
  transform-origin: center bottom;
  transition: var(--vft-transition-md-fade);
  opacity: 1;
}

.vft-zoom-in-bottom-enter-from,
.vft-zoom-in-bottom-leave-active {
  transform: scaleY(0);
  opacity: 0;
}

.vft-zoom-in-left-enter-active,
.vft-zoom-in-left-leave-active {
  transform: scale(1, 1);
  transform-origin: top left;
  transition: var(--vft-transition-md-fade);
  opacity: 1;
}

.vft-zoom-in-left-enter-from,
.vft-zoom-in-left-leave-active {
  transform: scale(0.45, 0.45);
  opacity: 0;
}

.collapse-transition {
  transition: var(--vft-transition-duration) height ease-in-out, var(--vft-transition-duration) padding-top ease-in-out, var(--vft-transition-duration) padding-bottom ease-in-out;
}

.vft-collapse-transition-leave-active,
.vft-collapse-transition-enter-active {
  transition: var(--vft-transition-duration) max-height ease-in-out, var(--vft-transition-duration) padding-top ease-in-out, var(--vft-transition-duration) padding-bottom ease-in-out;
}

.horizontal-collapse-transition {
  transition: var(--vft-transition-duration) width ease-in-out, var(--vft-transition-duration) padding-left ease-in-out, var(--vft-transition-duration) padding-right ease-in-out;
}

.vft-list-enter-active,
.vft-list-leave-active {
  transition: all 1s;
}

.vft-list-enter-from,
.vft-list-leave-to {
  transform: translateY(-1.875rem);
  opacity: 0;
}

.vft-list-leave-active {
  position: absolute !important;
}

.vft-opacity-transition {
  transition: opacity var(--vft-transition-duration) cubic-bezier(0.55, 0, 0.1, 1);
}

@keyframes vft-rotate {
  from {
    -webkit-transform: rotate(0deg);
  }
  to {
    -webkit-transform: rotate(360deg);
  }
}
@keyframes vft-loading-dot {
  33% {
    transform: translateY(-2em);
  }
  66% {
    transform: translateY(-1em);
  }
}
/* ─────────────────────────────────────────────────────────────────────────── */
/* Blog 设计令牌增强 - 参考 tools 项目视觉风格 */
/* ─────────────────────────────────────────────────────────────────────────── */
:root {
  /* 阴影系统（浅色模式） */
  --blog-shadow-sm: 0 0.125rem 0.5rem rgba(0, 0, 0, 0.08);
  --blog-shadow-md: 0 0.5rem 1.5rem rgba(0, 0, 0, 0.12);
  --blog-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.15);
  /* 圆角系统 */
  --blog-radius-sm: 0.5rem;
  --blog-radius-md: 0.75rem;
  --blog-radius-lg: 1rem;
  --blog-radius-xl: 1.25rem;
  --blog-radius-pill: 62.4375rem;
  /* 过渡动画 */
  --blog-transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  --blog-transition-fast: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
  --blog-transition-slow: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
  /* 间距系统 */
  --blog-gap-xs: 0.5rem;
  --blog-gap-sm: 0.75rem;
  --blog-gap-md: 1rem;
  --blog-gap-lg: 1.25rem;
  --blog-gap-xl: 1.5rem;
  /* 边框 */
  --blog-border: 0.0625rem solid rgba(0, 0, 0, 0.08);
  --blog-border-light: 0.0625rem solid rgba(0, 0, 0, 0.06);
}

/* 深色模式阴影增强 */
html.dark {
  --blog-shadow-sm: 0 0.125rem 0.5rem rgba(0, 0, 0, 0.3);
  --blog-shadow-md: 0 0.5rem 1.5rem rgba(0, 0, 0, 0.4);
  --blog-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.5);
  --blog-border: 0.0625rem solid rgba(255, 255, 255, 0.08);
  --blog-border-light: 0.0625rem solid rgba(255, 255, 255, 0.06);
}

/* ─────────────────────────────────────────────────────────────────────────── */
/* 动画关键帧 */
/* ─────────────────────────────────────────────────────────────────────────── */
/* 淡入动画 */
@keyframes blog-fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
/* 上滑淡入动画 */
@keyframes blog-slide-up {
  from {
    opacity: 0;
    transform: translateY(1.25rem);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
/* 卡片入场动画 */
@keyframes blog-card-enter {
  from {
    opacity: 0;
    transform: translateY(1rem);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
/* 脉冲动画 */
@keyframes blog-pulse {
  0%, 100% {
    opacity: 1;
  }
  50% {
    opacity: 0.5;
  }
}
/* ─────────────────────────────────────────────────────────────────────────── */
/* Mixins */
/* ─────────────────────────────────────────────────────────────────────────── */
/* 毛玻璃效果 */
/* 卡片悬浮效果 */
/* 卡片基础样式 */
/* 入场动画 */
/* 响应式网格 */
/* ─────────────────────────────────────────────────────────────────────────── */
/* 全局动画类 */
/* ─────────────────────────────────────────────────────────────────────────── */
.blog-fade-in {
  animation: blog-fade-in 0.6s ease-out;
}

.blog-slide-up {
  animation: blog-slide-up 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}

.blog-card-hover {
  transition: var(--blog-transition);
  cursor: pointer;
}
.blog-card-hover:hover {
  transform: translateY(-0.25rem);
  box-shadow: var(--blog-shadow-md);
}

/* ─────────────────────────────────────────────────────────────────────────── */
/* 工具类 */
/* ─────────────────────────────────────────────────────────────────────────── */
.blog-glass {
  backdrop-filter: blur(0.75rem);
  -webkit-backdrop-filter: blur(0.75rem);
  background-color: color-mix(in srgb, var(--main-primary) 80%, transparent);
}

.blog-card {
  border-radius: var(--blog-radius-lg);
  background-color: var(--main-primary);
  box-shadow: var(--blog-shadow-sm);
  transition: var(--blog-transition);
}

#nprogress {
  pointer-events: none;
}
#nprogress .bar {
  position: fixed;
  z-index: 99999;
  top: 0;
  left: 0;
  width: 100%;
  height: 0.125rem;
  opacity: 0.75;
  background-color: var(--nprogress-color, white);
}