@charset "utf-8";

article {
    position: relative;
    padding: var(--margin) calc(1.5 * var(--margin));
    margin-bottom: var(--margin);
    color: var(--main);
    background: var(--background);
    border-radius: var(--radius);
    text-align: justify;
}
.post_overtime {
    font-size: 0.9rem;
    line-height: 2rem;
    height: auto;
    margin: var(--margin) 0;
    background: var(--O);
    padding: 0.5rem 1rem;
    border-radius: var(--radius);
}
.article_end {
    font-size: small;
    color: var(--A);
    line-height: 1.75rem;
    display: flex;
    justify-content: space-between;
}
.article_tags {
    font-size: 0.9rem;
    color: var(--A);
    line-height: 1.75rem;
}
.article_tags a{
    color: var(--B);
    -webkit-transition: 0.5s;
    transition: 0.5s;
}
.article_tags a:hover{
    color: var(--main);
}

/* 文章正文 */
.cat_tips {
    position: relative;
    border-radius:var(--radius);
    color: #fff;
    line-height: 2rem;
    padding: 0.75rem 1.5rem;
}
.cat_tips a{
    color: #fff;
}
.cat_tips_info {
    background: #20a0ff;
    background: -webkit-gradient(linear,left top,right top,from(#20a0ff),to(#20b8ff));
    background: -webkit-linear-gradient(left,#20a0ff,#20b8ff);
    background: linear-gradient(90deg,#20a0ff,#20b8ff);
}
.cat_tips_success {
    background: #61be33;
    background: -webkit-gradient(linear,left top,right top,from(#61be33),to(#8fce44));
    background: -webkit-linear-gradient(left,#61be33,#8fce44);
    background: linear-gradient(90deg,#61be33,#8fce44);
    text-shadow: 0 -1px #61be33;
}
.cat_tips_warning {
    background: #ff953f;
    background: -webkit-gradient(linear,left top,right top,from(#ff953f),to(#ffb449));
    background: -webkit-linear-gradient(left,#ff953f,#ffb449);
    background: linear-gradient(90deg,#ff953f,#ffb449);
    text-shadow: 0 -1px #ff953f;
}
.cat_tips_error {
    background: #ff4949;
    background: -webkit-gradient(linear,left top,right top,from(#ff4949),to(#ff7849));
    background: -webkit-linear-gradient(left,#ff4949,#ff7849);
    background: linear-gradient(90deg,#ff4949,#ff7849);
    text-shadow: 0 -1px #ff4949;
}
.cat_tips:before {
    color: #fff;
    border-radius: 50%;
    display: flex;
    position: absolute;
    width: 1.5rem;
    height: 1.5rem;
    left: -0.75rem;
    top: -0.75rem;
    -webkit-box-shadow: 0 0 0 2.5px #fff;
    box-shadow: 0 0 0 2.5px #fff;
    font-weight: bold;
    text-align: center;
    align-items: center;
    justify-content: center;
    letter-spacing: 0;
}
.cat_tips_info:before {
    background: #20a0ff;
    background: -webkit-gradient(linear,left bottom,left top,from(#0092ff),to(#20b8ff));
    background: -webkit-linear-gradient(bottom,#0092ff,#20b8ff);
    background: linear-gradient(0deg,#0092ff,#20b8ff);
    content: "i";
}
.cat_tips_success:before {
    background: -webkit-gradient(linear,left bottom,left top,from(#52bb1d),to(#95d34b));
    background: -webkit-linear-gradient(bottom,#52bb1d,#95d34b);
    background: linear-gradient(0deg,#52bb1d,#95d34b);
    content: "✓";
    text-shadow: 0 -1px #61be33;
}
.cat_tips_warning:before {
    background: -webkit-gradient(linear,left bottom,left top,from(#ff8f35),to(#ffc149));
    background: -webkit-linear-gradient(bottom,#ff8f35,#ffc149);
    background: linear-gradient(0deg,#ff8f35,#ffc149);
    content: "!";
    text-shadow: 0 -1px #ff953f;
}
.cat_tips_error:before {
    background: -webkit-gradient(linear,left bottom,left top,from(#ff3838),to(#ff7849));
    background: -webkit-linear-gradient(bottom,#ff3838,#ff7849);
    background: linear-gradient(0deg,#ff3838,#ff7849);
    content: "×";
    text-shadow: 0 -1px #ff4949;
}

article h2,article h3,article h4,article h5,article h6 {
    position: relative;
    line-height: 2rem;
    padding: 1.5rem 0;
}
article h2 {
	font-size: 1.5rem;
    counter-increment: h2;
    counter-reset: h3;
}
article h3 {
	font-size: 1.35rem;
    counter-increment: h3;
    counter-reset: h4;
}
article h4 {
	font-size: 1.25rem;
    counter-increment: h4;
    counter-reset: h5;
}
article h5 {
	font-size: 1.15rem;
	padding: 1rem 0;
}
article h6 {
	font-size: 1.05rem;
	padding: 0.5rem 0;
}
article h2::before {
    color: var(--theme);
    font-size: smaller;
    letter-spacing: 0;
    padding-right: 0.5rem;
}
article h3::before {
    color: var(--theme);
    font-size: smaller;
    letter-spacing: 0;
    padding-right: 0.5rem;
}
article h4::before {
    color: var(--theme);
    font-size: smaller;
    letter-spacing: 0;
    padding-right: 0.5rem;
}
article h5::before {
	content: '#';
    color: var(--theme);
    font-size: smaller;
    padding-right: 0.5rem;
}
article h6::before {
	content: '##';
    color: var(--theme);
    font-size: smaller;
    padding-right: 0.5rem;
}
article .post_content>p {
    line-height: 2.5rem;
    word-break: break-all;
    font-size: 1rem;
    margin: 1rem 0;
}
article .post_content hr {
    color: var(--B);
    border: 0;
    font-size: 0.75rem;
    padding: 0.5rem 0;
    position: relative;
    border-bottom: 2px dashed var(--theme-60);
    margin: 3rem 0;
}
/* 在head.php */
article .post_content hr::before {
    position: absolute;
    line-height: 0px;
    right: 0;
}
article .post_content del,
article .post_content s {
    color: var(--B);
}
article .post_content strong {
    color:var(--theme);
}
article .post_content u {
    border-bottom: 2px solid var(--theme-80);
    text-decoration: unset;
    margin: 0 0.25rem;
}
article .post_content .e {
    border-bottom: 2px dashed var(--theme-80);
    text-decoration: unset;
}
article .post_content a {
    margin: 0 0.25rem;
    color: var(--theme);
    position: relative;
    word-break: break-word;
    cursor: pointer;
    background: linear-gradient(90deg,var(--theme-60),var(--theme-60)) no-repeat left 100% / 0 2px;
    -webkit-transition: 0.5s;
    transition: 0.5s;
}
article .post_content a:hover {
    background: linear-gradient(90deg,var(--theme-60),var(--theme-60)) no-repeat left 100% / 100% 2px;
}
article .post_content :not(.article_tags) a:not(.footnote-backref):not(.footnote-ref):after {
    content: '↷';
    font-size: 0.9rem;
}

article .post_content sup a:after,
article .post_content .footnotes a:after{
    content: ' ';
}
article .post_content a:hover:before {
  visibility: visible;
  -webkit-transform: scaleX(1);
  -o-transform: scaleX(1);
  transform: scaleX(1);
}
article .post_content blockquote {
    border-left: 4px solid var(--theme-80);
    padding: calc(0.5 * var(--margin)) var(--margin);
    border-radius: var(--radius);
    margin: var(--margin) 0;
    -webkit-transition: 0.5s;
    transition: 0.5s;
    line-height: 2.5rem;
    word-break: break-all;
    font-size: 0.9rem;
    background: var(--O);
}
article .post_content blockquote:hover {
    border-left-color: var(--theme-30);
}
article .post_content code:not([class]) {
    padding: 0.2rem 0.3rem;
    margin: auto 0.2rem;
    font-size: 0.75rem;
    vertical-align: bottom;
    background: var(--C);
    border-radius: 0.25rem;
    color: #fff;
    font-family: Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;
    letter-spacing: 0;
}

/* 列表 */
article .post_content ol li,
article .post_content ul li {
    line-height: 1.75rem;
    transition: color 0.2s;
    font-size: 0.9rem;
    margin: 0 0 0 2rem;
    padding: 0.5rem;
    border-radius: var(--radius);
    -webkit-transition: 0.5s;
    transition: 0.5s;
}
article .post_content ul li:hover {
    background: var(--O);
}
article .post_content ul li::before {
    content: '🔹';
    font-size: 0.75rem;
    margin-right: 0.5rem;
    width: 1rem;
    border-radius: var(--radius);
    position: absolute;
    transform: translateX(-1.5rem);
    -webkit-transition: 0.5s;
    transition: 0.5s;
}
article .post_content ul li:hover::before {
    content: '🔸';
}
article .post_content ol li:hover {
    background: var(--O);
}
article .post_content ol li::before {
    content: counter(list-item) ".";
    color: var(--theme-60);
    margin-right: 0.5rem;
    position: absolute;
    transform: translateX(-1.5rem);
    -webkit-transition: 0.5s;
    transition: 0.5s;
}
article .post_content ol li:hover::before {
    color: var(--theme);
}
/* 表格 */
article .post_content table {
    margin: 1rem 0;
    border-collapse: collapse;
    border: 1px solid var(--A);
    border-spacing: 0;
    width: 100%;
}
article .post_content table thead {
    background: var(--theme-60);
    color: #fff;
}
article .post_content table thead th {
    padding: 0.5rem;
}
article .post_content table tbody td {
    border: 1px dashed var(--theme-30);
    padding: 0.5rem;
    word-break: break-all;
    -webkit-transition: 0.5s;
    transition: 0.5s;
}
cat_article_hide{
    display: block;
    background: repeating-linear-gradient(135deg,var(--theme-10),var(--theme-10) 1rem,var(--background) 0,var(--background) 2rem)!important;
    text-align: center;
    padding: 5rem!important;
    text-indent: 0;
    color: var(--theme);
    border-radius: var(--radius);
}
article .post_content .cat_article_show_word {
    color: var(--C);
    font-size: 0.8rem;
    line-height: 2rem;
    -webkit-transition: 0.5s;
    transition: 0.5s;
}
article .post_content .cat_block {
    font-size: 0.9rem;
    border: 1px solid var(--A);
}

article .post_content .cat_block a {
    color: var(--main);
}
article .post_content .cat_block a:after {
    content: ''!important;
}


article .post_content .copy-to-clipboard-button{
    box-shadow: none!important;
    background: unset!important;    
    color: var(--theme)!important;
}
article .post_content .copy-to-clipboard-button span:before {
    content: '☍复制代码';
    margin: 0.5rem 0;
    display: block;
}
article .post_content .code-toolbar {
    display: grid;
}
article .post_content pre[class*=language-].line-numbers {
    font-size: 0.75rem;    
    border-radius: var(--radius);
}
article .post_content pre[class*=language-].line-numbers .code-toolbar code span {
    word-break: break-all;
}
/* 文章图片 */
cat_post_image {
    display: block;
    margin: 1rem 0;
}
cat_gallery>cat_post_image {
    margin: 0;
}
cat_post_image img {
    display: block;
    border-radius: var(--radius);
    max-width: 100%;
    margin: auto;
    cursor: zoom-in;
    -webkit-transition: 0.2s;
    transition: 0.2s;
}
cat_post_image img:hover{
    filter: blur(0) brightness(0.75);
    -webkit-filter: blur(0) brightness(0.75);
}
/* 相册 */
cat_gallery{
    display: grid;
    grid-template-columns: repeat(3,1fr);
    grid-gap: var(--margin);
    margin: 1rem 0;
}
cat_gallery img{
    display: block;
    border-radius: var(--radius);
    max-width: 100%;
    margin: auto;
    aspect-ratio: 1;
    object-fit: cover;
    box-shadow: var(--box-shadow);
}
/* 文章图片 end */
cat_music {
    background: var(--O);
    width: 100%;
    height: 100%;
    display: block;
    padding: 1rem var(--margin);
    border-radius: var(--radius);
}
cat_music span {
    display: flex;
    padding: 0.5rem;
    gap: 0.5rem;
}
cat_music span svg {
    fill: var(--main);
}





























/* 评论 */
.cat_cancel_comment_reply {
    display: none;
}
#comments{
    scroll-margin-top: 8.5rem;
}
.cat_comment_respond_form {
    display: flex;
    flex-direction: column;
    margin: var(--margin) 0 0;
    gap: 0.5rem;
    width: 100%;
}
.cat_comment_respond_form .replyavatar img {
    width: 3rem;
    height: 3rem;
}
.cat_comment_respond_form .top{
    display: flex;
    gap: 0.5rem;
}
.cat_comment_respond_form .foot .right {
    display: flex;
    gap: 0.5rem;
    flex-direction: row;
}
.cat_comment_respond_form .head {
    display: flex;
    width: 100%;
    align-items: center;
    gap: 0.5rem;
}
.cat_comment_respond_form .head .list{
    width: 100%;
}
.cat_comment_respond_form .body textarea{
    min-height: 150px;
    resize: vertical;
}
#comments_is_off{
    font-size: small;
    color: var(--A);
    padding: 0.5rem;
    text-align: center;
}


cat_article_video {
    display: block;
}
cat_article_video iframe,
cat_article_video video {
    width: 100%;
    aspect-ratio: 16 / 9;
    height: auto;
    display: block;
    border-radius: var(--radius);
    object-fit: cover;
}

























































/* ==========================================================================
   评论区 · IM 聊天气泡
   --------------------------------------------------------------------------
   结构（parts/comment.php，模板零改动）：
     li.cat_comment_parent|cat_comment_child [.huomiaoreply(博主)]
       └ .cat_comment_replyout
           └ .cat_comment_body
               ├ .cat_comment_reply   头像 + 悬停 @ 遮罩
               └ .content
                   ├ .user            名字 / @提及 / 审核中
                   ├ .substance       气泡正文（博主 .iscat · 访客 .isfriend）
                   └ .commentinfos    时间 · 系统 · 浏览器
   宽度策略：气泡 width:fit-content 收缩贴合；长文封顶 min(100%, 44rem) 折行；
             换行 overflow-wrap:anywhere（优先在空格断，长 URL 才字内断）。
   ========================================================================== */
#comments .cat_comment_replyout {
    margin: 1rem;
}
#comments > ol > li {
    background: var(--background);
    border-radius: var(--radius);
    padding: var(--margin);
    margin-top: var(--margin);
    position: relative;
}
#comments .cat_comment_body {
    display: flex;
    gap: 0.6rem;
    position: relative;
    scroll-margin-top: 11.5rem;
}
#comments .cat_comment_body .content {
    min-width: 0;
    flex: 1;
}

/* ---------- 气泡：先贴合、有上限 ---------- */
#comments .cat_comment_body .content .substance {
    width: fit-content;
    max-width: min(100%, 44rem);
    margin: 0.2rem 0.5rem;
    padding: 0.6rem 0.9rem;
    background: var(--O);
    color: var(--main);
    border-radius: var(--radius);
    line-height: 1.75;
    overflow-wrap: anywhere;
    word-break: normal;
}
#comments .substance.isfriend {
    margin-right: auto;                       /* 访客靠左 */
}
#comments .substance.iscat {
    margin-left: auto;                        /* 博主靠右 */
    background: var(--theme-10);              /* 主题色淡底，和访客的灰底区分 */
}
#comments .substance.iscat::after {
    content: '博主';
    display: inline-block;
    margin-left: 0.5rem;
    padding: 0 0.45rem;
    border: 1px solid var(--theme-30);
    border-radius: 999px;
    font-size: 0.68rem;
    line-height: 1.5;
    color: var(--theme);
    vertical-align: 0.12em;
}

/* ---------- 气泡内的长内容：贴代码、图片、引用都不撑破 ---------- */
#comments .substance p {
    margin: 0 0 0.6em;
}
#comments .substance p:last-child {
    margin-bottom: 0;
}
#comments .substance img {
    max-width: 100%;
    border-radius: calc(var(--radius) - 4px);
}
#comments .substance a {
    color: var(--theme);
}
#comments .substance blockquote {
    margin: 0.4em 0;
    padding: 0.1em 0.8em;
    border-left: 3px solid var(--A);
    color: var(--B);
}
#comments .substance pre {
    overflow-x: auto;
    padding: 0.6rem 0.8rem;
    border-radius: calc(var(--radius) - 4px);
    background: var(--A);
    font-size: 0.82rem;
}
#comments .substance code {
    font-family: ui-monospace, Consolas, 'Courier New', monospace;
}

/* ---------- 名字与时间：访客左对齐，博主右对齐 ---------- */
#comments .cat_comment_body .content .user {
    display: inline-block;
    margin: 0 0.5rem;
    color: var(--main);
    font-weight: bolder;
}
#comments .cat_comment_body .content .commentinfos {
    font-size: 0.75rem;
    color: var(--B);
    margin: 0.1rem 0.5rem 0.5rem;
}
#comments .huomiaoreply .content .user,
#comments .huomiaoreply .content .commentinfos {
    text-align: right;
}
#comments .cat_comment_body .content .user .author i {
    font-weight: bolder;
}

/* ---------- 头像 + 悬停 @ 遮罩（原有交互保留） ---------- */
#comments .cat_comment_body .avatar {
    width: 3rem;
    height: 3rem;
}
#comments .cat_comment_reply {
    position: relative;
    margin-bottom: auto;
}
#comments .cat_comment_reply .replymengban {
    transform: translateY(10px);
    text-align: center;
    visibility: hidden;
    transition: all 0.3s;
    width: 100%;
    height: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    border-radius: var(--radius);
    position: absolute;
    top: 0;
    right: 0;
    font-size: 1.5rem;
    cursor: pointer;
}
#comments .cat_comment_body:hover .replymengban {
    opacity: 1;
    background: var(--background);
    color: var(--main);
    visibility: visible;
    transform: translateY(0);
}
#comments .content .user:hover .user_infocard {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
}
#comments .cat_comment_parent:hover .commentinfos {
    opacity: 1;
}

/* ---------- 博主评论整体靠右（内容列换到头像另一侧） ---------- */
#comments .huomiaoreply {
    justify-content: flex-end;
    position: relative;
}
#comments .huomiaoreply > .cat_comment_replyout > .cat_comment_body .cat_comment_reply + .content {
    order: -1;
}
#comments .huomiaoreply .cat_comment_body .content .user,
#comments .huomiaoreply .cat_comment_body .content .commentinfos {
    display: block;
}

/* ---------- 嵌套回复：缩进 + 线程线 ---------- */
#comments .comment-children {
    margin: 0.2rem 0 0 2.4rem;
    padding-left: 0.9rem;
    border-left: 2px solid var(--A);
}
#comments .comment-children li,
#comments .comment-children ol {
    list-style: none;
    margin: 0;
    padding: 0;
}

