/* ==========================================
   3. 核心展示区
   ========================================== */
/* exhibit-zone 默认 overflow visible — 报告 modal 的"展开预览"模式需要让
   #report-modal.wb-modal 把 bottom 设成负值溢出 exhibit-zone (盖到 upload-zone),
   overflow:hidden 会把它裁切. 只在 .wb-is-generating (批改启动) 时切到 hidden. */
#exhibit-zone { flex: 1; display: flex; align-items: center; justify-content: center; position: relative; }
#exhibit-zone.wb-is-generating { overflow: hidden; }
/* 但报告展开预览时, 批改中也别裁切 → 让展开预览正常溢出到底部, 不留出上传区那条空 */
body.wb-report-expanded #exhibit-zone.wb-is-generating { overflow: visible; }

/* ===================================================================
   Orb 动画定位 (v2)
   ===================================================================
   定位逻辑: position: fixed, 锁在"非侧栏 & 非抽屉中央空白区"几何中心.

     drawer 关: left = 50% + (sidebar + aside) / 2
                (viewport 水平中心 + 右移补偿左侧占用的一半)
     drawer 开: 在上面基础上 - (drawer + 边距) / 2
                (让 orb 跟随主区缩窄, 移到新中心)

   transition: left 0.4s — 抽屉开/关时 orb 平滑滑到新中心.
   ⚠️ 不能给 orb 的父链 (#content-area / #exhibit-zone) 加 transform/will-change/filter,
      否则 fixed 退化为 absolute, orb 漂移.
   =================================================================== */
#mainOrb,
#orbRings,
#orbCountdown {
    position: fixed !important;
    /* 垂直: 在"非 header 非 upload-zone"空白区域中心
       上边界 = header-h, 下边界 = 100vh - upload-zone-h - frame-content-offset - layout-gap
       中心 y = 两者均值. margin-top: -130 让 orb 中心对齐这个 y. */
    top: calc((var(--header-h) + var(--app-layout-height, 100vh) - var(--upload-zone-h) - var(--frame-content-offset) - var(--layout-gap)) / 2);
    /* 水平: 在"非 sidebar+aside 非 drawer"空白区域中心 */
    left: calc(50% + (var(--sidebar-rail-shell-w) + var(--sidebar-panel-w)) / 2);
    margin: -130px 0 0 -130px;
    width: 260px; height: 260px;
    pointer-events: none;
    z-index: var(--z-content);
    transition: left var(--anim-drawer-d) var(--ease-apple),
                top var(--anim-drawer-d) var(--ease-apple);
}

/* drawer 开: orb 往左偏移半个 drawer+边距, 保持在主区视觉中心 */
body.wb-drawer-open #mainOrb,
body.wb-drawer-open #orbRings,
body.wb-drawer-open #orbCountdown {
    left: calc(50% + (var(--sidebar-rail-shell-w) + var(--sidebar-panel-w)) / 2 - (var(--drawer-w) + var(--frame-content-offset) + var(--layout-gap)) / 2);
}

/* ===== 批改态光环 #orbRings: 同心套在 orb 外圈, 暖环呼吸 + 蓝弧扫描 (替换旧 glow 三团 / 向外铺开的 magicRings) =====
   定位 (position:fixed + top/left) 共用上面 #mainOrb 那条规则(选择器已含 #orbRings),
   这里只把尺寸放大到 460 并用负 margin 把中心仍对齐到 orb 中心. */
#orbRings {
    width: 460px; height: 460px;
    margin: -230px 0 0 -230px;
    opacity: 0;
    transition: opacity 0.6s ease,
                left var(--anim-drawer-d) var(--ease-apple),
                top var(--anim-drawer-d) var(--ease-apple);
}
.wb-is-generating #orbRings { opacity: 1; }
[data-theme="dark"] .wb-is-generating #orbRings { opacity: 0.9; }
.wb-grading-failed #orbRings { opacity: 0.2; }

#orbRings .wb-ring { fill: none; stroke: #C0813E; stroke-width: 2; transform-box: fill-box; transform-origin: center; animation: wbOrbRingBreathe 4.6s ease-in-out infinite; }
#orbRings .wb-ring.r2 { animation-delay: 0.7s; }
#orbRings .wb-ring.r3 { animation-delay: 1.4s; }
#orbRings .wb-scan { fill: none; stroke: var(--brand-primary, #0064D2); stroke-width: 3; stroke-linecap: round; transform-box: fill-box; transform-origin: center; animation: wbOrbScanSpin 2.6s linear infinite; }
@keyframes wbOrbRingBreathe { 0%, 100% { transform: scale(0.97); opacity: 0.26; } 50% { transform: scale(1.04); opacity: 0.55; } }
@keyframes wbOrbScanSpin { to { transform: rotate(360deg); } }

.wb-orb {
    border-radius: 50%;
    background: transparent;
    box-shadow: none;
    border: none;
    /* 仅 transform 做动画, 不让 position/left/margin 等几何属性变化产生过渡 */
    transition: transform 0.5s;
}

.wb-orb::before { display: none; }
[data-theme="dark"] .wb-orb::before { opacity: 0.4; }

.wb-is-generating .wb-orb { transform: scale(1); }
.wb-is-generating .wb-orb::after, .wb-is-generating .wb-orb::before { display: none; }

/* 圆球中央批改倒计时: 低调, 颜色比暖色圆球中心深一档; 浮现/拉出靠 opacity+transform 缓动。
   定位(fixed + 同心 + 260 尺寸)共用上面 #mainOrb 那条规则; 这里只加文字样式与缓动。 */
#orbCountdown {
    display: flex;
    align-items: center;
    justify-content: center;
    color: rgba(74, 52, 26, 0.62);
    font-size: 21px;
    font-weight: 500;
    letter-spacing: 0.5px;
    font-variant-numeric: tabular-nums;
    opacity: 0;
    transform: translateY(7px) scale(0.96);
    transition: opacity 0.85s ease,
                transform 0.85s var(--ease-apple),
                left var(--anim-drawer-d) var(--ease-apple),
                top var(--anim-drawer-d) var(--ease-apple);
}
/* 暗夜: 圆球中心本身偏深, 反过来用比中心略浅的暖色才贴合又看得清 */
[data-theme="dark"] #orbCountdown { color: rgba(222, 186, 138, 0.66); }
#orbCountdown.is-in { opacity: 1; transform: translateY(0) scale(1); }

/* 组装/渲染阶段: 中断按钮置灰锁定(仍可点 → 点了给"无法中断"提示, 不真中断) */
.wb-gen-abort-locked { opacity: 0.5; filter: grayscale(0.65); cursor: not-allowed; }

body.wb-tab-downloads #mainOrb {
    display: none !important;
}

/* ==========================================
   🌟 双开门分屏系统
   ========================================== */
.wb-modal {
    position: absolute; top: var(--layout-gap); left: 0; right: 0; bottom: 0;
    /* 扁平设计: 无 border, 无 inset 高光, 仅靠背景色与主背景的对比区分面板 */
    background: var(--glass-panel-bg);
    backdrop-filter: var(--glass-panel-backdrop);
    -webkit-backdrop-filter: var(--glass-panel-backdrop);
    box-shadow: var(--glass-panel-shadow);
    backdrop-filter: var(--glass-panel-backdrop); -webkit-backdrop-filter: var(--glass-panel-backdrop);
    border-radius: var(--radius-base); border: none; outline: none;
    box-shadow: var(--glass-panel-shadow);
    isolation: isolate;
    z-index: var(--z-workspace-panel); display: flex; flex-direction: column; padding: var(--glass-panel-pad);
    opacity: 0; visibility: hidden; pointer-events: none; transform: translateY(24px) scale(0.95);
    transition: all 0.5s cubic-bezier(0.22, 1, 0.36, 1);
}

/* v2: 删除 v1 .glass-panel::before / > * 装饰层 — surface-balance-overlay 已经
   transparent, ::before 完全无效果; > * { position: relative; z-index: 1 } 强制让
   所有直接子元素变 stacking 上下文, 破坏内部 absolute 子元素定位. 一并清除. */

.wb-modal.show { opacity: 1; visibility: visible; pointer-events: auto; transform: translateY(0) scale(1); }
.wb-modal.is-split-left { right: calc(50% + 6px); }
.wb-modal.is-split-right { left: calc(50% + 6px); }

/* Mobile: fixed viewport height for report modal */
@media (max-width: 768px) {
    .wb-modal { position: fixed !important; top: 0 !important; left: 0 !important; right: 0 !important; bottom: 0 !important; border-radius: 0 !important; transform: translateY(100%) scale(1) !important; z-index: var(--z-m-overlay) !important; background: var(--bg-page) !important; }
    .wb-modal.show { transform: translateY(0) scale(1) !important; }
    .wb-modal.is-split-left, .wb-modal.is-split-right { right: 0 !important; left: 0 !important; }

    /* Report modal body: explicit viewport-relative height on mobile */
    #report-modal.wb-modal {
        overflow: hidden;
        padding: 18px 16px 16px;
        container-type: normal;  /* 移动端不启用容器查询, 沿用移动端自有布局 */
    }
    /* 报告预览头部(手机版 @media 版本): 单行排布 —— 下载报告 / 反馈 靠左成组, 关闭按钮 X 推到最右。
       与下方 html.touch-mobile-layout 版本保持完全一致, 避免触摸类没挂上时退回旧的 2 行布局(关闭按钮不显眼)。 */
    #report-modal .wb-modal-report-header {
        display: flex;
        align-items: center;
        gap: 8px;
        padding: 0 0 12px;
        margin-bottom: 8px;
    }
    #report-modal .wb-modal-report-title {
        display: none;
    }
    #report-modal .wb-modal-report-header-actions {
        display: flex;
        flex: 1;
        align-items: center;
        gap: 8px;
        width: 100%;
        position: static;
        justify-content: flex-start;
    }
    #report-modal .wb-modal-report-header-actions > button {
        height: 30px;
        min-height: 30px;
        flex-shrink: 0;
    }
    #report-modal #reportDownloadBtn {
        position: static;
        order: 1;
        margin: 0;
    }
    #report-modal #reportFeedbackBtn {
        position: static;
        order: 2;
        margin: 0;
    }
    #report-modal .wb-modal-report-close {
        position: static;
        order: 3;
        margin-left: auto;
        align-self: center;
    }
    #report-modal .wb-modal-report-close .wb-btn-tooltip {
        display: none;
    }
    #report-modal .wb-modal-report-content {
        display: flex;
        flex-direction: column;
        gap: 8px;
    }
    /* 移动端：隐藏右侧栏，PDF 占满 */
    #report-modal .wb-modal-report-history { display: none; }
    #report-modal .wb-modal-report-preview-body {
        flex: 1;
        min-height: 0;
        overflow-y: auto;
        padding: 0 0 12px;
    }
    #report-modal .report-preview-expand-row {
        display: none;
    }
    .wb-feedback {
        width: calc(100% - 16px);
        top: auto;
        bottom: calc(-100% - var(--app-viewport-bottom-gap));
        right: 8px;
        border-radius: var(--radius-base);
        transition: bottom 0.4s cubic-bezier(0.22, 1, 0.36, 1);
        z-index: var(--z-m-sheet);
    }
    body.wb-feedback-open .wb-feedback {
        bottom: calc(8px + var(--app-viewport-bottom-gap));
        right: 8px;
    }
    .wb-modal-close { top: 15px; right: 15px; background: rgba(127,127,127,0.08); border-radius: 50%; width: 36px; height: 36px; }
    .wb-drawer { width: calc(100% - 16px); height: 85vh; top: auto; bottom: -100%; right: 8px; border-radius: var(--radius-base); transition: bottom 0.4s cubic-bezier(0.22, 1, 0.36, 1); z-index: var(--z-m-sheet); }
    body.wb-drawer-open .wb-drawer { bottom: 8px; right: 8px; }
    body.wb-drawer-open .wb-shell { padding-right: 8px; }
    body.wb-drawer-open #content-area { transform: none; }
    body.wb-rail-open .wb-aside,
    body.wb-rail-open section#content-area,
    body.wb-rail-open .wb-drawer {
        filter: none;
        opacity: 1;
        pointer-events: auto;
    }
}

html.touch-mobile-layout .wb-modal { position: fixed !important; top: 0 !important; left: 0 !important; right: 0 !important; bottom: 0 !important; border-radius: 0 !important; transform: translateY(100%) scale(1) !important; z-index: var(--z-m-overlay) !important; background: var(--bg-page) !important; }
html.touch-mobile-layout .wb-modal.show { transform: translateY(0) scale(1) !important; }
html.touch-mobile-layout .wb-modal.is-split-left,
html.touch-mobile-layout .wb-modal.is-split-right { right: 0 !important; left: 0 !important; }
html.touch-mobile-layout #report-modal.wb-modal { overflow: hidden; padding: 18px 16px 16px; container-type: normal; }
/* 报告预览头部(手机版): 单行排布 —— 下载报告 / 反馈 靠左成组, 关闭按钮 X 推到最右
   (参考资料中心预览头部布局)。原来是 2 行 grid(标题+关闭一行、下载+反馈一行), 关闭按钮不显眼;
   现拍成一行, 并显式 order 定序 + 复位定位, 避免按钮错位 / 重叠。标题在手机版省去给按钮腾地方。 */
html.touch-mobile-layout #report-modal .wb-modal-report-header { display: flex; align-items: center; gap: 8px; padding: 0 0 12px; margin-bottom: 8px; }
html.touch-mobile-layout #report-modal .wb-modal-report-title { display: none; }
html.touch-mobile-layout #report-modal .wb-modal-report-header-actions { display: flex; flex: 1; align-items: center; gap: 8px; width: 100%; position: static; justify-content: flex-start; }
html.touch-mobile-layout #report-modal .wb-modal-report-header-actions > button { height: 30px; min-height: 30px; flex-shrink: 0; }
html.touch-mobile-layout #report-modal #reportDownloadBtn { position: static; order: 1; margin: 0; }
html.touch-mobile-layout #report-modal #reportFeedbackBtn { position: static; order: 2; margin: 0; }
html.touch-mobile-layout #report-modal .wb-modal-report-close { position: static; order: 3; margin-left: auto; align-self: center; }
html.touch-mobile-layout #report-modal .wb-modal-report-close .wb-btn-tooltip { display: none; }
html.touch-mobile-layout #report-modal .wb-modal-report-content { display: flex; flex-direction: column; gap: 8px; grid-template-columns: 1fr; }
html.touch-mobile-layout #report-modal .wb-modal-report-history { display: none; }
html.touch-mobile-layout #report-modal .wb-modal-report-preview-body { flex: 1; min-height: 0; overflow-y: auto; padding: 0 0 12px; }
html.touch-mobile-layout #report-modal .report-preview-expand-row { display: none; }
html.touch-mobile-layout .wb-feedback { border-radius: var(--radius-base); transition: bottom 0.4s cubic-bezier(0.22, 1, 0.36, 1); z-index: var(--z-m-sheet); }
body.touch-mobile-layout.wb-feedback-open .wb-feedback { bottom: calc(8px + var(--app-viewport-bottom-gap)); right: 8px; }

/* Desktop: wb-modal for report fills exhibit-zone
   padding-top: 25 跟 .wb-drawer 一致 — 让 .wb-modal-report-header 标题中心
   跟 .wb-drawer-view__title 标题中心在同一 viewport y 坐标 (=58+25+14=97). */
