        #classicQuestionnaireExport { gap: 14px; }
        #exportQuestionnaireWordBtn { min-height: 44px; flex-shrink: 0; }
        @media (max-width: 720px) {
            #classicQuestionnaireExport { align-items: stretch !important; }
            #classicQuestionnaireExport > div, #exportQuestionnaireWordBtn { width: 100%; }
        }

/* Keep the classic workspace visually consistent on wide/high-DPI screens.
   Chromium stores page zoom per hostname, so the same 1600px fixed canvas can
   look about 20% smaller after switching between Shanghai, Chongqing and the
   overseas hostname.  A viewport-relative canvas and root scale preserve the
   original overseas presentation without changing any business controls. */
@media (min-width: 1600px) {
    html { font-size: clamp(16px, 0.7142857vw, 20px); }
    body:not(.desktop-mode) .main-container,
    body:not(.desktop-mode) .site-footer {
        width: 70vw;
        max-width: 2200px;
    }
}

/* A narrow desktop window is still a supported viewport. Preserve the original
   desktop view state machine, but turn its sidebar into a compact bottom rail. */
@media (max-width: 720px) {
    body.desktop-mode .navbar { left: 0 !important; width: 100% !important; }
    body.desktop-mode .navbar-brand { max-width: 100%; font-size: 18px; min-width: 0; }
    body.desktop-mode .navbar-brand small,
    body.desktop-mode .desktop-version-badge { display: none !important; }
    body.desktop-mode .main-container { margin-left: 0 !important; margin-right: 0 !important; width: 100% !important; max-width: 100% !important; padding: 12px 12px calc(90px + env(safe-area-inset-bottom, 0px)) !important; }
    body.desktop-mode #desktopSidebar { top: auto; bottom: 0; left: 0; width: 100%; height: auto; min-height: 56px; flex-direction: row; padding: 0 0 env(safe-area-inset-bottom, 0px); border-top: 1px solid #dce4f1; border-right: 0; z-index: 1030; }
    body.desktop-mode .desktop-sidebar-nav { display: flex; flex: 1; gap: 3px; padding: 4px; }
    body.desktop-mode .sidebar-bottom { padding: 4px; border: 0; margin: 0; }
    body.desktop-mode .sidebar-item { flex: 1; min-height: 48px; margin: 0; padding: 8px; gap: 5px; justify-content: center; white-space: nowrap; font-size: 13px; }
    body.desktop-mode .desktop-statusbar { display: none !important; }
    body.desktop-mode .form-control, body.desktop-mode .form-select { font-size: 16px; min-height: 44px; }
    body.desktop-mode .card-body { min-width: 0; }
    body.desktop-mode #desktopSidebar { align-items:stretch; min-height:64px; }
    body.desktop-mode .desktop-sidebar-nav { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); min-width:0; }
    body.desktop-mode .sidebar-bottom { flex:0 0 68px; display:flex; min-width:0; }
    body.desktop-mode .sidebar-item { min-width:0; min-height:54px; flex-direction:column; gap:2px; padding:5px 2px; font-size:10px; line-height:1.15; text-align:center; white-space:normal; }
    body.desktop-mode .sidebar-item i { width:auto; font-size:16px; }
    body.desktop-mode .sidebar-item span { overflow-wrap:anywhere; }
}

/* Region entrances and the existing controls need full-width tap targets on phones. */
@media (max-width: 600px) {
    body:not(.desktop-mode) .navbar .container-fluid { grid-template-columns: 1fr !important; }
    body:not(.desktop-mode) .navbar .nav-actions {
        display: grid !important;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 8px;
        width: 100%;
    }
    body:not(.desktop-mode) .navbar .nav-actions > .btn {
        width: 100%;
        min-width: 0;
        min-height: 42px;
        padding: 8px 4px;
        white-space: nowrap;
        word-break: keep-all;
        font-size: 12px;
    }
}

/* Canonical three-region polish. This override is shipped with the same
   fingerprint on Shanghai, Chongqing and overseas so the configuration modal
   cannot silently fall back to a dull/stale presentation on one region. */
