﻿/* ==========================================================================
   TCY Server — EF2 全局壳 v2.1（终末地 · hover 展开白轨 / 移动壳 / 播放器 / 页脚）
   --------------------------------------------------------------------------
   v2.1 断点体系（用户第二轮诉求）：
     · ≥1220px  桌面：默认【收缩白轨 76px】（logo+灰阶图标），hover / 键盘聚焦时
                overlay 展开到 248px（内容不回流 → 任意窗口宽度下内容区左缘恒定）
     · <1220px  移动：常驻 52px 白色顶部条（logo 左 + 黑CTA + ☰ 右），
                汉堡打开【全屏导航页】（白底斜线网格 + 大logo + 灰按钮行 + 粉激活块）
   音乐播放器（.tcy-music-player，DOM 由冻结的 music-player.js 生成）在本文件
   全面换皮：Endfield 白纸墨线小控制台，主页置顶右侧、移动端并入顶部条。
   叠放次序：本文件在 endfield.css(v1) 之后加载，同名选择器逐条压过 v1。
   轨 DOM 由 extra.js 生成（#tcy-custom-nav > .tcy-nav-left + .tcy-nav-links），
   .ef2-rail-foot 由 main.html 输出、ef2-hud.js 运行时挪进轨内（见其模块⑤）。
   ========================================================================== */

/* =========================================================================
   1. 断点接管：桌面全域轨宽恒 76px（--ef-rail-w 驱动 v1 的全部让位公式）
   展开只发生在 hover overlay 上，不改让位宽度 → 内容区左缘在任何窗口宽度下稳定，
   正合「按钮/构图位置相对固定」的诉求。
   ========================================================================= */
@media screen and (min-width: 76.25em) {
    :root { --ef-rail-w: var(--ef2-rail-w); }
}

/* =========================================================================
   2. 桌面轨（≥76.25em）：默认收缩 + hover/:has(:focus-visible) 展开（overlay 不回流）
      焦点条件用 :focus-visible 而非 :focus-within：鼠标点击链接后焦点留在链接上，
      focus-within 会让轨移开鼠标也不缩（用户实拍）；键盘 Tab 仍可撑开，无障碍不丢
   布局在两态间共用同一套行式结构：图标 x 坐标恒定，文字/编号只做透明度+位移淡入，
   这样 76px→248px 的宽度过渡是一次连贯的「抽屉拉开」。
   v1 的 tooltip 机制（label 绝对定位悬浮）随之退役，全部还原为行内。
   ========================================================================= */
@media screen and (min-width: 76.25em) {
    #tcy-custom-nav.tcy-nav-bar {
        width: var(--ef2-rail-w);
        background: var(--ef2-paper) !important;
        border-right: 1px solid var(--ef2-line) !important;
        box-shadow: none !important;
        padding: 14px 8px 12px !important;
        gap: 2px !important;
        /* 收起态必须裁掉 248px 内容的溢出（tooltip 已退役，不再需要 overflow:visible） */
        overflow: hidden !important;
        transition: width .28s cubic-bezier(.2, .7, .2, 1), box-shadow .28s ease;
    }
    #tcy-custom-nav.tcy-nav-bar:hover,
    #tcy-custom-nav.tcy-nav-bar:has(:focus-visible) {
        width: var(--ef2-rail-w-full);
        /* overlay 浮层感：右缘大投影 */
        box-shadow: 22px 0 52px rgba(23, 25, 30, .18) !important;
    }
    /* v1 的竖向扫描高光：终末地轨没有这种东西，灭掉 */
    #tcy-custom-nav.tcy-nav-bar::before { display: none !important; }

    /* --- 品牌区：logo 居中锚点 = (76-40)/2 - 8 = 10px（轨自身还有 8px 内边距，
       v1 底座；此前 18px 没扣这 8px，收缩态 logo 中心落在 46 而非 38，
       肉眼偏右——用户实拍）。flex-start 锚定，两态 x 恒定不跳位。 --- */
    #tcy-custom-nav .tcy-nav-left {
        position: relative;
        align-items: flex-start !important;
        justify-content: flex-start;
        padding: 0 0 10px 10px !important;
        margin: 0 0 8px !important;
    }
    #tcy-custom-nav .tcy-header-brand {
        background: none !important;
        border: 0 !important;
        box-shadow: none !important;
        backdrop-filter: none !important;
        -webkit-backdrop-filter: none !important;
        padding: 0 !important;
        justify-content: flex-start;
        /* 品牌区里排着一个宽 0 的隐藏汉堡按钮，8px gap 会给这对"隐形邻居"
           塞出间隙把 logo 推右（收缩态偏右 8px 的真凶，用户实拍） */
        gap: 0 !important;
    }
    #tcy-custom-nav .tcy-header-brand .md-header__title { display: none !important; }
    #tcy-custom-nav .md-logo { margin: 0 !important; padding: 0 !important; }
    #tcy-custom-nav .md-logo img {
        width: 40px !important;
        height: 40px !important;
        display: block;
    }
    /* mono 铭牌：收起态隐身（纯 logo），展开淡入；占位高度固定防跳动 */
    #tcy-custom-nav .tcy-nav-left::before { display: none !important; }
    #tcy-custom-nav .tcy-nav-left::after {
        content: 'TCYMC // SWEET&SOUR';
        font-family: var(--ef2-mono);
        font-size: .5rem;
        font-weight: 700;
        letter-spacing: .22em;
        color: var(--ef2-gray);
        padding-top: 8px;
        height: .9rem;
        white-space: nowrap;
        opacity: 0;
        transition: opacity .22s ease;
    }
    #tcy-custom-nav.tcy-nav-bar:hover .tcy-nav-left::after,
    #tcy-custom-nav.tcy-nav-bar:has(:focus-visible) .tcy-nav-left::after { opacity: 1; }

    /* --- 链接列容器：矮屏溢出走纵向滚动，横向永远裁切 --- */
    #tcy-custom-nav .tcy-nav-links {
        flex-wrap: nowrap !important;
        overflow-x: hidden !important;
    }

    /* --- 链接行：两态共用行式布局；单色纪律（灰→墨），激活 = 反白墨块 + 粉 tick --- */
    #tcy-custom-nav .tcy-nav-links a {
        flex-direction: row !important;
        align-items: center !important;
        justify-content: flex-start !important;
        gap: 12px !important;
        min-height: 44px;
        padding: 0 12px 0 20px !important;
        text-align: left !important;
        color: var(--ef2-ink-soft) !important;
        border: 0 !important;
        border-radius: 0 !important;
        background: transparent !important;
        transition: background .18s ease, color .18s ease;
    }
    #tcy-custom-nav .tcy-nav-links a:focus-visible {
        outline: 2px dashed var(--ef2-punch);
        outline-offset: -2px;
    }
    #tcy-custom-nav .tcy-nav-links a:hover {
        background: #f2f3f5 !important;
        color: var(--ef2-ink) !important;
        transform: none !important;
        box-shadow: none !important;
    }
    #tcy-custom-nav .tcy-nav-links a.active {
        background: var(--ef2-ink) !important;
        color: #fff !important;
    }
    /* 激活 tick：整高 3px 粉条 */
    #tcy-custom-nav .tcy-nav-links a.active::before {
        top: 0 !important;
        bottom: 0 !important;
        width: 3px !important;
        background: var(--ef2-punch) !important;
    }
    /* 图标：x 坐标两态恒定；灰阶纪律（实测图标非 currentColor，filter 兜底最稳） */
    #tcy-custom-nav .tcy-nav-links a .tcy-nav-icon,
    #tcy-custom-nav .tcy-nav-links a .tcy-nav-icon svg {
        width: 20px !important;
        height: 20px !important;
    }
    #tcy-custom-nav .tcy-nav-links a .tcy-nav-icon {
        flex: none;
        filter: grayscale(1) opacity(.72);
        transition: filter .18s ease;
    }
    #tcy-custom-nav .tcy-nav-links a:hover .tcy-nav-icon { filter: grayscale(1) opacity(1); }
    #tcy-custom-nav .tcy-nav-links a.active .tcy-nav-icon { filter: brightness(0) invert(1); }

    /* 中文标签：行内静置（压掉 v1 tooltip 全套），收起态零宽隐身 → 展开淡入滑出 */
    #tcy-custom-nav .tcy-nav-links a .tcy-nav-label {
        position: static !important;
        transform: translateX(-8px) !important;
        opacity: 0 !important;
        pointer-events: none !important;
        background: none !important;
        border: 0 !important;
        box-shadow: none !important;
        padding: 0 !important;
        clip-path: none !important;
        color: inherit !important;
        font-family: var(--ef2-hei) !important;
        font-size: .86rem !important;
        font-weight: 600 !important;
        letter-spacing: .04em;
        white-space: nowrap;
        max-width: 0;
        overflow: hidden;
        transition: opacity .22s ease .06s, transform .22s ease .06s, max-width .28s cubic-bezier(.2, .7, .2, 1);
    }
    #tcy-custom-nav.tcy-nav-bar:hover .tcy-nav-links a .tcy-nav-label,
    #tcy-custom-nav.tcy-nav-bar:has(:focus-visible) .tcy-nav-links a .tcy-nav-label {
        opacity: 1 !important;
        transform: none !important;
        max-width: 8rem;
    }
    /* 行内不要 label 里的编号前缀（编号在行尾 ::after 统一出） */
    #tcy-custom-nav .tcy-nav-links a .tcy-nav-label::before { content: none !important; }
    /* mono 编号：推到行尾，仅展开态显形 */
    #tcy-custom-nav .tcy-nav-links a::after {
        margin-left: auto;
        font-size: .58rem !important;
        color: #b6bbc1 !important;
        opacity: 0 !important;
        transition: opacity .22s ease .06s;
    }
    #tcy-custom-nav.tcy-nav-bar:hover .tcy-nav-links a::after,
    #tcy-custom-nav.tcy-nav-bar:has(:focus-visible) .tcy-nav-links a::after { opacity: 1 !important; }
    #tcy-custom-nav.tcy-nav-bar:hover .tcy-nav-links a.active::after,
    #tcy-custom-nav.tcy-nav-bar:has(:focus-visible) .tcy-nav-links a.active::after {
        color: rgba(255, 255, 255, .55) !important;
    }
}

/* =========================================================================
   3. 轨底工具簇 .ef2-rail-foot
   DOM 由 main.html 输出、ef2-hud.js 挪进 #tcy-custom-nav 尾部（挪入前一律隐藏，
   杜绝 FOUC）。轨是 flex column：links 区 flex:1 → 簇自然沉底。
   收起态只露方块 CTA（▽），hover 展开为完整簇：工具行 + 横排 CTA + mono 尾注。
   ========================================================================= */
.ef2-rail-foot { display: none; }

@media screen and (min-width: 76.25em) {
    #tcy-custom-nav .ef2-rail-foot {
        display: flex;
        flex-direction: column;
        align-items: stretch;
        gap: 10px;
        margin-top: auto;
        padding-top: 12px;
        border-top: 1px solid var(--ef2-line-soft);
    }

    /* 工具行：QQ 群 / 社区 —— 仅展开态出现 */
    #tcy-custom-nav .ef2-rail-foot-links { display: none; }
    #tcy-custom-nav.tcy-nav-bar:hover .ef2-rail-foot-links,
    #tcy-custom-nav.tcy-nav-bar:has(:focus-visible) .ef2-rail-foot-links {
        display: flex;
        flex-direction: column;
        border-top: 1px solid var(--ef2-line-soft);
        border-bottom: 1px solid var(--ef2-line-soft);
        animation: ef2FootIn .26s ease both;
    }
    #tcy-custom-nav .ef2-rail-foot-links a {
        display: flex;
        align-items: center;
        gap: 10px;
        min-height: 40px;
        padding: 0 10px;
        font-family: var(--ef2-hei);
        font-size: .76rem;
        font-weight: 600;
        letter-spacing: .04em;
        color: var(--ef2-ink-soft) !important;
        text-decoration: none !important;
        background: none !important;
        white-space: nowrap;
        transition: background .18s ease, color .18s ease;
    }
    #tcy-custom-nav .ef2-rail-foot-links a + a { border-top: 1px solid var(--ef2-line-soft); }
    #tcy-custom-nav .ef2-rail-foot-links a:hover {
        background: #f2f3f5 !important;
        color: var(--ef2-ink) !important;
    }
    #tcy-custom-nav .ef2-rail-foot-links a svg {
        width: 16px;
        height: 16px;
        flex: none;
        fill: currentColor;
    }
    #tcy-custom-nav .ef2-rail-foot-links a b {
        font-family: var(--ef2-mono);
        font-size: .64rem;
        font-weight: 700;
        color: var(--ef2-gray);
        margin-left: auto;
        letter-spacing: 0;
    }

    /* 黑色切角 CTA：收起态 = ▽ 方块，展开态 = ▽ | 加入服务器（同一套行式布局淡入） */
    #tcy-custom-nav .ef2-rail-cta {
        position: relative;
        display: flex;
        flex-direction: row;
        align-items: center;
        gap: 12px;
        min-height: 44px;
        padding: 0 12px 0 14px;
        background: var(--ef2-ink) !important;
        color: #fff !important;
        text-decoration: none !important;
        clip-path: polygon(0 0, 100% 0, 100% calc(100% - var(--ef2-cut)), calc(100% - var(--ef2-cut)) 100%, 0 100%);
        overflow: hidden;
        transition: background .2s ease;
    }
    #tcy-custom-nav .ef2-rail-cta::before {
        content: '';
        position: absolute;
        left: 0; top: 0; bottom: 0;
        width: 3px;
        background: var(--ef2-pink);
    }
    #tcy-custom-nav .ef2-rail-cta:hover { background: #000 !important; color: #fff !important; }
    #tcy-custom-nav .ef2-rail-cta:focus-visible { outline: 2px dashed var(--ef2-punch); outline-offset: 2px; }
    #tcy-custom-nav .ef2-rail-cta-mark {
        font-family: var(--ef2-mono);
        font-size: .82rem;
        line-height: 1;
        flex: none;
        width: 20px;
        text-align: center;
    }
    #tcy-custom-nav .ef2-rail-cta-mark::after {
        content: ' |';
        color: rgba(255, 255, 255, .4);
        opacity: 0;
        transition: opacity .22s ease .06s;
    }
    #tcy-custom-nav .ef2-rail-cta-label {
        writing-mode: horizontal-tb;
        font-family: var(--ef2-hei);
        font-size: .8rem;
        font-weight: 700;
        letter-spacing: .22em;
        margin-right: -.22em;
        white-space: nowrap;
        max-width: 0;
        overflow: hidden;
        opacity: 0;
        transform: translateX(-8px);
        transition: opacity .22s ease .06s, transform .22s ease .06s, max-width .28s cubic-bezier(.2, .7, .2, 1);
    }
    #tcy-custom-nav.tcy-nav-bar:hover .ef2-rail-cta-label,
    #tcy-custom-nav.tcy-nav-bar:has(:focus-visible) .ef2-rail-cta-label {
        max-width: 7rem;
        opacity: 1;
        transform: none;
    }
    #tcy-custom-nav.tcy-nav-bar:hover .ef2-rail-cta-mark::after,
    #tcy-custom-nav.tcy-nav-bar:has(:focus-visible) .ef2-rail-cta-mark::after { opacity: 1; }

    /* mono 尾注：仅展开态 */
    #tcy-custom-nav .ef2-rail-foot-note { display: none; }
    #tcy-custom-nav.tcy-nav-bar:hover .ef2-rail-foot-note,
    #tcy-custom-nav.tcy-nav-bar:has(:focus-visible) .ef2-rail-foot-note {
        display: block;
        font-family: var(--ef2-mono);
        font-size: .5rem;
        font-weight: 500;
        letter-spacing: .14em;
        color: var(--ef2-gray);
        text-align: center;
        white-space: nowrap;
        animation: ef2FootIn .26s ease both;
    }
}

