/**
 * 织梦工坊 (Weaver) - 样式
 * 设计语言：纯净白瓷 —— 无黑色，温柔茶褐 + 玫瑰点缀，宋体/花体，圆角 8px（精致瘦身版）
 * 移植自「织梦.html」原型；DOM/类名沿用项目现有结构（JS 依赖），仅重做视觉。
 * 字体：照影 (Curtain) 同款字体栈 —— Great Vibes(本地花体) / Noto Serif SC+Songti SC(宋体)
 *       / Inter(本地无衬线)；mono 用系统等宽，均带强本地 fallback，CDN 挂了也不变丑。
 * 暗色：遵循项目铁律——中性黑灰底（非茶褐、非蓝），仅保留玫瑰强调。
 */

/* ========== 设计 token（作用域限定在 #app-weaver，避免泄漏全局） ========== */
#app-weaver {
    --wv-bg-pure: #FFFFFF;        /* 卡片 */
    --wv-bg-base: #FAFAFA;        /* 屏底（纸白） */
    --wv-ink-dark: #111111;       /* 标题/主文字（近黑） */
    --wv-ink-mid: #777777;        /* 次要文字（中灰） */
    --wv-ink-light: #E0E0E0;      /* 占位/边框/弱线（极淡石膏灰） */
    --wv-rose: #000000;           /* 核心点缀色 = 纯黑（画廊风） */
    --wv-rose-bg: #F5F5F5;        /* 浅底（极淡灰） */
    --wv-danger: #C94C4C;         /* 警示红（唯一保留的彩色） */
    --wv-line: rgba(0,0,0,0.10);  /* 中性分隔线（黑白透明度） */
    --wv-radius: 8px;
    /* 字体：本地化字体栈 + 强 fallback（防 Google Fonts 挂掉变丑） */
    --wv-font-display: 'Playfair Display', 'Noto Serif SC', 'Songti SC', serif;
    --wv-font-script: 'Great Vibes', 'Snell Roundhand', cursive;
    --wv-font-serif: 'Noto Serif SC', 'Songti SC', 'STSong', 'SimSun', serif;
    --wv-font-sans: 'Inter', 'Noto Sans SC', -apple-system, 'PingFang SC', 'Microsoft YaHei', sans-serif;
    --wv-font-mono: 'SF Mono', 'Consolas', ui-monospace, monospace;
}

body.dark-mode #app-weaver {
    /* 极简画廊夜间：深邃炭黑，点缀色反转为纯白 */
    --wv-bg-pure: #1A1A1A;
    --wv-bg-base: #111111;
    --wv-ink-dark: #F5F5F5;
    --wv-ink-mid: #999999;
    --wv-ink-light: #333333;
    --wv-rose: #FFFFFF;           /* 夜间点缀色 = 纯白 */
    --wv-rose-bg: #222222;
    --wv-line: rgba(255,255,255,0.08);
    /* 同步覆盖全局偏蓝变量（其余组件可能引用），统一到中性炭黑 */
    --bg-screen: #111111;
    --surface-card: #1A1A1A;
}

/* ========== 容器 ========== */
/* ⚠️ 全局 .page 在 index-styles.css 用 !important 强制 flex-direction:column / display
   （"页面系统强制重写"块）。这里必须同等 !important 才能让织梦改为左侧栏+右内容的横向布局。 */
#app-weaver {
    background: var(--wv-bg-base) !important;
    width: 100% !important;
    height: 100% !important;
    overflow: hidden !important;
    display: flex !important;
    flex-direction: row !important;
    font-family: var(--wv-font-sans);
    color: var(--wv-ink-dark);
    -webkit-font-smoothing: antialiased;
}

/* ========== 侧边导航栏 ========== */
.wv-sidebar {
    width: 64px;
    flex-shrink: 0;
    background: var(--wv-bg-pure);
    border-right: 1px solid var(--wv-line);
    display: flex;
    flex-direction: column;
    align-items: center;
    padding: 38px 0 22px;
    box-shadow: 2px 0 16px rgba(107,94,86,0.02);
    z-index: 10;
}

/* iOS PWA 安全区 */
@supports (padding-top: env(safe-area-inset-top)) {
    @supports (-webkit-touch-callout: none) {
        .wv-sidebar { padding-top: calc(env(safe-area-inset-top) + 38px); }
    }
}