#ratioConfigModal .modal-content {
    border: 1px solid rgba(37, 99, 235, .18);
    border-radius: 18px;
    overflow: hidden;
    box-shadow: 0 24px 70px rgba(15, 23, 42, .22);
}
#ratioConfigModal .modal-header {
    background: linear-gradient(115deg, #173f9d 0%, #2563d9 52%, #3b82f6 100%);
    color: #fff;
    border-bottom: 0;
    min-height: 58px;
}
#ratioConfigModal .modal-header .btn-close { filter: brightness(0) invert(1); opacity: .9; }
#ratioConfigModal .nav-tabs { background: #f8fbff; border-bottom-color: #dbeafe; }
#ratioConfigModal .nav-tabs .nav-link.active { color: #1d4ed8; font-weight: 700; border-top-color: #60a5fa; }
#ratioConfigModal .question-config-card,
#ratioConfigModal .question-item,
#ratioConfigModal .accordion-item { border-color: #dbeafe; }
.whole-text-generation-actions {
    display: inline-flex;
    flex: 0 1 460px;
    max-width: 460px;
    min-width: 260px;
    flex-direction: column;
    align-items: flex-start;
    gap: 4px;
}
.whole-text-generation-button { width: auto !important; min-width: 0; white-space: nowrap; box-shadow: 0 5px 14px rgba(37, 99, 235, .18); }
.whole-text-generation-actions #wholeTextGenerationHelp { line-height: 1.35; }
.whole-text-generation-status { font-weight: 600; line-height: 1.35; }
.text-pool-direct-action { display: inline-flex; align-items: flex-start; flex: 0 0 auto; }
#textAnswerBatchButton { white-space: nowrap; }
@media (max-width: 767.98px) {
    .whole-text-generation-actions { flex: 1 1 100%; max-width: 100%; min-width: 0; }
    .whole-text-generation-button, .text-pool-direct-action, #textAnswerBatchButton { width: 100% !important; }
    .text-pool-direct-action { flex-basis: 100%; }
}

/* ============================================================
   手机自动缩放层（Auto-fit mobile scaling）
   目标：手机/窄屏下字体、图表、卡片、表格、模态框随视口流式
   缩放；触控目标保持 ≥44px；内容单列排布，禁止横向滚动。
   只作用于浏览器端手机布局；桌面壳（desktop-mode）不接管。
   ============================================================ */

/* 1) 流式根字号：所有 rem 尺寸随屏宽自动缩放（14px–16px）。 */
@media (max-width: 991.98px) {
    html {
        font-size: clamp(14px, 1.15vw + 10.4px, 16px);
    }
}

/* 2) 媒体自适应：图表、报告插图、二维码等永不撑破容器。 */
@media (max-width: 991.98px) {
    body:not(.desktop-mode) .card-body img,
    body:not(.desktop-mode) .card-body canvas,
    body:not(.desktop-mode) .card-body svg,
    body:not(.desktop-mode) .modal-body img,
    body:not(.desktop-mode) .modal-body canvas,
    body:not(.desktop-mode) .modal-body svg,
    body:not(.desktop-mode) .generation-feedback img,
    body:not(.desktop-mode) .generation-feedback canvas,
    body:not(.desktop-mode) .generation-feedback svg {
        max-width: 100%;
        height: auto;
    }
}

/* 3) 容器与卡片内边距流式缩放，小屏不浪费宽度。 */
@media (max-width: 991.98px) {
    body:not(.desktop-mode) .main-container {
        width: 100%;
        max-width: 100%;
        padding: clamp(.55rem, 2.4vw, .9rem) clamp(.5rem, 2.2vw, .85rem) calc(84px + env(safe-area-inset-bottom, 0px));
    }
    body:not(.desktop-mode) .card-header {
        padding: clamp(.65rem, 2.6vw, 1rem) clamp(.7rem, 2.8vw, 1.1rem);
    }
    body:not(.desktop-mode) .card-body {
        padding: clamp(.7rem, 3vw, 1.15rem);
    }
}