@keyframes ef2FootIn {
    from { opacity: 0; transform: translateY(6px); }
    to { opacity: 1; transform: none; }
}

/* =========================================================================
   4. 移动端顶部条（<76.25em）：常驻 52px 白条（参考移动端官网顶部条）
   [ logo ······ ▽加入服务器 ☰ ]
   压掉 v1 §13 的「浮动汉堡球」方案；display:contents 把 brand 的儿子们
   拍平成顶条的直接 flex 项，才能把汉堡排到 CTA 右侧（DOM 动不了，纯 CSS 排序）。
   ========================================================================= */
@media screen and (max-width: 76.234375em) {
    #tcy-custom-nav {
        position: fixed !important;
        top: 0 !important;
        left: 0 !important;
        right: 0 !important;
        width: 100% !important;
        max-width: none !important;
        height: 52px !important;
        margin: 0 !important;
        padding: 0 8px 0 14px !important;
        gap: 8px !important;
        display: flex !important;
        flex-direction: row !important;
        align-items: center !important;
        background: #fff !important;
        border: 0 !important;
        border-bottom: 1px solid var(--ef2-line) !important;
        box-shadow: none !important;
        border-radius: 0 !important;
        clip-path: none !important;
        z-index: 30 !important;
        overflow: visible !important;
    }
    #tcy-custom-nav::before { display: none !important; }
    /* 拍平两层容器，让 logo / 汉堡直接参与顶条排序 */
    #tcy-custom-nav .tcy-nav-left,
    #tcy-custom-nav .tcy-header-brand { display: contents !important; }
    #tcy-custom-nav .tcy-nav-left::before,
    #tcy-custom-nav .tcy-nav-left::after { content: none !important; display: none !important; }
    /* logo：左端回归（v1 藏掉了它） */
    #tcy-custom-nav .tcy-header-brand .md-logo {
        display: block !important;
        order: 1;
        margin: 0 !important;
        padding: 0 !important;
    }
    #tcy-custom-nav .md-logo img {
        width: 34px !important;
        height: 34px !important;
        display: block;
    }
    #tcy-custom-nav .tcy-header-brand .md-header__title { display: none !important; }
    #tcy-custom-nav .tcy-nav-links { display: none !important; }

    /* CTA（JS 已把 .ef2-rail-foot 挪进轨内）：只留 CTA 参与顶条，靠右 */
    #tcy-custom-nav .ef2-rail-foot { display: contents !important; }
    #tcy-custom-nav .ef2-rail-foot-links,
    #tcy-custom-nav .ef2-rail-foot-note { display: none !important; }
    #tcy-custom-nav .ef2-rail-cta {
        order: 3;
        margin-left: auto !important;
        position: relative;
        display: inline-flex !important;
        flex-direction: row;
        align-items: center;
        gap: 8px;
        height: 34px;
        padding: 0 12px 0 13px !important;
        background: var(--ef2-ink) !important;
        color: #fff !important;
        text-decoration: none !important;
        clip-path: polygon(0 0, 100% 0, 100% calc(100% - 8px), calc(100% - 8px) 100%, 0 100%);
        white-space: nowrap;
    }
    #tcy-custom-nav .ef2-rail-cta::before {
        content: '';
        position: absolute;
        left: 0; top: 0; bottom: 0;
        width: 3px;
        background: var(--ef2-pink);
    }
    #tcy-custom-nav .ef2-rail-cta-mark {
        font-family: var(--ef2-mono);
        font-size: .72rem;
        line-height: 1;
    }
    #tcy-custom-nav .ef2-rail-cta-label {
        writing-mode: horizontal-tb;
        font-family: var(--ef2-hei);
        font-size: .74rem;
        font-weight: 700;
        letter-spacing: .1em;
        margin: 0;
    }

    /* 汉堡：最右端，透明方块大触控目标（压掉 v1 的白圆球 + 旧 v2 的切角chip） */
    #tcy-custom-nav .md-header__button[for="__drawer"] {
        order: 4;
        position: static !important;
        display: flex !important;
        align-items: center;
        justify-content: center;
        width: 44px !important;
        height: 44px !important;
        margin: 0 !important;
        padding: 0 !important;
        border-radius: 0 !important;
        clip-path: none !important;
        color: var(--ef2-ink) !important;
        background: transparent !important;
        border: 0 !important;
        box-shadow: none !important;
    }
    #tcy-custom-nav .md-header__button[for="__drawer"]:active { background: #f2f3f5 !important; }

    /* 内容为常驻顶条让位（v1 曾把 .md-header 折叠为 0，顶条自己不占文档流） */
    .md-container { padding-top: 52px !important; }
}

/* =========================================================================
   5. 移动端全屏导航页（<76.25em）：汉堡 → 左滑入 100vw×100% 导航筛选页
   参考官网移动菜单：白底斜线网格 / 顶部大 logo / 灰色大按钮行
   [图标|竖分隔|标签|›] / 激活行 = 粉块（对应参考黄块）/ 底部 mono 尾注 / 右上 ✕。
   chips、尾注、✕ 由 ef2-hud.js 注入（.ef2-mnav-*），此处只管样式。
   Material 的 __drawer checkbox 滑入机制沿用：只改宽度与隐藏位移。
   ========================================================================= */
.ef2-mnav-close,
.ef2-mnav-chips,
.ef2-mnav-foot { display: none; }