.wv-sidebar-brand {
    /* 顶部品牌区：固定高度刚好容下旋转竖排文字，文字顶部对齐紧贴 padding，
       不再用 flex:1 吃满整列、也不再居中留白（否则把导航整体压到半山腰） */
    flex: 0 0 auto;
    height: 118px;
    display: flex;
    align-items: center;
    justify-content: flex-start;
    margin-bottom: 14px;
    overflow: hidden;
}
.wv-sidebar-brand span {
    /* 画廊风：无衬线大写 + 宽字距，竖排立起来 */
    font-family: var(--wv-font-sans) !important;
    font-size: 0.8rem;
    font-weight: 700;
    letter-spacing: 3px;
    text-transform: uppercase;
    color: var(--wv-rose);
    line-height: 1;
    white-space: nowrap;
    /* 横排渲染再整体转 90° 立起来（自下而上读） */
    transform: rotate(-90deg);
    transform-origin: center;
    user-select: none;
}

.wv-bar-btn {
    width: 42px;
    height: 42px;
    margin-top: 0;
    margin-bottom: 18px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    color: var(--wv-rose);
    font-size: 1.25rem;
    line-height: 1;
    border-radius: 50%;
    transition: 0.25s;
    border: 1.5px solid var(--wv-rose);
    background: var(--wv-rose-bg);
    box-shadow: 0 4px 12px rgba(0,0,0,0.18);
}
.wv-bar-btn:hover {
    background: var(--wv-rose);
    color: #fff;
}
.wv-bar-btn:active {
    background: var(--wv-rose);
    color: #fff;
    transform: scale(0.92);
    box-shadow: 0 2px 6px rgba(0,0,0,0.25);
}

/* ========== Tab 栏（竖排） ========== */
.wv-tabs {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 22px;
    width: 100%;
    flex: 1 1 auto;
}

.wv-tab {
    font-family: var(--wv-font-serif);
    font-size: 0.95rem;
    font-weight: 500;
    letter-spacing: 3px;
    color: var(--wv-ink-light);
    cursor: pointer;
    position: relative;
    transition: color 0.25s, transform 0.25s;
    writing-mode: vertical-rl;
    padding: 6px 0;
}

.wv-tab::after {
    content: '';
    position: absolute;
    top: 0;
    right: -10px;
    width: 3px;
    height: 100%;
    border-radius: 2px;
    background: var(--wv-rose);
    transform: scaleY(0);
    transition: transform 0.25s;
}

.wv-tab.active {
    color: var(--wv-ink-dark);
    font-weight: 700;
    transform: scale(1.05);
}
.wv-tab.active::after { transform: scaleY(1); }

/* ========== 内容区 ========== */
.wv-content {
    flex: 1;
    min-width: 0;
    overflow-y: auto;
    overflow-x: hidden;
    background: var(--wv-bg-base);
    -webkit-overflow-scrolling: touch;
}

.wv-tab-pane {
    display: none;
    padding: 36px 40px 100px;   /* 铺满侧栏右侧整片空间，仅靠 padding 留边距 */
}

.wv-tab-pane.active {
    display: block;
    animation: wv-fadeIn 0.45s cubic-bezier(0.2,0.8,0.2,1);
}

@keyframes wv-fadeIn {
    from { opacity: 0; transform: translateY(12px); }
    to { opacity: 1; transform: translateY(0); }
}

/* ========== 面板花体页眉 ========== */
.wv-page-header {
    position: relative;
    border-bottom: 1px dashed rgba(0,0,0,0.3);
    padding-bottom: 12px;
    margin-bottom: 28px;
}

/* 大标题（画廊风 Playfair Display 斜体） */
.wv-title-script {
    font-family: var(--wv-font-display);
    font-style: italic;
    font-weight: 600;
    letter-spacing: -1px;
    font-size: 2.6rem;
    color: var(--wv-rose);
    line-height: 1;
    margin-bottom: 6px;
}

.wv-page-title-cn {
    display: block;
    font-family: var(--wv-font-serif);
    font-size: 1.1rem;
    font-weight: 700;
    color: var(--wv-ink-dark);
    letter-spacing: 1px;
}