#report-modal.wb-modal {
    align-self: stretch;
    margin: auto;
    padding: 25px 18px 18px;
    --report-history-sidebar-width: clamp(200px, 16vw, 260px);
    --report-content-gap: clamp(10px, 1.2vw, 16px);
    /* 预览窗口设为容器: 下方 @container report-preview 按本窗口自身宽度做窄屏响应,
       批改中心 / 资料中心同一套规则, 表现天然一致。 */
    container-type: inline-size;
    container-name: report-preview;
    transition:
        opacity 0.5s cubic-bezier(0.22, 1, 0.36, 1),
        visibility 0.5s cubic-bezier(0.22, 1, 0.36, 1),
        transform 0.5s cubic-bezier(0.22, 1, 0.36, 1),
        bottom 0.42s cubic-bezier(0.22, 1, 0.36, 1),
        right 0.7s cubic-bezier(0.22, 1, 0.36, 1);
}

/* 个人中心 / 反馈面板打开时, 报告预览窗口从右侧收缩 right 让出面板槽位
   (推开, 不是覆盖)。两个面板占同一槽位、收缩同样宽度:
   · 个人中心 ⇄ 反馈面板互切时 body 始终带其中一个类 → right 不变 → 预览窗口纹丝不动
   · 两个面板都关闭 → right 回 0 → 预览窗口向右撑满
   槽位对齐: .wb-feedback 开启时 right:0 (绝对定位, 锚定内容区右缘);
   .wb-drawer 为 fixed right:24px (= --frame-content-offset, 同样落在内容区右缘),
   二者宽度都是 --drawer-w, 与本规则留出的 --layout-gap 间距吻合。
   touch-mobile 下面板是底部抽屉/全屏覆盖, 不参与横向收缩。 */
html:not(.touch-mobile-layout) body.wb-drawer-open #report-modal.wb-modal,
html:not(.touch-mobile-layout) body.wb-feedback-open #report-modal.wb-modal {
    right: calc(var(--drawer-w) + var(--layout-gap));
}

/* 底部上传区的宽度只跟"右侧功能面板"(个人中心 / 反馈面板)走, 不跟报告预览窗口走。
   上传区在 #content-area 内、与 #exhibit-zone 同宽同左 —— #exhibit-zone 须保持满宽
   v1 注释保留作为历史参考: 旧版上传区在 #content-area flex 内, 跟着 padding 推, 但
   预览 modal 占据 padding-right 槽位时改用 margin-right 推, 两套机制交接易"先放大再缩小".
   v2 已经把 #upload-zone 改 fixed + right 响应 wb-drawer-open (见 forms.css),
   旧 margin-right 机制不再需要, 此段规则 (transition + margin-right override) 删除.
   要点: 新方案 right 直接绑 wb-drawer-open class, 跟 .wb-shell padding 完全独立, 没有
   "两套机制交接"问题. */

/* 展开态: 预览窗口/反馈面板底部精确落到上传区底部 (= 上传区高度 + 内容区与上传区之间的行距),
   把上传区完整盖住。直接用同源 CSS 变量实时计算偏移, 不再依赖 JS 抓取的固定像素 ——
   上传区高度是 20vh(随视口变化), 一旦 JS 抓取的像素和实时高度对不上(改窗口大小/视口变化没及时重算),
   展开后底部就会和上传区错位, 露出一条上传区 = 用户反馈的"底部被压在上传区"。
   交给浏览器每次布局自动重算, 永远对齐、零滞后。偏移量 = 上传区高度 + 行距, 与视口/边距无关(已数学验证)。 */
body.wb-report-expanded #report-modal.wb-modal {
    bottom: calc(0px - var(--upload-zone-h) - var(--layout-gap));
}

body.wb-report-expanded .wb-feedback {
    bottom: calc(0px - var(--upload-zone-h) - var(--layout-gap));
}

/* Downloads tab: settings modal uses fixed positioning */
body.wb-tab-downloads #settings-modal {
    position: fixed;
    top: calc(var(--header-h) + var(--layout-gap));
    left: calc(var(--sidebar-rail-shell-w) + var(--surface-gap));
    right: var(--frame-content-offset);
    bottom: var(--frame-content-offset);
    z-index: 5000;
    transform: translateY(15px) scale(0.98);
    transition: opacity 0.5s cubic-bezier(0.22, 1, 0.36, 1), visibility 0.5s cubic-bezier(0.22, 1, 0.36, 1), transform 0.5s cubic-bezier(0.22, 1, 0.36, 1), right 0.7s cubic-bezier(0.22, 1, 0.36, 1);
}

body.wb-tab-downloads.wb-drawer-open #settings-modal.show {
    right: calc(var(--drawer-w) + var(--frame-content-offset) + var(--layout-gap));
    transform: translateY(0) scale(1);
}

body.wb-tab-downloads #settings-modal.show {
    transform: translateY(0) scale(1);
}

body.wb-tab-downloads.wb-settings-open .wb-aside {
    z-index: 1;
    pointer-events: none;
}

body.wb-tab-downloads.wb-settings-open aside {
    z-index: 5200;
}

.wb-modal-report-page canvas {
    display: block;
    width: 100%;
    max-width: 100%;
    height: auto;
    background: transparent;
    margin: 0;
}

.wb-modal-close {
    position: absolute; top: 20px; right: 25px; background: transparent; border: none; padding: 5px;
    display: flex; align-items: center; justify-content: center;
    cursor: pointer; font-size: 26px; color: var(--text-grey); font-weight: 300; transition: 0.3s; z-index: 10;
}
.wb-modal-close:hover { color: var(--btn-danger); transform: scale(1.2); }

#detail-modal, #initial-setup-modal, #settings-modal { padding: 35px 40px; }
.wb-modal-content { flex: 1; overflow-y: auto; padding: 0 15px 0 4px; scrollbar-width: none; margin: auto 0; }
.wb-modal-content::-webkit-scrollbar { display: none; }

.wb-modal-content h2 { font-size: 22px; font-weight: 700; margin: 0 0 20px 0; padding: 0; color: var(--vitality-blue); }
.wb-modal-content h3 { font-size: var(--font-lg); font-weight: 700; margin: 20px 0 8px 0; padding: 0; color: var(--text-main); }
.wb-modal-content p, .wb-modal-content ul { font-size: var(--font-base); color: var(--text-grey); line-height: 1.6; margin-bottom: 12px; }
.wb-modal-content ul { padding-left: 20px; }

.apple-table { width: 100%; border-collapse: collapse; margin: 15px 0; background: var(--table-bg); border-radius: var(--radius-base); overflow: hidden; }
.apple-table th, .apple-table td { padding: 12px 16px; text-align: left; font-size: var(--font-md); border-bottom: none; color: var(--text-grey);}
.apple-table th { background: transparent; font-weight: 600; color: var(--text-main); border: none; }
.apple-table tr:last-child td { border-bottom: none; }

.report-layout { display: flex; height: 100%; padding: 30px; gap: 20px; }
.report-main { flex: 1; overflow-y: auto; scrollbar-width: none; }
.report-main::-webkit-scrollbar { display: none; }

.wb-modal-report-title { font-size: 20px; font-weight: 800; color: var(--text-main); margin-bottom: 20px; }
.score-display { background: var(--input-bg); box-shadow: none; border-radius: var(--radius-base); padding: 15px 20px; margin-bottom: 20px; font-size: var(--font-base); color: var(--text-grey); font-weight: 600; border: none; text-align: center; }
.score-display span { font-size: 32px; font-weight: 800; color: var(--vitality-blue); margin: 0 5px; }

.report-section { margin-bottom: 20px; }
.report-section h3 { font-size: var(--font-lg); font-weight: 700; color: var(--text-main); margin-bottom: 8px; }
.report-section p, .report-section ul { font-size: var(--font-md); color: var(--text-grey); line-height: 1.6; }
.report-section ul { padding-left: 20px; }

.doc-icon { font-size: 40px; margin-bottom: 15px; filter: none; }
.btn-download { 
    width: 100%; padding: 12px; border-radius: var(--radius-base); font-weight: 600; font-size: var(--font-md); cursor: pointer; transition: 0.3s;
    background: var(--btn-aqua-bg); color: var(--btn-aqua-text); border: none; outline: none;
    box-shadow: none; backdrop-filter: none; -webkit-backdrop-filter: none;
}
.btn-download:hover {
    background: var(--btn-aqua-hover);
    transform: translateY(-1px);
}

.wb-downloads-scroll {
    flex: 1;
    overflow-y: auto;
    overflow-x: hidden;
    scrollbar-width: none;
    padding: var(--aside-scroll-pad-top) var(--aside-scroll-pad-x) var(--aside-scroll-pad-bottom) var(--aside-scroll-pad-x);
    display: flex;
    flex-direction: column;
    justify-content: safe center;
}

.wb-downloads-scroll::-webkit-scrollbar {
    display: none;
}

.wb-downloads-pane-title {
    font-size: var(--font-base);
    font-weight: 700;
    color: var(--text-main);
}

.wb-downloads-list-meta,
.wb-downloads-preview-meta {
    flex: 1;          /* 占满左侧, 把下载/关闭按钮挤到右侧成组 */
    min-width: 0;
    margin-top: 6px;
    font-size: var(--font-sm);
    color: var(--text-grey);
    line-height: 1.5;
}

.wb-downloads-cat-tree {
    margin-top: 4px;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.wb-downloads-cat-group {
    display: flex;
    flex-direction: column;
    gap: 5px;
    border-radius: calc(var(--radius-base) - 1px);
    padding: 0;
    background: transparent;
}

.wb-downloads-cat-main {
    width: 100%;
    border: none;
    background: transparent;
    color: var(--text-grey);
    padding: 0 8px 0 10px;
    min-height: 24px;
    border-radius: 6px;
    display: flex;
    align-items: center;
    justify-content: flex-start;
    gap: 8px;
    cursor: pointer;
    font-size: var(--font-xs);
    font-weight: 700;
    letter-spacing: 0.04em;
    transition: color 0.14s ease, background 0.14s ease;
}

.wb-downloads-cat-main::before {
    content: "";
    width: 6px;
    height: 6px;
    border-radius: 999px;
    background: transparent;
    flex: 0 0 auto;
    transition: background 0.14s ease, transform 0.14s ease;
}

.wb-downloads-cat-main:hover {
    color: var(--text-main);
}

.wb-downloads-cat-main:hover::before {
    background: var(--accent-soft-border);
}

.wb-downloads-cat-group.active .wb-downloads-cat-main {
    color: var(--text-main);
}

.wb-downloads-cat-group.active .wb-downloads-cat-main::before {
    background: var(--vitality-blue);
    transform: scale(1.05);
}

.wb-downloads-cat-sublist {
    display: flex;
    flex-direction: column;
    gap: 3px;
    padding: 2px 0 0 0;
    margin-left: 14px;
    position: relative;
    border-radius: 0;
    background: transparent;
    border: none;
}

.wb-downloads-cat-sublist::before {
    content: "";
    position: absolute;
    left: 6px;
    top: 6px;
    bottom: 6px;
    width: 1px;
    background: transparent;
    pointer-events: none;
}

.downloads-category-sub {
    position: relative;
    border: none;
    background: transparent;
    color: var(--text-grey);
    text-align: left;
    min-height: 32px;
    padding: 0 10px 0 20px;
    border-radius: 7px;
    cursor: pointer;
    font-size: var(--font-sm);
    font-weight: 500;
    line-height: 1.1;
    transition: color 0.14s ease, opacity 0.14s ease;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
}

.downloads-category-sub::after {
    content: "";
    position: absolute;
    left: 6px;
    top: 7px;
    bottom: 7px;
    width: 2px;
    border-radius: 999px;
    background: transparent;
    transition: background 0.14s ease;
}

.downloads-category-count {
    display: inline-block;
    min-width: 0;
    height: auto;
    padding: 0;
    border-radius: 0;
    background: transparent;
    font-size: var(--font-xxs);
    font-weight: 500;
    line-height: 1;
    color: var(--text-grey);
    flex-shrink: 0;
    opacity: 0.58;
}

.downloads-category-sub:hover {
    color: var(--text-main);
    opacity: 1;
}

.downloads-category-sub.active {
    color: var(--vitality-blue);
}

.downloads-category-sub.active::after {
    background: var(--vitality-blue);
}

.downloads-category-sub.active .downloads-category-count {
    color: var(--vitality-blue);
    opacity: 0.82;
}

[data-theme="dark"] .downloads-category-count {
    background: transparent;
}

[data-theme="dark"] .wb-downloads-cat-sublist {
    background: transparent;
    border-color: transparent;
}

[data-theme="dark"] .downloads-category-sub:hover {
    opacity: 1;
}

[data-theme="dark"] .downloads-category-sub.active .downloads-category-count {
    background: var(--accent-soft-bg-strong);
    border-color: var(--accent-soft-border);
}

.wb-downloads-file-list {
    display: flex;
    flex-direction: column;
    gap: 10px;
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    scrollbar-width: none;
    padding: 16px 12px 10px;
}

.downloads-file-group {
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.downloads-file-group + .downloads-file-group {
    margin-top: 8px;
    padding-top: 12px;
    border-top: 1px solid transparent;
}

.downloads-file-group-header {
    width: 100%;
    min-height: 26px;
    padding: 0 8px;
    border: none;
    background: transparent;
    color: var(--text-main);
    display: flex;
    align-items: center;
    gap: 8px;
    cursor: pointer;
    text-align: left;
}

.downloads-file-group-title {
    flex: 1;
    min-width: 0;
    font-size: var(--font-xs);
    font-weight: 700;
    letter-spacing: 0.02em;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.downloads-file-group-count {
    flex-shrink: 0;
    color: var(--text-grey);
    font-size: var(--font-xxs);
    font-weight: 600;
    opacity: 0.72;
}

.downloads-file-group-arrow {
    flex-shrink: 0;
    width: 13px;
    height: 13px;
    color: var(--text-grey);
    transition: transform 0.32s cubic-bezier(0.22, 1, 0.36, 1), color 0.2s ease;
}

.downloads-file-group.collapsed .downloads-file-group-arrow {
    transform: rotate(-90deg);
}

.downloads-file-group-body {
    display: flex;
    flex-direction: column;
    gap: 8px;
    overflow: hidden;
    opacity: 1;
    transform: translateY(0);
    transition:
        max-height 0.42s cubic-bezier(0.22, 1, 0.36, 1),
        opacity 0.24s ease,
        transform 0.32s cubic-bezier(0.22, 1, 0.36, 1);
    will-change: max-height, opacity, transform;
}

.downloads-file-group.collapsed .downloads-file-group-body {
    opacity: 0;
    transform: translateY(-4px);
    pointer-events: none;
}

.wb-downloads-list-toolbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 14px 12px 0;
    flex-shrink: 0;
}

.wb-downloads-list-search {
    position: relative;
    display: flex;
    align-items: center;
    gap: 8px;
    min-width: 0;
    flex: 1 1 auto;
    max-width: 248px;
    height: 22px;
    padding: 0 12px 0 10px;
    border-radius: 999px;
    background: var(--field-bg-panel);
    border: none;
    box-shadow: none;
    backdrop-filter: blur(16px) saturate(150%);
    -webkit-backdrop-filter: blur(16px) saturate(150%);
    transition: background 0.3s ease, box-shadow 0.3s ease, color 0.3s ease;
}

.wb-downloads-list-search:hover,
.wb-downloads-list-search:focus-within {
    background: var(--field-bg-panel-active);
    box-shadow: 0 0 0 2px var(--vitality-blue) !important;
}

.wb-downloads-list-search-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 14px;
    height: 14px;
    color: rgba(60, 60, 67, 0.5);
    flex: 0 0 auto;
}

.wb-downloads-list-search-icon svg {
    width: 14px;
    height: 14px;
}

.wb-downloads-list-search input {
    width: 100%;
    min-width: 0;
    border: none;
    outline: none;
    background: transparent;
    color: var(--text-main);
    font-size: var(--font-xs);
    font-weight: 500;
    line-height: 1;
    padding: 0;
    margin: 0;
    appearance: none;
    -webkit-appearance: none;
}

.wb-downloads-list-search input::placeholder {
    color: rgba(60, 60, 67, 0.46);
    font-weight: 500;
}

.wb-downloads-list-search input::-webkit-search-decoration,
.wb-downloads-list-search input::-webkit-search-cancel-button,
.wb-downloads-list-search input::-webkit-search-results-button,
.wb-downloads-list-search input::-webkit-search-results-decoration {
    -webkit-appearance: none;
}

.wb-downloads-list-filter {
    display: inline-flex;
    align-items: center;
    flex: 0 0 auto;
}

.wb-downloads-list-filter select {
    border: none;
    background: transparent;
    color: var(--text-grey);
    font-size: var(--font-xs);
    font-weight: 600;
    line-height: 1.2;
    padding: 0;
    outline: none;
    cursor: pointer;
}

.wb-downloads-list-filter select:hover,
.wb-downloads-list-filter select:focus {
    color: var(--text-main);
}

[data-theme="dark"] .wb-downloads-list-search {
    background: var(--field-bg-panel);
}

[data-theme="dark"] .wb-downloads-list-search:hover,
[data-theme="dark"] .wb-downloads-list-search:focus-within {
    background: var(--field-bg-panel-active);
    box-shadow: 0 0 0 2px var(--vitality-blue) !important;
}

[data-theme="dark"] .wb-downloads-list-search-icon {
    color: rgba(245, 245, 247, 0.42);
}

[data-theme="dark"] .wb-downloads-list-search input::placeholder {
    color: rgba(245, 245, 247, 0.38);
}

.wb-downloads-file-list::-webkit-scrollbar,
.downloads-preview-frame::-webkit-scrollbar {
    display: none;
}

.downloads-file-row {
    display: flex;
    align-items: flex-start;
    gap: 2px;
}

.downloads-file-item {
    flex: 1;
    min-width: 0;
    border: none;
    background: transparent;
    color: var(--text-main);
    border-radius: var(--radius-base);
    padding: 10px 10px 9px;
    cursor: pointer;
    text-align: left;
    display: flex;
    align-items: center;
    gap: 8px;
    transition: background 0.22s ease;
}

.downloads-file-item:hover,
.downloads-file-item.active {
    background: var(--accent-soft-bg);
}

.downloads-file-download {
    flex-shrink: 0;
    border: none;
    background: transparent;
    cursor: pointer;
    padding: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 20px;
    margin-top: 12px;
    color: var(--text-grey);
    transition: color 0.2s ease;
}

.downloads-file-download:hover {
    color: var(--vitality-blue);
}

.downloads-file-download-locked {
    color: rgba(142, 142, 147, 0.5) !important;
    cursor: not-allowed;
}
.downloads-file-download-locked:hover {
    color: rgba(142, 142, 147, 0.5) !important;
}

.downloads-file-download svg {
    width: 13px;
    height: 13px;
    display: block;
}

.downloads-file-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 26px;
    flex-shrink: 0;
}