/* 4) 触控目标与输入字号：避免 iOS 聚焦自动放大，按钮可单手点按。 */
@media (max-width: 767.98px) {
    body:not(.desktop-mode) .form-control,
    body:not(.desktop-mode) .form-select,
    body:not(.desktop-mode) input[type="text"],
    body:not(.desktop-mode) input[type="number"],
    body:not(.desktop-mode) input[type="search"],
    body:not(.desktop-mode) input[type="email"],
    body:not(.desktop-mode) input[type="url"],
    body:not(.desktop-mode) input[type="password"],
    body:not(.desktop-mode) input[type="date"],
    body:not(.desktop-mode) input[type="time"],
    body:not(.desktop-mode) input[type="datetime-local"],
    body:not(.desktop-mode) textarea,
    body:not(.desktop-mode) select {
        font-size: 16px;
        min-height: 44px;
    }
    body:not(.desktop-mode) textarea { min-height: 0; }
    body:not(.desktop-mode) .btn { min-height: 44px; }
    body:not(.desktop-mode) .btn-sm { min-height: 38px; }
    body:not(.desktop-mode) .btn-lg { min-height: 52px; }
    body:not(.desktop-mode) .btn-group.w-100 > .btn,
    body:not(.desktop-mode) .btn-group.w-100 > label.btn { min-height: 46px; }
    body:not(.desktop-mode) .form-check-input { width: 1.15em; height: 1.15em; }
}

/* 5) 表格：窄屏横向滑动代替撑破；字号随根字号缩放。 */
@media (max-width: 991.98px) {
    body:not(.desktop-mode) .table-responsive {
        -webkit-overflow-scrolling: touch;
        scrollbar-width: thin;
    }
    body:not(.desktop-mode) .table {
        font-size: clamp(.72rem, 2.6vw, .875rem);
    }
    body:not(.desktop-mode) .table :is(th, td) { padding: .5rem .55rem; }
}

/* 6) 模态框变成全屏工作表：标题/底部操作吸边，内容区自然滚动。 */
@media (max-width: 767.98px) {
    body:not(.desktop-mode) .modal-dialog {
        margin: 0;
        max-width: 100%;
        min-height: 100vh;
        min-height: 100dvh;
    }
    body:not(.desktop-mode) .modal-dialog.modal-dialog-centered { align-items: stretch; }
    body:not(.desktop-mode) .modal-content {
        min-height: 100vh;
        min-height: 100dvh;
        border: 0;
        border-radius: 0;
    }
    body:not(.desktop-mode) .modal-header {
        position: sticky;
        top: 0;
        z-index: 6;
        padding-top: calc(.6rem + env(safe-area-inset-top, 0px));
    }
    body:not(.desktop-mode) .modal-footer {
        position: sticky;
        bottom: 0;
        z-index: 6;
        background: #fff;
        padding-bottom: calc(.55rem + env(safe-area-inset-bottom, 0px));
        box-shadow: 0 -6px 18px rgba(15, 23, 42, .08);
    }
    body:not(.desktop-mode) .modal-footer .btn { flex: 1 1 auto; }
    body:not(.desktop-mode) .modal-body { -webkit-overflow-scrolling: touch; }
}

/* 7) 超窄屏（≤360px）再收一档，保证单列无横向滚动。 */
@media (max-width: 360px) {
    html { font-size: 13.5px; }
    body:not(.desktop-mode) .navbar .nav-actions > .btn { font-size: 11px; padding: 7px 4px; }
}

/* 8) 横屏矮窗口：压缩吸顶导航与底部工作台，留更多内容高度。 */
@media (max-width: 991.98px) and (max-height: 480px) {
    body:not(.desktop-mode) .navbar { padding-top: .3rem; padding-bottom: .3rem; }
    body:not(.desktop-mode) .nav-actions > .btn { min-height: 36px; }
    body:not(.desktop-mode) .mobile-workspace-nav__button { min-height: 44px; }
    body:not(.desktop-mode) { padding-bottom: calc(64px + env(safe-area-inset-bottom, 0px)); }
}