/* ---------- Pingback / Trackback 评论：引用通告卡片 ---------- */
#comments .cat_comment_pingback {
    margin: 1rem;
}
#comments .cat_comment_pingback_tag {
    font-size: 0.75rem;
    color: var(--B);
    margin: 0 0 0.4rem;
}
/* 卡片是 <a>，放进评论流里补个块级，视觉与正文里的引用卡片一致 */
#comments .cat_comment_pingback .xh_linkcard {
    display: block;
}

/* ---------- 表情面板（保持原有） ---------- */
/* 这两条原本挂在 #comments 前缀下 —— 回复时表单被移出 #comments，
   字号/滚动会失配（表情变小、一行挤太多），所以限定在回复表单内 */
.cat_comment_respond_form .comment_emoji_block {
    height: 7.5rem;
    overflow-y: auto;
}
.cat_comment_respond_form .comment_emoji_block span {
    font-size: 1.5rem;
    padding: 0.5rem 0.4rem;
    line-height: 2.5rem;
    cursor: pointer;
}


/* ==========================================================================
   加密文章 · 锁卡（parts/article.php 的 hidden 分支）
   --------------------------------------------------------------------------
   方案 B：主题色渐变氛围 + 白底圆环大锁 + 全宽「解 锁」按钮。
   动画（keyframes 在下方）：提交前甩走 is_fling；密码错误 is_error 抖动报错；
   解锁成功跳回来后整栏的模糊揭示由 title.php 的引导脚本预置（xh-reveal-in）。
   ========================================================================== */
