/* ===========================================================================
   lux-linear.css —— 超细线 · 极扁平 · 单色极简线性设计层
   ---------------------------------------------------------------------------
   加载顺序：bootstrap.min.css → app.css → lux-v5.css → lux-linear.css
   本文件后加载，对所有 CSS 变量与同名选择器拥有最终否决权，可一键回退
   （只需在布局中注释掉本文件与 lux-linear.js 两行即可）。
   设计原则：
     1) 单色：全站仅用一种墨色（浅色近黑 / 深色近白），去金、去青紫红。
     2) 极细线：1px 发丝边框，去阴影、去渐变、去毛玻璃、去光晕。
     3) 扁平：去立体悬浮、去 3D 倾角、去辉光动画，保留入场/呼吸等线性微动效。
     4) 线条构造：图标统一描边细线；状态用「状态小灯」表达。
   =========================================================================== */

/* ---------------------------------------------------------------------------
   1. 设计令牌覆盖（单色 + 扁平 + 发丝线）
   --------------------------------------------------------------------------- */
:root {
    /* —— 单色墨阶（浅色主题：近黑墨 / 发丝灰线） —— */
    --c-ink:        #1B1B1B;
    --c-ink-2:      #565656;
    --c-mute:       #8A8A8A;
    --c-line:       rgba(0, 0, 0, .10);
    --c-line-2:     rgba(0, 0, 0, .16);
    --c-surface:    #FFFFFF;
    --c-surface-2:  #F4F4F2;
    --c-bg:         #F7F7F5;
    --c-white:      #FFFFFF;
    --c-gray:       #8A8A8A;

    /* 强调色 = 墨色本身（单色），仅链接/主按钮用 */
    --c-accent:        #1B1B1B;
    --c-accent-dark:   #000000;
    --c-accent-soft:   #F0F0EE;
    --c-accent-glow:   transparent;

    /* —— lux 令牌：全部收为单色 + 去辉光 —— */
    --lx-void:        #F7F7F5;
    --lx-void-2:      #F1F1EF;
    --lx-abyss:       #FBFBFA;
    --lx-panel:       #FFFFFF;
    --lx-panel-solid: #FFFFFF;
    --lx-panel-soft:  #F4F4F2;
    --lx-line:        rgba(0, 0, 0, .10);
    --lx-line-hot:    rgba(0, 0, 0, .18);
    --lx-ink:         #1B1B1B;
    --lx-ink-2:       #565656;
    --lx-mute:        #8A8A8A;

    /* 能量色全部降为墨色（残留渐变自动变单色） */
    --lx-gold:    #1B1B1B;
    --lx-gold-2:  #1B1B1B;
    --lx-gold-3:  #3A3A3A;
    --lx-cyan:    #1B1B1B;
    --lx-violet:  #1B1B1B;
    --lx-crimson: #1B1B1B;

    /* 去玻璃 / 去光晕 / 去投影 */
    --lx-glass:        none;
    --lx-glass-heavy:  none;
    --lx-glow-gold:    transparent;
    --lx-glow-cyan:    transparent;
    --lx-glow-violet:  transparent;
    --lx-sh-1: none;
    --lx-sh-2: none;
    --lx-sh-3: none;
    --lx-sh-4: none;

    /* —— app.css 令牌：扁平化 —— */
    --gold-grad:        var(--c-ink);
    --gold-grad-soft:   var(--c-surface-2);
    --gold-grad-strong: var(--c-ink);
    --glass-bg:         #FFFFFF;
    --glass-bg-strong:  #FFFFFF;
    --glass-blur:       none;
    --shadow-xs:  none;
    --shadow-sm:  none;
    --shadow-md:  none;
    --shadow-lg:  none;
    --shadow-glow: none;

    /* —— 收敛圆角：更利落的小圆角（胶囊/头像仍走 --r-pill） —— */
    --r-xs: 3px;
    --r-sm: 5px;
    --r-md: 8px;
    --r-lg: 12px;
    --r-xl: 16px;
    --r-pill: 999px;
    --r-full: 999px;

    /* —— Bootstrap 主色 = 墨色（所有 .btn-primary / 链接 / focus 自动单色） —— */
    --bs-primary:        #1B1B1B;
    --bs-primary-rgb:    27, 27, 27;
    --bs-link-color:     #1B1B1B;
    --bs-link-hover-color: #000000;
    --bs-btn-focus-box-shadow: 0 0 0 .18rem rgba(0,0,0,.28);
    --bs-focus-ring-color: rgba(0,0,0,.28);
    --bs-focus-ring-box-shadow: 0 0 0 .18rem rgba(0,0,0,.28);
    --bs-dropdown-box-shadow: none;
    --bs-modal-box-shadow: none;
    --bs-pagination-focus-box-shadow: none;
    --bs-toast-box-shadow: none;

    /* —— 状态小灯配色（仅用于 .lx-lamp，不参与整体单色） —— */
    --lamp-on:   #2FA06A;
    --lamp-busy: #D9A441;
    --lamp-off:  #9A9A9A;
    --lamp-err:  #D4534A;
}