/* ============================================================
   9) 高度自适应层（Vertical auto-fit）
   在手机/窄屏内，把根字号和纵向间距同时受“宽度 + 高度”约束：
   - 正常竖屏：宽度项是较小值，表现与原设计一致；
   - 横屏/分屏/矮窗口：高度项接管，整体压缩但不低于可读下限；
   - 输入和按钮仍保持 ≥44px，避免不可点击。
   ============================================================ */
@media (max-width: 991.98px) {
    html {
        /* width term = original width scaling; height term = vertical scaling */
        font-size: clamp(13px, min(1.15vw + 10.4px, .66vh + 12.3px), 16px);
    }

    /* 标题、表单标签、说明文字的上下留白随高度缩放。 */
    body:not(.desktop-mode) .section-title {
        margin-block: clamp(.55rem, min(2.2vw, 1.6vh), 1.1rem);
    }
    body:not(.desktop-mode) .form-label {
        margin-bottom: clamp(.2rem, min(.8vw, .8vh), .55rem);
    }
    body:not(.desktop-mode) .card-body > .mb-3,
    body:not(.desktop-mode) .card-body > .mb-4 {
        margin-bottom: clamp(.55rem, min(2.4vw, 1.9vh), 1.25rem);
    }
    body:not(.desktop-mode) .accordion-button {
        padding-block: clamp(.5rem, min(2vw, 1.6vh), .95rem);
    }
    body:not(.desktop-mode) .accordion-body {
        padding-block: clamp(.55rem, min(2.2vw, 1.8vh), 1.1rem);
    }
    body:not(.desktop-mode) .nav-tabs {
        gap: clamp(.15rem, min(.8vw, .6vh), .5rem);
    }
    body:not(.desktop-mode) .nav-link {
        padding-block: clamp(.35rem, min(1.2vw, 1vh), .65rem);
    }
}

@media (max-width: 767.98px) {
    /* 输入框/按钮纵向内边距压缩，但总高度仍满足触控标准。 */
    body:not(.desktop-mode) .form-control,
    body:not(.desktop-mode) .form-select,
    body:not(.desktop-mode) textarea {
        padding-block: clamp(.42rem, min(1.6vw, 1.3vh), .68rem);
    }
    body:not(.desktop-mode) .btn {
        padding-block: clamp(.36rem, min(1.5vw, 1.2vh), .62rem);
    }
    body:not(.desktop-mode) .btn-lg {
        padding-block: clamp(.55rem, min(2.2vw, 1.8vh), .85rem);
    }
    body:not(.desktop-mode) .card-header {
        padding-block: clamp(.55rem, min(2.4vw, 1.9vh), 1rem);
    }
    body:not(.desktop-mode) .modal-header {
        padding-block: clamp(.5rem, min(2vw, 1.7vh), .85rem);
    }
    body:not(.desktop-mode) .modal-footer {
        padding-block: clamp(.5rem, min(2vw, 1.7vh), .85rem);
    }
}

/* 极矮窗口：优先保留可读字号，只压缩结构性留白。 */
@media (max-width: 991.98px) and (max-height: 420px) {
    html {
        font-size: clamp(12.5px, min(1.15vw + 10.4px, .78vh + 10.4px), 16px);
    }
    body:not(.desktop-mode) .section-title,
    body:not(.desktop-mode) .card-body > .mb-3,
    body:not(.desktop-mode) .card-body > .mb-4 {
        margin-bottom: clamp(.4rem, 1.4vh, .8rem);
    }
    body:not(.desktop-mode) .card-header,
    body:not(.desktop-mode) .card-body {
        padding-block: clamp(.4rem, 1.5vh, .75rem);
    }
}