.downloads-file-icon svg {
    width: 100%;
    height: 100%;
    display: block;
}

.downloads-file-text {
    flex: 1;
    min-width: 0;
}

.downloads-file-name {
    font-size: var(--font-sm);
    font-weight: 600;
    line-height: 1.4;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.downloads-file-info {
    margin-top: 2px;
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0;
    font-size: var(--font-xxs);
    color: var(--text-grey);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.downloads-file-info-sep {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0 5px;
    color: rgba(142, 142, 147, 0.55);
}

.downloads-file-paper-type {
    display: inline-flex;
    align-items: center;
    height: 15px;
    padding: 0 5px;
    border-radius: 999px;
    border: none;
    font-size: 9px;
    font-weight: 600;
    letter-spacing: 0.01em;
    line-height: 15px;
}

.downloads-file-paper-type.mock {
    background: rgba(0, 100, 210, 0.12);
    color: var(--vitality-blue);
}

[data-theme="dark"] .downloads-file-paper-type.mock {
    background: rgba(0, 100, 210, 0.24);
    color: #6EA8FF;
}

.downloads-file-paper-type.module {
    background: rgba(134, 184, 23, 0.16);
    color: #5F850F;
}

[data-theme="dark"] .downloads-file-paper-type.module {
    background: rgba(134, 184, 23, 0.2);
    color: #B6E24C;
}

.wb-downloads-list-meta--bottom {
    margin-top: 14px;
    padding: 0 12px 16px;
    text-align: center;
    flex-shrink: 0;
}

.downloads-file-empty,
.wb-downloads-preview-empty {
    height: 100%;
    min-height: 220px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    text-align: center;
    color: var(--text-grey);
    gap: 10px;
    font-size: var(--font-md);
}

.wb-downloads-preview-header {
    margin-bottom: 12px;
    padding: 18px 18px 0;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    flex-shrink: 0;
}

/* 下载按钮: 与批改报告预览顶部下载按钮统一的淡灰胶囊风格 (图标 + 文字),
   贴在关闭按钮左侧成组 */
.wb-downloads-preview-download {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    gap: 5px;
    height: 28px;
    padding: 0 12px;
    border: none;
    border-radius: 10px;
    background: rgba(15, 23, 42, 0.04);
    color: rgba(15, 23, 42, 0.65);
    font-size: 12px;
    font-weight: 500;
    line-height: 1;
    cursor: pointer;
    box-shadow: none;
    transition: background 0.18s ease, color 0.18s ease, transform 0.18s ease;
}
.wb-downloads-preview-download svg {
    flex-shrink: 0;
}
.wb-downloads-preview-download {
    background: var(--chip-bg);
    color: var(--text-grey);
}
.wb-downloads-preview-download:hover {
    background: var(--chip-bg-hover);
    color: var(--text-main);
    transform: translateY(-1px);
}

.wb-downloads-preview-download--locked {
    background: rgba(142, 142, 147, 0.15) !important;
    color: rgba(142, 142, 147, 0.6) !important;
    cursor: not-allowed;
    pointer-events: none;
}

.wb-downloads-preview-close {
    /* 默认随 HTML 内联 style="display:none" 隐藏; 选中资料预览时 JS 清空内联 style,
       回退到这里的 inline-flex 显示(此前误写成 none, 导致桌面端关闭按钮一直不出现)。 */
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    flex-shrink: 0;
    border: none;
    background: transparent;
    border-radius: 0;
    cursor: pointer;
    color: var(--text-grey);
    transition: color 0.2s ease, transform 0.2s ease;
}
.wb-downloads-preview-close:hover {
    color: var(--btn-danger);
    background: transparent;
    transform: scale(1.08);
}

.wb-downloads-preview-body {
    flex: 1;
    min-height: 0;
    display: block;
    background: transparent;
    border-radius: 0;
    overflow-y: auto;
    overflow-x: hidden;
    scrollbar-width: none;
    padding: 0 18px 18px;
}

.wb-downloads-preview-body::-webkit-scrollbar {
    display: none;
}

.wb-downloads-preview-meta--footer {
    margin-top: 0;
    text-align: left;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.wb-downloads-preview-empty-icon {
    width: 58px;
    height: 58px;
    border-radius: 18px;
    background: var(--accent-soft-bg-strong);
    color: var(--vitality-blue);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 16px;
    font-weight: 700;
    letter-spacing: 0.04em;
}

.wb-downloads-preview-pages {
    width: 100%;
    display: block;
    gap: 24px;
    padding: 8px 0 20px;
}

.wb-downloads-preview-page {
    width: min(100%, 920px);
    min-height: 240px;
    position: relative;
    padding: 0;
    background: #ffffff;
    border-radius: 6px;
    overflow: hidden;
    box-shadow: none;
    margin: 0 auto 24px;
}

.wb-downloads-preview-page img {
    display: block;
    width: 100%;
    max-width: 100%;
    height: auto;
    opacity: 0;
    transition: opacity 0.22s ease;
    margin: 0;
}

.wb-downloads-preview-page.is-loaded img {
    opacity: 1;
}

.downloads-preview-page-status {
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: var(--font-sm);
    color: var(--text-grey);
    text-align: center;
    padding: 20px;
}

.wb-downloads-preview-page.is-loaded .downloads-preview-page-status {
    display: none;
}

.wb-downloads-preview-page.is-error {
    min-height: 180px;
}

.wb-downloads-preview-page.is-error .downloads-preview-page-status {
    color: var(--btn-danger);
    bottom: 42px;
}

.downloads-preview-page-retry {
    position: absolute;
    left: 50%;
    bottom: 18px;
    transform: translateX(-50%);
    border: none;
    background: var(--accent-soft-bg);
    color: var(--vitality-blue);
    font-size: var(--font-sm);
    font-weight: 600;
    padding: 7px 12px;
    border-radius: 999px;
    cursor: pointer;
    transition: background 0.2s ease, color 0.2s ease;
}

.downloads-preview-page-retry:hover {
    background: var(--accent-soft-bg-strong);
}

/* Diagonal EXPLAN watermark on preview images — now embedded via canvas in fetchPreviewPageImage; CSS overlay hidden to avoid double-watermark */
.wb-downloads-preview-page { position: relative; }
.wb-downloads-preview-watermark { display: none; }

/* ==========================================
   报告 PDF 预览
   ========================================== */

.wb-modal-report-header {
    display: flex;
    align-items: center;
    justify-content: flex-start;
    position: relative;
    flex-shrink: 0;
    min-height: 30px;
    padding: 0 16px 6px;
    margin-bottom: 0;
    gap: 10px;
}
.wb-modal-report-title {
    font-size: 15px; font-weight: 700; color: var(--text-main);
    margin: 0; line-height: 1.2;
    white-space: nowrap;
}
.wb-modal-report-header-actions {
    flex: 1;
    position: relative;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 14px;
    height: 28px;
    min-height: 28px;
}
/* ===== 报告顶部文字按钮 (兼容旧 DOM, 已被 .report-side-action 替代) ===== */
.report-action-btn {
    height: 22px;
    padding: 0 10px;
    display: inline-flex; align-items: center; justify-content: center;
    font-size: var(--font-xs); font-weight: 500; line-height: 1;
    border-radius: 6px;
    cursor: pointer;
    transition: background 0.18s ease, color 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease;
    white-space: nowrap;
    position: relative;
}
.report-action-btn:disabled {
    opacity: 0.5; cursor: default;
}
.report-action-btn.is-loading {
    pointer-events: none; opacity: 0.7;
}

/* 下载：蓝色实心 */
.report-action-btn--primary {
    background: var(--btn-aqua-bg);
    border: 1px solid var(--btn-aqua-bg);
    color: #fff;
}
.report-action-btn--primary:hover:not(:disabled) {
    background: var(--btn-aqua-hover);
    border-color: var(--btn-aqua-hover);
}
/* 下载已过期：转为红色提示态 */
#report-modal .report-action-btn--primary.is-expired {
    background: var(--danger-soft-bg);
    border-color: transparent;
    color: var(--btn-danger);
}

/* 反馈：灰色线框，激活/悬停变蓝 */
.report-action-btn--outline {
    background: transparent;
    border: 1px solid var(--border-color);
    color: var(--text-main);
}
[data-theme="dark"] .report-action-btn--outline {
    border-color: var(--border-color);
}
.report-action-btn--outline:hover:not(.active):not(:disabled) {
    background: var(--accent-soft-bg);
    border-color: var(--btn-aqua-bg);
    color: var(--btn-aqua-bg);
}
.report-action-btn--outline.active {
    background: var(--btn-aqua-bg);
    border-color: var(--btn-aqua-bg);
    color: #fff;
}

/* 关闭按钮（保留图标样式） */
.wb-modal-report-close {
    width: 22px; height: 22px; padding: 0;
    display: flex; align-items: center; justify-content: center;
    background: transparent; border: none; cursor: pointer;
    color: #111; transition: color 0.2s;
    position: relative;
}
[data-theme="dark"] .wb-modal-report-close {
    color: #fff;
}
.wb-modal-report-close:hover {
    color: var(--btn-danger) !important;
    background: rgba(15, 23, 42, 0.04) !important;
    box-shadow: 0 2px 6px -2px rgba(15, 23, 42, 0.12);
    border-radius: 6px;
}
.wb-modal-report-close svg {
    flex-shrink: 0;
    width: 18px; height: 18px;
}
.wb-modal-report-close .wb-btn-tooltip {
    position: absolute; bottom: -28px; left: 50%; transform: translateX(-50%);
    font-size: var(--font-xs); white-space: nowrap; color: #fff;
    background: var(--btn-aqua-bg); border-radius: 999px;
    padding: 3px 9px; pointer-events: none;
    opacity: 0; transition: opacity 0.15s;
    z-index: 10;
}
.wb-modal-report-close:hover .wb-btn-tooltip {
    opacity: 1; transition-delay: 0.8s;
}

/* .wb-modal-report-content 是 flex item (在 .wb-modal 内), 自己也是 flex row container.
   sidebar 用 absolute 强制定位到 .wb-modal-report-content 右侧, 不参与 flex 高度计算,
   彻底避免 children 撑大 sidebar 进而撑出 modal 的问题。 */
.wb-modal-report-content {
    display: flex;
    flex-direction: row;
    align-items: stretch;
    flex: 1;
    min-height: 0;
    gap: var(--report-content-gap);
    position: relative;
    margin-top: 16px;  /* 两栏与标题栏拉开间距, 顶部不再拥挤 */
    margin-bottom: 6px;  /* 两栏底部上收, 给细长下拉条留出空间 */
}
.wb-modal-report-content > .wb-modal-report-preview {
    flex: 1 1 0;
    min-width: 0;
    min-height: 0;
    height: 100%;
    align-self: stretch;
    /* 给 sidebar 留出右侧固定空间 */
    margin-right: calc(var(--report-history-sidebar-width) + var(--report-content-gap));
}

/* PDF 内容底 padding 和 sidebar 列表底 padding 对齐 */
#report-modal .wb-modal-report-preview-body { padding-bottom: 4px; }
#report-modal .wb-modal-report-history-list { padding-bottom: 4px; }

/* PDF 区: 白色背景 (与 PDF 页面同色) + 微浅阴影让卡片浮起 */
#report-modal .wb-modal-report-preview {
    border: none;
    box-sizing: border-box;
    overflow: hidden;
    background: #FFFFFF;
    border-radius: 12px;
    box-shadow:
        0 4px 12px -4px rgba(15, 23, 42, 0.08),
        0 1px 2px rgba(15, 23, 42, 0.04);
}
[data-theme="dark"] #report-modal .wb-modal-report-preview {
    /* 暗黑下 PDF 页面被 invert(1) 反成纯黑(#000)(见下方 .wb-modal-report-page canvas/img),
       预览区底色须同为 #000, 页面两侧/缝隙才不会露出灰条 —— 与亮色下"页面与底色同为 #FFF
       浑然一体"对称。box-shadow 仍在, 卡片轮廓靠阴影区分。 */
    background: #000000;
    box-shadow:
        0 4px 12px -4px rgba(0, 0, 0, 0.30),
        0 1px 2px rgba(0, 0, 0, 0.20);
}
.wb-modal-report-content > .wb-modal-report-history {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    width: var(--report-history-sidebar-width);
    height: 100%;
    /* flex 属性不再生效 (因 absolute), 但保留兼容 */
    flex: 0 0 var(--report-history-sidebar-width);
}

/* ───────── 报告预览「窄屏」响应式 ─────────
   按预览窗口(#report-modal)自身宽度判定(容器查询) —— 批改中心 / 资料中心同一套规则,
   表现天然一致。预览窗口窄到阈值时:
     · 收起右侧目录栏(历史记录) → PDF 撑满整框;
     · 顶部下载按钮从 PDF 右上角并入右侧操作组, 紧挨反馈按钮。
   宽屏时保持: 目录栏显示、PDF 给侧栏让位、下载按钮在 PDF 区右上角。 */
