/*!************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/less-loader/dist/cjs.js!./app/web/layout/index.less ***!
  \************************************************************************************************************************************************/
html,
body {
  padding: 0;
  margin: 0;
}
.index__cj-main___3tEuL {
  display: flex;
  padding: 0;
  margin: 0;
}
#index__cj-menu___3jDcj {
  height: 100vh;
  position: sticky;
  top: 0;
  z-index: 1004;
}
.index__cj-container___3wu3L {
  flex: 1;
  max-width: 100%;
}
/* /oauth/consent(MCP OAuth 同意页,DEV-119912)单页布局控制。
   同 /intelligence 走 ssrRoutes options.containerClassName 这个钩子,但诉求相反:
   /intelligence 要 min-width:1200 撑成大屏,同意页要**窄屏不横向滚动**。

   🔴 为什么必须治:Playwright 验收实测视口 390 时整页 scrollWidth=1265
   (test/e2e/oauthConsent.pw.js「窄屏 390」组)。而同意页首屏必须完整展示**回跳域名**——
   那是 F-O7-3 规定的反钓鱼锚点,判据逐字写着「首屏可见且绝不用省略号截断」。
   横向滚动会把它推出屏幕,等于在移动端把这条防护废掉,和用 ellipsis 截断是同一种失效。
   组件自身是达标的(实测 .oauth-consent scrollWidth == clientWidth == 390),
   1265 全部来自全局 .cj-main / .cj-container 与注入的远程 header/footer HTML。

   ⚠️ 这里只治「横向溢出」,不动 header/footer 的**注入**。
   页面上那 59 个跨源引用来自注入的远程 HTML,CSS 只能藏、挡不住资源加载——
   要真正去掉得改 baseController 的注入逻辑(ctx.cjHeaderConfig),那是共享基建 + 产品决定。
   rid 经 Referer 泄露这条路已由 fetch.js 下发的 `Referrer-Policy: no-referrer` 封住。 */
.cj-container-oauth-consent {
  min-width: 0;
  max-width: 100%;
  /* 🔴🔴 **这里绝不能加 `overflow-x: hidden`**（26年08月20日实测移除）。
   *
   * 它会让本元素成为**滚动容器**，而它是同意卡片的祖先 ⇒
   * 页内 `.oauth-consent__actions` 的 `position: sticky` **静默失效**
   * （不报错、桌面端也看不出来），窄屏吸底直接白做。
   * 实测（390×660 视口，含完整 layout 包裹链）：
   *   有这一行 → 按钮 top=780，在 660 的视口外，「找不到同意按钮」；
   *   去掉      → 按钮 top=591，吸底正常。
   * 而「找不到同意按钮直接等于转化失败」正是交互设计 :814 要求吸底的原文理由。
   *
   * ⚠️ 它当初是为了治窄屏横向溢出（实测整页 scrollWidth 曾到 1265）。
   *    但那 1265 来自**注入的远程 header/footer** 与站点侧栏，
   *    而下面那段已经把它们全部 `display: none` 了 ⇒ 溢出源已经不存在。
   *    移除后实测 390 视口整页 scrollWidth == innerWidth == 390，没有回归。
   *    真要再治溢出，用 `min-width: 0` / `max-width: 100%`（上面两行），
   *    **不要用 overflow**。
   *
   * ⚠️ 同一个坑在 page/oauthConsent/index.less 的卡片规则里也标了一次 ——
   *    那次我记得住、这次却在**另一个文件**里犯了，因为吸底是在页面 less 里写的，
   *    而杀死它的祖先在本文件。改动任一处都要想到另一处。
   */
  /* 🔴 OAuth 同意页不挂站点头尾与浮层（26年08月19日）。
     这不是"为了好看"，是同意页这一类页面的通行做法（Google / GitHub / Slack 同）：

     ① **防钓鱼**：同意页要回答的唯一问题是「你是否把全量 API 权限给这个客户端」。
        页面上任何与该决策无关的品牌元素、导航、促销，都是攻击者可利用的伪装素材 ——
        用户习惯了"这页长得跟官网一样"，就更难分辨一个仿冒的同意页。
     ② **防误触**：实测截图里营销弹窗（Subscribe to our latest niches）**直接盖住了同意内容**，
        用户可能在没看到自己在授权什么的情况下点到 Authorize ——
        而那一下的代价是铸出一枚 180 天全权限凭证并吃掉一个名额（上限 10）。
     ③ 顺带解决整列被撑到 1265px 的横向滚动（头尾自带 min-width）。

     ⚠️ 这里是**视觉隐藏**，挡不住资源加载 —— 注入的远程 HTML 里那些 script/img 照样会请求。
        rid 经 Referer 泄露那条路由 fetch.js 下发的 `Referrer-Policy: no-referrer` 封住；
        要真正不加载得改 baseController 的注入逻辑（共享基建 + 产品决定），未做。

     id 也要 :global 包裹，否则会被 css-modules 哈希、选择器对不上真实 DOM id
     （同 .cj-container-intelligence 那条注释里踩过的坑）。 */
}
.cj-container-oauth-consent #cj-header-container,
.cj-container-oauth-consent #cj-footer-container,
.cj-container-oauth-consent #cj-ai-assistant-affix {
  display: none !important;
}
.cj-container-oauth-consent #react-content {
  min-width: 0;
  max-width: 100%;
}
/* 同意页：去掉左侧站点侧栏与 body 级浮层，整页换成浅灰底衬托卡片。
 *
 * ⚠️ 必须挂在 body 上而不是 .cj-container 内 —— #cj-menu 与 #subscribe-mask 都是
 *    .cj-container 的**兄弟/body 直接子节点**（见 layout/index.jsx 的
 *    .cj-main > #cj-menu + .cj-container），从容器内部选不到它们。
 *    用 :has() 让规则只在本页生效，不影响其它页。
 *
 * 🔴 整段必须写在 `:global {}` 块里。上一版写成裸的 `body:has(.cj-container-oauth-consent)`，
 *    结果 `.cj-container-oauth-consent` 照样被 css-modules 哈希掉，选择器永远不匹配 ——
 *    实测侧栏和弹窗原样还在。（同一个坑本文件顶部 .cj-container-intelligence 的注释里
 *    已经写过一次「id 也要 :global 包裹」，我仍然踩了第二次。）
 */