[data-theme="dark"] {
    --c-ink:        #ECECEC;
    --c-ink-2:      #B5B5B5;
    --c-mute:       #7C7C7C;
    --c-line:       rgba(255, 255, 255, .12);
    --c-line-2:     rgba(255, 255, 255, .20);
    --c-surface:    #161616;
    --c-surface-2:  #1E1E1E;
    --c-bg:         #0E0E0E;
    --c-white:      #161616;
    --c-gray:       #7C7C7C;

    --c-accent:        #ECECEC;
    --c-accent-dark:   #FFFFFF;
    --c-accent-soft:   #262626;
    --c-accent-glow:   transparent;

    --lx-void:        #0E0E0E;
    --lx-void-2:      #131313;
    --lx-abyss:       #0A0A0A;
    --lx-panel:       #161616;
    --lx-panel-solid: #161616;
    --lx-panel-soft:  #1E1E1E;
    --lx-line:        rgba(255, 255, 255, .12);
    --lx-line-hot:    rgba(255, 255, 255, .22);
    --lx-ink:         #ECECEC;
    --lx-ink-2:       #B5B5B5;
    --lx-mute:        #7C7C7C;

    --lx-gold:    #ECECEC;
    --lx-gold-2:  #ECECEC;
    --lx-gold-3:  #C4C4C4;
    --lx-cyan:    #ECECEC;
    --lx-violet:  #ECECEC;
    --lx-crimson: #ECECEC;

    --lx-glass:        none;
    --lx-glass-heavy:  none;
    --lx-glow-gold:    transparent;
    --lx-glow-cyan:    transparent;
    --lx-glow-violet:  transparent;
    --lx-sh-1: none;
    --lx-sh-2: none;
    --lx-sh-3: none;
    --lx-sh-4: none;

    --gold-grad:        var(--c-ink);
    --gold-grad-soft:   var(--c-surface-2);
    --gold-grad-strong: var(--c-ink);
    --glass-bg:         #161616;
    --glass-bg-strong:  #161616;
    --glass-blur:       none;
    --shadow-xs:  none;
    --shadow-sm:  none;
    --shadow-md:  none;
    --shadow-lg:  none;
    --shadow-glow: none;

    --bs-primary:        #ECECEC;
    --bs-primary-rgb:    236, 236, 236;
    --bs-link-color:     #ECECEC;
    --bs-link-hover-color: #FFFFFF;
    --bs-btn-focus-box-shadow: 0 0 0 .18rem rgba(255,255,255,.30);
    --bs-focus-ring-color: rgba(255,255,255,.30);
    --bs-focus-ring-box-shadow: 0 0 0 .18rem rgba(255,255,255,.30);

    --lamp-on:   #4CC585;
    --lamp-busy: #E6B455;
    --lamp-off:  #6E6E6E;
    --lamp-err:  #E5706A;
}

/* ---------------------------------------------------------------------------
   2. 装饰层清零（去氛围光球 / 噪点 / 流光 / 金色文字 / 渐变遮罩）
   --------------------------------------------------------------------------- */
.lx-atmos,
.lx-atmos i,
.lx-grain,
.lx-sheen::after { display: none !important; }

/* 背景细线网格保留为极淡发丝线（呼应「线性」母题） */
.lx-grid { opacity: .10 !important; }

/* 阅读进度条 → 单色发丝线 */
.lx-progress {
    background: var(--c-ink) !important;
    box-shadow: none !important;
}

/* 流金文字 → 纯墨色，去渐变裁切 */
.lx-gold-text {
    background: none !important;
    -webkit-background-clip: initial !important;
    background-clip: initial !important;
    -webkit-text-fill-color: currentColor !important;
    color: var(--c-ink) !important;
    border-bottom: 1px solid var(--c-line-2);
    padding-bottom: 1px;
}
.brand-text.lx-gold-text { border-bottom: 0; padding-bottom: 0; }