/* 已支付但未创建任务：恢复原订单提示 */
.task-payment-recovery-card{border-left:4px solid #f59e0b}

/* ============================================================
   网页桌面工作台导航 + 全局自适应缩放
   普通浏览器桌面端也使用侧栏；手机/窄屏继续使用底部导航。
   ============================================================ */
@media (min-width: 992px) and (pointer: fine) {
    html {
        font-size: clamp(15px, calc(.35vw + 13.5px), 17px);
    }

    body.web-workspace-shell {
        overflow-x: hidden;
    }
    body.web-workspace-shell .desktop-sidebar {
        display: flex;
        position: fixed;
        top: 0;
        left: 0;
        bottom: 0;
        width: clamp(184px, 15vw, 224px);
        background: #f8fafc;
        border-right: 1px solid #dbe4f0;
        z-index: 1030;
        flex-direction: column;
        justify-content: space-between;
        padding: 0;
    }
    body.web-workspace-shell .navbar {
        left: clamp(184px, 15vw, 224px);
        width: calc(100% - clamp(184px, 15vw, 224px));
    }
    body.web-workspace-shell .main-container {
        width: calc(100% - clamp(184px, 15vw, 224px));
        max-width: none;
        margin-left: clamp(184px, 15vw, 224px);
        margin-right: 0;
        padding: clamp(1rem, 1.7vw, 1.75rem);
    }
    body.web-workspace-shell .mobile-workspace-nav {
        display: none !important;
    }
    body.web-workspace-shell .desktop-sidebar-nav {
        padding-top: clamp(64px, 7vh, 82px);
    }
    body.web-workspace-shell .sidebar-item {
        min-height: clamp(42px, 5vh, 52px);
        padding: clamp(8px, 1vw, 12px) clamp(10px, 1.1vw, 15px);
        font-size: clamp(.78rem, .22vw + .66rem, .92rem);
    }
    body.web-workspace-shell .card-header {
        padding: clamp(.7rem, 1.2vw, 1.15rem) clamp(.85rem, 1.35vw, 1.45rem);
    }
    body.web-workspace-shell .card-body {
        padding: clamp(.8rem, 1.45vw, 1.5rem);
    }
    body.web-workspace-shell.view-config #viewTasksPanel { display: none; }
    body.web-workspace-shell.view-config #viewConfigPanel { flex: 0 0 100%; max-width: 100%; }
    body.web-workspace-shell.view-tasks #viewConfigPanel { display: none; }
    body.web-workspace-shell.view-tasks #viewTasksPanel { flex: 0 0 100%; max-width: 100%; }
    /* 任务列表页就是一整页：卡片撑满可视高度，任务多时在列表内部滚动，
       而不是让整页跟着变长、把页脚推到很远。
       之前卡片高度由内容决定，两三条任务下面就是大片空白。 */
    body.web-workspace-shell.view-tasks #viewTasksPanel {
        display: flex;
        flex-direction: column;
        min-height: calc(100vh - clamp(96px, 12vh, 160px));
    }
    body.web-workspace-shell.view-tasks #taskListCard {
        flex: 1 1 auto;
        display: flex;
        flex-direction: column;
        min-height: 0;
        margin-bottom: 0;
    }
    body.web-workspace-shell.view-tasks #taskListCard > .card-body {
        flex: 1 1 auto;
        display: flex;
        flex-direction: column;
        min-height: 0;
    }
    body.web-workspace-shell.view-tasks #taskList {
        flex: 1 1 auto;
        min-height: 240px;
        /* 必须覆盖基础样式 .task-list 的 max-height:400px ——
           一张任务卡片（meta + 操作按钮）就有 420px 左右，400px 的上限会把
           卡片下半截（操作按钮）滚出可视区，看起来就是"被挡住了"。
           这里改成"能长多高长多高，超过视口再内部滚动"。 */
        max-height: none;
        overflow-y: auto;
    }
    body.web-workspace-shell.view-tasks #runtimeLogCard { display: none; }
    /* 任务列表是一整页，页脚（免责声明/版权/ICP/客服）压在小屏上会挡住任务卡片，
       该视图下不显示；配置页仍保留。 */
    body.web-workspace-shell.view-tasks .site-footer,
    body.web-workspace-shell.view-reports .site-footer { display: none; }
    body.web-workspace-shell:not(.view-reports) #viewReportsPanel { display: none; }
    body.web-workspace-shell.view-reports #viewConfigPanel { display: none; }
    body.web-workspace-shell.view-reports #viewReportsPanel {
        display: block;
        flex: 0 0 100%;
        max-width: 100%;
    }
    /* 2026-10-20 用户反馈：「数据分析报告中怎么多出来任务列表、运行日志了呢，
       这个不要吧」。
       2026-10-19 曾按"把任务列表放在分析报告的下方"把 #viewTasksPanel 也显示
       出来 —— 结果任务列表连同它里面的「运行日志」卡一起挤进了报告页，报告页
       不再是"只管报告"。这里恢复成：报告视图只显示报告面板，任务列表仍留在
       「任务列表」视图里。 */
    body.web-workspace-shell.view-reports #viewTasksPanel { display: none; }
    body.web-workspace-shell.view-logs #viewConfigPanel { display: none; }
    body.web-workspace-shell.view-logs #viewTasksPanel .card.mb-4 { display: none; }
    body.web-workspace-shell.view-logs #viewTasksPanel { flex: 0 0 100%; max-width: 100%; }
    body.web-workspace-shell.view-logs #runtimeLogCard { display: block !important; max-width: 100%; }
    /* 通知公告独立视图（#announcements）：单独一页，不再挤在任务配置下方。 */
    body.web-workspace-shell:not(.view-announcements) #viewAnnouncementsPanel { display: none; }
    body.web-workspace-shell.view-announcements #viewConfigPanel,
    body.web-workspace-shell.view-announcements #viewTasksPanel,
    body.web-workspace-shell.view-announcements #viewReportsPanel { display: none; }
    body.web-workspace-shell.view-announcements #viewAnnouncementsPanel {
        display: block;
        flex: 0 0 100%;
        max-width: 100%;
    }
    /* 整页式视图（任务列表 / 数据分析报告 / 通知公告）不显示页脚：
       页脚在这个壳层里没有跟随侧栏偏移，会被侧栏压掉一半。 */
    body.web-workspace-shell.view-announcements .site-footer { display: none; }
    /* AI Agent 对话视图（#agentChat，2026-10-26）：整页式视图，规则与公告视图同构。 */
    body.web-workspace-shell:not(.view-agent-chat) #viewAgentChatPanel { display: none; }
    body.web-workspace-shell.view-agent-chat #viewConfigPanel,
    body.web-workspace-shell.view-agent-chat #viewTasksPanel,
    body.web-workspace-shell.view-agent-chat #viewReportsPanel,
    body.web-workspace-shell.view-agent-chat #viewAnnouncementsPanel { display: none; }
    body.web-workspace-shell.view-agent-chat #viewAgentChatPanel {
        display: block;
        flex: 0 0 100%;
        max-width: 100%;
    }
    body.web-workspace-shell.view-agent-chat .site-footer { display: none; }
}