@media screen and (max-width: 76.234375em) {
    /* 内容页给悬浮岛让位：顶条 52 + 岛(60 起高 38) + 呼吸 → 不再压住信笺头
       （首页不让：hero 全屏大图，岛浮在图上是设计本体） */
    body:not(:has(.parallax-header)) .md-container { padding-top: 112px !important; }

    /* 抽屉开启 = 全屏导航页：一切悬浮件让位（岛已在 §7 隐藏），
       否则 TOC 标签/面板、播放器会浮在白纸上（用户实拍的"粗糙覆盖"） */
    body:has(#__drawer:checked) .tcy-fab-toc,
    body:has(#__drawer:checked) .tcy-toc-panel,
    body:has(#__drawer:checked) .tcy-music-player { display: none !important; }

    /* 抽屉里的 TOC 重复行（Material 把当前页 TOC 塞进抽屉：label[for=__toc] +
       内嵌 secondary nav，视觉上是"标题重复一行"）——桌面 ≥76.25em 已灭过，
       移动端同罪同罚；页内目录走右缘 TOC 标签。
       特异性 (0,5,0)：必须压过下方子行的 display:flex !important (0,4,0)，
       低了会被顶回显形（实测踩坑：属性选择器只算 class 级，4=4 时后写的赢） */
    .md-sidebar--primary .md-nav .md-nav__item .md-nav__link[for="__toc"],
    .md-sidebar--primary .md-nav .md-nav--secondary { display: none !important; }

    .md-main .md-sidebar--primary {
        width: 100vw !important;
        min-width: 100vw !important;
        max-width: none !important;
        height: 100% !important;
        top: 0 !important;
        left: 0 !important;
        z-index: 40 !important;
        /* 两态位移必须都由我们接管（!important）：Material 打开态写死
           translateX(12.1rem)——那是基于它默认 left:-12.1rem 的几何；
           我们把 left 归零后若沿用它的打开值，面板会悬停在 x=242px（实测踩坑）。 */
        transform: translateX(-103vw) !important;
        transition: transform .3s cubic-bezier(.2, .7, .2, 1);
        background:
            repeating-linear-gradient(45deg, rgba(23, 25, 30, .04) 0 1px, transparent 1px 72px),
            repeating-linear-gradient(-45deg, rgba(23, 25, 30, .04) 0 1px, transparent 1px 72px),
            #fff !important;
    }
    body:has(#__drawer:checked) .md-main .md-sidebar--primary {
        transform: translateX(0) !important;
    }
    @media (prefers-reduced-motion: reduce) {
        .md-main .md-sidebar--primary { transition: none; }
    }
    .md-sidebar--primary .md-sidebar__scrollwrap {
        width: 100% !important;
        max-width: none !important;
        height: 100% !important;
        margin: 0 !important;
        overflow-y: auto;
        background: transparent !important;
    }
    .md-sidebar--primary .md-nav--primary {
        display: flex;
        flex-direction: column;
        min-height: 100%;
        padding: 0 !important;
        background: transparent !important;
    }

    /* --- 顶部大 logo 区（原墨块标题栏改造；纯装饰，点击交给右上 ✕）--- */
    .md-nav--primary > .md-nav__title {
        display: flex !important;
        flex-direction: column;
        /* !important 必需：v1 有 align-items:center 会把 logo/副标题推到中轴，
           和列表/组头/尾注的左轴打架（用户点名"排版不够约束整齐"） */
        align-items: flex-start !important;
        gap: 10px;
        height: auto !important;
        min-height: 0 !important;
        padding: 64px 24px 6px !important;
        margin: 0 !important;
        background: transparent !important;
        box-shadow: none !important;
        border: 0 !important;
        color: transparent !important;
        font-size: 0 !important;
        position: static !important;
        pointer-events: none;
        cursor: default;
    }
    .md-nav--primary > .md-nav__title .md-nav__button.md-logo,
    .md-nav--primary > .md-nav__title .md-nav__icon { display: none !important; }
    .md-nav--primary > .md-nav__title::before {
        content: '' !important;
        width: 72px;
        height: 72px;
        background: url("../assets/favicons/TCYlogo.png") center / contain no-repeat;
        border: 0 !important;
    }
    .md-nav--primary > .md-nav__title::after {
        content: 'TCYMC // SWEET&SOUR FISH SERVER' !important;
        font-family: var(--ef2-mono) !important;
        font-size: .58rem !important;
        font-weight: 700;
        letter-spacing: .2em;
        color: var(--ef2-gray) !important;
        width: auto !important;
        height: auto !important;
        border: 0 !important;
        background: none !important;
        display: block !important;
    }

    /* 子面板（二级滑入页）开启时父层装饰整体退场：大 logo/mono 副标题的
       伪元素绘制层级高过子面板白底，会从返回条半透明处叠字透出（用户实拍）；
       子面板自身补不透明底是主修，这里是双保险 + 滑入动画期间边缘也不漏。
       :not(#__toc)：TOC checkbox 同为 .md-nav__toggle，勾选它不算开子面板。 */
    .md-nav--primary:has(.md-nav__toggle:not(#__toc):checked) > .md-nav__title,
    .md-nav--primary:has(.md-nav__toggle:not(#__toc):checked) > .ef2-mnav-chips,
    .md-nav--primary:has(.md-nav__toggle:not(#__toc):checked) > .ef2-mnav-foot {
        opacity: 0;
        transition: opacity .18s ease;
    }

    /* --- chips：QQ 群 / 社区（参考 登入/創作者 位；DOM 由 ef2-hud.js 注入）--- */
    .ef2-mnav-chips {
        display: flex;
        gap: 10px;
        padding: 12px 24px 4px;
        flex-wrap: wrap;
    }
    .ef2-mnav-chips a {
        display: inline-flex;
        align-items: center;
        gap: 7px;
        min-height: 38px;
        padding: 0 14px;
        font-family: var(--ef2-hei);
        font-size: .78rem;
        font-weight: 700;
        letter-spacing: .04em;
        color: var(--ef2-ink) !important;
        background: #fff !important;
        border: 1px solid var(--ef2-ink);
        text-decoration: none !important;
        clip-path: polygon(0 0, 100% 0, 100% calc(100% - 7px), calc(100% - 7px) 100%, 0 100%);
    }
    .ef2-mnav-chips a b {
        font-family: var(--ef2-mono);
        font-size: .62rem;
        font-weight: 700;
        color: var(--ef2-gray);
    }

    /* --- 一级项：灰色大按钮行 [图标|竖分隔|标签 ····· //01 ›] --- */
    .md-nav--primary > .md-nav__list {
        list-style: none;
        padding: 16px 22px 26px !important;
        margin: 0 !important;
        display: flex;
        flex-direction: column;
        gap: 10px;
        counter-reset: efm;
    }
    /* mono 组头（flex 列里伪元素占一行，和 PC 侧栏的 ▽// 组头同族） */
    .md-nav--primary > .md-nav__list::before {
        content: '\25BD// NAVIGATION \2014 \5168\7AD9\5206\533A';
        padding: 0 2px 2px;
        font-family: var(--ef2-mono);
        font-size: .56rem;
        font-weight: 700;
        letter-spacing: .2em;
        color: var(--ef2-gray);
    }
    .md-nav--primary > .md-nav__list > .md-nav__item {
        margin: 0 !important;
        padding: 0 !important;
        border: 0 !important;
        counter-increment: efm;
    }
    .md-nav--primary > .md-nav__list > .md-nav__item > .md-nav__link {
        display: flex !important;
        align-items: center !important;
        gap: 0 !important;
        width: 100% !important;
        min-height: 56px;
        margin: 0 !important;
        padding: 0 44px 0 0 !important;
        position: relative;
        background: #f2f3f5 !important;
        border: 0 !important;
        border-left: 0 !important;
        border-bottom: 0 !important;
        border-radius: 0 !important;
        color: var(--ef2-ink) !important;
        font-family: var(--ef2-hei) !important;
        font-size: .98rem !important;
        font-weight: 700 !important;
        letter-spacing: .04em !important;
        transform: none !important;
    }
    /* 图标区 + 竖分隔（extra.js 注入的 .tcy-sidebar-icon / .tcy-sidebar-page-icon） */
    .md-nav--primary > .md-nav__list > .md-nav__item > .md-nav__link .tcy-sidebar-icon,
    .md-nav--primary > .md-nav__list > .md-nav__item > .md-nav__link .tcy-sidebar-page-icon {
        order: -1 !important;
        flex: none;
        width: 54px;
        min-width: 54px;
        align-self: stretch;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        margin: 0 16px 0 0 !important;
        border-right: 1px solid rgba(23, 25, 30, .14);
        font-size: 1.05rem;
        /* extra.css 给图标盒定高 1rem，会把它钉在行顶、竖分隔线也只有一小截——
           强制撑满整行高，内部再居中（用户实拍点名） */
        height: auto !important;
        min-height: 0 !important;
        /* 参考图行图标是灰色线稿：灰阶纪律与桌面轨一致，激活行反白 */
        filter: grayscale(1) opacity(.66);
    }
    .md-nav--primary > .md-nav__list > .md-nav__item > .md-nav__link--active .tcy-sidebar-icon,
    .md-nav--primary > .md-nav__list > .md-nav__item > .md-nav__link--active .tcy-sidebar-page-icon {
        filter: brightness(0) invert(1);
    }
    /* 右缘箭头：全部一级项统一同字形/同色/同位的 mono ›（用户点名对齐统一）；
       可展开项不再用 Material 的 md-nav__icon（粉色、位置不齐），改为同款 › 展开时转 90° */
    .md-nav--primary > .md-nav__list > .md-nav__item > .md-nav__link::after {
        content: '\203A';
        position: absolute;
        right: 18px;
        top: 50%;
        transform: translateY(-50%);
        font-family: var(--ef2-mono);
        font-size: 1.05rem;
        font-weight: 700;
        color: rgba(23, 25, 30, .45);
        transition: transform .2s ease;
    }
    .md-sidebar--primary .md-nav__item--nested > .md-nav__link .md-nav__icon { display: none !important; }
    .md-nav--primary > .md-nav__list > .md-nav__item--nested > .md-nav__toggle:checked ~ .md-nav__link::after {
        transform: translateY(-50%) rotate(90deg);
    }
    /* 行尾工业编号 //01（::after 已被 › 占用 → ::before 借 order 排到行尾） */
    .md-nav--primary > .md-nav__list > .md-nav__item > .md-nav__link::before {
        content: '// ' counter(efm, decimal-leading-zero);
        order: 9;
        margin-left: auto;
        padding: 0 2px 0 12px;
        position: static !important;
        width: auto !important;
        height: auto !important;
        background: none !important;
        border: 0 !important;
        transform: none !important;
        font-family: var(--ef2-mono);
        font-size: .6rem;
        font-weight: 700;
        letter-spacing: .08em;
        color: rgba(23, 25, 30, .38);
    }
    .md-nav--primary > .md-nav__list > .md-nav__item > .md-nav__link--active::before { color: rgba(255, 255, 255, .78); }
    /* 激活行 = 粉块白字（参考图黄块的粉色位） */
    .md-nav--primary > .md-nav__list > .md-nav__item > .md-nav__link--active,
    .md-sidebar--primary .md-nav__link--active {
        background: var(--ef2-punch) !important;
        border-left: 0 !important;
        color: #fff !important;
    }
    .md-nav--primary > .md-nav__list > .md-nav__item > .md-nav__link--active .tcy-sidebar-icon,
    .md-nav--primary > .md-nav__list > .md-nav__item > .md-nav__link--active .tcy-sidebar-page-icon {
        border-right-color: rgba(255, 255, 255, .35);
    }
    .md-nav--primary > .md-nav__list > .md-nav__item > .md-nav__link--active::after { color: rgba(255, 255, 255, .8); }
    .md-sidebar--primary .md-nav__link--active .md-nav__icon { color: #fff !important; }
    /* hover（触屏为 :active 补充） */
    .md-nav--primary > .md-nav__list > .md-nav__item > .md-nav__link:hover:not(.md-nav__link--active) {
        background: #e8eaed !important;
        border-left: 0 !important;
        color: var(--ef2-ink) !important;
    }
    /* --- 二级滑入页（Material 移动端子菜单是覆盖全抽屉的独立面板，
       不是就地展开——此前皮肤按"就地展开"做，返回条/背景全是 v1 漏网）--- */
    .md-sidebar--primary .md-nav__item--nested > .md-nav {
        /* 不透明白 + 斜格，和抽屉母底同构；z 抬到父层装饰伪元素之上，
           彻底断掉大 logo/mono 副标题透过来叠字（用户实拍灾难） */
        background:
            repeating-linear-gradient(45deg, rgba(23, 25, 30, .04) 0 1px, transparent 1px 72px),
            repeating-linear-gradient(-45deg, rgba(23, 25, 30, .04) 0 1px, transparent 1px 72px),
            #fff !important;
        z-index: 3 !important;
        min-height: 100% !important;
        padding: 0 !important;
        margin: 0 !important;
    }
    /* 返回条：白底墨线 [‹]方框 + 分区名 ····· RETURN //（点击整条返回一级） */
    .md-sidebar--primary .md-nav__item--nested > .md-nav > .md-nav__title {
        display: flex !important;
        align-items: center !important;
        gap: 14px;
        min-height: 62px;
        height: auto !important;
        margin: 0 !important;
        padding: 0 68px 0 20px !important;
        position: sticky !important;
        top: 0;
        z-index: 2;
        background: #fff !important;
        border: 0 !important;
        border-bottom: 1px solid var(--ef2-ink) !important;
        border-radius: 0 !important;
        box-shadow: none !important;
        color: var(--ef2-ink) !important;
        font-family: var(--ef2-hei) !important;
        font-size: .98rem !important;
        font-weight: 700 !important;
        letter-spacing: .04em !important;
        white-space: nowrap;
        overflow: hidden;
        cursor: pointer;
        -webkit-tap-highlight-color: transparent;
    }
    .md-sidebar--primary .md-nav__item--nested > .md-nav > .md-nav__title:active { background: #f2f3f5 !important; }
    /* v1 给标题伪元素画过渐变饰线（实拍里穿过字面的斜线）——全部改造为 ‹ 方框把手 */
    .md-sidebar--primary .md-nav__item--nested > .md-nav > .md-nav__title::before {
        content: '\2039' !important;
        flex: none;
        width: 34px;
        height: 34px !important;
        display: inline-flex !important;
        align-items: center;
        justify-content: center;
        position: static !important;
        transform: none !important;
        background: #fff !important;
        border: 1px solid var(--ef2-ink) !important;
        border-radius: 0 !important;
        font-family: var(--ef2-mono);
        font-size: 1.15rem;
        font-weight: 700;
        line-height: 1;
        color: var(--ef2-ink);
        padding-bottom: 3px;
        box-sizing: border-box;
    }
    .md-sidebar--primary .md-nav__item--nested > .md-nav > .md-nav__title::after {
        content: 'RETURN //' !important;
        margin-left: auto;
        position: static !important;
        width: auto !important;
        height: auto !important;
        background: none !important;
        border: 0 !important;
        transform: none !important;
        display: block !important;
        font-family: var(--ef2-mono);
        font-size: .56rem;
        font-weight: 700;
        letter-spacing: .18em;
        color: var(--ef2-gray);
    }
    /* Material 自带的返回箭头 svg 与 wrapper 一律退场（用自绘 ‹ 方框） */
    .md-sidebar--primary .md-nav__item--nested > .md-nav > .md-nav__title .md-nav__icon,
    .md-sidebar--primary .md-nav__item--nested > .md-nav > .md-nav__title .md-nav__button { display: none !important; }
    /* 极窄屏：RETURN // 注记让位给长分区名 */
    @media screen and (max-width: 22.5em) {
        .md-sidebar--primary .md-nav__item--nested > .md-nav > .md-nav__title::after { content: '' !important; }
    }

    /* 列表：与一级同轴的卡行栈（旧版 54px 左错位 + 全宽溢出右缘 = 横向滚动条元凶） */
    .md-sidebar--primary .md-nav__item--nested > .md-nav > .md-nav__list {
        list-style: none;
        padding: 14px 22px 30px !important;
        margin: 0 !important;
        display: flex;
        flex-direction: column;
        gap: 8px;
        counter-reset: efms;
    }
    .md-sidebar--primary .md-nav__item--nested > .md-nav > .md-nav__list::before {
        content: '\25BD// SECTION FILES \2014 \672C\533A\6761\76EE';
        padding: 0 2px 2px;
        font-family: var(--ef2-mono);
        font-size: .56rem;
        font-weight: 700;
        letter-spacing: .2em;
        color: var(--ef2-gray);
    }
    .md-sidebar--primary .md-nav__item--nested > .md-nav > .md-nav__list > .md-nav__item {
        padding: 0 !important;
        margin: 0 !important;
        border: 0 !important;
        counter-increment: efms;
    }
    .md-sidebar--primary .md-nav__item--nested .md-nav .md-nav__link {
        display: flex !important;
        align-items: center !important;
        gap: 0 !important;
        min-height: 50px;
        margin: 0 !important;
        padding: 0 14px 0 0 !important;
        background: #fff !important;
        border: 1px solid var(--ef2-line) !important;
        border-radius: 0 !important;
        font-family: var(--ef2-hei) !important;
        font-size: .88rem !important;
        font-weight: 600 !important;
        color: var(--ef2-ink-soft) !important;
        transform: none !important;
        position: relative;
    }
    /* 无图标行（extra.js 未命中的标签）没有图标盒，文字需自己的左内距 */
    .md-sidebar--primary .md-nav__item--nested .md-nav .md-nav__link:not(.tcy-sidebar-page-with-icon) {
        padding-left: 16px !important;
    }
    /* 图标盒与一级行同构：46px 竖分隔 + 灰阶纪律，激活行回彩 */
    .md-sidebar--primary .md-nav__item--nested .md-nav .md-nav__link .tcy-sidebar-page-icon {
        order: -1 !important;
        flex: none;
        width: 46px;
        min-width: 46px;
        align-self: stretch;
        height: auto !important;
        min-height: 0 !important;
        display: inline-flex !important;
        align-items: center;
        justify-content: center;
        margin: 0 14px 0 0 !important;
        border-right: 1px solid rgba(23, 25, 30, .12);
        font-size: .95rem;
        filter: grayscale(1) opacity(.6);
    }
    /* 行尾工业编号 //01（与一级行、PC 侧栏同族） */
    .md-sidebar--primary .md-nav__item--nested .md-nav .md-nav__link::after {
        content: '// ' counter(efms, decimal-leading-zero);
        order: 9;
        margin-left: auto;
        padding-left: 12px;
        position: static !important;
        width: auto !important;
        height: auto !important;
        background: none !important;
        border: 0 !important;
        transform: none !important;
        font-family: var(--ef2-mono);
        font-size: .56rem;
        font-weight: 700;
        letter-spacing: .08em;
        color: rgba(23, 25, 30, .34);
    }
    .md-sidebar--primary .md-nav__item--nested .md-nav .md-nav__link .md-ellipsis {
        margin: 0 !important;
        flex: 0 1 auto;
        min-width: 0;
    }
    /* 激活行：淡粉纸 + 左 3px 粉闸线（inset shadow 不挤几何），图标回彩 */
    .md-sidebar--primary .md-nav__item--nested .md-nav .md-nav__link--active {
        background: var(--ef2-pink-soft) !important;
        border-color: var(--ef2-punch) !important;
        box-shadow: inset 3px 0 0 var(--ef2-punch) !important;
        color: var(--ef2-deep) !important;
        font-weight: 700 !important;
    }
    .md-sidebar--primary .md-nav__item--nested .md-nav .md-nav__link--active .tcy-sidebar-page-icon {
        filter: none;
        border-right-color: rgba(236, 64, 122, .35);
    }
    .md-sidebar--primary .md-nav__item--nested .md-nav .md-nav__link--active::after { color: var(--ef2-punch); }
    .md-sidebar--primary .md-nav__item--nested .md-nav .md-nav__link:active { background: #f7f8f9 !important; }

    /* --- 底部 mono 尾注（DOM 由 ef2-hud.js 注入）：一行排开，左注记右链接 --- */
    .ef2-mnav-foot {
        display: flex;
        flex-flow: row wrap;
        align-items: center;
        gap: 10px 20px;
        margin-top: auto;
        padding: 18px 24px calc(24px + env(safe-area-inset-bottom, 0px));
        border-top: 1px solid var(--ef2-line-soft);
    }
    .ef2-mnav-foot span { margin-right: auto; }
    .ef2-mnav-foot span {
        font-family: var(--ef2-mono);
        font-size: .52rem;
        font-weight: 700;
        letter-spacing: .18em;
        color: var(--ef2-gray);
    }
    .ef2-mnav-foot a {
        font-family: var(--ef2-mono);
        font-size: .62rem;
        font-weight: 700;
        letter-spacing: .1em;
        color: var(--ef2-ink-soft) !important;
        text-decoration: none !important;
        background: none !important;
        border-bottom: 1px solid var(--ef2-line);
        padding-bottom: 2px;
    }

    /* --- 右上 ✕（label[for=__drawer]，DOM 由 ef2-hud.js 注入到 sidebar 根）
       白盒墨框 + 右下切角（btn-cut 家族），z 抬到子面板(3)/返回条(2)之上：
       从任意层级都能一键关整个抽屉 --- */
    .ef2-mnav-close {
        display: flex;
        position: absolute;
        top: 10px;
        right: 12px;
        width: 44px;
        height: 44px;
        align-items: center;
        justify-content: center;
        font-family: var(--ef2-mono);
        font-size: 1.05rem;
        font-weight: 700;
        color: var(--ef2-ink);
        background: #fff;
        border: 1px solid var(--ef2-ink);
        clip-path: polygon(0 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%);
        cursor: pointer;
        z-index: 5;
        -webkit-tap-highlight-color: transparent;
    }
    .ef2-mnav-close:active { background: #f2f3f5; }

    /* 打开时锁背景滚动（Material 自带滚动锁的兜底） */
    body:has(#__drawer:checked) { overflow: hidden; }
}

/* =========================================================================
   6. 音乐播放器 Endfield 化（DOM/JS 冻结，纯 CSS 接管 .tcy-music-player）
   通用：白纸墨线小控制台（232px），mono 排印，方块播放键，2px 粉进度。
   主页（body:has(.parallax-header)）：置顶右侧；移动端并入顶部条（minimized 方块）。
   内容页：沿用左下位（桌面让开白轨）。
   定位属性刻意【不加 !important】：music-player.js 拖拽写 inline left/top，
   用户拖过之后以用户为准。
   ========================================================================= */
.tcy-music-player {
    background: #fff !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    border: 1px solid var(--ef2-ink) !important;
    border-radius: 0 !important;
    box-shadow: 0 10px 28px rgba(23, 25, 30, .16) !important;
    padding: 9px 10px;
    gap: 6px;
    /* rem 基：跟随 4K/2K 根缩放等比放大，定宽 px 在大屏会让内部 rem 文字换行挤爆（实测踩坑）。
       max-width 不能用 px 封顶——否则 2K/4K 下宽度被卡住而内部 rem 文字继续放大，
       照样换行（第二次踩同一坑），只需防超窄视口溢出。
       11.35rem：10.55rem 时进度行右端只剩 ~11px 余量，总时长到两位数分钟必被裁（用户实拍） */
    width: 11.35rem;
    min-width: 0 !important;
    max-width: calc(100vw - 24px);
    resize: none !important;
    font-family: var(--ef2-mono);
    /* 抬到所有页面装饰层之上（右缘 HUD/缎带/分区面板都不许挡它，用户点名） */
    z-index: 1002 !important;
}
/* 进度行允许滑轨收缩，别让时间数字被推出画外 */
.tcy-music-player .tcy-progress-container { min-width: 0; }
.tcy-music-player .tcy-seek-slider { min-width: 36px; }
.tcy-music-player:not(.minimized) {
    clip-path: polygon(0 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%);
}
.tcy-music-player:hover {
    transform: none !important;
    box-shadow: 0 12px 32px rgba(23, 25, 30, .2) !important;
}
/* 头行：「🌸 站长精选歌单」→ mono 微字（文本来自 JS，只调排印） */
.tcy-player-header {
    font-family: var(--ef2-mono) !important;
    font-size: .56rem !important;
    font-weight: 700 !important;
    letter-spacing: .12em;
    color: var(--ef2-gray) !important;
    border-bottom: 1px solid var(--ef2-line-soft) !important;
    padding-bottom: 5px !important;
}
.tcy-minimize-btn {
    border-radius: 0 !important;
    background: transparent !important;
    color: var(--ef2-ink) !important;
    width: 22px !important;
    height: 22px !important;
}
.tcy-minimize-btn:hover { background: #f2f3f5 !important; transform: none !important; }
.tcy-playlist-toggle { font-size: .82rem !important; }
/* 播放键：粉圆 → 墨方块 */
.tcy-play-btn {
    width: 30px !important;
    height: 30px !important;
    border-radius: 0 !important;
    background: var(--ef2-ink) !important;
    color: #fff !important;
    font-size: 12px !important;
    box-shadow: none !important;
}
.tcy-play-btn:hover { background: #000 !important; color: #fff !important; transform: none !important; }
.tcy-track-name {
    font-family: var(--ef2-mono) !important;
    font-size: .64rem !important;
    color: var(--ef2-ink) !important;
    font-weight: 600 !important;
}
.tcy-progress-container { font-size: .54rem !important; color: var(--ef2-gray) !important; }
/* 进度条：2px 墨线 + 粉方块滑钮 */
.tcy-seek-slider {
    height: 2px !important;
    border-radius: 0 !important;
    background-color: rgba(23, 25, 30, .18) !important;
}
.tcy-seek-slider::-webkit-slider-thumb {
    height: 10px !important;
    width: 6px !important;
    border-radius: 0 !important;
    background: var(--ef2-punch) !important;
    box-shadow: none !important;
}
/* 歌单面板 */
.tcy-playlist-panel.show { border-top-color: var(--ef2-line) !important; }
.tcy-playlist-panel li {
    border-radius: 0 !important;
    font-family: var(--ef2-mono);
    font-size: .64rem !important;
    color: var(--ef2-ink-soft) !important;
}
.tcy-playlist-panel li:hover {
    background: #f2f3f5 !important;
    color: var(--ef2-ink) !important;
    transform: none !important;
}
.tcy-playlist-panel li.active {
    background: var(--ef2-pink-soft) !important;
    color: var(--ef2-deep) !important;
    border-left: 3px solid var(--ef2-punch) !important;
}
/* minimized：粉圆球 → 白纸墨线方块 ♪（参考顶部条声音钮） */
.tcy-music-player.minimized {
    width: 40px !important;
    min-width: 40px !important;
    max-width: 40px !important;
    height: 40px !important;
    border-radius: 0 !important;
    border: 1px solid var(--ef2-ink) !important;
    box-shadow: 0 6px 18px rgba(23, 25, 30, .14) !important;
}
.tcy-music-player.minimized .tcy-player-header {
    width: 38px !important;
    height: 38px !important;
    border-bottom: 0 !important;
    padding: 0 !important;
}
.tcy-music-player.minimized .tcy-minimize-btn {
    width: 38px !important;
    height: 38px !important;
    border-radius: 0 !important;
    background: #fff !important;
    color: var(--ef2-ink) !important;
    box-shadow: none !important;
}
.tcy-music-player.minimized.is-playing .tcy-minimize-btn::after {
    border-radius: 0 !important;
    inset: -4px !important;
    border: 1px solid rgba(236, 64, 122, .55) !important;
}

/* --- 位置：全站统一置顶右侧（v2.6 用户点名：内容页停靠逻辑与主页一致）---
   本文件晚于 music-player.css 加载，同特异性后到者胜，压掉它的左下角基位 */
.tcy-music-player {
    top: 14px;
    right: 16px;
    left: auto;
    bottom: auto;
}
/* 移动端：展开面板悬在顶条下方；minimized 方块并入顶条（CTA 左侧）——全站同款 */
@media screen and (max-width: 76.234375em) {
    .tcy-music-player {
        top: 60px;
        right: 8px;
        width: min(232px, calc(100vw - 16px));
    }
    .tcy-music-player.minimized {
        top: 6px;
        right: 176px; /* 与黑 CTA 之间留 8px 呼吸，不贴死 */
    }
    /* 340px 以下顶条挤不下三件套：方块退回顶条下方 */
    @media (max-width: 359px) {
        .tcy-music-player.minimized { top: 60px; right: 8px; }
    }
}

/* =========================================================================
   7. 工具簇「灵动岛」：搜索 + 换主题 + 打印 + 召唤奔马 → 页面顶部居中悬浮
   用户点名：窄矮如 iPhone 灵动岛；风格适配主页 → 墨色窄条 + 粉角贴 + mono。
   陷阱：不能用 clip-path 切角（.md-search__output 是本容器内 absolute 后代，
   会被整个裁没——第一轮已踩）；切角只用角贴片。
   ========================================================================= */
.tcy-header-tools {
    /* 顶部居中悬浮（压过 extra.css 的右下角定位；60em 以下它在 headerInner 里，
       fixed 照样以视口定位，见下方移动端块） */
    position: fixed !important;
    top: 12px !important;
    left: 50% !important;
    right: auto !important;
    bottom: auto !important;
    transform: translateX(-50%);
    z-index: 1001;
    display: inline-flex !important;
    align-items: center !important;
    flex-wrap: nowrap !important;
    gap: 2px !important;
    height: 42px;
    padding: 0 10px 0 8px !important;
    max-width: calc(100vw - 16px);
    border-radius: 3px !important;
    /* v1 §13 移动端块给本簇加过 clip-path 切角——必须中和，否则下拉又被裁（同一坑第三次） */
    clip-path: none !important;
    /* 终末地风 = 白纸墨线（用户点名：不是黑底），粉 tick + 粉角贴做家族特征 */
    background: rgba(255, 255, 255, .96) !important;
    border: 1px solid var(--ef2-line) !important;
    box-shadow: 0 10px 28px rgba(23, 25, 30, .14) !important;
    backdrop-filter: blur(8px) !important;
    -webkit-backdrop-filter: blur(8px) !important;
    transition: box-shadow .25s ease;
}
.tcy-header-tools:focus-within {
    box-shadow: 0 14px 36px rgba(23, 25, 30, .2), 0 0 0 1px rgba(236, 64, 122, .4) !important;
}
/* --- v2.4 顶部吸附（用户点名）：桌面鼠标环境默认上收进顶缘，只露 13px 底缘
   （白纸条 + 右下粉角贴充当把手）；悬停或键盘聚焦（搜索）时滑出。
   触屏没有 hover，移动端保持常驻不吸附。 --- */
@media screen and (min-width: 76.25em) and (hover: hover) and (pointer: fine) {
    .tcy-header-tools {
        top: 0 !important;
        transform: translateX(-50%) translateY(calc(-100% + 13px));
        transition: transform .32s cubic-bezier(.2, .7, .2, 1), box-shadow .25s ease;
    }
    .tcy-header-tools:hover,
    .tcy-header-tools:focus-within {
        /* 滑出必须贴住顶缘（translateY(0)，不能悬空留隙）：若停在 10px，
           鼠标落在岛上方那条空档时——收起态的把手够得着、滑出态的岛却盖不住，
           hover 会在两态间无限抖动（用户实测反馈） */
        transform: translateX(-50%) translateY(0);
    }
    @media (prefers-reduced-motion: reduce) {
        .tcy-header-tools { transition: box-shadow .25s ease; }
    }
}
/* 右下粉角贴 + 左缘 3px 粉 tick（终末地黑 CTA 的家族特征） */
.tcy-header-tools::after {
    content: '';
    position: absolute;
    right: -1px; bottom: -1px;
    width: 10px; height: 10px;
    background: linear-gradient(135deg, transparent 49.5%, var(--ef2-punch) 50%);
    pointer-events: none;
}
.tcy-header-tools::before {
    content: '';
    position: absolute;
    left: -1px; top: 6px; bottom: 6px;
    width: 3px;
    background: var(--ef2-punch);
    pointer-events: none;
}
/* --- 动作钮（换主题 / 奔马 / 打印）：30px 方块，墨底上亮显 --- */
.tcy-header-tools .tcy-header-actions { gap: 0 !important; }
.tcy-header-tools .tcy-header-actions > * {
    width: 30px !important;
    height: 30px !important;
    border-radius: 0 !important;
    background: transparent !important;
    border: 0 !important;
    box-shadow: none !important;
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    transition: background .18s ease;
}
.tcy-header-tools .tcy-header-actions > *:hover { background: #f2f3f5 !important; }
/* --- 搜索：收起窄条，聚焦时向两侧展开（灵动岛的"弹性"） --- */
.tcy-header-tools .md-search {
    position: static !important; /* 让下拉以整个岛为定位参照，居中垂下 */
    flex: 0 1 11rem !important;
    min-width: 0 !important;
    max-width: none !important;
    transition: flex-basis .3s cubic-bezier(.2, .7, .2, 1);
}
/* 原生「全屏搜索模式」全宽度中和：Material 在 __search 勾选后会展开白色大圆
   overlay + 全屏 inner，extra.css 只在 ≥60em 中和过——灵动岛在全部断点接管布局，
   <60em 一点放大镜/输入框（Material JS 会把 __search 勾上）白幕就铺满盖页
   （用户实拍）。在岛作用域内把原生模式的形变全部压死，搜索永远走岛内下拉。 */
.tcy-header-tools .md-search__overlay { display: none !important; }
/* extra.css 给 __inner 写了 position:relative !important —— 它会抢走下拉的
   定位参照（实测下拉右偏半宽），必须一并压回 static；width/height/transform
   一并钉死，防勾选态被原生全屏规则拉走 */
.tcy-header-tools .md-search__inner {
    position: static !important;
    width: 100% !important;
    height: auto !important;
    opacity: 1 !important;
    transform: none !important;
    overflow: visible !important;
    padding: 0 !important;
    z-index: auto !important;
}
.tcy-header-tools .md-search:focus-within { flex-basis: 20rem !important; }
.tcy-header-tools .md-search__form {
    min-height: 30px !important;
    height: 30px !important;
    border-radius: 0 !important;
    border: 0 !important;
    border-bottom: 1px solid rgba(23, 25, 30, .3) !important;
    background: transparent !important;
    box-shadow: none !important;
    transition: border-color .2s ease;
}
.tcy-header-tools .md-search__form:focus-within {
    border-bottom-color: var(--ef2-punch) !important;
}
.tcy-header-tools .md-search__input {
    height: 30px !important;
    font-size: .78rem !important;
    color: var(--ef2-ink) !important;
    caret-color: var(--ef2-punch);
}
.tcy-header-tools .md-search__input::placeholder {
    color: var(--ef2-gray) !important;
    /* 占位字缩号：保证「输入关键词搜索」在收起态完整显示 */
    font-size: .68rem;
    letter-spacing: .04em;
}
/* 放大镜图标：Material 按 48px 高表单定位（top 6.6px），30px 窄条里会沉底——绝对居中 */
.tcy-header-tools .md-search__icon {
    top: 50% !important;
    transform: translateY(-50%) !important;
    margin: 0 !important;
    display: inline-flex !important;
    align-items: center !important;
}
.tcy-header-tools .md-search__icon,
.tcy-header-tools .md-search__form .md-icon,
.tcy-header-tools .md-search__form button { color: var(--ef2-ink-soft) !important; }
.tcy-header-tools .md-search__icon svg { fill: currentColor; }
/* --- 结果下拉：白纸墨线面板，从岛下方居中垂下（岛在顶部 → 改为向下开） --- */
.tcy-header-tools .md-search__output {
    position: absolute !important;
    top: calc(100% + 10px) !important;
    bottom: auto !important;
    left: 50% !important;
    right: auto !important;
    /* !important 必需：Material/extra.css 对 output 有 transform 声明，居中会被吃掉（实测右偏半宽） */
    transform: translateX(-50%) !important;
    width: min(34rem, calc(100vw - 24px)) !important;
    max-height: min(62vh, 34rem) !important;
    border-radius: 0 !important;
    background: #fff !important;
    border: 1px solid var(--ef2-ink) !important;
    box-shadow: 0 22px 52px rgba(23, 25, 30, .28) !important;
    overflow: hidden;
    /* 未聚焦默认隐身必须写在岛作用域（全宽度生效）：extra.css 的同款隐身规则
       锁在 ≥60em 里，959px 以下没有任何兜底——「正在初始化搜索引擎」灰条
       会常驻浮在正文上（用户竖屏实拍）。 */
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity .18s ease, visibility .18s ease;
}
.tcy-header-tools .md-search__scrollwrap {
    max-height: min(62vh, 34rem) !important;
    overflow-y: auto !important;
}
/* extra.css 的显形态规则（.md-search:focus-within .md-search__output）特异性 (0,4,0)
   带 translateY(0)，会顶掉上面 (0,2,0) 的居中位移——同特异性写一遍才能赢；
   显形三件套同样要全宽度成立（extra.css 版只覆盖 ≥60em） */
.tcy-header-tools .md-search:focus-within .md-search__output {
    transform: translateX(-50%) !important;
    opacity: 1 !important;
    visibility: visible !important;
    pointer-events: auto !important;
}
/* 移动端：顶部条（52px）之下居中；全屏导航打开时让位隐藏 */
@media screen and (max-width: 76.234375em) {
    .tcy-header-tools {
        top: 60px !important;
        height: 38px;
        padding: 0 8px 0 6px !important;
    }
    .tcy-header-tools .md-search { flex: 0 1 8.5rem !important; }
    .tcy-header-tools .md-search:focus-within { flex-basis: calc(100vw - 160px) !important; }
    body:has(#__drawer:checked) .tcy-header-tools { display: none !important; }
    /* 下拉沿用基础规则的岛内居中即可：岛自身就是 left:50% 视口居中，
       不要改 position:fixed —— 岛带 transform，fixed 会被降级成相对岛定位，
       实测面板右缘出血（变换祖先陷阱） */
    /* 搜索聚焦时右缘 TOC 标签让位：窄屏下拉面板宽近满屏，会被它压边 */
    body:has(.tcy-header-tools .md-search:focus-within) .tcy-fab-toc,
    body:has(.tcy-header-tools .md-search:focus-within) .tcy-toc-panel {
        opacity: 0;
        pointer-events: none;
        transition: opacity .18s ease;
    }
}
/* 手电筒暗色主题：岛转墨纸，输入文字保持高对比 */
body.flashlight-mode .tcy-header-tools {
    background: rgba(26, 30, 36, .95) !important;
    border-color: rgba(255, 255, 255, .14) !important;
}
body.flashlight-mode .tcy-header-tools .md-search__input { color: #eceff1 !important; }
body.flashlight-mode .tcy-header-tools .md-search__input::placeholder { color: rgba(236, 239, 241, .4) !important; }
body.flashlight-mode .tcy-header-tools .md-search__form { border-bottom-color: rgba(255, 255, 255, .28) !important; }
body.flashlight-mode .tcy-header-tools .md-search__icon,
body.flashlight-mode .tcy-header-tools .md-search__form .md-icon,
body.flashlight-mode .tcy-header-tools .md-search__form button { color: rgba(236, 239, 241, .75) !important; }
body.flashlight-mode .tcy-header-tools .tcy-header-actions > *:hover { background: rgba(255, 255, 255, .12) !important; }

@media (prefers-reduced-motion: reduce) {
    .tcy-header-tools,
    .tcy-header-tools .md-search { transition: none !important; }
}

/* =========================================================================
   8. 滚动条：白轨 + 墨色滑块，hover 变粉（Endfield 的机械感细节）
   ========================================================================= */
html {
    scrollbar-color: var(--ef2-ink) #f2f2f3;
}
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: #f2f2f3; }
::-webkit-scrollbar-thumb {
    background: var(--ef2-ink);
    border-radius: 0;
    border: 2px solid #f2f2f3;
}
::-webkit-scrollbar-thumb:hover { background: var(--ef2-punch); }

/* =========================================================================
   9. 内容页侧栏（≥76.25em，非首页）：▽// mono 组头 + 反白墨块激活
   ========================================================================= */
@media screen and (min-width: 76.25em) {
    .md-sidebar .md-nav__title {
        font-family: var(--ef2-mono);
        font-size: .62rem !important;
        font-weight: 700;
        letter-spacing: .16em;
        color: var(--ef2-gray) !important;
        background: transparent !important;
        box-shadow: none !important;
    }
    .md-sidebar .md-nav__title::before {
        content: '▽// ';
        color: var(--ef2-punch);
    }
    /* 左侧章节导航：激活 = 反白墨块 + 粉 tick */
    .md-sidebar--primary .md-nav__link--active {
        background: var(--ef2-ink) !important;
        color: #fff !important;
        border-left: 3px solid var(--ef2-punch) !important;
        padding-left: .5rem !important;
    }
    /* 右侧 TOC：激活 = 粉字 + 细粉线 */
    .md-sidebar--secondary .md-nav__link--active {
        color: var(--ef2-punch) !important;
        border-left: 2px solid var(--ef2-punch);
        padding-left: .5rem;
        background: var(--ef2-pink-soft);
    }
}

/* =========================================================================
   10. 终末地黑页脚（DOM 由 overrides/main.html 的 footer block 输出）
   整幅近黑区：斜纹分隔条 → prev/next → 品牌 → 链接排 → mono 免责 → ©。
   ========================================================================= */
.ef2-footer {
    /* !important 必需：extra.css 有 footer { background: transparent !important }（旧主题让
       Material 页脚透出粉底），普通声明会被它打穿 → 黑页脚变成白字浮在花海上不可读。 */
    background: var(--ef2-ink) !important;
    color: #eceff1;
    margin-top: 56px;
}
@media screen and (min-width: 76.25em) {
    /* 白轨 fixed 全高盖在页脚左缘上（终末地原版就是这个叠法），内容让位即可 */
    .ef2-footer { padding-left: var(--ef-rail-w); }
}

/* 斜纹分隔条 */
.ef2-footer-stripe {
    height: 6px;
    background-image: repeating-linear-gradient(45deg,
        rgba(255, 255, 255, .16) 0 4px, transparent 4px 9px);
}

/* prev / next（内容页兜底；首页由模板判断不输出） */
.ef2-footer-nav {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 12px;
    max-width: 1080px;
    margin: 0 auto;
    padding: 22px 24px 0;
}
.ef2-footer-nav a {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding: 12px 16px;
    background: rgba(255, 255, 255, .04) !important;
    color: #fff !important;
    text-decoration: none !important;
    border: 1px solid rgba(255, 255, 255, .22);
    clip-path: polygon(0 0, 100% 0, 100% calc(100% - var(--ef2-cut)), calc(100% - var(--ef2-cut)) 100%, 0 100%);
    transition: background .2s ease, border-color .2s ease;
}
.ef2-footer-nav a:hover {
    background: rgba(255, 255, 255, .1) !important;
    border-color: rgba(255, 255, 255, .45);
}
.ef2-footer-prev { grid-column: 1; text-align: left; }
.ef2-footer-next { grid-column: 2; text-align: right; }
.ef2-footer-nav-k {
    font-family: var(--ef2-mono);
    font-size: .58rem;
    font-weight: 700;
    letter-spacing: .2em;
    color: var(--ef2-pink);
}
.ef2-footer-nav-t {
    font-family: var(--ef2-hei);
    font-size: .86rem;
    font-weight: 700;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* 主体 */
.ef2-footer-main {
    position: relative;
    max-width: 1080px;
    margin: 0 auto;
    padding: 44px 24px 30px;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 20px;
    text-align: center;
}

/* 两角 mono 竖排点缀 + CMYK 微色条 */
.ef2-footer-corner {
    position: absolute;
    top: 48px;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 12px;
    pointer-events: none;
    user-select: none;
}
.ef2-footer-corner--l { left: 18px; }
.ef2-footer-corner--r { right: 18px; }
.ef2-footer-corner span {
    writing-mode: vertical-rl;
    font-family: var(--ef2-mono);
    font-size: .56rem;
    font-weight: 700;
    letter-spacing: .3em;
    color: rgba(255, 255, 255, .22);
    white-space: nowrap;
}
.ef2-footer-corner .ef2-cmyk { opacity: .85; }
@media screen and (max-width: 900px) {
    .ef2-footer-corner { display: none; }
}

/* 品牌 */
.ef2-footer-brand {
    display: flex;
    align-items: center;
    gap: 16px;
}
.ef2-footer-brand img {
    width: 56px;
    height: 56px;
    display: block;
}
.ef2-footer-brand-copy {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 4px;
    text-align: left;
}
.ef2-footer-brand-cn {
    font-family: var(--ef2-hei);
    font-size: 1.12rem;
    font-weight: 900;
    color: #fff;
    letter-spacing: .04em;
}
.ef2-footer-brand-en {
    font-family: var(--ef2-mono);
    font-size: .6rem;
    font-weight: 700;
    letter-spacing: .24em;
    color: rgba(255, 255, 255, .48);
}

/* 链接排（服務條款|隱私政策 那排的等价物） */
.ef2-footer-links {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    row-gap: 8px;
}
.ef2-footer-links a {
    font-family: var(--ef2-hei);
    font-size: .84rem;
    font-weight: 600;
    letter-spacing: .06em;
    color: #fff !important;
    text-decoration: none !important;
    background: none !important;
    padding: 2px 18px;
    border-right: 1px solid rgba(255, 255, 255, .22);
    transition: color .18s ease;
}
.ef2-footer-links a:last-child { border-right: 0; }
.ef2-footer-links a:hover { color: var(--ef2-pink) !important; }

/* mono 免责小字 */
.ef2-footer-fine {
    font-family: var(--ef2-mono);
    font-size: .66rem;
    line-height: 1.9;
    letter-spacing: .04em;
    color: rgba(255, 255, 255, .42);
}
.ef2-footer-fine p { margin: 0; }

/* © 行（config.copyright 原文注入，里面的旧类做暗色适配） */
.ef2-footer-copy {
    font-size: .72rem;
    color: rgba(255, 255, 255, .55);
    line-height: 1.8;
}
.ef2-footer-copy a,
.ef2-footer-copy .footer-community-link {
    color: #f8bbd0 !important;
    text-decoration: none !important;
    background: none !important;
}
.ef2-footer-copy a:hover { color: var(--ef2-pink) !important; }
.ef2-footer-copy .footer-divider { color: rgba(255, 255, 255, .25); padding: 0 6px; }
.ef2-footer-copy .footer-community-note { color: rgba(255, 255, 255, .38); margin-left: 6px; }

@media screen and (max-width: 700px) {
    .ef2-footer { margin-top: 40px; }
    .ef2-footer-nav { grid-template-columns: 1fr; padding: 18px 16px 0; }
    .ef2-footer-prev, .ef2-footer-next { grid-column: 1; text-align: left; }
    .ef2-footer-main { padding: 34px 18px 26px; gap: 16px; }
    .ef2-footer-brand { flex-direction: column; gap: 10px; }
    .ef2-footer-brand-copy { align-items: center; text-align: center; }
    /* 触控目标 ≥40px（评审 M5）：竖向 padding 抬到 9px */
    .ef2-footer-links a { padding: 9px 12px; font-size: .8rem; }
    .ef2-footer-fine { font-size: .6rem; }
}

/* =========================================================================
   11. 2K/4K 结构件补缩放（配合 ef2-core §6 的根缩放曲线）
   根字号 rem 已带动排版；这里只把轨内几个 px 写死的结构量按同曲线放大，
   避免 4K 下「轨随 token 变宽、里面的图标却还是 20px」的失衡。
   （2.084vw@1920=40px；1.042vw=20px；2.3vw≈44px —— 与基准逐像素衔接）
   ========================================================================= */
@media screen and (min-width: 120em) {
    #tcy-custom-nav .md-logo img {
        width: min(2.084vw, 62px) !important;
        height: min(2.084vw, 62px) !important;
    }
    #tcy-custom-nav .tcy-nav-links a { min-height: min(2.3vw, 68px); }
    #tcy-custom-nav .tcy-nav-links a .tcy-nav-icon,
    #tcy-custom-nav .tcy-nav-links a .tcy-nav-icon svg {
        width: min(1.042vw, 31px) !important;
        height: min(1.042vw, 31px) !important;
    }
    #tcy-custom-nav .ef2-rail-cta { min-height: min(2.3vw, 68px); }
    #tcy-custom-nav .tcy-nav-links a { padding-left: min(1.042vw, 31px) !important; }
    /* 居中公式随缩放走：(轨宽 - logo宽)/2 - 轨自身 8px 内边距 */
    #tcy-custom-nav .tcy-nav-left { padding-left: calc((min(3.958vw, 117px) - min(2.084vw, 62px)) / 2 - 8px) !important; }
}

/* =========================================================================
   12. 暗色主题（手电筒模式）最小兜底：白轨转墨轨，反白改亮块
   ========================================================================= */
body.flashlight-mode #tcy-custom-nav.tcy-nav-bar {
    background: #16181c !important;
    border-right-color: rgba(255, 255, 255, .1) !important;
    border-bottom-color: rgba(255, 255, 255, .1) !important;
}
body.flashlight-mode #tcy-custom-nav .tcy-nav-links a { color: #b8bfc6 !important; }
body.flashlight-mode #tcy-custom-nav .tcy-nav-links a:hover {
    background: #22262c !important;
    color: #eceff1 !important;
}
body.flashlight-mode #tcy-custom-nav .tcy-nav-links a.active {
    background: rgba(255, 255, 255, .1) !important;
    color: #fff !important;
}
body.flashlight-mode #tcy-custom-nav .tcy-nav-left::after { color: #6d747c; }
body.flashlight-mode #tcy-custom-nav .ef2-rail-foot { border-top-color: rgba(255, 255, 255, .08); }
body.flashlight-mode #tcy-custom-nav .ef2-rail-foot-links,
body.flashlight-mode #tcy-custom-nav .ef2-rail-foot-links a + a { border-color: rgba(255, 255, 255, .08); }
body.flashlight-mode #tcy-custom-nav .ef2-rail-foot-links a { color: #b8bfc6 !important; }
body.flashlight-mode #tcy-custom-nav .ef2-rail-foot-links a:hover { background: #22262c !important; color: #eceff1 !important; }
body.flashlight-mode #tcy-custom-nav .ef2-rail-cta { background: #fff !important; color: var(--ef2-ink) !important; }
body.flashlight-mode #tcy-custom-nav .ef2-rail-cta:hover { background: var(--ef2-pink-soft) !important; }
/* 移动端全屏导航暗色 */
body.flashlight-mode .md-main .md-sidebar--primary {
    background:
        repeating-linear-gradient(45deg, rgba(255, 255, 255, .04) 0 1px, transparent 1px 72px),
        repeating-linear-gradient(-45deg, rgba(255, 255, 255, .04) 0 1px, transparent 1px 72px),
        #16181c !important;
}
body.flashlight-mode .md-nav--primary > .md-nav__list > .md-nav__item > .md-nav__link {
    background: #22262c !important;
    color: #eceff1 !important;
}
body.flashlight-mode .ef2-mnav-close { color: #eceff1; }
body.flashlight-mode .ef2-mnav-chips a { background: #22262c !important; color: #eceff1 !important; border-color: rgba(255, 255, 255, .3); }
/* 播放器暗色 */
body.flashlight-mode .tcy-music-player {
    background: #16181c !important;
    border-color: rgba(255, 255, 255, .25) !important;
}
body.flashlight-mode .tcy-track-name { color: #eceff1 !important; }
body.flashlight-mode .tcy-minimize-btn { color: #eceff1 !important; }
body.flashlight-mode .tcy-music-player.minimized .tcy-minimize-btn { background: #16181c !important; color: #eceff1 !important; }
body.flashlight-mode ::-webkit-scrollbar-track { background: #1a1c20; }
body.flashlight-mode ::-webkit-scrollbar-thumb { background: #4a4f57; border-color: #1a1c20; }
body.flashlight-mode ::-webkit-scrollbar-thumb:hover { background: var(--ef2-punch); }

/* =========================================================================
   13. 无障碍：减弱动态
   ========================================================================= */
@media (prefers-reduced-motion: reduce) {
    #tcy-custom-nav.tcy-nav-bar,
    #tcy-custom-nav .tcy-nav-links a,
    #tcy-custom-nav .tcy-nav-links a .tcy-nav-label,
    #tcy-custom-nav .tcy-nav-links a::after,
    #tcy-custom-nav .tcy-nav-left::after,
    #tcy-custom-nav .ef2-rail-cta,
    #tcy-custom-nav .ef2-rail-cta-mark::after,
    #tcy-custom-nav .ef2-rail-cta-label,
    #tcy-custom-nav .ef2-rail-foot-links,
    #tcy-custom-nav .ef2-rail-foot-note,
    .tcy-music-player,
    .ef2-footer-nav a,
    .ef2-footer-links a,
    .tcy-header-tools .md-search__form {
        transition: none !important;
        animation: none !important;
    }
}

/* =========================================================================
   14. GLightbox 全站换肤 —— 点图放大的加载与入场更顺滑（用户点名）
       墨色深幕 + 粉旋子加载器 + 图片浮入 + 切角描述条；类名来自 glightbox v3
   ========================================================================= */
.goverlay { background: rgba(15, 17, 21, 0.93) !important; }
/* 图片/媒体入场：上浮 + 微缩放（新 slide 插入或切换时各放一次，观感即“加载动画”） */
.glightbox-container .gslide-media {
    box-shadow: 0 22px 60px rgba(0, 0, 0, 0.5) !important;
    animation: ef2GlbFloat .48s cubic-bezier(.2, .7, .25, 1) both;
}
@keyframes ef2GlbFloat {
    from { opacity: 0; transform: translateY(16px) scale(.985); }
    to   { opacity: 1; transform: none; }
}
/* 加载器：默认白圈 → 直角粉旋子（终末地机械件） */
.gloader {
    width: 34px !important; height: 34px !important;
    border: 2px solid rgba(255, 255, 255, 0.2) !important;
    border-top-color: var(--ef2-pink, #f06292) !important;
    border-radius: 0 !important;
    animation: ef2GlbSpin .7s steps(8) infinite !important;
}
@keyframes ef2GlbSpin { to { transform: rotate(360deg); } }
/* 关闭 / 翻页钮：直角玻璃块，hover 跳粉 */
.glightbox-container .gclose,
.glightbox-container .gnext,
.glightbox-container .gprev {
    background: rgba(255, 255, 255, 0.08) !important;
    border: 1px solid rgba(255, 255, 255, 0.28) !important;
    border-radius: 0 !important;
    transition: background .2s ease, border-color .2s ease;
}
.glightbox-container .gclose:hover,
.glightbox-container .gnext:hover,
.glightbox-container .gprev:hover {
    background: var(--ef2-punch, #ec407a) !important;
    border-color: var(--ef2-punch, #ec407a) !important;
}
/* 描述条：墨玻璃 + 粉 tick 标题 */
.glightbox-container .gslide-description {
    background: rgba(15, 17, 21, 0.9) !important;
}
.glightbox-container .gdesc-inner { padding: 13px 18px !important; }
.glightbox-container .gslide-title {
    font-family: var(--ef2-hei, sans-serif) !important;
    font-weight: 700 !important;
    color: #fff !important;
    border-left: 3px solid var(--ef2-pink, #f06292);
    padding-left: 10px;
    margin: 0 !important;
}
@media (prefers-reduced-motion: reduce) {
    .glightbox-container .gslide-media { animation: none !important; }
}

/* =========================================================================
   15. 悬浮目录小球 v2 —— 主页不显示；内容页吸附右缘做「档案标签」，面板白纸化
   注意：!important 定位会压过拖拽 JS 写的行内坐标——这正是「吸附」：球固定在
   右缘不再可拖走，点击照常开合面板（extra.js 的开合逻辑不受影响）。
   ========================================================================= */
body:has(.parallax-header) .tcy-fab-toc,
body:has(.parallax-header) .tcy-toc-panel { display: none !important; }

.tcy-fab-toc {
    top: 31vh !important;
    right: 0 !important;
    left: auto !important;
    bottom: auto !important;
    width: 42px !important;
    height: 54px !important;
    border-radius: 0 !important;
    background: #fff !important;
    border: 1px solid var(--ef2-ink) !important;
    border-right: none !important;
    box-shadow: -8px 10px 24px rgba(23, 25, 30, .14) !important;
    font-size: 17px !important;
    cursor: pointer !important;
    transition: transform .22s ease, box-shadow .22s ease, background .22s ease !important;
}
.tcy-fab-toc::before {
    content: '';
    position: absolute; left: 0; top: 9px; bottom: 9px; width: 3px;
    background: var(--ef2-punch);
    pointer-events: none;
}
.tcy-fab-toc:hover {
    transform: translateX(-3px) !important;
    background: #fff !important;
    box-shadow: -10px 12px 28px rgba(236, 64, 122, .22) !important;
}
.tcy-fab-toc.active {
    background: var(--ef2-ink) !important;
    box-shadow: -8px 10px 24px rgba(23, 25, 30, .3) !important;
}

/* 面板：白纸 + 墨头条 + mono 排印 */
.tcy-toc-panel {
    border-radius: 0 !important;
    background: rgba(255, 255, 255, .97) !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    border: 1px solid var(--ef2-ink) !important;
    box-shadow: 0 18px 44px rgba(23, 25, 30, .22) !important;
    overflow: hidden;
}
.tcy-toc-header {
    font-family: var(--ef2-mono) !important;
    font-size: .66rem !important;
    letter-spacing: .14em;
    font-weight: 700 !important;
    color: #fff !important;
    background: var(--ef2-ink) !important;
    border-bottom: none !important;
    padding: 9px 13px !important;
}
.tcy-toc-header > span:first-child::before { content: '▽// '; color: var(--ef2-pink); }
.tcy-toc-header .close-btn { color: rgba(255, 255, 255, .7) !important; }
.tcy-toc-header .close-btn:hover { color: var(--ef2-pink) !important; }
.tcy-toc-content a {
    border-radius: 0 !important;
    color: var(--ef2-ink-soft) !important;
}
.tcy-toc-content a:hover { background: rgba(23, 25, 30, .05) !important; color: var(--ef2-ink) !important; }
.tcy-toc-content a.md-nav__link--active,
.tcy-toc-content a.active {
    background: var(--ef2-pink-soft) !important;
    color: var(--ef2-deep) !important;
    border-left: 3px solid var(--ef2-punch) !important;
}

body.flashlight-mode .tcy-fab-toc { background: #16181c !important; border-color: rgba(255, 255, 255, .3) !important; }
body.flashlight-mode .tcy-toc-panel { background: #14181d !important; border-color: rgba(255, 255, 255, .2) !important; }
body.flashlight-mode .tcy-toc-content a { color: #b0bec5 !important; }
@media (prefers-reduced-motion: reduce) {
    .tcy-fab-toc { transition: none !important; }
}

/* =========================================================================
   16. 分区闸门过渡 v3（v2.6）：九分区各一场「内容隐喻」专属开场
   #ef2-gate 为静态全屏容器（ef2-hud.js 注入并按目标分区挂 data-gate）。
   【实现红线】盖幕/揭幕的核心位移一律走【transition + 类切换】（与抽屉同款，
   实测最稳）——keyframes 驱动的面板位移在部分环境会卡首帧（is-in/out 都不动）；
   一次性小道具（方块坠落/光芒/白闪…）保留 keyframes，冻结环境下纯墨幕优雅降级。
   面板 ≤2 大层、静态涂装 + 单次位移/裁切。
   ========================================================================= */
#ef2-gate {
    position: fixed; inset: 0;
    z-index: 99998;              /* 只让开机页(99999)压它 */
    pointer-events: none;
    overflow: hidden;
}
#ef2-gate .ef2-gate-panel,
#ef2-gate .ef2-gate-panel2 {
    position: absolute; inset: 0;
    background:
        repeating-linear-gradient(-45deg, rgba(255, 255, 255, .03) 0 3px, transparent 3px 14px),
        #17191e;
    transition:
        transform .34s cubic-bezier(.4, 0, .2, 1),
        clip-path .4s cubic-bezier(.4, 0, .2, 1);
}
/* 左下分区铭牌（全变体共用，transition 驱动） */
#ef2-gate .ef2-gate-tag {
    position: absolute; z-index: 4;
    left: clamp(24px, 8vw, 120px);
    bottom: clamp(76px, 18vh, 200px);
    display: flex; flex-direction: column; gap: 9px;
    opacity: 0;
    transform: translateX(-14px);
    transition: opacity .24s cubic-bezier(.2, .7, .2, 1) .26s, transform .24s cubic-bezier(.2, .7, .2, 1) .26s;
}
#ef2-gate.is-in .ef2-gate-tag { opacity: 1; transform: none; }
#ef2-gate.is-out .ef2-gate-tag { opacity: 0; transform: translateX(10px); transition-delay: 0s; transition-duration: .14s; }
#ef2-gate .ef2-gate-tag b {
    font-family: var(--ef2-mono);
    font-size: clamp(.62rem, 1.4vw, .74rem);
    font-weight: 700; letter-spacing: .3em;
    color: var(--gate-a, #ec407a);
}
#ef2-gate .ef2-gate-tag span {
    font-family: var(--ef2-hei);
    font-weight: 900;
    font-size: clamp(1.5rem, 5.2vw, 2.9rem);
    letter-spacing: .06em;
    color: #fff;
    line-height: 1.15;
}
#ef2-gate .ef2-gate-tag i {
    font-style: normal;
    font-family: var(--ef2-mono);
    font-size: clamp(.52rem, 1.1vw, .62rem);
    font-weight: 700; letter-spacing: .24em;
    color: rgba(255, 255, 255, .48);
}
#ef2-gate .ef2-gate-tag::before {
    content: '';
    position: absolute; left: -14px; top: 4px; bottom: 4px; width: 3px;
    background: var(--gate-a, #ec407a);
}
/* 扫出时道具统一快隐（双保险：transition + 覆写） */
#ef2-gate.is-out [class^="gfx-"],
#ef2-gate.is-out [class*=" gfx-"],
#ef2-gate.is-out .gfx-route,
#ef2-gate.is-out .gfx-orbit { opacity: 0 !important; transition: opacity .14s ease !important; animation: none !important; }

/* ---------- ① home 首页 · 品牌开幕：幕从中线上下展开 + ▽ 徽记/扩散环 ---------- */
#ef2-gate[data-gate="home"] .ef2-gate-panel { clip-path: inset(50% -2% 50% -2%); }
#ef2-gate[data-gate="home"].is-in  .ef2-gate-panel { clip-path: inset(-2% -2% -2% -2%); }
#ef2-gate[data-gate="home"].is-out .ef2-gate-panel { clip-path: inset(50% -2% 50% -2%); }
#ef2-gate .gfx-mark {
    position: absolute; left: 50%; top: 42%; z-index: 2;
    font-family: var(--ef2-hei); font-weight: 900;
    font-size: clamp(6rem, 20vw, 12rem); line-height: 1;
    color: var(--gate-a, #ec407a);
    transform: translate(-50%, -50%) scale(.72);
    opacity: 0;
}
#ef2-gate.is-in .gfx-mark { animation: gHomeMark .3s cubic-bezier(.16, 1, .3, 1) .26s forwards; }
@keyframes gHomeMark { to { transform: translate(-50%, -50%) scale(1); opacity: .92; } }
#ef2-gate .gfx-ring {
    position: absolute; left: 50%; top: 42%; z-index: 2;
    width: clamp(200px, 32vw, 380px); aspect-ratio: 1;
    border: 1px solid color-mix(in srgb, var(--gate-a, #ec407a) 62%, transparent);
    border-radius: 50%;
    transform: translate(-50%, -50%) scale(.4);
    opacity: 0;
}
#ef2-gate.is-in .gfx-ring { animation: gHomeRing .7s cubic-bezier(.2, .7, .2, 1) .3s forwards; }
@keyframes gHomeRing {
    20% { opacity: .9; }
    to  { transform: translate(-50%, -50%) scale(1.55); opacity: 0; }
}

/* ---------- ② update 下载/更新 · 数据下载：顶坠 + 进度条 + ▼ 队列，扫出穿底 ---------- */
#ef2-gate[data-gate="update"] .ef2-gate-panel { transform: translateY(-102%); }
#ef2-gate[data-gate="update"].is-in  .ef2-gate-panel { transform: translateY(0); }
#ef2-gate[data-gate="update"].is-out .ef2-gate-panel { transform: translateY(102%); }
#ef2-gate .gfx-bar {
    position: absolute; left: 50%; bottom: clamp(40px, 9vh, 92px); z-index: 2;
    width: min(52vw, 520px); height: 3px;
    background: rgba(255, 255, 255, .16);
    transform: translateX(-50%);
    opacity: 0;
}
#ef2-gate.is-in .gfx-bar { animation: gFxShow .2s ease .28s forwards; }
#ef2-gate .gfx-bar::before {
    content: '';
    position: absolute; inset: 0;
    background: var(--gate-a, #ec407a);
    transform-origin: left center;
    transform: scaleX(0);
}
#ef2-gate.is-in .gfx-bar::before { animation: gUpBar .85s cubic-bezier(.4, 0, .2, 1) .32s forwards; }
@keyframes gUpBar { to { transform: scaleX(1); } }
#ef2-gate .gfx-chev {
    position: absolute; right: clamp(30px, 14vw, 220px); top: 30%; z-index: 2;
    display: flex; flex-direction: column; gap: 8px;
    color: var(--gate-a, #ec407a);
    font-size: clamp(1.2rem, 2.6vw, 1.8rem); line-height: 1;
    opacity: 0;
}
#ef2-gate.is-in .gfx-chev { animation: gFxShow .2s ease .3s forwards; }
#ef2-gate .gfx-chev b { font-weight: 400; animation: gUpChev .8s ease-in-out infinite alternate; }
#ef2-gate .gfx-chev b:nth-child(2) { animation-delay: .12s; opacity: .7; }
#ef2-gate .gfx-chev b:nth-child(3) { animation-delay: .24s; opacity: .45; }
@keyframes gUpChev { from { transform: translateY(-6px); } to { transform: translateY(8px); } }
@keyframes gFxShow { to { opacity: 1; } }

/* ---------- ③ guide 线路/教程 · 航线接驳：斜切三色幕横扫 + 航线绘制 ---------- */
#ef2-gate[data-gate="guide"] .ef2-gate-panel {
    inset: 0 -18vw;
    background:
        repeating-linear-gradient(-45deg, rgba(255, 255, 255, .03) 0 3px, transparent 3px 14px),
        linear-gradient(90deg,
            #17191e 0 calc(100% - 12vw),
            var(--gate-a, #ec407a) calc(100% - 12vw) calc(100% - 6vw),
            var(--gate-s, #fce4ec) calc(100% - 6vw) 100%);
    clip-path: polygon(0 0, calc(100% - 9vw) 0, 100% 100%, 0 100%);
    transform: translateX(-125%);
}
#ef2-gate[data-gate="guide"].is-in  .ef2-gate-panel { transform: translateX(0); }
#ef2-gate[data-gate="guide"].is-out .ef2-gate-panel { transform: translateX(125%); transition-duration: .38s; }
#ef2-gate .gfx-route {
    position: absolute; right: clamp(24px, 9vw, 140px); top: 24%; z-index: 2;
    width: min(46vw, 480px); height: auto;
    opacity: 0;
}
#ef2-gate.is-in .gfx-route { animation: gFxShow .2s ease .26s forwards; }
#ef2-gate .gfx-route polyline { stroke-dasharray: 560; stroke-dashoffset: 560; }
#ef2-gate.is-in .gfx-route polyline { animation: gGuideDraw .6s cubic-bezier(.4, 0, .2, 1) .32s forwards; }
@keyframes gGuideDraw { to { stroke-dashoffset: 0; } }
#ef2-gate .gfx-route circle { opacity: 0; transform-box: fill-box; transform-origin: center; transform: scale(.4); }
#ef2-gate.is-in .gfx-route circle { animation: gGuideDot .22s cubic-bezier(.16, 1, .3, 1) forwards; }
#ef2-gate.is-in .gfx-route circle:nth-of-type(1) { animation-delay: .38s; }
#ef2-gate.is-in .gfx-route circle:nth-of-type(2) { animation-delay: .56s; }
#ef2-gate.is-in .gfx-route circle:nth-of-type(3) { animation-delay: .78s; }
@keyframes gGuideDot { to { opacity: 1; transform: scale(1); } }

/* ---------- ④ tools 工具箱 · 卡尺咬合：双颚合拢/张开 + 中缝刻度 + 十字 ---------- */
#ef2-gate[data-gate="tools"] .ef2-gate-panel  { inset: 0 49.6% 0 0; transform: translateX(-103%); }
#ef2-gate[data-gate="tools"] .ef2-gate-panel2 { inset: 0 0 0 49.6%; transform: translateX(103%); transition-delay: .04s; }
#ef2-gate[data-gate="tools"] .ef2-gate-panel::after,
#ef2-gate[data-gate="tools"] .ef2-gate-panel2::before {
    content: '';
    position: absolute; top: 0; bottom: 0; width: 4px;
    background: var(--gate-a, #ec407a);
}
#ef2-gate[data-gate="tools"] .ef2-gate-panel::after  { right: 0; }
#ef2-gate[data-gate="tools"] .ef2-gate-panel2::before { left: 0; }
#ef2-gate[data-gate="tools"].is-in  .ef2-gate-panel,
#ef2-gate[data-gate="tools"].is-in  .ef2-gate-panel2 { transform: translateX(0); }
#ef2-gate[data-gate="tools"].is-out .ef2-gate-panel  { transform: translateX(-103%); }
#ef2-gate[data-gate="tools"].is-out .ef2-gate-panel2 { transform: translateX(103%); }
#ef2-gate .gfx-ticks {
    position: absolute; left: 50%; top: 14%; bottom: 14%; z-index: 2;
    width: 18px;
    transform: translateX(-50%);
    background:
        repeating-linear-gradient(180deg, var(--gate-a, #ec407a) 0 2px, transparent 2px 14px) center / 10px 100% no-repeat,
        repeating-linear-gradient(180deg, rgba(255, 255, 255, .5) 0 1px, transparent 1px 7px) center / 5px 100% no-repeat;
    opacity: 0;
}
#ef2-gate.is-in .gfx-ticks { animation: gFxShow .24s ease .3s forwards; }
#ef2-gate .gfx-cross {
    position: absolute; left: 50%; top: 46%; z-index: 2;
    width: clamp(60px, 8vw, 110px); aspect-ratio: 1;
    transform: translate(-50%, -50%);
    background:
        linear-gradient(90deg, transparent calc(50% - .75px), rgba(255, 255, 255, .75) calc(50% - .75px) calc(50% + .75px), transparent calc(50% + .75px)),
        linear-gradient(180deg, transparent calc(50% - .75px), rgba(255, 255, 255, .75) calc(50% - .75px) calc(50% + .75px), transparent calc(50% + .75px));
    opacity: 0;
}
#ef2-gate.is-in .gfx-cross { animation: gToolCross .34s cubic-bezier(.16, 1, .3, 1) .36s forwards; }
@keyframes gToolCross { from { transform: translate(-50%, -50%) rotate(45deg) scale(.6); } to { opacity: 1; transform: translate(-50%, -50%) rotate(0deg) scale(1); } }

/* ---------- ⑤ TCYMCBluemap 卫星地图 · 雷达开幕：圆形光圈 + 扫描波束 + 测距环 ---------- */
#ef2-gate[data-gate="TCYMCBluemap"] .ef2-gate-panel { clip-path: circle(0% at 50% 50%); transition-duration: .34s, .42s; }
#ef2-gate[data-gate="TCYMCBluemap"].is-in  .ef2-gate-panel { clip-path: circle(78% at 50% 50%); }
#ef2-gate[data-gate="TCYMCBluemap"].is-out .ef2-gate-panel { clip-path: circle(0% at 50% 50%); }
#ef2-gate .gfx-beam {
    position: absolute; inset: 0;
    background: conic-gradient(from 0deg at 50% 50%,
        color-mix(in srgb, var(--gate-a, #ec407a) 38%, transparent) 0 22deg,
        transparent 22deg);
    animation: gMapBeam 1.3s linear infinite;
    opacity: .9;
}
@keyframes gMapBeam { to { transform: rotate(360deg); } }
#ef2-gate .gfx-rings {
    position: absolute; inset: 0;
    background: repeating-radial-gradient(circle at 50% 50%,
        color-mix(in srgb, var(--gate-a, #ec407a) 30%, transparent) 0 1px,
        transparent 1px 16vmin);
    opacity: .8;
}

/* ---------- ⑥ gallery 相册 · 快门：上下叶片闭合/张开 + 白闪 + 齿孔滚动 ---------- */
#ef2-gate[data-gate="gallery"] .ef2-gate-panel  { inset: 0 0 50% 0; transform: translateY(-103%); transition-timing-function: cubic-bezier(.16, 1, .3, 1); }
#ef2-gate[data-gate="gallery"] .ef2-gate-panel2 { inset: 50% 0 0 0; transform: translateY(103%); transition-timing-function: cubic-bezier(.16, 1, .3, 1); }
#ef2-gate[data-gate="gallery"] .ef2-gate-panel::after,
#ef2-gate[data-gate="gallery"] .ef2-gate-panel2::before {
    content: '';
    position: absolute; left: 0; right: 0; height: 3px;
    background: var(--gate-a, #ec407a);
}
#ef2-gate[data-gate="gallery"] .ef2-gate-panel::after  { bottom: 0; }
#ef2-gate[data-gate="gallery"] .ef2-gate-panel2::before { top: 0; }
#ef2-gate[data-gate="gallery"].is-in  .ef2-gate-panel,
#ef2-gate[data-gate="gallery"].is-in  .ef2-gate-panel2 { transform: translateY(0); }
#ef2-gate[data-gate="gallery"].is-out .ef2-gate-panel  { transform: translateY(-103%); }
#ef2-gate[data-gate="gallery"].is-out .ef2-gate-panel2 { transform: translateY(103%); }
#ef2-gate .gfx-flash {
    position: absolute; inset: 0; z-index: 3;
    background: #fff;
    opacity: 0;
}
#ef2-gate.is-in .gfx-flash { animation: gGalFlash .3s ease .24s; }
@keyframes gGalFlash { 0% { opacity: 0; } 30% { opacity: .85; } 100% { opacity: 0; } }
#ef2-gate .gfx-perf {
    position: absolute; top: 0; bottom: 0; z-index: 2;
    width: 16px;
    background: repeating-linear-gradient(180deg, rgba(255, 255, 255, .8) 0 9px, transparent 9px 26px) center / 8px 200% repeat-y;
    opacity: 0;
    animation: gGalPerf 1.1s linear infinite;
}
#ef2-gate.is-in .gfx-perf { opacity: .5; transition: opacity .2s ease .3s; }
#ef2-gate .gfx-perf.p1 { left: clamp(14px, 4vw, 60px); }
#ef2-gate .gfx-perf.p2 { right: clamp(14px, 4vw, 60px); }
@keyframes gGalPerf { from { background-position: center 0; } to { background-position: center 52px; } }

/* ---------- ⑦ planets 星球幻想 · 跃迁：底升顶穿 + 星野 + 轨道弧 ---------- */
#ef2-gate[data-gate="planets"] .ef2-gate-panel { transform: translateY(102%); }
#ef2-gate[data-gate="planets"].is-in  .ef2-gate-panel { transform: translateY(0); }
#ef2-gate[data-gate="planets"].is-out .ef2-gate-panel { transform: translateY(-102%); transition-duration: .36s; }
#ef2-gate .gfx-stars {
    position: absolute; inset: 0;
    background-image:
        radial-gradient(circle at 1.5px 1.5px, rgba(255, 255, 255, .85) 1.2px, transparent 1.6px),
        radial-gradient(circle at 1px 1px, rgba(255, 255, 255, .45) .9px, transparent 1.3px);
    background-size: 220px 220px, 120px 120px;
    background-position: 30px 40px, 70px 90px;
    animation: gPlaTwinkle 1.6s ease-in-out infinite alternate;
    opacity: .85;
}
@keyframes gPlaTwinkle { from { opacity: .55; } to { opacity: .95; } }
#ef2-gate .gfx-orbit {
    position: absolute; left: 50%; top: 12%;
    width: min(74vw, 760px); height: auto;
    transform: translateX(-50%);
    opacity: .9;
}
#ef2-gate .gfx-orbit path { stroke-dasharray: 760; stroke-dashoffset: 760; }
#ef2-gate.is-in .gfx-orbit path { animation: gPlaArc .8s cubic-bezier(.4, 0, .2, 1) .3s forwards; }
@keyframes gPlaArc { to { stroke-dashoffset: 0; } }
#ef2-gate .gfx-orbit circle { opacity: 0; }
#ef2-gate.is-in .gfx-orbit circle { animation: gGuideDot .24s cubic-bezier(.16, 1, .3, 1) .95s forwards; }

/* ---------- ⑧ sponsor 赞助 · 庆典：右→左反扫（金缘前锋）+ 金芒扇 + 彩点 ---------- */
#ef2-gate[data-gate="sponsor"] .ef2-gate-panel {
    inset: 0 -18vw;
    background:
        repeating-linear-gradient(-45deg, rgba(255, 255, 255, .03) 0 3px, transparent 3px 14px),
        linear-gradient(90deg,
            var(--gate-s, #fce4ec) 0 6vw,
            var(--gate-a, #ec407a) 6vw 12vw,
            #17191e 12vw 100%);
    clip-path: polygon(9vw 0, 100% 0, 100% 100%, 0 100%);
    transform: translateX(125%);
}
#ef2-gate[data-gate="sponsor"].is-in  .ef2-gate-panel { transform: translateX(0); }
#ef2-gate[data-gate="sponsor"].is-out .ef2-gate-panel { transform: translateX(-125%); transition-duration: .38s; }
#ef2-gate .gfx-ray {
    position: absolute; z-index: 2;
    left: clamp(24px, 8vw, 120px);
    bottom: calc(clamp(76px, 18vh, 200px) + 8.6em);
    width: min(38vw, 420px); height: 2px;
    background: linear-gradient(90deg, var(--gate-a, #ec407a), transparent);
    transform-origin: left center;
    transform: rotate(var(--rot, 0deg)) scaleX(0);
}
#ef2-gate.is-in .gfx-ray { animation: gSpoRay .5s cubic-bezier(.2, .7, .2, 1) forwards; }
#ef2-gate .gfx-ray.r1 { --rot: -22deg; animation-delay: .3s !important; }
#ef2-gate .gfx-ray.r2 { --rot: -6deg;  animation-delay: .38s !important; opacity: .8; }
#ef2-gate .gfx-ray.r3 { --rot: 12deg;  animation-delay: .46s !important; opacity: .6; }
@keyframes gSpoRay { to { transform: rotate(var(--rot, 0deg)) scaleX(1); } }
#ef2-gate .gfx-conf { position: absolute; inset: 0; z-index: 2; }
#ef2-gate .gfx-conf b {
    position: absolute;
    width: 9px; height: 9px;
    background: var(--gate-a, #ec407a);
    clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%);
    opacity: 0;
}
#ef2-gate .gfx-conf b:nth-child(1) { left: 24%; top: 18%; }
#ef2-gate .gfx-conf b:nth-child(2) { left: 58%; top: 12%; background: #fff; width: 7px; height: 7px; }
#ef2-gate .gfx-conf b:nth-child(3) { left: 74%; top: 30%; }
#ef2-gate .gfx-conf b:nth-child(4) { left: 40%; top: 26%; background: #fff; width: 6px; height: 6px; }
#ef2-gate.is-in .gfx-conf b { animation: gSpoConf .9s ease-in forwards; }
#ef2-gate.is-in .gfx-conf b:nth-child(2) { animation-delay: .12s; }
#ef2-gate.is-in .gfx-conf b:nth-child(3) { animation-delay: .22s; }
#ef2-gate.is-in .gfx-conf b:nth-child(4) { animation-delay: .3s; }
@keyframes gSpoConf {
    0%   { opacity: 0; transform: translateY(-26px) rotate(0deg); }
    25%  { opacity: 1; }
    100% { opacity: 0; transform: translateY(48px) rotate(160deg); }
}

/* ---------- ⑨ web-mc 网页版MC · 世界生成：像素阶梯地形升起/沉回 + 方块坠落 + 准星 + 物品栏 ---------- */
#ef2-gate[data-gate="web-mc"] .ef2-gate-panel {
    top: -14vh;
    clip-path: polygon(0 14vh, 9% 14vh, 9% 8vh, 22% 8vh, 22% 11vh, 36% 11vh, 36% 5vh, 52% 5vh, 52% 10vh, 66% 10vh, 66% 7vh, 80% 7vh, 80% 12vh, 91% 12vh, 91% 9vh, 100% 9vh, 100% 100%, 0 100%);
    transform: translateY(104%);
}
#ef2-gate[data-gate="web-mc"] .ef2-gate-panel::before {
    content: '';
    position: absolute; left: 0; right: 0; top: 0; height: 15vh;
    background: var(--gate-a, #5f9e3d);
    clip-path: polygon(0 14vh, 9% 14vh, 9% 8vh, 22% 8vh, 22% 11vh, 36% 11vh, 36% 5vh, 52% 5vh, 52% 10vh, 66% 10vh, 66% 7vh, 80% 7vh, 80% 12vh, 91% 12vh, 91% 9vh, 100% 9vh, 100% calc(9vh + 6px), 91% calc(9vh + 6px), 91% calc(12vh + 6px), 80% calc(12vh + 6px), 80% calc(7vh + 6px), 66% calc(7vh + 6px), 66% calc(10vh + 6px), 52% calc(10vh + 6px), 52% calc(5vh + 6px), 36% calc(5vh + 6px), 36% calc(11vh + 6px), 22% calc(11vh + 6px), 22% calc(8vh + 6px), 9% calc(8vh + 6px), 9% calc(14vh + 6px), 0 calc(14vh + 6px));
}
#ef2-gate[data-gate="web-mc"].is-in  .ef2-gate-panel { transform: translateY(0); }
#ef2-gate[data-gate="web-mc"].is-out .ef2-gate-panel { transform: translateY(104%); }
#ef2-gate .gfx-vox {
    position: absolute; z-index: 2;
    width: 22px; height: 22px;
    background: linear-gradient(180deg, var(--gate-a, #5f9e3d) 0 34%, #7a5b3a 34% 100%);
    box-shadow: inset 0 0 0 2px rgba(0, 0, 0, .35);
    opacity: 0;
}
#ef2-gate .gfx-vox.v1 { left: 26%; top: 32%; }
#ef2-gate .gfx-vox.v2 { left: 63%; top: 26%; width: 18px; height: 18px; }
#ef2-gate .gfx-vox.v3 { left: 77%; top: 38%; width: 15px; height: 15px; }
#ef2-gate.is-in .gfx-vox { animation: gWmVox .5s cubic-bezier(.34, 1.4, .5, 1) forwards; }
#ef2-gate.is-in .gfx-vox.v1 { animation-delay: .3s; }
#ef2-gate.is-in .gfx-vox.v2 { animation-delay: .42s; }
#ef2-gate.is-in .gfx-vox.v3 { animation-delay: .54s; }
@keyframes gWmVox {
    from { opacity: 0; transform: translateY(-26vh) rotate(8deg); }
    55%  { opacity: 1; }
    to   { opacity: 1; transform: translateY(0) rotate(0deg); }
}
#ef2-gate .gfx-aim {
    position: absolute; left: 50%; top: 44%; z-index: 2;
    width: 26px; height: 26px;
    transform: translate(-50%, -50%);
    background:
        linear-gradient(#fff, #fff) center / 26px 3px no-repeat,
        linear-gradient(#fff, #fff) center / 3px 26px no-repeat;
    opacity: 0;
}
#ef2-gate.is-in .gfx-aim { animation: gFxShow .2s ease .34s forwards; }
#ef2-gate .gfx-hotbar {
    position: absolute; left: 50%; bottom: clamp(34px, 8vh, 80px); z-index: 2;
    width: 396px; max-width: 84vw; height: 44px;
    transform: translateX(-50%);
    background: repeating-linear-gradient(90deg, transparent 0 42px, rgba(255, 255, 255, .35) 42px 44px);
    border: 2px solid rgba(255, 255, 255, .35);
    opacity: 0;
}
#ef2-gate .gfx-hotbar::after {
    content: '';
    position: absolute; left: 0; top: -2px; bottom: -2px; width: 44px;
    border: 2px solid var(--gate-a, #5f9e3d);
}
#ef2-gate.is-in .gfx-hotbar { animation: gFxShow .24s ease .4s forwards; }

@media (prefers-reduced-motion: reduce) {
    #ef2-gate { display: none !important; }
}