/* Hero 遮罩 → 扁平单色渐变（仅保可读性，无光晕） */
.hero-overlay {
    background: linear-gradient(180deg, rgba(0,0,0,.34), rgba(0,0,0,.62)) !important;
}
[data-theme="light"] .hero-overlay {
    background: linear-gradient(180deg, rgba(20,20,20,.30), rgba(20,20,20,.56)) !important;
}
.hero-video-wrap::after { background: linear-gradient(90deg, transparent, var(--lx-line-hot), transparent) !important; opacity: .4 !important; }
.hero-logo { filter: none !important; }
.hero-title { text-shadow: none !important; }

/* 导航条 → 发丝下边线 + 实色底（去毛玻璃去阴影） */
.lx-nav-shell,
.bbs-navbar {
    background: var(--lx-panel-solid) !important;
    border-bottom: 1px solid var(--lx-line) !important;
    box-shadow: none !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
}
.navbar-brand .logo-main { filter: none !important; }

/* 去 3D 悬浮 / 倾角 / 旋转，保留颜色过渡 */
.lx-hover-lift:hover { transform: none !important; box-shadow: none !important; }
.lx-hover-tilt { transform: none !important; }
.lx-board:hover { transform: none !important; box-shadow: none !important; border-color: var(--lx-line-hot) !important; }
.lx-board::before { display: none !important; }
.lx-board:hover .lx-board-ico { transform: none !important; }
.lx-super-item:hover .lx-super-ico { transform: none !important; box-shadow: none !important; }
.topic-card:hover { transform: none !important; }
.topic-card::after { opacity: 0 !important; }
.topic-card:hover .avatar-md { transform: none !important; }
.icon-circle:hover, .icon-box:hover { box-shadow: none !important; border-color: var(--lx-line-hot) !important; }
.avatar-lg, .avatar-xl { box-shadow: none !important; }

/* 超级菜单顶线 → 发丝线 */
.lx-super-panel::before { background: var(--lx-line-hot) !important; opacity: .7 !important; }

/* ---------------------------------------------------------------------------
   3. 线条构造：图标统一细线描边
   --------------------------------------------------------------------------- */
.lucide,
[data-lucide],
svg.lucide,
.icon,
i.icon,
.btn-icon svg,
.lx-ico svg,
.lx-board-ico svg,
.lx-super-ico svg,
.sidebar-icon svg,
.section-head svg,
.nav-link svg,
.dropdown-item svg,
.topic-meta svg,
.reply-actions svg,
.icon-circle svg,
.icon-box svg,
.stat-icon svg {
    stroke: currentColor !important;
    fill: none !important;
    stroke-width: 1.5 !important;
    stroke-linecap: round !important;
    stroke-linejoin: round !important;
}

/* ---------------------------------------------------------------------------
   4. 线条构造：按钮 / 卡片 / 徽章 / 标签 / 表单 / 列表
   --------------------------------------------------------------------------- */
/* 主按钮：实色墨（单色），去流光 sheen */
.btn-primary,
.btn.btn-primary { background: var(--c-ink); border-color: var(--c-ink); color: var(--c-surface); box-shadow: none !important; }
.btn-primary::after { display: none !important; }
.btn-primary:hover, .btn-primary:focus, .btn-primary:active,
.btn-primary.active { background: var(--c-accent-dark); border-color: var(--c-accent-dark); color: var(--c-surface); }

/* 次按钮 / 幽灵按钮：发丝描边 */
.btn-ghost,
.btn-outline-secondary,
.btn-outline-light {
    background: transparent;
    color: var(--c-ink);
    border: 1px solid var(--c-line-2);
    box-shadow: none !important;
}
.btn-ghost:hover { background: var(--c-surface-2); border-color: var(--lx-line-hot); color: var(--c-ink); }

/* 创建 / 登录 CTA：去阴影，收为小圆角描边 */
.btn-create, .btn-login {
    border-radius: var(--r-md) !important;
    box-shadow: none !important;
    border: 1px solid var(--lx-line-hot) !important;
    background: var(--lx-panel-solid) !important;
    color: var(--c-ink) !important;
}

/* 所有按钮焦点：墨色细环（去辉光） */
.btn:focus, .btn:focus-visible { box-shadow: 0 0 0 2px var(--c-ink) !important; outline: none; }

/* 卡片 / 容器：实色底 + 发丝边框，去阴影 */
.bbs-card,
.topic-card,
.sidebar-card,
.lx-board,
.card {
    background: var(--lx-panel-solid) !important;
    border: 1px solid var(--lx-line) !important;
    box-shadow: none !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
}
.bbs-card::before { display: none !important; }
.bbs-card:hover { border-color: var(--lx-line-hot) !important; box-shadow: none !important; }
.topic-card:hover { border-color: var(--lx-line-hot) !important; }