body:has(.cj-container-oauth-consent) {
  /* 与 page/oauthConsent/index.less 的 .oauth-consent-page 同色。
       🔧 26年08月20日：由品牌橙 #ff7700 改为中性浅底 —— 授权页是决策面，
       满屏高饱和色会压过卡片里那段风险告知（详见那份 less 的「设计口径」）。
       ⚠️ 改了这里记得改那边 —— 不同色会在页面底部露出一条色差带。 */
  background: #f5f6f8;
  /* 左侧站点侧栏（MF 远程组件渲染进 #cj-menu，实际节点带哈希类名，
       所以按容器 id 选而不是按类名 —— 哈希会随构建变）。 */
  /* 🔴 body 级营销浮层。实测 z-index:100005 且 display:flex，
       **直接盖住整张同意卡片** —— 用户可能在没看到自己在授权什么的情况下
       点到 Authorize，而那一下的代价是铸出一枚 180 天全权限凭证并吃掉一个名额。
       这是安全问题，不是观感问题。 */
}
body:has(.cj-container-oauth-consent) #cj-menu {
  display: none !important;
}
body:has(.cj-container-oauth-consent) #subscribe-mask, body:has(.cj-container-oauth-consent) #iframe-box {
  display: none !important;
}
/* /intelligence(广告/销售大屏)单页布局控制:通过 ssrRoutes options.containerClassName
   附加到 .cj-container,让该页整列表现得像 /home。用 :global 输出普通类名,供 options 以字符串引用。 */
.cj-container-intelligence {
  /* 1) 整列(header + #react-content + footer)最小宽度 1200:内容 min-width 后横向滚动时,
        header/footer 也一起 ≥1200、不会在右侧露出空白。 */
  min-width: 1200px;
  /* 2) 头部随页滚动常驻顶部。整页窗口滚动时,让 #cj-header-container sticky 钉在 top:0。
        (头部在 home-search-layout 下由 mf 强制 isMini=false,始终大搜索态、不会滚动时变 mini,
         与 /home 一致;见 mf block-search-nav.tsx 的 isHomeSearchLayout。)
        z-index 需高于页面内的 .hero(sticky top:60,z-index:30),才能盖住其上方滚动的内容。
        注意:id 也要用 :global 包裹,否则会被 css-modules 哈希、选择器对不上真实 DOM id。 */
}
.cj-container-intelligence #cj-header-container {
  position: sticky;
  top: 0;
  z-index: 100;
}
/* React-SSR 页面整列 min-width:1200(body.vip 亦 min-width:1200),窄屏(视口 < 侧栏 + 1200)时内容会超出屏幕。
   但全站 body.vip 为 `overflow: hidden auto`(overflow-x:hidden 原为防止误出横向滚动条),
   这会把超出的部分裁掉且无法左右滚动查看——表现为:首页/大屏页下滚后头部固定、右侧图标被裁却滚不到,
   页面/footer 也无法左右移动到超出范围的内容。
   这里放开横向滚动:窄屏时整列(头部 + 内容 + footer)可一起左右滚动查看被裁内容;
   ≥ 视口时无横向溢出、overflow-x:auto 不出滚动条,无副作用。纵向 overflow-y:auto 不受影响。
   !important 确保覆盖全站 body.vip 的 overflow-x:hidden。 */
body.vip {
  overflow-x: auto !important;
}
*:focus,
*:active {
  outline: none !important;
}