.xh_lock {
    transition: opacity 0.35s ease;
    display: flex;
    flex-direction: column;
    align-items: center;
    padding: 3rem 1.6rem 2.6rem;
    text-align: center;
    border-radius: var(--radius);
    background: linear-gradient(160deg, var(--theme-10) 0%, transparent 55%),
                radial-gradient(circle at 85% 15%, var(--theme-10), transparent 40%);
}
.xh_lock_ring {
    width: 5.4rem;
    height: 5.4rem;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--background);
    box-shadow: 0 0 0 2px var(--background), 0 0 0 3.5px var(--theme), 0 12px 30px var(--O);
    margin-bottom: 1.3rem;
}
.xh_lock_ring svg {
    width: 2.4rem;
    height: 2.4rem;
    fill: none;
    stroke: var(--theme);
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;
}
.xh_lock h3 {
    margin: 0;
    font-family: "Songti SC", "Noto Serif SC", "Source Han Serif SC", "STSong", serif;
    font-size: 1.5rem;
    font-weight: bold;
    letter-spacing: 0.06em;
    color: var(--main);
}
.xh_lock_tip {
    margin: 0.7rem 0 0;
    font-size: 0.88rem;
    line-height: 1.7;
    color: var(--B);
}
.xh_lock_form {
    display: flex;
    flex-direction: column;
    gap: 0.7rem;
    margin-top: 1.5rem;
    width: 100%;
    max-width: 20rem;
}
.xh_pwd { position: relative; }
.xh_pwd input {
    width: 100%;
    padding: 0.65rem 2.6rem 0.65rem 0.9rem;
    border-radius: 0.5rem;
    border: 1px solid var(--A);
    background: var(--background);
    color: var(--main);
    font-size: 0.92rem;
    letter-spacing: 0.15em;
}
.xh_pwd input:focus {
    outline: none;
    border-color: var(--theme);
    box-shadow: 0 0 0 3px var(--theme-10);
}
.xh_eye {
    position: absolute;
    right: 0.7rem;
    top: 50%;
    transform: translateY(-50%);
    width: 1.6rem;
    height: 1.6rem;
    border: none;
    background: none;
    cursor: pointer;
    color: var(--B);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
}
.xh_eye svg {
    width: 1.1rem;
    height: 1.1rem;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.8;
    stroke-linecap: round;
}
.xh_lock_form button[type=submit] {
    width: 100%;
    padding: 0.65rem;
    border-radius: 0.5rem;
    border: none;
    background: var(--theme);
    color: #fff;
    font-size: 0.95rem;
    cursor: pointer;
    font-family: inherit;
    letter-spacing: 0.3em;
    text-indent: 0.3em;
    transition: transform 0.15s, filter 0.15s;
}
.xh_lock_form button[type=submit]:hover {
    transform: translateY(-1px);
    filter: brightness(1.05);
}
.xh_lock_foot {
    margin-top: 1.2rem;
    font-size: 0.72rem;
    color: var(--B);
}