/* 徽章：统一发丝描边线性风格 */
.type-badge { background: var(--c-surface-2) !important; color: var(--c-ink) !important; border-color: var(--c-line-2) !important; }
.badge-top { background: transparent !important; color: var(--c-ink) !important; border-color: var(--c-ink) !important; box-shadow: none !important; }
.badge-essence { color: var(--c-ink) !important; border-color: var(--c-line-2) !important; }
.badge-assistant { background: transparent !important; color: var(--c-ink-2) !important; border-color: var(--c-line-2) !important; }

/* 标签 chip：发丝描边 */
.tag-chip { background: var(--c-surface); border-color: var(--c-line); color: var(--c-ink-2); }
.tag-chip:hover { border-color: var(--c-ink); color: var(--c-ink); }

/* 表单：发丝描边 + 墨色细焦点环（去辉光） */
.form-control,
.form-select,
input[type="text"],
input[type="search"],
input[type="email"],
input[type="password"],
textarea {
    background: var(--c-surface) !important;
    border: 1px solid var(--c-line-2) !important;
    box-shadow: none !important;
    color: var(--c-ink);
}
.form-control:focus,
.form-select:focus,
.search-input:focus {
    border-color: var(--c-ink) !important;
    box-shadow: 0 0 0 1px var(--c-ink) !important;
    background: var(--c-surface) !important;
}
.form-check-input:focus { box-shadow: none !important; border-color: var(--c-ink); }
.form-check-input:checked { background-color: var(--c-ink); border-color: var(--c-ink); }

/* 列表：发丝分隔线 */
.reply-item { border-bottom: 1px solid var(--c-line) !important; }
.sidebar-list-item { border-bottom: 1px solid var(--c-line); }
.section-head::before { background: var(--c-ink) !important; height: 2px; }

/* 分页：发丝描边 */
.pagination .page-link { border: 1px solid var(--c-line-2); background: var(--c-surface); color: var(--c-ink); }
.pagination .page-link:hover { background: var(--c-surface-2); border-color: var(--c-ink); }
.pagination .active .page-link { background: var(--c-ink); border-color: var(--c-ink); color: var(--c-surface); }
.pagination .page-link:focus { box-shadow: 0 0 0 2px var(--c-ink) !important; }

/* 空状态图标描边 */
.empty-state svg { stroke: var(--c-mute); fill: none; }

/* 下拉菜单：实色底 + 发丝边框（覆盖上轮修复的 glass，保持扁平） */
.dropdown-menu {
    background: var(--lx-panel-solid) !important;
    border: 1px solid var(--lx-line) !important;
    box-shadow: none !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
}
.dropdown-item:hover, .dropdown-item:focus { background: var(--c-surface-2); color: var(--c-ink); }

/* 通知小红点 → 状态小灯式 */
.notification-badge {
    background: var(--lamp-err) !important;
    border: 1px solid var(--lamp-err);
    box-shadow: none !important;
    color: #fff;
}

/* ---------------------------------------------------------------------------
   5. 状态小灯（Status Lamp）—— 用细线圆点表达状态
   --------------------------------------------------------------------------- */
.lx-lamp {
    display: inline-block;
    width: 8px; height: 8px;
    border-radius: 50%;
    background: transparent;
    border: 1px solid var(--lamp-off);
    vertical-align: 1px;
    position: relative;
    flex: none;
}
.lx-lamp--on  { background: var(--lamp-on);  border-color: var(--lamp-on); }
.lx-lamp--busy{ background: var(--lamp-busy);border-color: var(--lamp-busy); }
.lx-lamp--err  { background: var(--lamp-err);  border-color: var(--lamp-err); }
.lx-lamp--off  { background: transparent;      border-color: var(--lamp-off); }
/* 在线：呼吸光环（动态效果） */
.lx-lamp--on::after {
    content: "";
    position: absolute; inset: -4px;
    border-radius: 50%;
    border: 1px solid var(--lamp-on);
    animation: lxLampPulse 1.8s ease-out infinite;
}
.lx-lamp--busy::after {
    content: "";
    position: absolute; inset: -4px;
    border-radius: 50%;
    border: 1px solid var(--lamp-busy);
    animation: lxLampPulse 1.2s ease-out infinite;
}
@keyframes lxLampPulse {
    0%   { opacity: .55; transform: scale(.8); }
    100% { opacity: 0;   transform: scale(2.2); }
}
/* 兼容既有 .dot 状态点 → 线性描边 */
.dot { border-radius: 50%; }
.dot-on  { background: var(--lamp-on);  border: 1px solid var(--lamp-on);  box-shadow: none; }
.dot-off { background: transparent;      border: 1px solid var(--lamp-off); }
.dot-wait{ background: transparent;      border: 1px solid var(--lamp-busy); }
/* 既有脉冲点 → 墨色呼吸 */
.lx-dot-pulse { background: var(--lx-ink); animation: lxPulseDot 2.2s var(--lx-ease-io) infinite; }