/* 普通桌面窗口高度不足时，垂直留白、导航和卡片同步压缩。 */
@media (min-width: 992px) and (pointer: fine) and (max-height: 760px) {
    body.web-workspace-shell .desktop-sidebar-nav {
        padding-top: 58px;
        gap: 2px;
    }
    body.web-workspace-shell .sidebar-item {
        min-height: clamp(36px, 6vh, 46px);
        padding-block: clamp(5px, 1.1vh, 9px);
    }
    body.web-workspace-shell .main-container {
        padding-block: clamp(.65rem, 1.5vh, 1.15rem);
    }
    body.web-workspace-shell .card-header,
    body.web-workspace-shell .card-body {
        padding-block: clamp(.55rem, 1.7vh, .9rem);
    }
}

/* 窄屏触控设备：横屏时也保持可点按尺寸。 */
@media (max-width: 991.98px) and (pointer: coarse) {
    body:not(.desktop-mode) .btn,
    body:not(.desktop-mode) .form-control,
    body:not(.desktop-mode) .form-select,
    body:not(.desktop-mode) select {
        min-height: 44px;
    }
    body:not(.desktop-mode) .btn-sm {
        min-height: 40px;
    }
}

/* 横屏手机/小平板也必须保留导航：屏幕高度不足时使用底部工作台。 */
@media (max-width: 991.98px) and (pointer: coarse) and (max-height: 600px) {
    body:not(.desktop-mode) {
        padding-bottom: calc(70px + env(safe-area-inset-bottom, 0px));
    }
    body:not(.desktop-mode) .mobile-workspace-nav {
        position: fixed;
        z-index: 1040;
        left: 10px;
        right: 10px;
        bottom: calc(8px + env(safe-area-inset-bottom, 0px));
        display: grid;
        grid-template-columns: repeat(4, minmax(0, 1fr));
        gap: 5px;
        padding: 6px;
        border: 1px solid rgba(148,163,184,.34);
        border-radius: 18px;
        background: rgba(255,255,255,.97);
        backdrop-filter: blur(16px);
        -webkit-backdrop-filter: blur(16px);
        box-shadow: 0 16px 38px rgba(15,23,42,.22);
    }
    body:not(.desktop-mode) .mobile-workspace-nav__button {
        min-width: 0;
        min-height: 44px;
        border: 0;
        border-radius: 13px;
        background: transparent;
        color: #64748b;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        gap: 2px;
        font-size: .72rem;
        font-weight: 800;
        line-height: 1.15;
    }
    body:not(.desktop-mode) .mobile-workspace-nav__button.is-active {
        color: #fff;
        background: linear-gradient(135deg,#1e40af,#3b82f6);
    }
}

/* 高度压缩规则不能覆盖触屏最小点击面积。 */
@media (max-width: 991.98px) and (pointer: coarse) {
    body:not(.desktop-mode) .nav-actions > .btn,
    body:not(.desktop-mode) .btn {
        min-height: 44px;
    }
}

/* ============================================================
   10) 统一视觉密度层（logo / 字体 / 组件 / 上下间距）
   目标：同一视口内展示更多有效内容，同时保留可读性和触控面积。
   ============================================================ */

/* Logo 不再固定 38px：宽度和高度一起根据可用空间缩放。 */
body:not(.desktop-mode) .navbar-brand img,
body.web-workspace-shell .navbar-brand img,
body.desktop-mode .navbar-brand img {
    width: clamp(28px, min(2.65vw, 5.8vh), 38px) !important;
    height: clamp(28px, min(2.65vw, 5.8vh), 38px) !important;
    max-width: 38px;
    max-height: 38px;
    object-fit: contain;
    flex: 0 0 auto;
}
body:not(.desktop-mode) .navbar-brand,
body.web-workspace-shell .navbar-brand,
body.desktop-mode .navbar-brand {
    gap: clamp(.35rem, min(1vw, 1.2vh), .7rem);
    font-size: clamp(1rem, min(1.2vw + .55rem, 3.2vh), 1.35rem);
    line-height: 1.1;
}
body:not(.desktop-mode) .navbar-brand small {
    font-size: clamp(.62rem, 1.7vw, .75rem) !important;
}

/* 页面纵向间距统一收敛，避免 Bootstrap 默认 margin 过大。 */
@media (max-width: 991.98px) {
    body:not(.desktop-mode) .main-container {
        padding-top: clamp(.45rem, min(1.8vw, 1.5vh), .85rem);
        padding-bottom: calc(76px + env(safe-area-inset-bottom, 0px));
    }
    body:not(.desktop-mode) .main-container > .row {
        --bs-gutter-y: clamp(.65rem, min(2.4vw, 2.1vh), 1.25rem);
    }
    body:not(.desktop-mode) .card,
    body:not(.desktop-mode) .card.mb-3,
    body:not(.desktop-mode) .card.mb-4 {
        margin-bottom: clamp(.65rem, min(2.4vw, 2.1vh), 1.25rem) !important;
    }
    body:not(.desktop-mode) .card-header {
        min-height: clamp(46px, min(12vw, 8vh), 58px);
        padding-block: clamp(.48rem, min(1.8vw, 1.7vh), .82rem);
    }
    body:not(.desktop-mode) .card-body {
        padding-block: clamp(.55rem, min(2.2vw, 1.9vh), 1rem);
    }
    body:not(.desktop-mode) .section-title {
        margin-block: clamp(.45rem, min(1.7vw, 1.5vh), .9rem);
        padding-bottom: clamp(.28rem, min(1.1vw, 1vh), .55rem);
    }
    body:not(.desktop-mode) .form-label {
        margin-bottom: clamp(.16rem, min(.7vw, .7vh), .42rem);
    }
    body:not(.desktop-mode) .mt-4 { margin-top: clamp(.65rem, min(2.3vw, 2vh), 1.15rem) !important; }
    body:not(.desktop-mode) .mt-3 { margin-top: clamp(.5rem, min(1.8vw, 1.6vh), .9rem) !important; }
    body:not(.desktop-mode) .mb-4 { margin-bottom: clamp(.65rem, min(2.3vw, 2vh), 1.15rem) !important; }
    body:not(.desktop-mode) .mb-3 { margin-bottom: clamp(.5rem, min(1.8vw, 1.6vh), .9rem) !important; }
}

/* 桌面网页工作台：侧栏存在时，卡片和导航也随窗口高度压缩。 */
@media (min-width: 992px) and (pointer: fine) {
    body.web-workspace-shell .navbar {
        padding-top: clamp(.35rem, min(1vw, 1.4vh), .7rem);
        padding-bottom: clamp(.35rem, min(1vw, 1.4vh), .7rem);
    }
    body.web-workspace-shell .main-container > .row {
        --bs-gutter-y: clamp(.7rem, min(1.6vw, 1.8vh), 1.35rem);
    }
    body.web-workspace-shell .card,
    body.web-workspace-shell .card.mb-3,
    body.web-workspace-shell .card.mb-4 {
        margin-bottom: clamp(.65rem, min(1.5vw, 1.8vh), 1.2rem) !important;
    }
    body.web-workspace-shell .card-header {
        min-height: clamp(46px, min(5vw, 7vh), 58px);
        padding-block: clamp(.48rem, min(1vw, 1.3vh), .82rem);
    }
    body.web-workspace-shell .card-body {
        padding-block: clamp(.62rem, min(1.25vw, 1.8vh), 1.1rem);
    }
    body.web-workspace-shell .section-title {
        margin-block: clamp(.45rem, min(1.2vw, 1.6vh), .85rem);
        padding-bottom: clamp(.3rem, min(.8vw, .9vh), .55rem);
    }
    body.web-workspace-shell .form-label {
        margin-bottom: clamp(.18rem, min(.45vw, .65vh), .4rem);
    }
}

/* 高度特别短时再压一档上下空白，字体不低于前面定义的可读下限。 */
@media (max-height: 620px) {
    body:not(.desktop-mode) .navbar {
        padding-top: clamp(.25rem, 1.1vh, .45rem) !important;
        padding-bottom: clamp(.25rem, 1.1vh, .45rem) !important;
    }
    body:not(.desktop-mode) .card-header {
        min-height: 44px;
        padding-block: clamp(.36rem, 1.25vh, .6rem);
    }
    body:not(.desktop-mode) .card-body {
        padding-block: clamp(.42rem, 1.45vh, .75rem);
    }
    body:not(.desktop-mode) .section-title {
        margin-block: clamp(.32rem, 1.1vh, .6rem);
    }
}

/* 注释性平台说明默认折叠，避免占用首屏纵向空间。 */
.question-url-support {
    padding: 0 !important;
    overflow: hidden;
}
.question-support-summary {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: .65rem;
    min-height: 38px;
    padding: .45rem .7rem;
    color: #334155;
    font-weight: 700;
    cursor: pointer;
    list-style: none;
}
.question-support-summary::-webkit-details-marker { display: none; }
.question-support-summary::after {
    content: '＋';
    flex: 0 0 auto;
    color: #2563eb;
    font-size: 1rem;
}
.question-url-support[open] .question-support-summary::after { content: '−'; }
.question-support-summary__hint {
    margin-left: auto;
    color: #64748b;
    font-size: .72rem;
    font-weight: 600;
}
.question-support-detail-wrap {
    padding-inline: .7rem;
    padding-bottom: .65rem;
    border-top: 1px solid #e2e8f0;
}
@media (max-width: 767.98px) {
    .question-support-summary { min-height: 40px; padding-inline: .6rem; }
    .question-support-summary__hint { font-size: .68rem; }
    .question-support-detail-wrap { padding-inline: .6rem; }
}