@container report-preview (max-width: 880px) {
    #report-modal .wb-modal-report-history {
        display: none;
    }
    #report-modal .wb-modal-report-preview {
        margin-right: 0;
    }
    #report-modal .wb-modal-report-download-btn {
        position: static;
        transform: none;
    }
    #report-modal .wb-modal-report-download-btn:hover:not(:disabled):not(.is-loading) {
        transform: translateY(-1px);
    }
}

.wb-feedback {
    position: absolute;
    top: var(--layout-gap);
    bottom: 0;
    right: calc(0px - var(--drawer-w) - 40px);
    width: var(--drawer-w);
    padding: 25px;
    border-radius: var(--radius-base);
    background: var(--glass-panel-bg);
    backdrop-filter: var(--glass-panel-backdrop);
    -webkit-backdrop-filter: var(--glass-panel-backdrop);
    box-shadow: var(--glass-panel-shadow);
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    box-shadow: none;
    display: flex;
    flex-direction: column;
    gap: 18px;
    overflow: hidden;
    z-index: 1201;
    opacity: 0;
    pointer-events: none;
    transition: right 0.7s cubic-bezier(0.22, 1, 0.36, 1), filter 0.35s ease, opacity 0.35s ease;
}

body.wb-feedback-open .wb-feedback {
    right: 0;
    opacity: 1;
    pointer-events: auto;
}

/* 个人中心 ⇄ 反馈面板互切: 只把"被替换"的那个面板瞬切收起(去掉滑动过渡),
   目标面板正常滑入, 避免两个同位面板对穿 */
body.wb-drawer-instant-hide .wb-drawer {
    transition: none !important;
}
body.wb-feedback-instant-hide .wb-feedback {
    transition: none !important;
}

.wb-feedback-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
}

.wb-feedback-title {
    margin: 0;
    font-size: 15px;
    font-weight: 700;
    color: var(--text-main);
}

.wb-feedback-close {
    border: none;
    background: transparent;
    padding: 0;
    width: 18px;
    height: 18px;
    color: var(--text-grey);
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    transition: color 0.2s ease, transform 0.2s ease;
}

.wb-feedback-close:hover {
    color: var(--btn-danger);
    transform: scale(1.08);
}

.wb-modal-report-preview {
    flex: 1;
    display: flex;
    flex-direction: column;
    min-width: 0;
    min-height: 0;
    overflow: hidden;
    position: relative;
}

/* ===== 生成按钮: 两种 layout =====
   data-layout="center" (ready 首次生成): PDF 区底部居中大胶囊, 文字始终显示
   data-layout="corner" (download/retry/running 重新生成): 右下角 40x40 圆 icon, hover 拉开
   默认 corner, ready 状态 JS 切到 center */
.wb-modal-report-preview-actions {
    position: absolute;
    bottom: 22px;
    z-index: 3;
    display: flex;
    align-items: center;
    gap: 8px;
    pointer-events: none;
    /* 默认 corner, position 由下方 [data-layout] 选择器决定 */
    right: 22px;
    transition: right 0.3s cubic-bezier(.32, .72, 0, 1),
                left 0.3s cubic-bezier(.32, .72, 0, 1);
}
.wb-modal-report-preview-actions[data-layout="center"] {
    left: 50%;
    right: auto;
    transform: translateX(-50%);
}
.wb-modal-report-preview-actions[data-layout="corner"] {
    right: 22px;
    left: auto;
    transform: none;
}
.wb-modal-report-preview-actions > button {
    pointer-events: auto;
}
/* 通用按钮样式: 蓝色透明玻璃, 圆角胶囊形, 内部尺寸由 layout 决定 */
.wb-modal-report-preview-actions > .wb-modal-report-side-btn {
    height: 40px;
    font-size: 13.5px;
    border-radius: 999px;
    background: rgba(0, 100, 210, 0.72);
    border: none;
    color: #fff;
    text-shadow: 0 1px 2px rgba(0, 28, 72, 0.38);
    -webkit-backdrop-filter: blur(6px) saturate(180%);
    backdrop-filter: blur(6px) saturate(180%);
    box-shadow:
        0 10px 26px -10px rgba(0, 78, 196, 0.50),
        0 3px 8px -3px rgba(0, 56, 150, 0.34);
    transition:
        width 0.34s cubic-bezier(.32, .72, 0, 1),
        padding 0.34s cubic-bezier(.32, .72, 0, 1),
        gap 0.34s cubic-bezier(.32, .72, 0, 1),
        background 0.18s ease,
        box-shadow 0.18s ease,
        transform 0.18s ease;
    overflow: hidden;
}
.wb-modal-report-preview-actions > .wb-modal-report-side-btn svg {
    width: 15px;
    height: 15px;
    flex: 0 0 auto;
}
/* Icon 切换: 默认显示 sparkle (生成); download/running (已有学习资料 / 正在重新生成中)
   显示 refresh (重新生成). retry (上次失败) 跟 ready 视觉一致, 显示 sparkle. */
.wb-modal-report-preview-actions > .wb-modal-report-side-btn .wb-btn-icon--create { display: inline-flex; }
.wb-modal-report-preview-actions > .wb-modal-report-side-btn .wb-btn-icon--regen { display: none; }
.wb-modal-report-preview-actions > .wb-modal-report-side-btn[data-btn-state="download"] .wb-btn-icon--create,
.wb-modal-report-preview-actions > .wb-modal-report-side-btn[data-btn-state="running"] .wb-btn-icon--create { display: none; }
.wb-modal-report-preview-actions > .wb-modal-report-side-btn[data-btn-state="download"] .wb-btn-icon--regen,
.wb-modal-report-preview-actions > .wb-modal-report-side-btn[data-btn-state="running"] .wb-btn-icon--regen { display: inline-flex; }

/* ===== Layout 1: center (ready 首次生成) - 底部居中大胶囊, 文字始终显示 ===== */
.wb-modal-report-preview-actions[data-layout="center"] > .wb-modal-report-side-btn {
    width: auto;
    min-width: 0;
    padding: 0 22px;
    gap: 7px;
    justify-content: center;
}
.wb-modal-report-preview-actions[data-layout="center"] > .wb-modal-report-side-btn .wb-modal-report-side-btn__label {
    opacity: 1;
    max-width: none;
    margin: 0;
}
.wb-modal-report-preview-actions[data-layout="center"] > .wb-modal-report-side-btn:hover:not(:disabled):not(.is-loading) {
    background: rgba(0, 100, 210, 0.84);
    transform: translateY(-1px);
    box-shadow:
        0 14px 30px -10px rgba(0, 78, 196, 0.56),
        0 4px 10px -3px rgba(0, 56, 150, 0.40);
}

/* ===== Layout 2: corner (download/retry/running 重新生成) - 右下角 40x40 圆 icon, hover 拉开 ===== */
.wb-modal-report-preview-actions[data-layout="corner"] > .wb-modal-report-side-btn {
    width: 40px;
    min-width: 40px;
    padding: 0;
    gap: 0;
    justify-content: center;
}
.wb-modal-report-preview-actions[data-layout="corner"] > .wb-modal-report-side-btn .wb-modal-report-side-btn__label {
    max-width: 0;
    opacity: 0;
    overflow: hidden;
    white-space: nowrap;
    transition:
        max-width 0.34s cubic-bezier(.32, .72, 0, 1),
        opacity 0.22s ease 0.06s;
}
.wb-modal-report-preview-actions[data-layout="corner"] > .wb-modal-report-side-btn:hover:not(:disabled):not(.is-loading) {
    width: 200px;
    padding: 0 18px 0 16px;
    gap: 7px;
    background: rgba(0, 100, 210, 0.84);
    transform: translateY(-1px);
    box-shadow:
        0 14px 30px -10px rgba(0, 78, 196, 0.56),
        0 4px 10px -3px rgba(0, 56, 150, 0.40);
}
.wb-modal-report-preview-actions[data-layout="corner"] > .wb-modal-report-side-btn:hover:not(:disabled):not(.is-loading) .wb-modal-report-side-btn__label {
    max-width: 200px;
    opacity: 1;
}
/* loading 态 (生成中…) 强制展开, 让"生成中…" 文字可见 */
.wb-modal-report-preview-actions[data-layout="corner"] > .wb-modal-report-side-btn.is-loading {
    width: 200px;
    padding: 0 18px 0 16px;
    gap: 7px;
}
.wb-modal-report-preview-actions[data-layout="corner"] > .wb-modal-report-side-btn.is-loading .wb-modal-report-side-btn__label {
    max-width: 200px;
    opacity: 1;
}
/* 收起后按钮已经够小 + 不在中央, PDF 区不再需要 padding-bottom 让位 */

/* 统一按钮: 高度 32px, 蓝色实心 / 灰色描边 */
.wb-modal-report-side-btn {
    height: 32px;
    padding: 0 12px;
    border-radius: 8px;
    border: 1px solid transparent;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 5px;
    font-size: 12.5px;
    font-weight: 600;
    line-height: 1;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    cursor: pointer;
    box-sizing: border-box;
    transition: background 0.18s ease, border-color 0.18s ease, color 0.18s ease, transform 0.18s ease;
}
.wb-modal-report-side-btn[hidden] { display: none !important; }
.wb-modal-report-side-btn:disabled { cursor: not-allowed; opacity: 0.6; }
.wb-modal-report-side-btn.is-loading { cursor: progress; opacity: 0.78; pointer-events: none; }
.wb-modal-report-side-btn svg { flex: 0 0 auto; }

.wb-modal-report-side-btn--primary {
    background: var(--btn-aqua-bg);
    border-color: var(--btn-aqua-bg);
    color: var(--btn-aqua-text);
    box-shadow: 0 2px 6px -2px rgba(40, 100, 255, 0.32);
}
.wb-modal-report-side-btn--primary:hover:not(:disabled):not(.is-loading) {
    background: var(--btn-aqua-hover);
    border-color: var(--btn-aqua-hover);
    transform: translateY(-1px);
    box-shadow: 0 6px 14px -4px rgba(40, 100, 255, 0.40);
}
#report-modal .wb-modal-report-side-btn--primary.is-expired {
    background: var(--danger-soft-bg);
    border-color: transparent;
    color: var(--btn-danger);
}

.report-modal-action-btn--ghost {
    background: transparent;
    border-color: var(--input-border);
    color: var(--text-grey);
}
.report-modal-action-btn--ghost:hover:not(.active):not(:disabled) {
    color: var(--btn-aqua-bg);
    border-color: var(--btn-aqua-bg);
    background: var(--accent-soft-bg);
    transform: translateY(-1px);
}
.report-modal-action-btn--ghost.active {
    background: var(--btn-aqua-bg);
    border-color: var(--btn-aqua-bg);
    color: var(--btn-aqua-text);
}

/* 下载图标按钮 32x32 正方形圆角, 仅图标无文字 */
.report-modal-action-btn--icon {
    width: 32px;
    height: 32px;
    padding: 0;
    background: var(--btn-aqua-bg);
    border-color: var(--btn-aqua-bg);
    color: var(--btn-aqua-text);
    border-radius: 8px;
    flex-shrink: 0;
}
.report-modal-action-btn--icon {
    box-shadow: 0 2px 6px -2px rgba(40, 100, 255, 0.32);
}
.report-modal-action-btn--icon:hover:not(:disabled):not(.is-loading) {
    background: var(--btn-aqua-hover);
    border-color: var(--btn-aqua-hover);
    transform: translateY(-1px);
    box-shadow: 0 6px 14px -4px rgba(40, 100, 255, 0.40);
}

/* 下载按钮: 在标题栏内, 水平对齐 PDF 列右边缘, 蓝色实心强调 */
.wb-modal-report-download-btn {
    /* 默认(宽屏): 绝对定位在 PDF 区右上角(与 .wb-modal-report-preview 右缘对齐);
       窄屏时由 @container report-preview 改回普通 flex item, 并入右侧操作组紧挨反馈。 */
    position: absolute;
    right: calc(var(--report-history-sidebar-width) + var(--report-content-gap));
    top: 50%;
    transform: translateY(-50%);
    z-index: 2;
    height: 28px;          /* 与反馈按钮等高 */
    min-width: 94px;       /* 宽度固定, 下载中显示 spinner 时不跳动 */
    border-radius: 10px;
    /* v2: 跟反馈按钮 .wb-modal-report-action-btn 用同一对 token, 亮暗自动跟随 */
    background: var(--chip-bg);
    border-color: transparent;
    color: var(--text-grey);
    font-size: 12px;
    font-weight: 500;
    box-shadow: none;
}
.wb-modal-report-download-btn:hover:not(:disabled):not(.is-loading) {
    background: var(--chip-bg-hover);
    border-color: transparent;
    color: var(--text-main);
    box-shadow: none;
    transform: translateY(-50%) translateY(-1px);
}
/* 下载过期: 转红色提示态 */
#report-modal .wb-modal-report-download-btn.is-expired {
    background: var(--danger-soft-bg);
    border-color: transparent;
    color: var(--btn-danger);
    box-shadow: none;
}
/* 下载过期: 按钮转红色提示态 */
#report-modal .report-modal-action-btn--icon.is-expired {
    background: var(--danger-soft-bg);
    border-color: transparent;
    color: var(--btn-danger);
}
#report-modal .report-modal-action-btn--icon.is-expired {
    background: var(--danger-soft-bg);
    border-color: transparent;
    color: var(--btn-danger);
}

/* 顶部反馈按钮: 无边框, 淡灰背景, 与关闭按钮间距更大 */
.wb-modal-report-action-btn {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    height: 28px;
    padding: 0 12px;
    border-radius: 10px;
    border: none;
    background: var(--chip-bg);
    color: var(--text-grey);
    font-size: 12px;
    font-weight: 500;
    line-height: 1;
    cursor: pointer;
    transition: background 0.18s ease, color 0.18s ease, transform 0.18s ease;
}
.wb-modal-report-action-btn:hover:not(.active) {
    color: var(--text-main);
    background: var(--chip-bg-hover);
    transform: translateY(-1px);
}
/* active 态: 反色高对比 toggle 提示, 亮色用深 panel, 暗色用浅文字 */
.wb-modal-report-action-btn.active {
    background: var(--text-main);
    color: var(--bg-page);
}

/* 下拉手柄: iPhone 底部 home indicator 风格 — 细长横条 */
.wb-modal-report-expand {
    position: absolute;
    left: 50%;
    bottom: 9px;
    transform: translateX(-50%);
    width: 120px;
    height: 5px;
    padding: 0;
    border: none;
    border-radius: 999px;
    background: rgba(127, 127, 127, 0.40);
    cursor: pointer;
    transition: background 0.2s ease;
    z-index: 4;
}
/* 扩大点击热区, 视觉上仍是细条 */
.wb-modal-report-expand::before {
    content: "";
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    width: 150px;
    height: 22px;
}
.wb-modal-report-expand:hover {
    background: rgba(127, 127, 127, 0.62);
}
body:not(.wb-tab-review) #report-modal .wb-modal-report-expand { display: none; }

.wb-modal-report-preview-body {
    flex: 1;
    min-width: 0;
    min-height: 0;
    display: block;
    overflow-y: auto;
    overflow-x: hidden;
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
    background: transparent;
    border-radius: var(--radius-base);
    box-shadow: none;
    padding: 0 18px 18px;
}
.wb-modal-report-preview-body::-webkit-scrollbar { display: none; }

.study-material-fab {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    min-height: 30px;
    padding: 0 16px;
    border: 1px solid var(--input-border);
    border-radius: 9px;
    background: var(--input-bg);
    color: var(--text-grey);
    font-size: 13px;
    font-weight: 650;
    letter-spacing: 0.01em;
    line-height: 1;
    cursor: pointer;
    box-shadow: none;
    transition:
        background 0.18s ease,
        border-color 0.18s ease,
        color 0.18s ease,
        opacity 0.18s ease,
        transform 0.18s ease;
}

.study-material-fab[hidden] {
    display: none !important;
}