/* 背景大水印，不喧宾夺主（画廊风 Playfair Display 斜体） */
.wv-watermark {
    position: absolute;
    right: -10px;
    top: -16px;
    font-family: var(--wv-font-display);
    font-style: italic;
    font-weight: 700;
    letter-spacing: -2px;
    font-size: 4rem;
    color: var(--wv-rose);
    opacity: 0.06;
    pointer-events: none;
    z-index: 0;
    transform: rotate(-10deg);
    white-space: nowrap;
    user-select: none;
}

body.dark-mode .wv-watermark { opacity: 0.1; }

/* ========== 区块（平铺，无白卡片：透明底、无边框/阴影/圆角，字段直接落在米白纸上） ========== */
.wv-section {
    background: transparent;
    border: none;
    border-radius: 0;
    margin-bottom: 8px;
    box-shadow: none;
}
/* 第二个区块起，标题上方留间距区隔（平铺无卡片，靠留白分组） */
.wv-section + .wv-section { margin-top: 24px; }

.wv-section-head {
    padding: 0 0 4px;
    display: flex;
    align-items: center;
    justify-content: space-between;
}

.wv-section-title {
    font-family: var(--wv-font-serif);
    font-size: 1.05rem;
    font-weight: 700;
    letter-spacing: 1px;
    color: var(--wv-ink-dark);
}

.wv-section-badge {
    font-family: var(--wv-font-mono);
    font-size: 0.58rem;
    padding: 3px 9px;
    border-radius: 20px;
    background: var(--wv-bg-base);
    color: var(--wv-ink-mid);
    letter-spacing: 1px;
    text-transform: uppercase;
}

.wv-section-badge.required {
    background: var(--wv-rose);
    color: #fff;
}

.wv-section-body {
    padding: 8px 0 4px;
}

/* ========== 表单字段 ========== */
.wv-field {
    margin-bottom: 20px;
    position: relative;
}
.wv-field:last-child { margin-bottom: 0; }

.wv-field-label {
    display: block;
    font-family: var(--wv-font-sans);
    font-size: 0.7rem;
    font-weight: 700;
    letter-spacing: 1px;
    text-transform: uppercase;
    color: var(--wv-ink-dark);
    margin-bottom: 6px;
}

.wv-input,
.wv-textarea {
    width: 100%;
    background: transparent;
    border: none;
    border-bottom: 1px solid var(--wv-ink-light);
    border-radius: 0;
    padding: 8px 0;
    font-family: var(--wv-font-serif);
    font-size: 0.95rem;
    font-weight: 500;
    color: var(--wv-ink-dark);
    outline: none;
    transition: border-color 0.3s;
    -webkit-appearance: none;
}

.wv-input::placeholder,
.wv-textarea::placeholder {
    color: var(--wv-ink-light);
    font-weight: 300;
}

.wv-input:focus,
.wv-textarea:focus {
    border-bottom-color: var(--wv-rose);
}

.wv-textarea {
    resize: vertical;
    height: 64px;
    min-height: 64px;
    max-height: 320px;
    line-height: 1.6;
}

.wv-textarea-lg {
    height: 100px;
    min-height: 100px;
}

/* 两列布局 */
.wv-row2 {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 24px;
}

/* ========== 自定义下拉菜单 ========== */
/* 原生 select 隐藏，仅存值 */
.wv-select { display: none; }

.wv-select-wrap {
    position: relative;
    width: 100%;
}