/* ---------------------------------------------------------------------------
   6. 实时反馈 UI 基座（进度条 / 通知 / 按钮加载 / 入场）
   --------------------------------------------------------------------------- */
/* 顶部导航进度条（纤细发丝线） */
.lx-navbar-progress {
    position: fixed; top: 0; left: 0;
    height: 2px; width: 0;
    background: var(--lx-ink);
    z-index: 4000;
    opacity: 0;
    pointer-events: none;
    transition: width .4s var(--lx-ease), opacity .3s var(--lx-ease);
}
.lx-navbar-progress.is-active { opacity: 1; }

/* 行内加载指示（细环） */
.lx-spin {
    width: 14px; height: 14px;
    border: 1.5px solid currentColor;
    border-top-color: transparent;
    border-radius: 50%;
    display: inline-block;
    animation: lxSpin .7s linear infinite;
    vertical-align: -2px;
}
@keyframes lxSpin { to { transform: rotate(360deg); } }

/* 按钮加载态：文字隐去，露出细环 */
.btn.is-loading { position: relative; color: transparent !important; pointer-events: none; }
.btn.is-loading::after {
    content: "";
    position: absolute; top: 50%; left: 50%;
    width: 15px; height: 15px;
    margin: -8px 0 0 -8px;
    border: 1.5px solid currentColor;
    border-top-color: transparent;
    border-radius: 50%;
    animation: lxSpin .7s linear infinite;
}
.btn-primary.is-loading::after { border-color: var(--c-surface); border-top-color: transparent; }

/* 行内反馈提示条（极细进度线） */
.lx-toast-wrap {
    position: fixed; top: 14px; right: 14px;
    z-index: 5000;
    display: flex; flex-direction: column; gap: 10px;
    pointer-events: none;
}
.lx-toast {
    pointer-events: auto;
    display: flex; align-items: center; gap: 10px;
    min-width: 220px; max-width: 340px;
    padding: 10px 14px;
    background: var(--lx-panel-solid);
    border: 1px solid var(--lx-line);
    border-radius: var(--r-sm);
    color: var(--lx-ink);
    font-size: var(--fs-sm);
    position: relative; overflow: hidden;
    transform: translateX(120%);
    opacity: 0;
    transition: transform .32s var(--lx-ease), opacity .32s var(--lx-ease);
}
.lx-toast.is-show { transform: translateX(0); opacity: 1; }
.lx-toast__bar {
    position: absolute; left: 0; bottom: 0;
    height: 2px; width: 100%;
    background: var(--lx-ink);
    transform: scaleX(1); transform-origin: left;
    transition: transform 3.2s linear;
}
.lx-toast.is-show .lx-toast__bar { transform: scaleX(0); }
.lx-toast--ok  .lx-toast__bar { background: var(--lamp-on); }
.lx-toast--err .lx-toast__bar { background: var(--lamp-err); }
.lx-toast--busy .lx-toast__bar { background: var(--lamp-busy); }

/* 滚动入场（仅在 JS 注入 .lx-reveal-on 后生效，失败自动回退为可见） */
.lx-reveal-on .topic-card,
.lx-reveal-on .bbs-card,
.lx-reveal-on .sidebar-card,
.lx-reveal-on .lx-board {
    opacity: 0;
    transform: translateY(12px);
    transition: opacity .5s var(--lx-ease), transform .5s var(--lx-ease);
}
.lx-reveal-on .topic-card.is-in,
.lx-reveal-on .bbs-card.is-in,
.lx-reveal-on .sidebar-card.is-in,
.lx-reveal-on .lx-board.is-in {
    opacity: 1; transform: none;
}

/* ---------------------------------------------------------------------------
   7. 降低动效偏好：关闭一切动画与过渡（可访问性）
   --------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
    * { animation-duration: .001ms !important; animation-iteration-count: 1 !important; }
    .lx-lamp--on::after, .lx-lamp--busy::after, .lx-dot-pulse { animation: none !important; }
    .lx-reveal-on * { opacity: 1 !important; transform: none !important; }
    .lx-navbar-progress, .lx-toast { transition: none !important; }
}

/* 打印：去一切装饰 */
@media print {
    .lx-atmos, .lx-grid, .lx-grain, .lx-navbar-progress, .lx-toast-wrap { display: none !important; }
}