.study-material-fab.is-ready-feature {
    border-color: var(--btn-aqua-bg);
    background: var(--btn-aqua-bg);
    color: var(--btn-aqua-text);
}

.study-material-fab.is-ready-feature:hover:not(:disabled) {
    background: var(--btn-aqua-hover);
    border-color: var(--btn-aqua-hover);
    color: var(--btn-aqua-text);
    transform: translateY(-1px);
}

.study-material-fab:disabled,
.study-material-fab.is-loading {
    cursor: not-allowed;
    opacity: 0.72;
    transform: none;
}

.study-material-fab.is-loading {
    cursor: progress;
}

.study-material-fab.is-checking-feature {
    cursor: progress;
    opacity: 0.82;
}

.study-material-fab.is-disabled-feature {
    color: var(--text-grey);
    background: var(--input-bg);
    border-color: var(--input-border);
    box-shadow: none;
}

.study-material-fab-spinner {
    width: 12px;
    height: 12px;
    border: 1.6px solid currentColor;
    border-right-color: transparent;
    border-radius: 50%;
    flex: 0 0 auto;
    animation: studyMaterialSpin 0.72s linear infinite;
}

.study-material-fab.is-loading .study-material-fab-label {
    opacity: 0.85;
}

@keyframes studyMaterialSpin {
    to { transform: rotate(360deg); }
}

/* 触屏窄屏：按钮缩小，避免遮挡内容 */
/* .report-preview-expand-row 旧布局已废弃, toggle 直接在 footer-left 中 */
.report-preview-expand-row { display: none; }

body:not(.wb-tab-review) #report-modal .report-preview-expand-row {
    display: none;
}

/* 下拉 toggle: 紧贴生成按钮右侧, 32px 高与按钮齐, 颜色低调 */
.report-preview-expand-toggle {
    width: 32px;
    height: 32px;
    padding: 0;
    margin-left: auto;
    border: 1px solid var(--input-border);
    border-radius: 8px;
    background: transparent;
    color: var(--text-grey);
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    transition: color 0.2s ease, background 0.2s ease, border-color 0.2s ease;
    box-sizing: border-box;
}
.report-preview-expand-toggle:hover {
    color: var(--text-main);
    background: rgba(127, 127, 127, 0.06);
}

.report-preview-expand-toggle svg {
    width: 16px;
    height: 16px;
    display: block;
    transition: transform 0.32s cubic-bezier(0.22, 1, 0.36, 1);
}

.report-preview-expand-toggle:hover,
.report-preview-expand-toggle:focus-visible {
    color: var(--text-main);
    opacity: 1;
    outline: none;
}

body.wb-report-expanded .report-preview-expand-toggle {
    transform: translateY(1px);
}

body.wb-report-expanded .report-preview-expand-toggle svg {
    transform: rotate(180deg);
}

body.wb-tab-downloads:has(.wb-downloads-list.is-open) #report-modal .report-preview-expand-row {
    width: 100%;
}

/* 报告预览右侧侧栏: flex column, head 顶 / list 中间(可滚) / bottom 底 */
.wb-modal-report-history {
    display: flex;
    flex-direction: column;
    min-height: 0;
    overflow: hidden;
    width: 100%;
    box-sizing: border-box;
    background: transparent;
    margin: 0;  /* 重置 aside 默认 margin, 让 sidebar 与 PDF 区顶/底对齐 */
}
[data-theme="dark"] .wb-modal-report-history {
    background: transparent;
}

.report-history-head {
    flex-shrink: 0;
    padding: 12px 12px 8px;
}
.report-history-title {
    font-size: 13px;
    font-weight: 700;
    color: var(--text-main);
    letter-spacing: 0.02em;
}

/* ===== Sidebar 底部操作区: 下载/反馈 (一行) + 生成按钮 (各占一行) ===== */
.report-side-bottom {
    flex-shrink: 0;
    padding: 10px 8px;
    display: flex;
    flex-direction: column;
    gap: 6px;
    border-top: 1px solid rgba(148, 163, 184, 0.14);
    background: var(--frame-surface-bg, transparent);
}

.report-side-actions-row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 6px;
}

.report-side-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 5px;
    width: 100%;
    min-height: 32px;
    padding: 0 10px;
    border-radius: 8px;
    box-sizing: border-box;
    font-size: 12.5px;
    font-weight: 600;
    line-height: 1;
    cursor: pointer;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    border: 1px solid transparent;
    background: transparent;
    color: var(--text-main);
    transition: background 0.18s ease, border-color 0.18s ease, color 0.18s ease,
        opacity 0.18s ease, transform 0.18s ease;
}
.report-side-btn[hidden] { display: none !important; }
.report-side-btn:disabled { cursor: not-allowed; opacity: 0.6; }
.report-side-btn.is-loading { pointer-events: none; opacity: 0.78; cursor: progress; }
.report-side-btn svg { flex: 0 0 auto; }

/* 下载: 蓝色实心 */
.report-side-btn--download {
    background: var(--btn-aqua-bg);
    border-color: var(--btn-aqua-bg);
    color: var(--btn-aqua-text);
}
.report-side-btn--download:hover:not(:disabled):not(.is-loading) {
    background: var(--btn-aqua-hover);
    border-color: var(--btn-aqua-hover);
    transform: translateY(-1px);
}
#report-modal .report-side-btn--download.is-expired {
    background: var(--danger-soft-bg);
    border-color: transparent;
    color: var(--btn-danger);
}

/* 反馈: 透明边框 */
.report-side-btn--ghost {
    background: transparent;
    border-color: var(--input-border);
    color: var(--text-grey);
}
.report-side-btn--ghost:hover:not(.active):not(:disabled) {
    color: var(--btn-aqua-bg);
    border-color: var(--btn-aqua-bg);
    background: var(--accent-soft-bg);
    transform: translateY(-1px);
}
.report-side-btn--ghost.active {
    background: var(--btn-aqua-bg);
    border-color: var(--btn-aqua-bg);
    color: var(--btn-aqua-text);
}

/* 生成 (学习资料/刷题册): 视觉与下载按钮一致, 无阴影, 全宽 */
.report-side-btn--generate {
    background: var(--btn-aqua-bg);
    border-color: var(--btn-aqua-bg);
    color: var(--btn-aqua-text);
}
.report-side-btn--generate:hover:not(:disabled):not(.is-loading) {
    background: var(--btn-aqua-hover);
    border-color: var(--btn-aqua-hover);
    transform: translateY(-1px);
}
.report-side-btn--generate.is-checking-feature {
    background: rgba(40, 100, 255, 0.5);
    border-color: transparent;
    cursor: progress;
}
.report-history-tab.is-active .report-history-tab-count {
    background: var(--accent-soft-bg);
    color: var(--btn-aqua-bg);
}

.wb-modal-report-history-list {
    flex: 1 1 0;
    min-height: 0;
    overflow-y: auto;
    scrollbar-width: none;
    padding: 4px 8px;
    display: flex; flex-direction: column; gap: 4px;
}
.wb-modal-report-history-list::-webkit-scrollbar { display: none; }

.wb-modal-report-history-empty {
    margin: 24px 8px;
    padding: 14px 12px;
    text-align: center;
    color: var(--text-grey);
    font-size: 12px;
    border: 1px dashed rgba(148, 163, 184, 0.28);
    border-radius: 10px;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

/* —— 分组小节 (报告/资料/刷题册) —— */
.report-history-section {
    margin-bottom: 14px;
}
.report-history-section:last-child { margin-bottom: 0; }

.report-history-section-head {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 4px 6px 6px;
}
.report-history-section-title {
    font-size: 11px;
    font-weight: 700;
    color: var(--text-grey);
    letter-spacing: 0.06em;
    text-transform: uppercase;
}
.report-history-section-count {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 16px;
    height: 14px;
    padding: 0 4px;
    border-radius: 7px;
    background: rgba(148, 163, 184, 0.18);
    color: var(--text-grey);
    font-size: 10px;
    font-weight: 700;
    line-height: 1;
}
.report-history-section-list {
    display: flex;
    flex-direction: column;
    gap: 2px;
}
.report-history-empty-title { font-weight: 700; color: var(--text-main); font-size: 13px; }
.report-history-empty-text { font-size: 12px; color: var(--text-grey); }

/* 报告分组: 1 个报告 + 嵌套的学习资料/刷题册 */
.report-history-group {
    display: flex;
    flex-direction: column;
    gap: 2px;
    margin-bottom: 10px;
}
.report-history-group:last-child { margin-bottom: 0; }

.report-history-item {
    display: flex; flex-direction: column; gap: 3px;
    padding: 7px 10px; cursor: pointer;
    border-radius: 8px;
    transition: background 0.2s;
    min-width: 0;
}
/* 子项 (学习资料/刷题册) 缩进 + 左侧连接线表明从属关系 */
.report-history-item.is-sub {
    margin-left: 16px;
    padding-left: 12px;
    border-left: 2px solid rgba(148, 163, 184, 0.22);
    border-radius: 0 8px 8px 0;
}
.report-history-item.is-sub:hover {
    border-left-color: var(--btn-aqua-bg);
}
.report-history-item-title-text {
    font-size: 12.5px;
    font-weight: 500;
    color: var(--text-main);
    line-height: 1.3;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    word-break: keep-all;
}
.report-history-item:hover {
    background: var(--chip-bg);
}
.report-history-item.active {
    background: var(--accent-soft-bg);
}
[data-theme="dark"] .report-history-item.active {
    background: var(--accent-soft-bg-strong);
}

.report-history-item-top {
    display: flex; align-items: center; justify-content: space-between; gap: 8px;
    min-width: 0;
}
.report-history-item-title {
    position: relative;
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 12px; font-weight: 500;
    color: var(--text-main);
    line-height: 1.3;
    flex: 1; min-width: 0;
    word-break: keep-all;
}
.report-history-item-title .history-item-title-text {
    flex: 1; min-width: 0;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    word-break: keep-all;
}

.report-history-item-type-tag {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 1px 5px;
    border-radius: 4px;
    font-size: 10px;
    font-weight: 700;
    line-height: 1.2;
    letter-spacing: 0.02em;
    flex-shrink: 0;
}
.report-history-item-type-tag.tag-report {
    background: var(--accent-soft-bg);
    color: var(--btn-aqua-bg);
}
.report-history-item-type-tag.tag-material {
    background: rgba(34, 197, 94, 0.16);
    color: rgb(22, 163, 74);
}
[data-theme="dark"] .report-history-item-type-tag.tag-material {
    background: rgba(34, 197, 94, 0.22);
    color: rgb(74, 222, 128);
}

.report-history-item-dl {
    width: 18px; height: 18px; background: none; border: none;
    cursor: pointer; padding: 0; display: flex; align-items: center; justify-content: center;
    color: var(--text-grey); border-radius: var(--radius-sm); transition: 0.2s;
    flex-shrink: 0;
}
.report-history-item-dl:hover { color: var(--vitality-blue); background: var(--accent-soft-bg); }
.report-history-item-dl.is-expired { color: var(--text-grey); opacity: 0.42; }
.report-history-item-dl.is-expired:hover { color: var(--text-grey); background: transparent; }

.history-meta-row {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-wrap: wrap;
}

.report-history-item-time {
    font-size: 11px; color: var(--text-grey); line-height: 1.2;
    white-space: nowrap;
}
.report-history-item-size {
    font-size: 11px; color: var(--text-grey); line-height: 1.2;
    padding-left: 6px;
    border-left: 1px solid rgba(148, 163, 184, 0.28);
    white-space: nowrap;
}

.wb-feedback-section {
    width: 100%;
    flex: 1;
    min-height: 0;
    margin: 0;
    padding: 0;
    border-top: none;
    display: flex;
    flex-direction: column;
    align-items: stretch;
}

.btn-spinner {
    width: 14px;
    height: 14px;
    border-radius: 50%;
    border: 2px solid currentColor;
    border-right-color: transparent;
    display: inline-block;
    animation: buttonSpin 0.75s linear infinite;
}

@keyframes buttonSpin {
    to { transform: rotate(360deg); }
}

/* 反馈选择器沿用 .custom-select-* 基础样式（见 forms.css），仅做局部微调：*/
#feedbackSelectCustom { width: 100%; flex: 0 0 auto; }
#feedbackDropdown li {
    padding: 6px 14px;
}
#feedbackDropdown li.active {
    background: var(--btn-aqua-bg);
    color: var(--btn-aqua-text);
}
.wb-feedback-input {
    flex: 0 0 auto;
    display: flex;
    flex-direction: column;
    gap: 12px;
    padding-top: 8px;
}
.wb-feedback-input:empty {
    display: none;
}
.wb-feedback-section textarea {
    width: 100%;
    flex: 0 0 auto;
    min-height: 140px;
    max-height: 32vh;
    resize: vertical;
    padding: 12px 16px;
    border-radius: var(--radius-base);
    border: none;
    background: var(--field-bg);
    color: var(--text-main);
    font-size: 13px;
    resize: none;
    outline: none;
    transition: background 0.3s, box-shadow 0.3s;
    font-family: inherit;
    box-sizing: border-box;
}
.wb-feedback-section textarea:focus {
    background: var(--field-bg-active);
}
.report-feedback-submit {
    padding: 8px 16px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 600;
    cursor: pointer;
    border: none;
    background: var(--btn-aqua-bg);
    color: #fff;
    transition: filter 0.2s;
}
.report-feedback-submit:hover {
    background: var(--btn-aqua-hover);
}
.report-feedback-submit:disabled {
    opacity: 0.5;
    cursor: default;
}

.wb-feedback-history {
    flex: 0 1 auto;
    min-height: 0;
    display: flex;
    flex-direction: column;
    margin-top: 14px;
    padding-top: 12px;
    border-top: 1px solid var(--card-border);
}
.wb-feedback-history.is-empty {
    border-top: none;
    margin-top: 8px;
    padding-top: 4px;
}
.wb-feedback-history.is-empty .wb-feedback-history-title {
    display: none;
}
.wb-feedback-history-title {
    font-size: 12.5px;
    font-weight: 600;
    color: var(--text-grey);
    margin-bottom: 8px;
    flex: 0 0 auto;
}
.wb-feedback-history-list {
    flex: 0 1 auto;
    max-height: 280px;
    overflow-y: auto;
    display: flex;
    flex-direction: column;
    gap: 8px;
    padding-right: 2px;
}
.wb-feedback-history.is-empty .wb-feedback-history-list {
    max-height: none;
    overflow: visible;
}
.wb-feedback-history-empty {
    text-align: center;
    color: var(--text-grey);
    font-size: 12px;
    padding: 12px 0 4px;
    opacity: 0.6;
    line-height: 1.4;
}
.wb-feedback-history-item {
    background: transparent;
    border-radius: 10px;
    padding: 10px 12px;
    display: flex;
    flex-direction: column;
    gap: 6px;
    transition: background 0.25s ease;
}
.feedback-history-item-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
}
.feedback-history-type {
    font-size: 12px;
    font-weight: 600;
    color: var(--text-main);
}
.feedback-history-status {
    font-size: 11px;
    padding: 0;
    background: transparent;
    font-weight: 500;
}
.feedback-history-status.fb-status-pending { color: var(--warning-ink); }
.feedback-history-status.fb-status-acknowledged { color: var(--vitality-blue); }
.feedback-history-status.fb-status-resolved { color: var(--success-ink); }
.feedback-history-status.fb-status-replied { color: var(--vitality-purple); }