/* 触发器：在 #app-weaver 内，可用作用域变量。下划线风格对齐输入框 */
.wv-select-trigger {
    width: 100%;
    background: transparent;
    border: none;
    border-bottom: 1px solid var(--wv-ink-light);
    border-radius: 0;
    padding: 8px 24px 8px 0;
    font-family: var(--wv-font-serif);
    font-size: 0.95rem;
    font-weight: 500;
    color: var(--wv-ink-dark);
    cursor: pointer;
    transition: border-color 0.3s, color 0.3s;
    position: relative;
    user-select: none;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.wv-select-trigger::after {
    content: '▾';
    position: absolute;
    right: 2px;
    top: 50%;
    transform: translateY(-55%);
    font-size: 0.7rem;
    color: var(--wv-ink-light);
    transition: 0.3s;
}

.wv-select-trigger.open {
    border-bottom-color: var(--wv-rose);
    color: var(--wv-rose);
}
.wv-select-trigger.open::after {
    transform: translateY(-55%) rotate(180deg);
    color: var(--wv-rose);
}

/* 下拉面板：appendChild 到 document.body，#app-weaver 作用域变量不可达 → 用字面值 + 暗色覆盖。
   实色背景、禁毛玻璃（项目铁律）。 */
.wv-select-dropdown {
    position: fixed;
    background: #FFFFFF;
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    border-radius: 8px;
    border: 1px solid rgba(0,0,0,0.2);
    box-shadow: 0 10px 30px rgba(0,0,0,0.18);
    max-height: 220px;
    overflow-y: auto;
    z-index: 9999;
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.15s ease;
    padding: 6px;
    /* 🔧 移动端内部滚动：下拉挂在 position:fixed 的全屏锁定 body 下，
       缺 touch-action 时第一下竖滑会被外层页面手势吃掉（表现为"划不动，
       必须先拉一下界面才能滚"）。声明 pan-y 把竖向滑动归给下拉自身。 */
    touch-action: pan-y;
    -webkit-overflow-scrolling: touch;
    overscroll-behavior: contain;
}

.wv-select-dropdown.open {
    opacity: 1;
    pointer-events: auto;
}

.wv-select-dropdown::-webkit-scrollbar { width: 4px; }
.wv-select-dropdown::-webkit-scrollbar-track { background: transparent; }
.wv-select-dropdown::-webkit-scrollbar-thumb { background: rgba(0,0,0,0.3); border-radius: 2px; }

.wv-select-option {
    padding: 10px 14px;
    font-family: 'Inter', 'Noto Sans SC', -apple-system, sans-serif;
    font-size: 0.85rem;
    color: #2C2B2A;
    border-radius: 8px;
    cursor: pointer;
    transition: 0.15s;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.wv-select-option:hover { background: #F0EFEA; color: #595652; }
.wv-select-option:active { transform: scale(0.98); }

.wv-select-option.selected {
    color: #595652;
    font-style: italic;
    font-family: 'Noto Serif SC', 'Songti SC', serif;
    font-weight: 700;
    background: #F0EFEA;
}

/* 下拉面板暗色（中性黑灰，灰驼强调） */
body.dark-mode .wv-select-dropdown {
    background: #22201F;
    border-color: rgba(255,255,255,0.08);
    box-shadow: 0 10px 30px rgba(0,0,0,0.5);
}
body.dark-mode .wv-select-dropdown::-webkit-scrollbar-thumb {
    background: rgba(255,255,255,0.14);
}
body.dark-mode .wv-select-option { color: #E8E6E1; }
body.dark-mode .wv-select-option:hover {
    background: rgba(0,0,0,0.12);
    color: #A8A39D;
}
body.dark-mode .wv-select-option.selected {
    color: #A8A39D;
    background: rgba(0,0,0,0.12);
}

/* ========== 按钮（画廊风：点缀色实底 + 纯底色文字 + 大写） ========== */
.wv-btn-primary {
    width: 100%;
    padding: 12px;
    border: none;
    border-radius: var(--wv-radius);
    background: var(--wv-rose);
    color: var(--wv-bg-pure);
    font-family: var(--wv-font-serif);
    font-size: 0.95rem;
    font-weight: 700;
    letter-spacing: 4px;
    text-transform: uppercase;
    cursor: pointer;
    transition: transform 0.2s, box-shadow 0.2s, opacity 0.2s;
    box-shadow: 0 8px 24px rgba(0,0,0,0.15);
    margin-top: 30px;
    white-space: nowrap;
}
.wv-btn-primary:active {
    transform: scale(0.98);
    box-shadow: 0 3px 8px rgba(0,0,0,0.15);
}
.wv-btn-primary:disabled {
    opacity: 0.35;
    cursor: not-allowed;
    box-shadow: none;
}

.wv-btn-secondary {
    flex: 1;
    padding: 10px 16px;
    border: 1px solid var(--wv-ink-light);
    border-radius: var(--wv-radius);
    background: transparent;
    color: var(--wv-ink-dark);
    font-family: var(--wv-font-sans);
    font-size: 0.8rem;
    font-weight: 600;
    letter-spacing: 1px;
    cursor: pointer;
    transition: 0.25s;
    white-space: nowrap;
}
.wv-btn-secondary:active,
.wv-btn-secondary:hover {
    color: var(--wv-rose);
    border-color: var(--wv-rose);
}

.wv-btn-row {
    display: flex;
    gap: 12px;
    margin-top: 24px;
    flex-wrap: wrap;
}

/* ========== 好感度滑块 ========== */
.wv-slider-wrap {
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 8px 0;
}

.wv-slider-wrap input[type=range] {
    flex: 1;
    height: 2px;
    border: none;
    padding: 0;
    -webkit-appearance: none;
    background: var(--wv-ink-light);
    border-radius: 2px;
    outline: none;
}

.wv-slider-wrap input[type=range]::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 14px;
    height: 14px;
    border-radius: 50%;
    background: var(--wv-bg-pure);
    border: 2px solid var(--wv-rose);
    cursor: pointer;
    box-shadow: 0 2px 6px rgba(0,0,0,0.2);
    transition: transform 0.2s;
}
.wv-slider-wrap input[type=range]::-webkit-slider-thumb:active {
    transform: scale(1.3);
}

.wv-slider-val {
    font-family: var(--wv-font-display);
    font-style: italic;
    font-weight: 700;
    font-size: 1.6rem;
    min-width: 35px;
    text-align: right;
    color: var(--wv-rose);
    line-height: 1;
}

/* ========== 标签 ========== */
.wv-tags {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-top: 4px;
}

.wv-tag {
    padding: 6px 14px;
    border: 1px solid var(--wv-ink-light);
    border-radius: 30px;
    font-size: 0.74rem;
    font-weight: 500;
    color: var(--wv-ink-mid);
    transition: 0.25s;
}

/* ========== 分割线标题 ========== */
.wv-divider-label {
    display: flex;
    align-items: center;
    gap: 12px;
    margin: 22px 2px 14px;
}

.wv-divider-label span {
    font-family: var(--wv-font-sans);
    font-size: 0.82rem;
    font-weight: 600;
    letter-spacing: 1px;
    color: var(--wv-ink-dark);
    white-space: nowrap;
}

.wv-divider-label::after {
    content: '';
    flex: 1;
    height: 1px;
    border-bottom: 1px dashed rgba(0,0,0,0.3);
}

/* ========== 结果展示 ========== */
.wv-result-wrap {
    display: none;
    margin-top: 14px;
    animation: wv-fadeIn 0.5s cubic-bezier(0.2,0.8,0.2,1);
}

.wv-result-field {
    padding: 4px 0 16px;
    margin-bottom: 16px;
    position: relative;
    padding-left: 14px;
    border-left: 2px solid transparent;
}
.wv-result-field:last-child { margin-bottom: 0; }

/* 核心字段：玫瑰色左竖线高亮 */
.wv-result-field.core {
    border-left-color: var(--wv-rose);
}

.wv-rf-label {
    display: block;
    font-family: var(--wv-font-mono);
    font-size: 0.64rem;
    font-weight: 500;
    letter-spacing: 1px;
    text-transform: uppercase;
    color: var(--wv-rose);
    margin-bottom: 8px;
}

.wv-rf-value {
    font-family: var(--wv-font-serif);
    font-size: 0.95rem;
    color: var(--wv-ink-dark);
    line-height: 1.8;
    white-space: pre-wrap;
    word-break: break-word;
    outline: none;
    border-radius: 6px;
    transition: background 0.15s;
}

.wv-rf-value[contenteditable="true"]:hover { background: var(--wv-rose-bg); }
.wv-rf-value[contenteditable="true"]:focus {
    background: var(--wv-rose-bg);
    box-shadow: inset 0 0 0 1px rgba(0,0,0,0.25);
}

.wv-rf-value.mono {
    font-family: var(--wv-font-mono);
    font-size: 0.8rem;
    letter-spacing: 0;
    color: var(--wv-ink-mid);
}

.wv-rf-copy {
    position: absolute;
    top: 0;
    right: 0;
    padding: 4px 2px;
    background: transparent;
    border: none;
    border-bottom: 1px dashed var(--wv-ink-light);
    color: var(--wv-ink-light);
    font-family: var(--wv-font-mono);
    font-size: 0.6rem;
    text-transform: uppercase;
    letter-spacing: 1px;
    cursor: pointer;
    transition: 0.25s;
}
.wv-rf-copy:hover,
.wv-rf-copy:active {
    color: var(--wv-rose);
    border-color: var(--wv-rose);
}

/* ========== 世界书条目卡片 ========== */
.wv-entry-card {
    background: var(--wv-bg-pure);
    padding: 22px;
    border: 1px solid rgba(0,0,0,0.1);
    border-radius: var(--wv-radius);
    margin-bottom: 16px;
    box-shadow: 0 5px 20px rgba(107,94,86,0.03);
    transition: 0.3s;
}
.wv-entry-card:last-child { margin-bottom: 0; }

.wv-entry-keys {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-bottom: 10px;
}

.wv-key-tag {
    padding: 2px 12px;
    border: 1px solid var(--wv-ink-light);
    border-radius: 12px;
    font-size: 0.64rem;
    font-weight: 500;
    color: var(--wv-ink-mid);
}

.wv-entry-name {
    font-family: var(--wv-font-serif);
    font-size: 1.15rem;
    font-weight: 700;
    color: var(--wv-ink-dark);
    margin-bottom: 8px;
    outline: none;
    border-radius: 6px;
    transition: background 0.15s;
}

.wv-entry-content {
    font-family: var(--wv-font-serif);
    font-size: 0.95rem;
    color: var(--wv-ink-mid);
    line-height: 1.7;
    outline: none;
}

.wv-entry-actions {
    display: flex;
    justify-content: flex-end;
    gap: 16px;
    margin-top: 16px;
}

.wv-ea-btn {
    padding: 4px 2px;
    border: none;
    background: transparent;
    color: var(--wv-ink-mid);
    font-family: var(--wv-font-sans);
    font-size: 0.78rem;
    font-weight: 600;
    cursor: pointer;
    transition: 0.2s;
}
.wv-ea-btn:hover, .wv-ea-btn:active { color: var(--wv-rose); }
.wv-ea-btn.del { color: var(--wv-danger); }

/* ========== 草稿列表（灵匣） ========== */
.wv-draft-item {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 20px 22px;
    border-bottom: 1px solid var(--wv-line);
    background: var(--wv-bg-pure);
    cursor: pointer;
    transition: 0.3s;
}
.wv-draft-item:last-child { border-bottom: none; }
.wv-draft-item:hover {
    background: var(--wv-rose-bg);
}

.wv-draft-info {
    flex: 1;
    min-width: 0;
}

.wv-draft-name {
    font-family: var(--wv-font-serif);
    font-size: 1.15rem;
    font-weight: 700;
    color: var(--wv-ink-dark);
    margin-bottom: 4px;
    outline: none;
}

.wv-draft-time {
    font-family: var(--wv-font-mono);
    font-size: 0.64rem;
    letter-spacing: 1px;
    text-transform: uppercase;
    color: var(--wv-ink-light);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.wv-draft-actions {
    display: flex;
    gap: 8px;
    flex-shrink: 0;
}

.wv-da-btn {
    padding: 6px 14px;
    border: 1px solid var(--wv-ink-light);
    border-radius: 30px;
    background: transparent;
    font-family: var(--wv-font-sans);
    font-size: 0.7rem;
    font-weight: 600;
    color: var(--wv-ink-mid);
    cursor: pointer;
    transition: 0.25s;
}
.wv-da-btn:hover, .wv-da-btn:active {
    color: var(--wv-rose);
    border-color: var(--wv-rose);
}
.wv-da-btn.del { color: var(--wv-danger); }
.wv-da-btn.del:hover, .wv-da-btn.del:active {
    color: var(--wv-danger);
    border-color: var(--wv-danger);
}

/* 草稿展开面板 */
.wv-draft-expand {
    overflow: hidden;
    transition: max-height 0.4s ease-out;
    background: var(--wv-rose-bg);
    border-bottom: 1px solid var(--wv-line);
}
.wv-draft-detail {
    padding-top: 16px;
    margin-top: 16px;
    border-top: 1px solid var(--wv-line);
    font-family: var(--wv-font-serif);
    font-size: 0.92rem;
    line-height: 1.7;
    color: var(--wv-ink-mid);
}
.wv-draft-detail .wv-result-field { padding-left: 12px; }
.wv-draft-detail .wv-entry-card {
    padding: 14px 16px;
    box-shadow: none;
}
.wv-draft-detail .wv-rf-value[contenteditable]:hover,
.wv-draft-detail .wv-entry-content:hover,
.wv-draft-detail .wv-entry-name:hover { background: var(--wv-rose-bg); }
.wv-draft-detail .wv-rf-value[contenteditable]:focus,
.wv-draft-detail .wv-entry-content:focus,
.wv-draft-detail .wv-entry-name:focus {
    background: var(--wv-rose-bg);
    box-shadow: inset 0 0 0 1px rgba(0,0,0,0.25);
    outline: none;
}

/* ========== Loading ========== */
.wv-loader {
    display: none;
    padding: 50px 0;
    text-align: center;
}

.wv-ld-bar {
    width: 60px;
    height: 1px;
    background: var(--wv-ink-light);
    margin: 0 auto 16px;
    position: relative;
    overflow: hidden;
}
.wv-ld-bar::after {
    content: '';
    position: absolute;
    top: 0;
    left: -100%;
    width: 100%;
    height: 100%;
    background: var(--wv-rose);
    animation: wv-ldSlide 1.2s ease-in-out infinite;
}

@keyframes wv-ldSlide {
    0% { left: -100%; }
    100% { left: 100%; }
}

.wv-ld-text {
    font-family: var(--wv-font-display);
    font-style: italic;
    font-weight: 600;
    font-size: 2rem;
    color: var(--wv-rose);
    animation: wv-breath 1.5s infinite;
}

@keyframes wv-breath {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.35; }
}

/* ========== 空状态 ========== */
.wv-empty {
    padding: 44px 16px;
    text-align: center;
    font-family: var(--wv-font-sans);
    font-size: 0.82rem;
    letter-spacing: 1px;
    color: var(--wv-ink-light);
}

/* ========== 众生润色 roster ========== */
.wv-being-roster-bar {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 10px;
}
.wv-being-count {
    font-family: var(--wv-font-mono);
    font-size: 0.7rem;
    letter-spacing: .5px;
    color: var(--wv-ink-light);
}
.wv-being-roster {
    display: flex;
    flex-direction: column;
    gap: 8px;
    max-height: 320px;
    overflow-y: auto;
}
.wv-being-card {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 8px 12px;
    border: 1px solid var(--wv-line, rgba(0,0,0,.12));
    border-radius: 10px;
    cursor: pointer;
    transition: border-color .18s, background .18s;
}
.wv-being-card:hover { border-color: var(--wv-rose); }
.wv-being-card.selected {
    border-color: var(--wv-rose);
    background: rgba(0,0,0,.03);
}
.wv-being-pick { accent-color: var(--wv-rose); cursor: pointer; flex-shrink: 0; }
.wv-being-av {
    width: 40px;
    height: 50px;
    object-fit: cover;
    border-radius: 6px;
    flex-shrink: 0;
}
.wv-being-meta { min-width: 0; flex: 1; }
.wv-being-name {
    font-family: var(--wv-font-serif);
    font-size: 0.95rem;
    color: var(--wv-ink-dark);
    font-weight: 600;
}
.wv-being-sub {
    font-family: var(--wv-font-mono);
    font-size: 0.66rem;
    letter-spacing: .5px;
    color: var(--wv-ink-light);
    margin-top: 2px;
}

/* 选中众生后的只读预览 */
.wv-being-preview {
    margin-bottom: 14px;
    padding: 10px 12px;
    border-radius: 10px;
    background: rgba(0,0,0,.025);
}
.wv-being-pv-row {
    display: flex;
    gap: 10px;
    padding: 4px 0;
    font-size: 0.8rem;
    line-height: 1.6;
}
.wv-being-pv-lbl {
    flex-shrink: 0;
    width: 96px;
    font-family: var(--wv-font-mono);
    font-size: 0.64rem;
    letter-spacing: .5px;
    color: var(--wv-rose);
    padding-top: 2px;
}
.wv-being-pv-val {
    flex: 1;
    font-family: var(--wv-font-serif);
    color: var(--wv-ink-dark);
    white-space: pre-wrap;
    word-break: break-word;
}

/* 侧重 chip */
.wv-being-focus { display: flex; flex-wrap: wrap; gap: 8px; }
.wv-being-chip {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 5px 12px;
    border: 1px solid var(--wv-line, rgba(0,0,0,.12));
    border-radius: 20px;
    font-size: 0.78rem;
    color: var(--wv-ink-dark);
    cursor: pointer;
    user-select: none;
}
.wv-being-chip input { accent-color: var(--wv-rose); cursor: pointer; }
.wv-being-chip.selected {
    border-color: var(--wv-rose);
    background: rgba(0,0,0,.03);
}
/* 「全选字段」chip：稍作区分 */
.wv-being-chip.alt {
    font-weight: 600;
    border-style: dashed;
}

/* 批量润色结果：每个众生一块 */
.wv-being-result-block {
    margin-bottom: 18px;
    padding-bottom: 14px;
    border-bottom: 1px dashed var(--wv-line, rgba(0,0,0,.14));
}
.wv-being-result-block:last-child { margin-bottom: 0; border-bottom: none; }
.wv-being-result-head {
    font-family: var(--wv-font-serif);
    font-size: 1rem;
    font-weight: 700;
    color: var(--wv-ink-dark);
    margin-bottom: 12px;
    padding-left: 14px;
    border-left: 3px solid var(--wv-rose);
}

/* ========== Toast ========== */
.wv-toast {
    position: fixed;
    bottom: 40px;
    right: 20px;
    background: var(--wv-rose);
    color: #FFF;
    padding: 14px 28px;
    border-radius: 30px;
    font-family: var(--wv-font-sans);
    font-size: 0.85rem;
    font-weight: 500;
    opacity: 0;
    transform: translateY(0);
    pointer-events: none;
    transition: 0.5s cubic-bezier(0.2,0.8,0.2,1);
    box-shadow: 0 10px 30px rgba(0,0,0,0.3);
    z-index: 9999;
}
.wv-toast.show {
    opacity: 1;
    transform: translateY(-15px);
}

/* ========== 确认弹窗 ========== */
.wv-dialog-mask {
    position: fixed;
    inset: 0;
    background: rgba(107,94,86,0.25);
    z-index: 2000;
    display: flex;
    align-items: center;
    justify-content: center;
    animation: wv-fadeIn 0.25s ease;
}

.wv-dialog {
    background: var(--wv-bg-pure);
    border: 1px solid var(--wv-line);
    border-radius: var(--wv-radius);
    padding: 28px;
    width: 290px;
    max-width: 90vw;
    box-shadow: 0 20px 50px rgba(107,94,86,0.18);
}

.wv-dialog-title {
    font-family: var(--wv-font-serif);
    font-size: 1.15rem;
    font-weight: 700;
    color: var(--wv-ink-dark);
    margin-bottom: 10px;
}

.wv-dialog-msg {
    font-family: var(--wv-font-sans);
    font-size: 0.85rem;
    color: var(--wv-ink-mid);
    line-height: 1.65;
    margin-bottom: 22px;
}

.wv-dialog-btns {
    display: flex;
    gap: 12px;
}

.wv-dialog-btns button {
    flex: 1;
    padding: 12px;
    border: 1px solid var(--wv-ink-light);
    border-radius: var(--wv-radius);
    background: transparent;
    color: var(--wv-ink-dark);
    font-family: var(--wv-font-sans);
    font-size: 0.78rem;
    font-weight: 600;
    letter-spacing: 1px;
    cursor: pointer;
    transition: 0.25s;
}
.wv-dialog-btns button:hover { border-color: var(--wv-rose); color: var(--wv-rose); }

.wv-dialog-btns button.primary {
    background: var(--wv-rose);
    color: #fff;
    border-color: var(--wv-rose);
    box-shadow: 0 6px 16px rgba(0,0,0,0.25);
}
.wv-dialog-btns button.primary:hover { color: #fff; }

.wv-dialog-btns button.danger {
    color: var(--wv-danger);
}
.wv-dialog-btns button.danger:hover {
    color: var(--wv-danger);
    border-color: var(--wv-danger);
}