/* 错误提示（服务端识别「cookie 存了密码但不对」时渲染） */
.xh_err {
    margin-top: 1rem;
    font-size: 0.82rem;
    color: var(--theme);
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.3rem;
}
.xh_err svg {
    width: 1rem;
    height: 1rem;
    fill: none;
    stroke: var(--theme);
    stroke-width: 2;
    stroke-linecap: round;
}

/* ---------- 动画 ---------- */
@keyframes xh-lock-fling {
    to { opacity: 0; transform: translateY(2.2rem) scale(0.86) rotate(-2deg); }
}
.xh_lock.is_fling {
    animation: xh-lock-fling 0.5s cubic-bezier(0.4, 0, 0.7, 1) forwards;
    pointer-events: none;
}
@keyframes xh-lock-shake {
    0%, 100% { transform: translateX(0); }
    20% { transform: translateX(-0.5rem); }
    40% { transform: translateX(0.45rem); }
    60% { transform: translateX(-0.3rem); }
    80% { transform: translateX(0.2rem); }
}
.xh_lock.is_error { animation: xh-lock-shake 0.5s ease 0.6s; }
.xh_lock.is_shake { animation: xh-lock-shake 0.4s ease; }
@keyframes xh-lock-return {
    from { opacity: 0; transform: translateY(1.4rem) scale(0.94); }
    to { opacity: 1; transform: none; }
}
@keyframes xh-reveal-in {
    from { filter: blur(2rem); opacity: 0; }
    to { filter: blur(0); opacity: 1; }
}

/* ---------- 列表页的加密徽标（get_Abstract） ---------- */
.xh_locked_badge {
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
    font-size: 0.78rem;
    color: var(--theme);
    background: var(--theme-10);
    padding: 0.1rem 0.6rem;
    border-radius: 999px;
}

@media (prefers-reduced-motion: reduce) {
    .xh_lock.is_fling,
    .xh_lock.is_error,
    .xh_lock.is_shake { animation: none; }
}