.feedback-history-item-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
}
.feedback-history-badges {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    margin-left: auto;
    flex-shrink: 0;
}
.wb-feedback-history-item.has-reply { cursor: pointer; }
.wb-feedback-history-item.has-reply:hover { background: var(--chip-bg); }
.wb-feedback-history-item.open { background: var(--field-bg); }
.wb-feedback-history-reply {
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding: 0 0 0 12px;
    border-left: 2px solid var(--text-grey);
    max-height: 0;
    margin-top: 0;
    opacity: 0;
    overflow: hidden;
    transition: max-height 0.32s cubic-bezier(0.22, 1, 0.36, 1),
                opacity 0.25s ease,
                margin-top 0.25s ease;
}
.wb-feedback-history-item.open .wb-feedback-history-reply {
    max-height: 400px;
    opacity: 1;
    margin-top: 10px;
}
.feedback-history-reply-head {
    font-size: 11.5px;
    color: var(--text-grey);
    font-weight: 600;
}
.feedback-history-reply-time {
    font-size: 11px;
    color: var(--text-grey);
    opacity: 0.7;
    margin-bottom: 4px;
}
.feedback-history-reply-text {
    font-size: 12.5px;
    color: var(--text-main);
    line-height: 1.5;
    white-space: pre-wrap;
    word-break: break-word;
}
.feedback-history-text {
    font-size: 12.5px;
    line-height: 1.5;
    color: var(--text-main);
    white-space: pre-wrap;
    word-break: break-word;
    max-height: 4.5em;
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
}
.feedback-history-meta {
    font-size: 11px;
    color: var(--text-grey);
    opacity: 0.7;
}

.wb-modal-report-pages {
    width: 100%;
    display: block;
    padding: 8px 0 20px;
    /* v2: 显式 none, 堵住任何上游 (wb-modal / pdfjs 默认 / 浏览器 canvas) 的阴影继承 */
    box-shadow: none;
    filter: none;
}

.wb-modal-report-page-wrap {
    width: min(100%, 864px);
    margin: 0 auto;
    max-width: 100%;
}

.wb-modal-report-page {
    width: 100%;
    margin: 0 auto 24px;
    display: block;
}
.wb-modal-report-page canvas {
    width: 100% !important;
    height: auto;
    overflow-x: hidden;
    display: block;
}
.wb-modal-report-page img {
    display: block;
    width: 100%;
    height: auto;
}
[data-theme="dark"] .wb-modal-report-page canvas,
[data-theme="dark"] .wb-modal-report-page img,
[data-theme="dark"] .wb-downloads-preview-page canvas,
[data-theme="dark"] .wb-downloads-preview-page img {
    filter: invert(1) hue-rotate(180deg);
}
.wb-modal-report-loading {
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 200px;
    color: var(--text-grey);
    font-size: 13px;
}

@media (max-width: 1100px) {
    .wb-downloads-file-list {
        max-height: 360px;
        flex: none;
    }

    .wb-downloads-preview-page {
        min-height: 220px;
    }
}

/* ====================================================================
   账号注销 modal + 注销 pending 全屏面板
   ==================================================================== */
.delete-account-mask {
    position: fixed; inset: 0; z-index: 5000;
    background: rgba(0, 0, 0, 0.45);
    backdrop-filter: blur(6px);
    display: flex; align-items: center; justify-content: center;
}
.delete-account-modal {
    background: var(--card-bg, #fff);
    border-radius: 16px;
    padding: 24px;
    width: 420px; max-width: calc(100vw - 32px);
    box-shadow: 0 30px 60px -20px rgba(0, 0, 0, 0.4);
    color: var(--text-main);
}
.delete-account-modal h2 {
    margin: 0 0 8px; font-size: 17px; font-weight: 700;
    color: var(--text-main);
}
.delete-account-warn {
    background: rgba(229, 50, 56, 0.06);
    border: 1px solid rgba(229, 50, 56, 0.2);
    border-radius: 10px;
    padding: 10px 12px;
    font-size: 12px; line-height: 1.6;
    color: var(--text-main);
    margin-bottom: 18px;
}
.delete-account-warn b { color: var(--danger-ink, #E53238); font-weight: 700; }
.delete-account-row { margin-bottom: 12px; }
.delete-account-row label {
    display: block; font-size: 11px; color: var(--text-grey);
    margin-bottom: 5px;
}
.delete-account-row input[type="text"],
.delete-account-row textarea {
    width: 100%; box-sizing: border-box;
    background: var(--bg-page); color: var(--text-main);
    border: 1px solid var(--border-soft); border-radius: 8px;
    padding: 9px 12px; font-size: 13px;
    font-family: inherit;
}
.delete-account-row input[readonly] {
    color: var(--text-grey); cursor: not-allowed;
}
.delete-account-row textarea { min-height: 64px; resize: vertical; }
.delete-account-otp-row { display: flex; gap: 8px; }
.delete-account-otp-row input { flex: 1; }
.delete-account-otp-row button {
    flex-shrink: 0; padding: 0 14px; border-radius: 8px;
    background: var(--bg-page); color: var(--vitality-blue);
    border: 1px solid var(--border-soft);
    font-size: 12px; font-weight: 600; cursor: pointer;
    min-width: 100px;
}
.delete-account-otp-row button:disabled {
    opacity: 0.6; cursor: not-allowed;
}
.delete-account-actions {
    display: flex; gap: 10px; margin-top: 18px;
}
.delete-account-actions .btn-cancel {
    padding: 11px 18px;
    background: var(--bg-page);
    border: 1px solid var(--border-soft); color: var(--text-main);
    border-radius: 8px; font-weight: 600; font-size: 13px; cursor: pointer;
}
.delete-account-actions .btn-confirm {
    flex: 1; padding: 11px 0;
    background: var(--danger-ink, #E53238); color: #fff;
    border: none; border-radius: 8px;
    font-weight: 700; font-size: 13px; cursor: pointer;
}
.delete-account-actions .btn-confirm:disabled {
    opacity: 0.5; cursor: not-allowed;
}

/* ====================================================================
   注销 pending 全屏面板 (用户在冷静期内登录时显示)
   ==================================================================== */
.deletion-pending-veil {
    position: fixed; inset: 0; z-index: 4800;
    background: var(--bg-page);
    display: flex; align-items: center; justify-content: center;
    padding: 24px;
}
.deletion-pending-card {
    background: var(--card-bg, #fff);
    border-radius: 16px;
    padding: 32px 36px;
    width: 480px; max-width: 100%;
    box-shadow: var(--shadow-soft);
    text-align: center;
}
.deletion-pending-card .pending-icon {
    width: 48px; height: 48px; border-radius: 50%;
    background: rgba(245, 175, 2, 0.12);
    color: var(--vitality-orange);
    margin: 0 auto 14px;
    display: flex; align-items: center; justify-content: center;
}
.deletion-pending-card h2 {
    font-size: 20px; font-weight: 700;
    color: var(--text-main);
    margin: 0 0 8px;
}
.deletion-pending-card .pending-eta {
    font-size: 13px; color: var(--text-grey);
    margin-bottom: 6px;
}
.deletion-pending-card .pending-eta b {
    color: var(--vitality-orange); font-weight: 700;
    margin: 0 3px;
}
.deletion-pending-card .pending-note {
    font-size: 12px; color: var(--text-muted, var(--text-grey));
    margin: 18px 0 24px;
    line-height: 1.6;
}
.deletion-pending-card .pending-actions {
    display: flex; gap: 10px; justify-content: center;
}
.deletion-pending-card .btn-restore {
    flex: 1; padding: 11px 0;
    background: var(--vitality-blue); color: #fff;
    border: none; border-radius: 8px;
    font-weight: 700; font-size: 14px; cursor: pointer;
    max-width: 180px;
}
.deletion-pending-card .btn-export {
    flex: 1; padding: 11px 0;
    background: var(--bg-page);
    color: var(--text-main);
    border: 1px solid var(--border-soft); border-radius: 8px;
    font-weight: 600; font-size: 13px; cursor: pointer;
    max-width: 180px;
}
.deletion-pending-card .pending-signout {
    margin-top: 18px;
    font-size: 12px; color: var(--text-grey);
}
.deletion-pending-card .pending-signout a {
    color: var(--vitality-blue); text-decoration: none; font-weight: 600;
}

/* ============================================================================
   v2 新增: 进度视图 (批改进行中)
   ============================================================================
   触发: body.wb-is-generating
   位置: fixed 浮卡, 占据"非 sidebar+aside / 非 upload-zone / 非 header"空白区域
         (跟 #mainOrb 同一 root stacking, z-index 才有意义 — 旧的 absolute 在
         #exhibit-zone 内, 跟 fixed 的 orb 不同 stacking, z 失效永远被 orb 盖住)
   动画: drawer 开时右边界收缩, 用统一的 --anim-drawer-d / --ease-apple
   ============================================================================ */
/* 进度卡 = orb 正下方一行字 + 7 个步骤小圆 (不再是大面板)。
   fixed, 跟 orb 同水平中心、orb 下方; drawer 开时跟 orb 一起左移。
   触发: #exhibit-zone.wb-is-generating (祖先无关选择器, #progressView 是其子节点)。 */
.wb-progress {
    display: none;
    position: fixed;
    /* orb 垂直中心 + 半径(130) + 间距 */
    top: calc((var(--header-h) + var(--app-layout-height, 100vh) - var(--upload-zone-h) - var(--frame-content-offset) - var(--layout-gap)) / 2 + 156px);
    left: calc(50% + (var(--sidebar-rail-shell-w) + var(--sidebar-panel-w)) / 2);
    transform: translateX(-50%);
    flex-direction: column;
    align-items: center;
    gap: 18px;
    z-index: var(--z-content);
    pointer-events: none;
    text-align: center;
    transition: left var(--anim-drawer-d) var(--ease-apple),
                top var(--anim-drawer-d) var(--ease-apple);
}
.wb-is-generating .wb-progress { display: flex; }
/* 生成中(批改/资料生成): 上传区向下收起 → 把底部空间让出来, 进度文字落到那条带中心,
   避开外圈光环(原来 top=orb+156 会被光环套住, 重叠)。 */
#exhibit-zone.wb-is-generating ~ #upload-zone {
    transform: translateY(calc(100% + 40px));
    opacity: 0;
    pointer-events: none;
}
#exhibit-zone.wb-is-generating .wb-progress {
    top: calc(var(--app-layout-height, 100vh) - var(--frame-content-offset) - var(--upload-zone-h) / 2 - 28px);
}
body.wb-drawer-open .wb-progress {
    left: calc(50% + (var(--sidebar-rail-shell-w) + var(--sidebar-panel-w)) / 2 - (var(--drawer-w) + var(--frame-content-offset) + var(--layout-gap)) / 2);
}
/* 运行态 / 失败态 子块切换 (失败 class wb-grading-failed 加在 #exhibit-zone, 跟 wb-is-generating 同元素) */
.wb-progress-failed { display: none; }
.wb-grading-failed .wb-progress-running { display: none; }
.wb-grading-failed .wb-progress-failed { display: flex; }
.wb-grading-failed .wb-orb-glow { animation: none; opacity: 0.18; }

/* —— 运行态: 单行轮换文案 + 7 步小圆 —— */
.wb-progress-running { display: flex; flex-direction: column; align-items: center; gap: 16px; }
/* 中断按钮: 仅资料生成 (#exhibit-zone.wb-gen-material) 时显示; 批改维持左侧大按钮中断, 不受影响 */
.wb-progress-abort {
    display: none;
    pointer-events: auto;             /* .wb-progress 整块是 pointer-events:none, 这里要单独打开才可点 */
    cursor: pointer;
    color: #fff;
    background: var(--btn-danger);    /* 警示红实心: 强提示 + 一眼看出是按钮 */
    border: none;
    font-size: var(--font-sm); font-weight: 600;
    padding: 7px 20px; border-radius: 999px;
    box-shadow: 0 4px 16px var(--danger-soft-bg-strong);
    transition: opacity .2s ease, transform .15s ease;
}
.wb-progress-abort:hover { opacity: 0.9; }
.wb-progress-abort:active { transform: scale(0.97); }
.wb-gen-material .wb-progress-abort { display: inline-flex; }
/* 进入"排版装订"(成本已花出, 不可中断): 置灰禁用 + 不响应点击 */
.wb-progress-abort.is-locked,
.wb-progress-abort:disabled {
    background: rgba(127, 127, 127, 0.28);
    color: rgba(255, 255, 255, 0.92);
    box-shadow: none;
    cursor: not-allowed;
    pointer-events: none;
}
/* "无法中断"提示: 仅资料生成时占位, 默认随 hidden 收起 */
.wb-progress-abort-hint {
    margin-top: 8px;
    font-size: var(--font-xs);
    color: var(--text-grey);
    text-align: center;
    pointer-events: none;
}
.wb-progress-abort-hint[hidden] { display: none; }
.wb-progress-caption {
    font-size: var(--font-base);
    color: var(--vitality-blue);   /* 蓝色: 跟下方小圆/orb 同色系, 比黑柔和、比灰干净 */
    font-weight: 500;
    letter-spacing: 0.02em;
    min-height: 1.4em;
    transition: opacity .28s ease, transform .28s ease;
}
[data-theme="dark"] .wb-progress-caption { color: #5BA3F5; }   /* 暗色用更亮的蓝, 保证可读 */
.wb-progress-dots { display: flex; gap: 9px; }
.wb-progress-dot {
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--divider, rgba(127, 127, 127, 0.32));   /* 灰 = 未开始 */
    transition: background .3s ease, transform .3s ease;
}
.wb-progress-dot.done { background: var(--vitality-blue); }   /* 亮 = 已完成 */
.wb-progress-dot.active {                                     /* 闪烁 = 进行中 */
    background: var(--vitality-blue);
    animation: wbDotBlink 1s ease-in-out infinite;
}
@keyframes wbDotBlink {
    0%, 100% { opacity: 1; transform: scale(1); }
    50%      { opacity: 0.25; transform: scale(1.4); }
}

/* —— 失败态: 原因 + 重试/取消 —— */
.wb-progress-failed { flex-direction: column; align-items: center; gap: 14px; pointer-events: auto; }
.wb-progress-failed__icon {
    width: 40px; height: 40px; border-radius: 50%;
    background: rgba(229, 50, 56, 0.12); color: var(--brand-secondary, #E53238);
    display: flex; align-items: center; justify-content: center;
    font-size: 22px; font-weight: 700; line-height: 1;
}
.wb-progress-failed__title { font-size: var(--font-lg); font-weight: 600; color: var(--text-main); }
.wb-progress-failed__reason { font-size: var(--font-sm); color: var(--text-grey); max-width: 280px; line-height: 1.5; }
.wb-progress-failed__actions { display: flex; gap: 10px; margin-top: 4px; }
.wb-progress-btn {
    height: 36px; padding: 0 20px; border-radius: 999px;
    font-size: var(--font-sm); font-weight: 600; cursor: pointer; border: none;
    transition: opacity .2s ease, transform .1s ease, background .2s ease, color .2s ease;
}
.wb-progress-btn:active { transform: scale(0.97); }
.wb-progress-btn--retry { background: var(--vitality-blue); color: #fff; }
.wb-progress-btn--retry:hover { opacity: 0.9; }
.wb-progress-btn--cancel { background: transparent; color: var(--text-grey); border: 1px solid var(--divider); }
.wb-progress-btn--cancel:hover { color: var(--text-main); }


/* ===== 学习工具 形变菜单 (报告预览操作区, 2026-06 错题复盘接入) =====
   折叠=蓝玻璃胶囊(只露底部"学习工具"钮); 点击=同一块容器形变成矩形, 向上长出
   生成学习资料/生成刷题册/错题复盘 选项行, 底部钮文案换成"关闭"。data-open 驱动。
   注: 选项按钮原走 .wb-modal-report-preview-actions > .wb-modal-report-side-btn 直接子
   选择器, 搬进 .wb-tools 后用后代选择器重新声明样式 + 生成/重新生成图标状态。 */
/* 容器固定底部居中(不随学习资料状态在 center/corner 间跳位) */
.wb-modal-report-preview-actions[data-layout="center"],
.wb-modal-report-preview-actions[data-layout="corner"] {
    left: 50%; right: auto; transform: translateX(-50%);
}
/* 父容器 pointer-events:none, 原只给直接子 > button 恢复; 菜单包了一层 div,
   这里给 .wb-tools 子树恢复点击, 否则触发器点不动。 */
.wb-modal-report-preview-actions > .wb-tools { pointer-events: auto; }

/* 单块蓝色毛玻璃容器: 折叠=胶囊(只露底部切换钮), 展开=矩形(向上长出选项行)。
   宽度+圆角做形变动画, 高度由选项区 max-height 撑开 → 胶囊⇄矩形 morph。 */
.wb-tools {
    position: relative; box-sizing: border-box;
    width: 160px; padding: 0;
    display: flex; flex-direction: column; overflow: hidden;
    border-radius: 999px;
    background: rgba(0, 100, 210, 0.72);
    color: #fff; text-shadow: 0 1px 2px rgba(0, 28, 72, 0.34);
    -webkit-backdrop-filter: blur(12px) saturate(180%);
    backdrop-filter: blur(12px) saturate(180%);
    box-shadow: 0 12px 30px -12px rgba(0, 78, 196, 0.55), 0 4px 12px -4px rgba(0, 40, 110, 0.38);
    transition: border-radius 0.34s cubic-bezier(.32, .72, 0, 1),
                padding 0.34s cubic-bezier(.32, .72, 0, 1);
}
/* 折叠态 padding 0 → 整块=切换钮 40px 高(与"重新生成"单按钮等高); 展开态加回 padding 给选项行留白 */
.wb-tools[data-open="true"] { padding: 6px; border-radius: 14px; }
/* 复盘认领等场景需整块隐藏: 必须 !important 覆盖上面的 display:flex, 否则 hidden 属性无效 */
.wb-tools[hidden] { display: none !important; }

/* 选项区: 折叠 max-height 0, 展开长出。折叠态 pointer-events:none, 杜绝被压扁的
   选项按钮漏出原生 title 气泡(选项各自带 title, 不关掉鼠标扫到边缘会弹提示)。 */
.wb-tools-options {
    display: flex; flex-direction: column; gap: 2px;
    max-height: 0; opacity: 0; overflow: hidden; margin-bottom: 0; pointer-events: none;
    transition: max-height 0.34s cubic-bezier(.32, .72, 0, 1),
                opacity 0.2s ease,
                margin-bottom 0.34s cubic-bezier(.32, .72, 0, 1);
}
.wb-tools[data-open="true"] .wb-tools-options { max-height: 150px; opacity: 1; margin-bottom: 2px; pointer-events: auto; }

/* 选项行 + 底部切换钮: 透明底白字, 无边框线, hover 白色叠层 */
.wb-tools .wb-modal-report-side-btn,
.wb-tools-toggle {
    display: flex; align-items: center; gap: 9px; width: 100%; height: 40px;
    justify-content: flex-start; padding: 0 14px;
    border: 0; border-radius: 10px; background: transparent; color: #fff;
    font-size: 13.5px; font-weight: 600; line-height: 1; white-space: nowrap;
    cursor: pointer; position: relative; box-shadow: none;
    transition: background 0.15s ease;
}
.wb-tools .wb-modal-report-side-btn:not([hidden]) { display: flex; }
.wb-tools .wb-modal-report-side-btn svg,
.wb-tools-toggle svg { width: 16px; height: 16px; flex: 0 0 auto; }
.wb-tools .wb-modal-report-side-btn:hover:not(:disabled):not(.is-loading),
.wb-tools-toggle:hover { background: rgba(255, 255, 255, 0.16); transform: none; }
.wb-tools .wb-modal-report-side-btn:disabled { opacity: .45; cursor: default; }

/* 折叠态底部钮居中显示"学习工具"; 展开态左对齐显示"关闭"(双图标/双文案切换) */
.wb-tools[data-open="false"] .wb-tools-toggle { justify-content: center; border-radius: 999px; }
/* 折叠态切换钮跟胶囊同形; 去掉鼠标点击留下的方角默认轮廓(它按 10px 画, 和胶囊不匹配),
   键盘 Tab 才给一道贴合形状的内描边(outline-offset 负值=画在内侧, 不被 overflow 裁掉)。 */
.wb-tools-toggle:focus,
.wb-tools .wb-modal-report-side-btn:focus { outline: none; }
.wb-tools-toggle:focus-visible,
.wb-tools .wb-modal-report-side-btn:focus-visible { outline: 2px solid rgba(255, 255, 255, 0.8); outline-offset: -4px; }
.wb-tools .wb-tools-ico-close, .wb-tools .wb-tools-lbl-close { display: none; }
.wb-tools[data-open="true"] .wb-tools-ico-open,
.wb-tools[data-open="true"] .wb-tools-lbl-open { display: none; }
.wb-tools[data-open="true"] .wb-tools-ico-close { display: inline-block; }
.wb-tools[data-open="true"] .wb-tools-lbl-close { display: inline; }
/* 菜单内学习资料按钮的 生成/重新生成 图标状态(原直接子选择器不命中嵌套, 重新声明) */
.wb-tools .wb-modal-report-side-btn .wb-btn-icon--create { display: inline-flex; }
.wb-tools .wb-modal-report-side-btn .wb-btn-icon--regen { display: none; }
.wb-tools .wb-modal-report-side-btn[data-btn-state="download"] .wb-btn-icon--create,
.wb-tools .wb-modal-report-side-btn[data-btn-state="running"] .wb-btn-icon--create { display: none; }
.wb-tools .wb-modal-report-side-btn[data-btn-state="download"] .wb-btn-icon--regen,
.wb-tools .wb-modal-report-side-btn[data-btn-state="running"] .wb-btn-icon--regen { display: inline-flex; }

/* 单按钮模式(学习资料/刷题册预览): 不显示学习工具菜单壳, 只留一个"重新生成X"玻璃胶囊。
   报告预览才用上面的形变菜单; 看具体资料时底部只给它自己的重新生成入口。 */
.wb-tools[data-mode="single"] {
    width: auto; padding: 0; border-radius: 0; overflow: visible;
    background: transparent; box-shadow: none;
    -webkit-backdrop-filter: none; backdrop-filter: none;
}
.wb-tools[data-mode="single"] .wb-tools-toggle { display: none; }
.wb-tools[data-mode="single"] .wb-tools-options {
    max-height: none; opacity: 1; overflow: visible; margin-bottom: 0; pointer-events: auto;
}
.wb-tools[data-mode="single"] .wb-modal-report-side-btn {
    width: 160px; height: 40px; padding: 0 22px; justify-content: center;
    border-radius: 999px; font-size: 13.5px;
    background: rgba(0, 100, 210, 0.72); color: #fff;
    text-shadow: 0 1px 2px rgba(0, 28, 72, 0.38);
    -webkit-backdrop-filter: blur(6px) saturate(180%);
    backdrop-filter: blur(6px) saturate(180%);
    box-shadow: 0 10px 26px -10px rgba(0, 78, 196, 0.50), 0 3px 8px -3px rgba(0, 56, 150, 0.34);
    transition: background 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease;
}
.wb-tools[data-mode="single"] .wb-modal-report-side-btn:hover:not(:disabled):not(.is-loading) {
    background: rgba(0, 100, 210, 0.84); transform: translateY(-1px);
}

/* 报告预览菜单(非单按钮模式): 给可见选项自动编号, 引导推荐顺序
   (错题复盘 → 生成学习资料 → 生成刷题册)。编号取代动作图标以省 160px 宽度;
   申论等没有错题复盘的, 计数器自动从 1 开始数它自己有的步骤。 */
.wb-tools:not([data-mode="single"]) .wb-tools-options { counter-reset: tool-step; }
.wb-tools:not([data-mode="single"]) .wb-tools-options > .wb-modal-report-side-btn:not([hidden]) {
    counter-increment: tool-step;
}
.wb-tools:not([data-mode="single"]) .wb-tools-options > .wb-modal-report-side-btn > svg { display: none; }
.wb-tools:not([data-mode="single"]) .wb-tools-options > .wb-modal-report-side-btn::before {
    content: counter(tool-step);
    flex: 0 0 auto; width: 18px; height: 18px; border-radius: 50%;
    background: rgba(255, 255, 255, 0.22); color: #fff;
    font-size: 11px; font-weight: 700; line-height: 1;
    display: inline-flex; align-items: center; justify-content: center;
}

/* ===== 错题复盘认领(原生, 嵌报告预览窗内) =====
   顶栏(返回/提交)与底栏(上/下一题)固定不滚, 中间题目滚动; 背景/文字与报告预览一致。
   认领期间隐藏顶部下载按钮(此刻还没有复盘方案可下)。 */
body.wb-review-claiming #reportDownloadBtn { display: none; }
body.wb-review-claiming .wb-modal-report-preview-body { padding: 0; }
.wb-review-pane { display: flex; flex-direction: column; height: 100%; min-height: 60vh; color: var(--text-main); }
/* v2 原生认领器: 顶/底固定, 中间滚动 */
.wb-review-top { flex: 0 0 auto; }
.wb-rv-step { font-size: 13px; color: var(--text-grey); font-weight: 600; }
.wb-rv-bars { flex: 0 0 auto; display: flex; gap: 5px; padding: 0 18px 10px; }
.wb-rv-bars i { height: 5px; flex: 1; border-radius: 999px; background: rgba(15, 23, 42, 0.1); }
.wb-rv-bars i.done, .wb-rv-bars i.cur { background: var(--brand-primary); }
.wb-review-foot { display: block; flex: 0 0 auto; background: var(--chrome-solid-bg, #fff); box-shadow: 0 -6px 22px rgba(15, 23, 42, 0.06); border-radius: 16px 16px 0 0; padding: 16px 18px; }
.wb-rv-kicker { display: flex; align-items: center; gap: 10px; }
.wb-rv-kicker .bar { width: 4px; height: 26px; background: var(--brand-primary); border-radius: 3px; }
.wb-rv-kicker h1 { font-size: 22px; font-weight: 800; margin: 0; color: var(--text-main); }
.wb-rv-capdesc { font-size: 14px; color: var(--text-grey); line-height: 1.7; margin: 9px 0 0 14px; }
.wb-rv-meta { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 13px; color: var(--text-grey); margin: 13px 0 0 14px; }
.wb-rv-meta .pill { background: rgba(15, 23, 42, 0.05); border-radius: 999px; padding: 3px 11px; font-weight: 600; }
.wb-rv-meta .peek { color: var(--brand-primary); font-weight: 600; cursor: pointer; }
.wb-rv-qlist { margin: 4px 0 0 14px; }
.wb-rv-qitem { margin-bottom: 8px; }
.wb-rv-qitem:last-child { margin-bottom: 0; }
.wb-rv-qrow { display: flex; align-items: center; gap: 10px; padding: 10px 13px; background: rgba(15, 23, 42, 0.035); border-radius: 10px; cursor: pointer; transition: background 0.15s ease; font-size: 13px; }
.wb-rv-qrow:hover { background: rgba(15, 23, 42, 0.06); }
.wb-rv-qn { font-weight: 700; white-space: nowrap; color: var(--text-main); }
.wb-rv-qsnip { flex: 1 1 auto; min-width: 0; color: var(--text-grey); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wb-rv-qview { color: var(--brand-primary); font-weight: 600; white-space: nowrap; }
.wb-rv-qdetail { display: none; padding: 12px 14px 2px; font-size: 13.5px; line-height: 1.9; color: var(--text-main); }
.wb-rv-qdetail.open { display: block; }
.wb-rv-qans { font-size: 12.5px; color: var(--text-grey); margin-bottom: 6px; }
.wb-rv-qcustom { margin-top: 10px; }
.wb-rv-qcustom-in { width: 100%; height: 38px; border: 0; border-radius: 9px; background: rgba(15, 23, 42, 0.05); padding: 0 12px; font-size: 13px; color: var(--text-main); outline: none; box-sizing: border-box; }
.wb-rv-qcustom-in:focus { background: var(--accent-soft-bg); }
.wb-rv-qcustom-in::placeholder { color: var(--text-3, rgba(25, 25, 25, 0.42)); }
.wb-rv-stem { margin-top: 4px; }
.wb-rv-opts { margin-top: 6px; display: flex; flex-direction: column; gap: 5px; }
.wb-rv-hint { font-size: 13px; color: var(--text-3, rgba(25, 25, 25, 0.42)); line-height: 1.7; margin: 22px 0 0 14px; }
.wb-rv-q { font-size: 14.5px; font-weight: 700; line-height: 1.6; margin: 0 0 12px; min-height: 24px; transition: opacity 0.18s ease; color: var(--text-main); }
.wb-rv-q.isdesc { font-weight: 600; }
.wb-rv-q.isdesc .lab { color: var(--brand-primary); font-weight: 800; margin-right: 6px; }
.wb-rv-optzone { position: relative; }
.wb-rv-chips { display: flex; gap: 9px; transition: opacity 0.2s ease; }
.wb-rv-chips.hide { opacity: 0; pointer-events: none; }
.wb-rv-chip { flex: 1 1 0; white-space: nowrap; font-size: 13.5px; font-weight: 600; padding: 11px 6px; border-radius: 12px; background: rgba(15, 23, 42, 0.05); color: var(--text-grey); cursor: pointer; text-align: center; transition: background 0.15s ease, color 0.15s ease; user-select: none; }
.wb-rv-chip:hover { background: var(--accent-soft-bg); color: var(--brand-primary); }
.wb-rv-chip.on { background: var(--brand-primary); color: #fff; }
.wb-rv-chip.other { color: var(--brand-primary); background: var(--accent-soft-bg); }
.wb-rv-otherbox { position: absolute; inset: 0; opacity: 0; transform: translateY(8px); pointer-events: none; transition: opacity 0.22s ease, transform 0.22s ease; }
.wb-rv-otherbox.show { opacity: 1; transform: none; pointer-events: auto; }
.wb-rv-otherbox textarea { width: 100%; height: 100%; resize: none; border: 0; border-radius: 12px; background: rgba(15, 23, 42, 0.05); padding: 12px 14px; font-size: 14px; line-height: 1.6; color: var(--text-main); outline: none; font-family: inherit; box-sizing: border-box; }
.wb-rv-nav { display: flex; align-items: center; gap: 14px; margin-top: 14px; }
.wb-rv-navlink { font-size: 14px; color: var(--text-grey); font-weight: 600; cursor: pointer; user-select: none; }
.wb-rv-navsp { flex: 1 1 auto; }
.wb-rv-done { font-size: 13px; color: var(--text-3, rgba(25, 25, 25, 0.42)); }
.wb-review-submit.sm { height: 34px; padding: 0 18px; }
.wb-rv-qlist-t { font-size: 13px; font-weight: 600; color: var(--text-grey); margin: 16px 0 0 14px; }
.wb-rv-confirm, .wb-rv-overlay { display: none; position: absolute; inset: 0; z-index: 30; align-items: center; justify-content: center; }
.wb-rv-confirm { background: rgba(0, 0, 0, 0.42); }
.wb-rv-confirm.open, .wb-rv-overlay.open { display: flex; }
.wb-rv-confirm-card { background: var(--chrome-solid-bg, #fff); border-radius: 16px; padding: 22px 22px 16px; max-width: 340px; width: calc(100% - 44px); }
.wb-rv-confirm-card h3 { font-size: 17px; font-weight: 700; margin: 0 0 12px; color: var(--text-main); }
.wb-rv-confirm-card p { font-size: 14px; color: var(--text-grey); line-height: 1.75; margin: 0 0 20px; }
.wb-rv-confirm-btns { display: flex; gap: 10px; justify-content: flex-end; }
.wb-rv-overlay { background: rgba(252, 252, 254, 0.88); flex-direction: column; gap: 16px; color: var(--text-main); font-weight: 600; }
[data-theme="dark"] .wb-rv-overlay { background: rgba(20, 20, 20, 0.88); }
.wb-rv-spin { width: 22px; height: 22px; border: 3px solid rgba(0, 100, 210, 0.2); border-top-color: var(--brand-primary); border-radius: 50%; animation: wbRvSp 0.8s linear infinite; display: inline-block; vertical-align: -5px; margin-right: 8px; }
.wb-rv-spin.big { width: 38px; height: 38px; margin: 0; }
@keyframes wbRvSp { to { transform: rotate(360deg); } }
.wb-review-top {
    flex: 0 0 auto; display: flex; align-items: center; justify-content: space-between;
    gap: 12px; padding: 12px 18px;
}
.wb-review-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: 6px 18px 18px; }
.wb-review-count { font-size: 12.5px; color: var(--text-grey); }
/* 顶/底按钮: 次要(返回/上一题)灰底, 主要(提交/下一题)品牌蓝, 均无边框线 */
.wb-review-back, .wb-review-prev {
    height: 36px; padding: 0 18px; border: 0; border-radius: 999px;
    background: rgba(25, 25, 25, 0.05); color: var(--text-grey);
    font-size: 13.5px; font-weight: 600; cursor: pointer; transition: background 0.15s ease;
}
.wb-review-back:hover, .wb-review-prev:hover:not(:disabled) { background: rgba(25, 25, 25, 0.09); }
.wb-review-submit, .wb-review-next {
    height: 36px; padding: 0 20px; border: 0; border-radius: 999px;
    background: var(--brand-primary); color: #fff;
    font-size: 13.5px; font-weight: 600; cursor: pointer; transition: background 0.15s ease;
}
.wb-review-submit:hover:not(:disabled), .wb-review-next:hover:not(:disabled) { background: var(--brand-primary-hover); }
.wb-review-submit:disabled, .wb-review-next:disabled { opacity: 0.4; cursor: default; }
/* 题卡: 白色卡片浮在预览底色上(同报告页观感) */
/* 题目内容直接落在预览底色上, 不再套白底卡片/阴影(与报告预览一致) */
.wb-review-card {
    background: transparent; box-shadow: none; padding: 8px 0 12px;
    max-width: 760px; margin: 0 auto;
}
.wb-review-qhead { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; margin-bottom: 14px; }
.wb-review-qno { font-weight: 700; font-size: 15px; color: var(--text-main); }
.wb-review-qans { font-size: 12.5px; white-space: nowrap; }
.wb-review-qans .ok { color: var(--vitality-green-hover, #6F9F12); }
.wb-review-qans .no { color: var(--brand-secondary, #E53238); }
.wb-review-stem { font-size: 14.5px; line-height: 1.95; color: #2b2b2b; }
.wb-review-stem p { margin: 7px 0; }
.wb-review-opts { margin-top: 22px; display: flex; flex-direction: column; gap: 8px; }
.wb-review-opt { font-size: 14.5px; line-height: 1.7; padding: 9px 14px; border-radius: 10px; color: #2b2b2b; background: rgba(25, 25, 25, 0.03); }
.wb-review-opt.correct { background: rgba(134, 184, 23, 0.12); color: var(--vitality-green-hover, #6F9F12); font-weight: 700; }
.wb-review-opt.wrong { background: rgba(229, 50, 56, 0.10); color: var(--brand-secondary, #E53238); font-weight: 700; }
.wb-review-chips { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 28px; }
.wb-review-chip { font-size: 13.5px; padding: 8px 16px; border-radius: 999px; border: 0; color: var(--text-grey); background: rgba(25, 25, 25, 0.05); cursor: pointer; transition: background 0.15s ease, color 0.15s ease; }
.wb-review-chip:hover, .wb-review-chip.on { background: var(--brand-primary); color: #fff; }
.wb-review-custom { margin-top: 12px; }
.wb-review-custom input { width: 100%; padding: 11px 14px; border: 0; border-radius: 10px; background: rgba(25, 25, 25, 0.05); font-size: 14px; color: var(--text-main); outline: none; box-sizing: border-box; }
.wb-review-custom input:focus { background: rgba(0, 100, 210, 0.08); }
.wb-review-method { margin-top: 18px; background: rgba(0, 100, 210, 0.05); border-radius: 12px; padding: 16px 18px; }
.wb-review-method-t { font-size: 12px; font-weight: 700; color: var(--brand-primary); margin-bottom: 8px; letter-spacing: 0.4px; }
.wb-review-method-b { font-size: 14px; color: #2b2b2b; line-height: 1.95; white-space: pre-wrap; }
.wb-review-loading { text-align: center; color: var(--text-grey); padding: 60px 0; font-size: 14px; }
/* 锁定横幅 + 扣点解锁按钮 */
.wb-review-lockbar { max-width: 760px; margin: 0 auto 12px; background: rgba(245, 175, 2, 0.14); color: #8a6500; font-size: 13px; line-height: 1.7; border-radius: 10px; padding: 11px 14px; }
.wb-review-unlock { margin-left: 8px; border: 0; border-radius: 999px; background: var(--brand-primary); color: #fff; font-size: 12.5px; font-weight: 600; padding: 5px 14px; cursor: pointer; transition: background 0.15s ease; }
.wb-review-unlock:hover:not(:disabled) { background: var(--brand-primary-hover); }
.wb-review-unlock:disabled { opacity: 0.5; cursor: default; }
/* 暗黑模式: 批改前端内的错题复盘面板 */
[data-theme="dark"] .wb-review-stem { color: var(--text-main) !important; }
[data-theme="dark"] .wb-review-opt:not(.correct):not(.wrong) { color: rgba(247,247,247,.88) !important; }
[data-theme="dark"] .wb-review-method-b { color: var(--text-main) !important; }
[data-theme="dark"] .wb-review-loading { color: rgba(247,247,247,.55); }
/* v2 · 按考点分组 + 确认卡 + 重制 */
.wb-review-pane { position: relative; }
.wb-review-status { font-size: 12.5px; color: var(--text-grey); flex: 1 1 auto; text-align: center; }
.wb-review-group { background: var(--chrome-solid-bg, #fff); border-radius: 14px; box-shadow: 0 4px 16px rgba(15,23,42,.06); padding: 16px 18px 18px; margin: 0 auto 16px; max-width: 760px; }
.wb-review-ghd { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; margin-bottom: 2px; }
.wb-review-gtag { font-size: 16px; font-weight: 800; color: var(--text-main); }
.wb-review-gsub { font-size: 12.5px; color: var(--text-grey); }
.wb-review-gq { padding: 14px 0; border-top: 1px solid rgba(25,25,25,.06); }
.wb-review-gq:first-of-type { border-top: 0; }
[data-theme="dark"] .wb-review-gq { border-top-color: rgba(247,247,247,.08); }
.wb-review-gq .wb-review-qhead { margin-bottom: 8px; }
.wb-review-gq .wb-review-opts { margin-top: 10px; }
.wb-review-qbadge { display: inline-block; font-size: 11.5px; color: var(--brand-primary); background: rgba(0,100,210,.08); border-radius: 999px; padding: 2px 10px; margin-top: 8px; }
.wb-review-single { margin-top: 8px; }
.wb-review-single-toggle { font-size: 12.5px; color: var(--brand-primary); cursor: pointer; user-select: none; }
.wb-review-single-box { display: none; margin-top: 8px; }
.wb-review-single-box.open { display: block; }
.wb-review-single-box .wb-review-chips { margin-top: 4px; }
.wb-review-gpick { margin-top: 14px; padding-top: 14px; border-top: 1.5px dashed rgba(0,100,210,.18); }
.wb-review-gpick-t { font-size: 13px; font-weight: 700; margin-bottom: 9px; color: var(--text-main); }
.wb-review-gpick .wb-review-chips { margin-top: 0; }
.wb-review-chip.skip { opacity: .8; }
.wb-review-custom[hidden], .wb-review-method[hidden] { display: none; }
.wb-review-confirm { display: none; position: absolute; inset: 0; background: rgba(0,0,0,.42); z-index: 30; align-items: center; justify-content: center; }
.wb-review-confirm.open { display: flex; }
.wb-review-confirm-card { background: var(--chrome-solid-bg, #fff); border-radius: 16px; padding: 24px 24px 18px; max-width: 360px; width: calc(100% - 40px); box-shadow: 0 12px 40px rgba(0,0,0,.22); }
.wb-review-confirm-card h3 { font-size: 17px; font-weight: 700; margin: 0 0 12px; color: var(--text-main); }
.wb-review-confirm-card p { font-size: 14px; line-height: 1.75; color: var(--text-grey); margin: 0 0 20px; }
.wb-review-confirm-btns { display: flex; gap: 10px; justify-content: flex-end; }
.wb-review-submit.danger { background: var(--brand-secondary, #E53238); }
.wb-review-submit.danger:hover:not(:disabled) { background: #c4282f; }

/* ── 体验批改(新用户首次引导)在线答题窗 ── 复用 .wb-review-pane 接管骨架, 只加内容样式 ── */
.wb-intro-pick { padding: 6px 14px 0; }
.wb-intro-sub { font-size: 14px; color: var(--text-grey); line-height: 1.7; margin: 12px 0 22px 14px; }
.wb-intro-sub b { color: var(--brand-primary); font-weight: 700; }
.wb-intro-mods { display: flex; flex-wrap: wrap; gap: 12px; }
.wb-intro-mod { display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; gap: 4px; min-width: 140px; min-height: 60px; padding: 14px 22px; border: 0; border-radius: 14px; background: rgba(15, 23, 42, 0.05); color: var(--text-main); font-size: 15px; font-weight: 700; cursor: pointer; transition: background 0.15s ease, transform 0.1s ease; }
.wb-intro-mod:hover { background: var(--accent-soft-bg); color: var(--brand-primary); }
.wb-intro-mod:active { transform: scale(0.98); }
.wb-intro-mod.disabled { background: rgba(15, 23, 42, 0.035); color: var(--text-3, rgba(25, 25, 25, 0.42)); cursor: not-allowed; }
.wb-intro-mod-note { font-size: 11.5px; font-weight: 600; color: var(--text-3, rgba(25, 25, 25, 0.42)); }

.wb-intro-q { padding: 2px 2px 0; }
.wb-intro-stem { font-size: 15.5px; line-height: 1.9; color: var(--text-main); margin-bottom: 18px; }
.wb-intro-stem p { margin: 0 0 8px; }
.wb-intro-opts { display: flex; flex-direction: column; gap: 10px; }
.wb-intro-opt { display: flex; align-items: center; gap: 12px; width: 100%; text-align: left; padding: 13px 15px; border: 0; border-radius: 12px; background: var(--chip-bg); color: var(--text-main); font-size: 14.5px; cursor: pointer; transition: background 0.15s ease, box-shadow 0.15s ease; }
.wb-intro-opt:hover { background: var(--accent-soft-bg); }
.wb-intro-opt .l { flex: 0 0 auto; width: 26px; height: 26px; display: flex; align-items: center; justify-content: center; border-radius: 8px; background: rgba(15, 23, 42, 0.08); font-weight: 700; font-size: 14px; color: var(--text-grey); }
.wb-intro-opt .t { flex: 1 1 auto; line-height: 1.6; }
.wb-intro-opt.on { background: var(--brand-primary); color: #fff; font-weight: 600; }
.wb-intro-opt.on .l { background: transparent; color: #fff; }
.wb-intro-foothint { text-align: center; font-size: 12px; color: var(--text-3, rgba(25, 25, 25, 0.42)); margin-top: 10px; }
/* 图片题(图形推理): 题图 + 一行 ABCD 按钮 */
.wb-intro-fig { margin: 2px 0 16px; text-align: center; }
.wb-intro-fig img { max-width: min(100%, 600px); max-height: 340px; width: auto; height: auto; object-fit: contain; border-radius: 10px; background: #fff; }
.wb-intro-opts.row { flex-direction: row; gap: 12px; }
.wb-intro-opts.row .wb-intro-opt { flex: 1 1 0; }
.wb-intro-opt.compact { justify-content: center; padding: 14px 8px; }
.wb-intro-opt.compact .l { font-size: 16px; background: transparent; width: auto; min-width: 0; }
.wb-review-foot .wb-intro-opts { margin-bottom: 12px; }

/* 提交陪跑: 落左侧信息区 + 气泡 + 填名 + 批改 */
body.wb-intro-submit #upload-zone, body.wb-intro-submit #file-list-container { display: none; }
/* 体验批改接管时: 右侧学员历史栏无意义 → 隐藏, 左侧预览撑满 */
body.wb-intro-active .wb-modal-report-history { display: none; }
body.wb-intro-active .wb-modal-report-content > .wb-modal-report-preview { margin-right: 0; }
.wb-review-foot[hidden] { display: none; }   /* 选择/选模块屏: 底部无选项时, 让空壳阴影栏真正隐藏 */
.wb-intro-filled { margin-top: 4px; background: var(--chrome-solid-bg, #fff); border-radius: 14px; padding: 6px 16px; box-shadow: var(--float-shadow-sm); }
.wb-intro-filled-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 11px 0; font-size: 13px; }
.wb-intro-filled-row .k { color: var(--text-grey); white-space: nowrap; }
.wb-intro-filled-row .v { color: var(--text-main); font-weight: 600; display: flex; align-items: center; gap: 8px; text-align: right; }
.wb-intro-filled-row .v .tag { font-size: 11px; font-weight: 600; color: var(--brand-primary); background: var(--accent-soft-bg); border-radius: 6px; padding: 2px 8px; }
.wb-intro-hl { box-shadow: 0 0 0 2px var(--brand-primary); }
.wb-intro-bubble { position: fixed; z-index: 100000; max-width: 280px; background: var(--brand-primary); color: #fff; border-radius: 12px; padding: 12px 14px; box-shadow: var(--float-shadow-sm); }
.wb-intro-bubble-text { font-size: 13.5px; line-height: 1.6; }
.wb-intro-bubble-btn { margin-top: 10px; background: #fff; color: var(--brand-primary); border: 0; border-radius: 8px; padding: 6px 16px; font-size: 13px; font-weight: 600; cursor: pointer; }
.wb-intro-grading { position: fixed; inset: 0; z-index: 100001; background: rgba(252, 252, 254, 0.9); display: flex; align-items: center; justify-content: center; }
[data-theme="dark"] .wb-intro-grading { background: rgba(20, 20, 20, 0.9); }
.wb-intro-grading-card { text-align: center; max-width: 320px; padding: 0 20px; }
.wb-intro-grading-t { font-size: 15px; font-weight: 600; color: var(--text-main); margin-top: 14px; }
.wb-intro-grading-s { font-size: 13px; color: var(--text-grey); line-height: 1.7; margin-top: 8px; }
/* 开局选择(我自己有题 / 系统出题) + 粉笔下载引导 */
.wb-intro-choice { display: flex; flex-direction: column; gap: 12px; }
.wb-intro-choice-card { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; text-align: left; width: 100%; padding: 16px 18px; border: 0; border-radius: 14px; background: rgba(15, 23, 42, 0.05); cursor: pointer; transition: background 0.15s ease; }
.wb-intro-choice-card:hover { background: var(--accent-soft-bg); }
.wb-intro-choice-card.primary { background: var(--accent-soft-bg); box-shadow: inset 0 0 0 2px var(--brand-primary); }
.wb-intro-choice-t { font-size: 15px; font-weight: 700; color: var(--text-main); }
.wb-intro-choice-card.primary .wb-intro-choice-t { color: var(--brand-primary); }
.wb-intro-choice-d { font-size: 12.5px; color: var(--text-grey); }
.wb-intro-steps { margin: 10px 0 0; padding-left: 20px; }
.wb-intro-steps li { font-size: 14px; line-height: 2; color: var(--text-main); }
.wb-intro-steps b { color: var(--brand-primary); font-weight: 600; }
.wb-intro-guide-actions { display: flex; align-items: center; justify-content: space-between; margin-top: 20px; }
