/* ==========================================================================
   WeDeal Redesign — 设计系统 & 公共组件
   --------------------------------------------------------------------------
   依据 WeDeal-Web-Redesign 设计稿 (Tailwind config 翻译版) 建立。
   全站新页面共用本文件：设计变量 + 通用组件 + 首页组件。
   所有类以 wd- 前缀，避免与旧版 core/app/style/flex 冲突。
   ========================================================================== */

/* ==========================================================================
   本地字体（2026-09-01 替换 Google Fonts CDN）
   --------------------------------------------------------------------------
   Hanken Grotesk / Manrope / Material Symbols Outlined 全部本地化。
   优势：避免 Google Fonts 国内访问 502/超时、避免页面 render 抖动、首屏 LCP 提前。
   文件放置：/static/fonts/
   --------------------------------------------------------------------------
   - hanken-grotesk.woff2  (35KB, latin 子集, Variable Font 400-700)
   - manrope.woff2          (10KB, latin 子集, Variable Font 200-800)
   - manrope-ext.woff2      (25KB, latin-ext 备用，Unicode 扩展西欧字符)
   - material-symbols-outlined.ttf  (963KB, fallback，本地优先 + 已 font-display:block)
   unicode-range 让浏览器按字符集按需取字、不会一次加载全字符子集。
   ========================================================================== */

/* Hanken Grotesk（正文） */
@font-face {
    font-family: 'Hanken Grotesk';
    font-style: normal;
    font-weight: 400 700;
    font-display: swap;
    src:
         url('/static/fonts/hanken-grotesk.woff2?v=20260901') format('woff2-variations'),
         url('/static/fonts/hanken-grotesk.woff2?v=20260901') format('woff2');
}

/* Manrope（标题）
   ⚠️ 2026-09-19 修正：原先用 `/static/fonts/manrope.woff2`，但用 fontTools 实测该文件
   只有 81 个 cmap 码位、111 个字形，内容是 **希腊文子集**（U+0370-03FF），拉丁字母里
   只有 A / Á / Ă 三个 —— 结果全站标题的绝大多数字母都静默回退到系统 sans-serif，
   Manrope 实际一直没生效（实测：Manrope 48px 的 "BBBB" 与 sans-serif 宽度完全相同，
   而 "AAAA" 不同，证明只有 A 用到了 Manrope 字形）。
   现改用 Google Fonts 官方 latin 子集（与已有 manrope-ext.woff2 字节完全相同，
   sha256=a30ddcd349703aff…），并把 latin-ext 也一并补成同名族的第二段 unicode-range。
   两文件均为 SIL OFL 1.1，可免费商用、可自托管。 */
@font-face {
    font-family: 'Manrope';
    font-style: normal;
    font-weight: 200 800;
    font-display: swap;
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
    src:
         url('/static/fonts/manrope-latin.woff2?v=20260919') format('woff2-variations'),
         url('/static/fonts/manrope-latin.woff2?v=20260919') format('woff2');
}

/* Manrope —— 拉丁扩展段（同一族名，靠 unicode-range 按需加载） */
@font-face {
    font-family: 'Manrope';
    font-style: normal;
    font-weight: 200 800;
    font-display: swap;
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
    src:
         url('/static/fonts/manrope-latin-ext.woff2?v=20260919') format('woff2-variations'),
         url('/static/fonts/manrope-latin-ext.woff2?v=20260919') format('woff2');
}

/* 旧写法保留（族名 'Manrope Ext' 当前无任何 font-family 引用它，属死代码）：
   原 src 指向的 manrope-ext.woff2 其实是 latin 子集，现改指真正的 latin-ext 文件，
   避免以后有人引用时又拿到错的子集。 */
@font-face {
    font-family: 'Manrope Ext';
    font-style: normal;
    font-weight: 200 800;
    font-display: swap;
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
    src: url('/static/fonts/manrope-latin-ext.woff2?v=20260919') format('woff2');
}

/* Roboto Flex（Bootstrap 旧页面字体的本地替代，2026-09-06 加入）
   之前 link fonts.googleapis.com/css?family=Roboto:100,300,400,500,300i，
   因 Google Fonts 国内不可达已替换为本地的 Variable Font（100-1000 weight range）。
   与项目 Hanken Grotesk / Manrope 一致：单 VF 文件覆盖多 weight、unicode-range 按需取字。
   - roboto-flex-latin.woff2      (33.5KB, latin 主字体, Variable Font 100-1000)
   - roboto-flex-latin-ext.woff2  (22.9KB, latin-ext 备用，Unicode 扩展西欧字符) */
@font-face {
    font-family: 'Roboto';
    font-style: normal;
    font-weight: 100 1000;
    font-display: swap;
    src:
         url('/static/fonts/roboto-flex-latin.woff2?v=20260906') format('woff2-variations'),
         url('/static/fonts/roboto-flex-latin.woff2?v=20260906') format('woff2');
}

@font-face {
    font-family: 'Roboto Ext';
    font-style: normal;
    font-weight: 100 1000;
    font-display: swap;
    unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
    src: url('/static/fonts/roboto-flex-latin-ext.woff2?v=20260906') format('woff2-variations'),
         url('/static/fonts/roboto-flex-latin-ext.woff2?v=20260906') format('woff2');
}

/* Material Symbols Outlined — 本地优先（wedeal-redesign.css 已注入 @font-face）。
   国内浏览器访问 Google Fonts CDN 偶发超时，图标会 fallback 为字面文字与 placeholder/相邻文字重叠；
   static/fonts/material-symbols-outlined.ttf 已下载内联。
   用 font-display:block 让文本在字体加载完前不可见，避免 "search" 字面文字闪现。 */
@font-face {
    font-family: 'Material Symbols Outlined';
    font-style: normal;
    font-weight: 400;
    font-display: block;
    src: local('Material Symbols Outlined'),
         local('MaterialSymbolsOutlined'),
         url('/static/fonts/material-symbols-outlined.ttf?v=20260901') format('truetype');
}
.material-symbols-outlined {
    font-family: 'Material Symbols Outlined', 'Material Icons';
    font-weight: normal;
    font-style: normal;
    font-size: 24px;
    line-height: 1;
    letter-spacing: normal;
    text-transform: none;
    display: inline-block;
    white-space: nowrap;
    word-wrap: normal;
    direction: ltr;
    -webkit-font-feature-settings: 'liga';
    -webkit-font-smoothing: antialiased;
    font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
    min-width: 1em;
    text-align: center;
}

/* 搜索框 / 表单 input 兜底：Tailwind Play CDN 偶发不生成 pl-10/pr-10 等 class，
   直接给搜索输入框加 padding-left/right，避免图标与 placeholder 重叠。 */
input#search_organization,
.wd-search-input,
.search_box input[type="text"] {
    padding-left: 2.5rem !important;
    padding-right: 2.75rem !important;
}

:root {
    --wd-primary: #002a5f;
    --wd-primary-container: #003f89;
    --wd-primary-fixed: #d8e2ff;
    --wd-secondary: #FF8332;
    --wd-secondary-deep: #E8750A;
    --wd-background: #f7fafe;
    --wd-surface: #ffffff;
    --wd-surface-low: #f1f4f8;
    --wd-surface-container: #e9edf2;
    --wd-text-primary: #001a33;
    --wd-text-secondary: #4a5568;
    --wd-outline: #737782;
    --wd-outline-variant: #c3c6d3;
    --wd-radius: 8px;
    --wd-radius-lg: 12px;
    --wd-container: 1280px;
    --wd-gutter: 24px;
    --wd-shadow: 0 12px 32px -14px rgba(0, 42, 95, 0.16);
    --wd-shadow-sm: 0 2px 8px -2px rgba(0, 42, 95, 0.10);
    --wd-font-head: 'Manrope', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
    --wd-font-body: 'Hanken Grotesk', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}

/* 图标字体（Material Symbols Outlined） */
.material-symbols-outlined {
    font-family: 'Material Symbols Outlined';
    font-weight: normal;
    font-style: normal;
    font-size: 20px;
    line-height: 1;
    letter-spacing: normal;
    text-transform: none;
    display: inline-block;
    white-space: nowrap;
    word-wrap: normal;
    direction: ltr;
    vertical-align: middle;
    font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
}

/* ==========================================================================
   通用容器 / 布局
   ========================================================================== */
.wd-container {
    width: 100%;
    max-width: var(--wd-container);
    margin: 0 auto;
    padding-left: var(--wd-gutter);
    padding-right: var(--wd-gutter);
}

.wd-page {
    background: var(--wd-background);
    min-height: 60vh;
    font-family: var(--wd-font-body);
    color: var(--wd-text-primary);
}

.wd-section-head {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 8px 16px;
    margin-bottom: 24px;
}

.wd-section-title {
    font-family: var(--wd-font-head);
    font-size: 28px;
    font-weight: 700;
    line-height: 1.2;
    color: var(--wd-primary);
    margin: 0;
}

.wd-section-sub {
    font-size: 14px;
    color: var(--wd-text-primary);
    margin: 0;
    font-weight: 600;
}

/* ==========================================================================
   首页 Hero
   ========================================================================== */
main.wd-main {
    padding: 32px 0;
}

.wd-hero {
    margin-top: 32px;
    padding: 24px 0;
}

.wd-hero-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 24px;
}

.wd-hero-card {
    position: relative;
    display: block;
    border-radius: 8px;
    padding: 32px;
    color: #fff;
    overflow: hidden;
    text-decoration: none;
    transition: box-shadow 0.3s ease;
}

.wd-hero-card:hover {
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
    color: #fff;
}

.wd-hero-card--startup {
    background: var(--wd-primary-container);
}

.wd-hero-card--investor {
    background: var(--wd-secondary);
}

.wd-hero-head {
    display: flex;
    align-items: center;
    gap: 16px;
    margin-bottom: 24px;
}

.wd-hero-icon {
    width: 64px;
    height: 64px;
    border-radius: 10%;
    background: rgba(255, 255, 255, 0.3);
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.wd-hero-card--investor .wd-hero-icon {
    background: rgba(255, 255, 255, 0.2);
}

.wd-hero-icon img {
    width: 40px;
    height: 40px;
    object-fit: contain;
}

.wd-hero-card--startup .wd-hero-icon img {
    filter: brightness(0) invert(1);
}

.wd-hero-title {
    font-family: var(--wd-font-head);
    font-size: 40px;
    line-height: 48px;
    font-weight: 700;
    letter-spacing: -0.02em;
    color: #fff;
    margin: 0;
}

.wd-hero-desc {
    font-family: var(--wd-font-body);
    font-size: 18px;
    line-height: 28px;
    font-weight: 400;
    margin: 0 0 32px;
    max-width: 448px;
    color: #d8e2ff;
    opacity: 0.9;
}

.wd-hero-card--investor .wd-hero-desc {
    color: #4a5568;
    opacity: 1;
}

.wd-hero-btn {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 16px 28px;
    border-radius: 8px;
    font-family: var(--wd-font-head);
    font-size: 16px;
    font-weight: 400;
    background: var(--wd-secondary);
    color: #fff;
    transition: opacity 0.2s ease;
}

.wd-hero-btn .material-symbols-outlined {
    transition: transform 0.2s ease;
}

.wd-hero-btn:hover {
    opacity: 0.9;
    color: #fff;
}

.wd-hero-card:hover .wd-hero-btn .material-symbols-outlined {
    transform: translateX(4px);
}

.wd-hero-btn--inverse {
    background: var(--wd-primary);
    padding-left: 36px;
    padding-right: 36px;
}

.wd-hero-card--investor:hover .wd-hero-btn--inverse {
    background: var(--wd-primary-container);
    opacity: 1;
}

.wd-hero-deco {
    position: absolute;
    right: -48px;
    bottom: -48px;
    font-size: 240px;
    line-height: 1;
    pointer-events: none;
    user-select: none;
}

.wd-hero-card--startup .wd-hero-deco {
    opacity: 0.1;
}

.wd-hero-card--investor .wd-hero-deco {
    opacity: 0.05;
}

.wd-hero-card:hover .wd-hero-deco {
    opacity: 0.2;
}

.wd-hero-card--investor:hover .wd-hero-deco {
    opacity: 0.1;
}

/* ==========================================================================
   搜索 & 筛选条
   ========================================================================== */
.wd-filter-wrap {
    padding: 12px 0 8px;
}

.wd-filter-card {
    display: flex;
    align-items: center;
    gap: 14px;
    background: var(--wd-surface);
    border: 1px solid var(--wd-surface-container);
    border-radius: var(--wd-radius-lg);
    box-shadow: var(--wd-shadow-sm);
    padding: 14px 16px;
    flex-wrap: wrap;
}

.wd-search-field {
    position: relative;
    flex: 1 1 320px;
    display: flex;
    align-items: center;
}

.wd-search-icon {
    position: absolute;
    left: 16px;
    color: var(--wd-outline);
    font-size: 22px;
    pointer-events: none;
}

.wd-filter-card .wd-search-input,
.wd-filter-card input.wd-search-input {
    width: 100%;
    border: 1px solid var(--wd-surface-container);
    background: var(--wd-surface-low);
    border-radius: 8px;
    padding: 13px 44px 13px 46px;
    box-shadow: none;
    font-family: var(--wd-font-body);
    font-size: 15px;
    color: var(--wd-text-primary);
    outline: none;
    transition: border-color 0.2s ease, box-shadow 0.2s ease, background 0.2s ease;
}

/* 提高优先级，防止旧版 input[type=text] 规则覆盖内边距导致图标压字 */
.wd-filter-card .wd-search-icon {
    z-index: 2;
    left: 16px;
}

.wd-search-input::placeholder {
    color: var(--wd-outline);
}

.wd-search-input:focus {
    border-color: var(--wd-primary-container);
    background: #fff;
    box-shadow: 0 0 0 3px rgba(0, 63, 137, 0.12);
}

.wd-search-clear {
    position: absolute;
    right: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: var(--wd-surface-container);
    color: var(--wd-text-secondary);
    font-size: 14px;
    line-height: 1;
    text-decoration: none;
    cursor: pointer;
    transition: background 0.2s ease;
}

.wd-search-clear:hover {
    background: var(--wd-outline-variant);
}

.wd-filter-actions {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}

.wd-filter-btn {
    position: relative;
    display: inline-flex;
    align-items: center;
    gap: 10px;
    border: 1px solid var(--wd-surface-container);
    background: #fff;
    border-radius: 10px;
    padding: 12px 18px;
    font-family: var(--wd-font-body);
    font-size: 15px;
    font-weight: 500;
    color: var(--wd-text-primary);
    cursor: pointer;
    transition: all 0.2s ease;
    white-space: nowrap;
}

.wd-filter-btn .material-symbols-outlined {
    font-size: 20px;
    color: var(--wd-outline);
    transition: transform 0.2s ease;
}

.wd-filter-btn:hover,
.wd-filter-btn.active {
    border-color: var(--wd-primary-container);
    color: var(--wd-primary-container);
    background: #fff;
}

.wd-filter-btn.active .material-symbols-outlined {
    transform: rotate(180deg);
    color: var(--wd-primary-container);
}

.wd-search-submit {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 13px 28px;
    border-radius: 10px;
    background: var(--wd-primary);
    color: #fff;
    font-family: var(--wd-font-head);
    font-size: 15px;
    font-weight: 700;
    text-decoration: none;
    transition: background 0.2s ease;
    white-space: nowrap;
}

/* 参考稿 Search 按钮无图标，隐藏模板中的箭头 */
.wd-search-submit .material-symbols-outlined {
    display: none;
}

.wd-search-submit:hover {
    background: var(--wd-primary-container);
    color: #fff !important;
}

/* 筛选下拉面板（保留旧 class 供 JS 驱动，样式覆盖） */
.wd-filter-panel {
    position: absolute;
    z-index: 1060;
    top: calc(100% + 10px);
    left: 0;
    width: 100%;
    min-width: 320px;
    background: #fff;
    border: 1px solid var(--wd-surface-container);
    border-radius: var(--wd-radius-lg);
    box-shadow: 0 24px 48px -16px rgba(0, 42, 95, 0.25);
    padding: 18px;
}

.wd-filter-panel .select_btn_all {
    padding: 6px 0;
    border-bottom: 1px solid var(--wd-surface-container);
    margin-bottom: 8px;
}

.wd-filter-panel .select_btn_all label,
.wd-filter-panel .select_one {
    display: block;
    width: 100%;
    padding: 10px 12px;
    margin: 0;
    border-radius: 6px;
    font-family: var(--wd-font-body);
    font-size: 15px;
    font-weight: 500;
    color: var(--wd-text-primary);
    cursor: pointer;
    transition: background 0.15s ease, color 0.15s ease;
    border: none;
    background: transparent;
    text-align: left;
}

.wd-filter-panel .select_btn_all label:hover,
.wd-filter-panel .select_one:hover {
    background: var(--wd-surface-low);
    color: var(--wd-primary-container);
}

.wd-filter-panel .select_btn_all label.active,
.wd-filter-panel .select_one.active {
    background: var(--wd-primary-fixed);
    color: var(--wd-primary);
    font-weight: 600;
}

.wd-filter-panel .ResetSector {
    display: none;
}

.wd-filter-panel .select_one_area {
    max-height: 300px;
    overflow-y: auto;
    margin-top: 4px;
}

/* 下拉面板内的地区搜索。
   ⚠️ .btn-province（城市/州下拉）不能在这里强制 flex 显示：各页模板都给它写了
   style="display:none"，本意是「选完国家才出现」。这里一旦加 !important 就会压过 inline，
   导致国家和城市同时冒出来、级联失效。所以只让外层容器 .left 保持 flex 布局。 */
.wd-filter-panel .left.u-flex {
    display: flex !important;
    gap: 10px;
}

.wd-filter-panel .search_form {
    position: relative;
    margin-bottom: 12px;
}

.wd-filter-panel .search_form .wd-search-input {
    padding-right: 16px;
    padding-left: 16px;
}

/* 已选标签 (JS 生成 .selected_btn) */
.selected_btn {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: var(--wd-primary-container) !important;
    color: #fff !important;
    border: none !important;
    border-radius: 999px;
    padding: 6px 14px;
    font-family: var(--wd-font-body);
    font-size: 14px;
    font-weight: 600;
    margin: 4px 6px 4px 0 !important;
    position: relative;
}

.selected_btn .hidden-image {
    width: 16px;
    height: 16px;
    cursor: pointer;
}

.selected_btn:hover .hidden-image {
    display: inline-block !important;
}

.hidden-image {
    display: none !important;
}

/* 三角箭头（JS 写入 .triangle-down） */
.triangle-down {
    display: inline-block;
    width: 0;
    height: 0;
    border-left: 5px solid transparent;
    border-right: 5px solid transparent;
    border-top: 6px solid currentColor;
    vertical-align: middle;
}

/* ==========================================================================
   事件列表（Funding Rounds）
   ========================================================================== */
.wd-list {
    padding: 20px 0 48px;
}

.wd-card {
    display: flex;
    gap: 28px;
    background: var(--wd-surface);
    border: 1px solid var(--wd-surface-container);
    border-radius: var(--wd-radius-lg);
    padding: 26px 28px;
    margin-bottom: 18px;
    box-shadow: var(--wd-shadow-sm);
    transition: box-shadow 0.22s ease, transform 0.22s ease;
}

.wd-card:hover {
    box-shadow: var(--wd-shadow);
    transform: translateY(-2px);
}

.wd-card-left {
    flex: 0 0 120px;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 16px;
}

.wd-card-date {
    display: inline-flex;
    align-items: center;
    align-self: flex-start;
    gap: 6px;
    font-size: 13px;
    font-weight: 600;
    color: var(--wd-text-secondary);
}

.wd-card-date .material-symbols-outlined {
    font-size: 16px;
    color: var(--wd-outline);
}

.wd-card-logo {
    width: 104px;
    height: 104px;
    border-radius: var(--wd-radius);
    background: var(--wd-surface-low);
    border: 1px solid #e5e7eb;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
}

.wd-card-logo img {
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
}

.wd-card-body {
    flex: 1 1 auto;
    min-width: 0;
}

.wd-card-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 8px 16px;
    margin-bottom: 5px;
}

.wd-card-title,
.wd-card-title.company-title {
    font-family: var(--wd-font-head);
    /* 对齐参考稿 headline-md + font-extrabold：24px / 32px / 800 */
    font-size: 24px;
    font-weight: 800;
    color: var(--wd-primary);
    text-decoration: none;
    border-bottom: none !important;
    line-height: 32px;
}

.wd-card-title:hover {
    color: var(--wd-primary-container);
    text-decoration: underline !important;
}

.wd-card-loc {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: 14px;
    font-weight: 500;
    color: var(--wd-text-secondary);
}

.wd-card-loc .material-symbols-outlined {
    font-size: 17px;
    color: var(--wd-outline);
}

.wd-card-desc {
    /* 显式写字体：防止被其它祖先覆盖，保证与参考稿一致
       （body 基线 2026-09-19 起已改为 Hanken Grotesk / 16px / 400） */
    font-family: var(--wd-font-body);
    font-size: 16px;
    font-weight: 400;
    line-height: 24px;
    color: var(--wd-text-secondary);
    margin: 0 0 10px;
}

.wd-card-desc a.wd-org-link,
.wd-card-desc a.wd-company-link {
    color: var(--wd-text-secondary);
    font-weight: 400; /* 与卡片描述正文一致，不再加粗 */
    text-decoration: underline;
}

.wd-card-desc a.wd-org-link:hover,
.wd-card-desc a.wd-company-link:hover {
    color: var(--wd-primary-container);
    text-decoration: underline;
}

.wd-card-desc a.company-title {
    color: var(--wd-text-secondary);
    font-weight: 400; /* 与卡片描述正文一致，不再加粗 */
    text-decoration: underline;
    border-bottom: none; /* 覆盖flex.css中的border-bottom，避免双下划线 */
}

.wd-card-desc a.company-title:hover {
    color: var(--wd-primary-container);
    text-decoration: underline;
}

.wd-card-detail {
    display: inline-flex;
    align-items: center;
    gap: 2px;
    margin-left: 10px;
    font-size: 14px;
    font-weight: 700;
    color: var(--wd-primary-container);
    text-decoration: none;
    white-space: nowrap;
}

.wd-card-detail:hover {
    text-decoration: underline !important;
}

.wd-card-detail .material-symbols-outlined {
    font-size: 17px;
}

/* 参考稿卡片「描述」与下方 tags / 社交图标之间没有分隔线，移除 border-top；
   padding-top 保留，维持 foot 与描述之间的间距。 */
.wd-card-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 12px 16px;
    padding-top: 14px;
}

.wd-card-chips {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    align-items: center;
}

/* 首页交易卡片：chips 在 .wd-card-foot 内，只靠 foot 的 padding-top 分隔，
   不再叠加下面那条给列表页（fundlist）用的 24px 列对齐 padding。 */
.wd-card-foot .wd-card-chips {
    padding-top: 0;
}

.wd-chip {
    display: inline-block;
    background: #f3f4f6;
    color: var(--wd-secondary);
    border-radius: 999px;
    padding: 5px 14px;
    font-size: 13px;
    font-weight: 500;
}

/* ----------------------------------------------------------------------------
   首页「Recent Funded Deals」卡片 —— 逐项对齐参考稿 homepage.html

   作用域：.wd-card:has(.wd-card-left)
     .wd-card-left 只出现在「funding rounds」卡片，它有两处渲染、结构完全相同：
       views/redesign/index/main/index.tpl.htm  （首页 JS 模板）
       app/api/investment/main.php              （列表 AJAX 拼 HTML）
     两处是同一组件，一起对齐。
     fundlist / companylist 的卡片用的是 .wd-card-avatar / .wd-card-stat-title，
     没有 .wd-card-left，因此不受本块影响（已实测 .wd-card 在这两页不存在）。

   数值来源：CDP 抓 127.0.0.1:8182/homepage.html 的 computed style（.workbuddy/tmp/
   cmp-card.js），不是读源码推断 —— 推断会错，见下面关于标题字号的说明。

   ⚠️ 参考稿卡片标题只写了 font-headline-md（字体族），漏了 text-headline-md（字号），
      因此实际渲染是继承 body 的 16px / 24px，与其设计系统里 headline-md 定义的
      24px / 32px 并不一致。这里按「实测渲染值」对齐。
      若要改用设计系统的 24px，把下面 .wd-card-title 的 font-size / line-height
      改回 24px / 32px 即可，其余项不受影响。
   ---------------------------------------------------------------------------- */
.wd-card:has(.wd-card-left) {
    gap: 24px;
    padding: 24px;
    border-radius: 8px;
    border-color: #d1d5db;
    /* 显式重置字体，让 loc / foot / share 等未声明字体的子元素固定继承 Hanken 16px/400
       （body 基线 2026-09-19 起已同步改为 Hanken Grotesk / 16px / 400，此处为双保险） */
    font-family: var(--wd-font-body);
    font-size: 16px;
    line-height: 24px;
    font-weight: 400;
    /* 参考稿 on-surface = #181C1F；dev 继承的是旧 app.min.css 的 body color #555555，
       会让 foot / share 区未显式设色的文字偏灰 */
    color: #181c1f;
}

.wd-card:has(.wd-card-left) .wd-card-logo {
    width: 112px;
    height: 112px;
    border-radius: 4px;
}

.wd-card:has(.wd-card-left) .wd-card-title {
    font-size: 16px;
    line-height: 24px;
}

.wd-card:has(.wd-card-left) .wd-card-loc {
    font-size: 16px;
    line-height: 24px;
    font-weight: 400;
}

/* 参考稿描述带 leading-relaxed（1.625 × 16px = 26px） */
.wd-card:has(.wd-card-left) .wd-card-desc {
    line-height: 26px;
}

.wd-card:has(.wd-card-left) .wd-chip {
    font-family: var(--wd-font-body);
    font-size: 13.5px;
    /* 参考稿实测 20.25px（13.5 × 1.5）；不写会继承 24px，tag 高度从 28.25px 撑到 32px */
    line-height: 1.5;
    font-weight: 400;
    padding: 4px 12px;
    border-radius: 12px;
}

.wd-card-share {
    display: flex;
    align-items: center;
    gap: 12px;
}

.wd-card-share .website {
    display: flex;
    align-items: center;
    gap: 10px;
}

.wd-card-share .website a {
    display: inline-flex;
    align-items: center;
    opacity: 0.8;
    transition: opacity 0.15s ease;
}

.wd-card-share .website a:hover {
    opacity: 1;
}

.wd-card-share .website img {
    width: 22px;
    height: 22px;
    object-fit: contain;
}

.wd-share-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: var(--wd-surface-low);
    color: var(--wd-text-secondary);
    transition: all 0.2s ease;
    text-decoration: none;
}

.wd-share-btn:hover {
    background: var(--wd-primary-container);
    color: #fff;
}

.wd-share-btn .material-symbols-outlined {
    font-size: 19px;
}

/* ==========================================================================
   View More
   ========================================================================== */
.wd-view-more {
    display: flex;
    justify-content: center;
    padding: 28px 0 12px;
}

.wd-view-more a {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 14px 42px;
    border: 1px solid var(--wd-primary-container);
    border-radius: 999px;
    color: var(--wd-primary-container);
    background: #fff;
    font-family: var(--wd-font-head);
    font-size: 15px;
    font-weight: 700;
    text-decoration: none;
    transition: all 0.2s ease;
}

.wd-view-more a:hover {
    background: var(--wd-primary-container);
    color: #fff !important;
}

.wd-view-more a .material-symbols-outlined {
    font-size: 18px;
}

/* ==========================================================================
   弹窗（Bootstrap modal 微调）
   ========================================================================== */
.wd-modal .modal-content {
    border: none;
    border-radius: var(--wd-radius-lg);
    box-shadow: var(--wd-shadow);
    overflow: hidden;
}

.wd-modal .modal-header {
    border-bottom: 1px solid var(--wd-surface-container);
    background: var(--wd-background);
}

.wd-modal .modal-header h5,
.wd-modal .modal-header h4 {
    font-family: var(--wd-font-head);
    font-weight: 700;
    color: var(--wd-primary);
}

.wd-modal .modal-footer {
    border-top: 1px solid var(--wd-surface-container);
}

.wd-modal .btn-primary {
    background: var(--wd-primary-container);
    border-color: var(--wd-primary-container);
    border-radius: 8px;
    padding: 9px 24px;
    font-weight: 600;
}

.wd-modal .btn-primary:hover {
    background: var(--wd-primary);
    border-color: var(--wd-primary);
}

/* 加载动画占位 */
.wd-loading {
    display: flex;
    justify-content: center;
    padding: 40px 0;
    color: var(--wd-text-secondary);
    font-size: 15px;
}

/* ==========================================================================
   响应式
   ========================================================================== */
@media (max-width: 768px) {
    .wd-hero {
        margin-top: 16px;
        padding: 16px 0;
    }

    .wd-hero-grid {
        grid-template-columns: 1fr;
        gap: 20px;
    }

    .wd-hero-title {
        font-size: 30px;
        line-height: 36px;
    }

    .wd-hero-desc {
        font-size: 16px;
        line-height: 24px;
        margin-bottom: 24px;
    }

    .wd-hero-btn {
        padding: 14px 24px;
        font-size: 15px;
    }

    .wd-hero-deco {
        font-size: 160px;
        right: -32px;
        bottom: -32px;
    }

    .wd-section-title {
        font-size: 24px;
    }

    .wd-card {
        flex-direction: column;
        gap: 18px;
        padding: 20px;
    }

    .wd-card-left {
        flex-direction: row;
        flex: none;
        justify-content: flex-start;
    }

    .wd-card-logo {
        width: 84px;
        height: 84px;
    }

    .wd-card-title {
        font-size: 17px;
    }

    .wd-filter-panel {
        position: fixed;
        top: auto;
        left: 12px;
        right: 12px;
        width: auto;
        min-width: 0;
        bottom: 12px;
        max-height: 70vh;
        overflow-y: auto;
    }
}

/* ==========================================================================
   筛选下拉面板容器 & 面板内控件覆盖（Bootstrap btn 系列）
   ========================================================================== */
.wd-filter-panels {
    position: relative;
}

/* 面板内多选项：M3 pill 形态（与参考稿 Sector 面板一致）
   未选中 = 白底 + 浅灰边框 + 深色文字；选中 = primary 深蓝实底 + 白字。 */
.wd-filter-panel .btn-group {
    display: block;
}

.wd-filter-panel .btn-group label.btn {
    display: inline-flex;
    align-items: center;
    margin: 0 8px 8px 0;
    padding: 8px 18px;
    border: 1px solid var(--wd-surface-container);
    border-radius: 999px;
    background: var(--wd-surface);
    color: var(--wd-text-primary);
    font-family: var(--wd-font-body);
    font-size: 14px;
    font-weight: 500;
    line-height: 1.4;
    cursor: pointer;
    transition: all 0.15s ease;
}

/* 隐藏原生 checkbox：选中态完全由 pill 自身表达，避免裸露的方框 */
.wd-filter-panel .btn-group label.btn input[type="checkbox"] {
    display: none;
}

.wd-filter-panel .btn-group label.btn:hover {
    border-color: var(--wd-primary);
    color: var(--wd-primary);
}

.wd-filter-panel .btn-group label.btn.btn-light.active {
    background: var(--wd-primary);
    border-color: var(--wd-primary);
    color: #fff;
}

/* 增强：不依赖 Bootstrap data-toggle 同步 .active class，
   checkbox 一旦勾选就直接显示为选中态（两者分开写，避免 :has 不被支持时整条规则被丢弃） */
.wd-filter-panel .btn-group label.btn:has(input[type="checkbox"]:checked) {
    background: var(--wd-primary);
    border-color: var(--wd-primary);
    color: #fff;
}

.wd-filter-panel .wd-panel-actions {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-top: 14px;
    padding-top: 14px;
    border-top: 1px solid var(--wd-surface-container);
}

.wd-filter-panel .wd-panel-actions .btn {
    border-radius: 8px;
    padding: 9px 24px;
    font-weight: 600;
    font-family: var(--wd-font-body);
}

.wd-filter-panel .wd-panel-actions .btn-primary {
    background: var(--wd-primary-container);
    border-color: var(--wd-primary-container);
    color: #fff;
}

.wd-filter-panel .wd-panel-actions .btn-primary:hover {
    background: var(--wd-primary);
    border-color: var(--wd-primary);
    color: #fff;
}

.wd-filter-panel .wd-panel-actions .btn-light {
    background: #fff;
    border: 1px solid var(--wd-surface-container);
    color: var(--wd-text-primary);
}

.wd-filter-panel .wd-panel-actions .btn-light:hover {
    border-color: var(--wd-primary-container);
    color: var(--wd-primary-container);
}

/* 已选筛选标签行（JS 填充 .SectorLabel/.StageLabel/.LocationLabel） */
.SelectLabelBox .wd-label-box {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 14px 4px 2px;
    border-top: 1px solid var(--wd-surface-container);
    margin-top: 12px;
}

.wd-label-box .wd-label-clean {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    border: none;
    background: none;
    color: var(--wd-text-secondary);
    font-family: var(--wd-font-body);
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
    padding: 6px 14px;
    border-radius: 8px;
    margin: 0;
    transition: all 0.15s ease;
}

.wd-label-box .wd-label-clean:hover {
    background: var(--wd-surface-low);
    color: var(--wd-primary-container);
}

.wd-label-box .wd-label-clean .material-symbols-outlined {
    font-size: 16px;
}

/* ==========================================================================
   公共 Header（TopAppBar）
   ========================================================================== */
.wd-header {
    position: sticky;
    top: 0;
    z-index: 1050;
    background: #ffffff;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
    border-bottom: 1px solid var(--wd-outline-variant);
}

.wd-header-inner {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
    max-width: var(--wd-container);
    margin: 0 auto;
    padding: 16px var(--wd-gutter);
}

.wd-header-left {
    display: flex;
    align-items: center;
    gap: 40px;
}

.wd-brand {
    display: flex;
    align-items: center;
    gap: 10px;
    text-decoration: none;
}

.wd-brand-logo {
    width: 40px;
    height: 40px;
    object-fit: contain;
}

.wd-brand-name {
    font-family: var(--wd-font-head);
    font-size: 24px;
    font-weight: 700;
    color: var(--wd-primary);
    line-height: 1.2;
}

.wd-nav {
    display: flex;
    align-items: center;
    gap: 24px;
}

.wd-nav-link {
    font-family: var(--wd-font-body);
    font-size: 18px;
    font-weight: 600;
    color: var(--wd-text-secondary);
    text-decoration: none;
    padding: 2px 2px;
    border-bottom: 2px solid transparent;
    transition: color 0.2s ease, border-color 0.2s ease;
}

.wd-nav-link:hover {
    color: var(--wd-primary);
}

.wd-nav-link.active {
    color: var(--wd-secondary);
    border-bottom-color: var(--wd-secondary);
}

.wd-header-right {
    display: flex;
    align-items: center;
    gap: 12px;
}

.wd-btn-login {
    display: inline-flex;
    align-items: center;
    padding: 8px 16px;
    background: var(--wd-primary);
    color: #fff;
    border-radius: 4px;
    font-family: var(--wd-font-head);
    font-size: 16px;
    font-weight: 600;
    line-height: 1.2;
    text-decoration: none;
    transition: opacity 0.2s ease;
}

.wd-btn-login:hover {
    opacity: 0.9;
}

.wd-btn-signup {
    display: inline-flex;
    align-items: center;
    padding: 10px 16px;
    background: var(--wd-secondary);
    color: #fff;
    border-radius: 4px;
    font-family: var(--wd-font-head);
    font-size: 14px;
    font-weight: 600;
    line-height: 1.2;
    text-decoration: none;
    transition: opacity 0.2s ease, transform 0.15s ease;
}

.wd-btn-signup:hover {
    opacity: 0.9;
}

.wd-btn-signup:active {
    transform: scale(0.97);
}

.wd-avatar {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    object-fit: cover;
    border: 2px solid var(--wd-surface-container);
}

.wd-header-user {
    display: flex;
    align-items: center;
    justify-content: center;
    text-decoration: none !important;
}

.wd-nav-toggle {
    display: none;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border: 1px solid var(--wd-outline-variant);
    border-radius: 8px;
    background: transparent;
    color: var(--wd-primary);
    cursor: pointer;
}

.wd-nav-toggle .material-symbols-outlined {
    font-size: 24px;
}

/* ==========================================================================
   公共 Footer
   ========================================================================== */
.wd-footer {
    background: var(--wd-primary);
    padding: 64px 0 32px;
}

.wd-footer-inner {
    max-width: var(--wd-container);
    margin: 0 auto;
    padding: 0 var(--wd-gutter);
}

.wd-footer-main {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 48px;
    padding-bottom: 32px;
}

.wd-footer-brand {
    max-width: 320px;
}

.wd-footer-title {
    display: block;
    font-family: var(--wd-font-head);
    font-size: 24px;
    font-weight: 700;
    color: #fff;
    margin-bottom: 16px;
}

.wd-footer-desc {
    font-family: var(--wd-font-body);
    font-size: 15px;
    line-height: 1.6;
    color: #cbd5e1;
    margin: 0;
    word-break: normal; /* 覆盖 app.min.css 的 p{word-break:break-all}，禁止单词内断行 */
}

.wd-footer-links {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 48px;
}

.wd-footer-col {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.wd-footer-col-title {
    font-family: var(--wd-font-head);
    font-size: 18px;
    font-weight: 600;
    color: #fe8f22;
    margin-bottom: 4px;
}

.wd-footer-link {
    font-family: var(--wd-font-body);
    font-size: 16px;
    color: #cbd5e1;
    text-decoration: none;
    transition: color 0.2s ease;
}

.wd-footer-link:hover {
    color: #fff;
}

.wd-footer-bottom {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    padding-top: 24px;
    border-top: 1px solid rgba(255, 255, 255, 0.12);
}

.wd-footer-copy {
    font-family: var(--wd-font-body);
    font-size: 14px;
    color: #f3f4f6;
    margin: 0;
    word-break: normal; /* 覆盖 app.min.css 的 p{word-break:break-all} */
}

/* Header / Footer 响应式 */
@media (max-width: 1024px) {
    .wd-nav {
        gap: 16px;
    }

    .wd-header-left {
        gap: 24px;
    }
}

@media (max-width: 768px) {
    .wd-header {
        position: relative;
    }

    .wd-header-inner {
        padding: 10px 16px;
    }

    .wd-nav-toggle {
        display: inline-flex;
    }

    .wd-nav {
        display: none;
        flex-direction: column;
        align-items: stretch;
        gap: 4px;
        position: absolute;
        top: 100%;
        left: 0;
        right: 0;
        background: #fff;
        border-bottom: 1px solid var(--wd-outline-variant);
        box-shadow: var(--wd-shadow-sm);
        padding: 12px var(--wd-gutter);
    }

    .wd-nav.open {
        display: flex;
    }

    .wd-nav-link {
        padding: 10px 4px;
        border-bottom: none;
        border-left: 3px solid transparent;
    }

    .wd-nav-link.active {
        border-bottom: none;
        border-left-color: var(--wd-secondary);
    }

    .wd-brand-name {
        font-size: 20px;
    }

    .wd-btn-login,
    .wd-btn-signup {
        padding: 8px 14px;
        font-size: 14px;
        border-radius: 6px;
    }

    .wd-footer-main {
        flex-direction: column;
        gap: 32px;
    }

    .wd-footer-links {
        width: 100%;
        gap: 24px;
    }

    .wd-footer-bottom {
        flex-direction: column;
        align-items: flex-start;
        gap: 12px;
    }
}

/* ==========================================================================
   响应式网格布局（用于列表页面）
   ========================================================================== */
.wd-grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--wd-gutter);
}

@media (min-width: 768px) {
    .wd-grid {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (min-width: 1024px) {
    .wd-grid {
        grid-template-columns: repeat(3, 1fr);
    }
}

.wd-grid-card {
    background: var(--wd-surface);
    border: 1px solid var(--wd-surface-container);
    border-radius: var(--wd-radius-lg);
    padding: var(--wd-card-padding, 32px);
    box-shadow: var(--wd-shadow-sm);
    transition: box-shadow 0.22s ease, transform 0.22s ease;
    display: flex;
    flex-direction: column;
    height: 100%;
}

.wd-grid-card:hover {
    box-shadow: var(--wd-shadow);
    transform: translateY(-2px);
}

.wd-grid-card-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    margin-bottom: 24px;
}

.wd-grid-card-title {
    font-family: var(--wd-font-head);
    font-size: 24px;
    font-weight: 600;
    line-height: 1.2;
    color: var(--wd-text-primary);
    margin-bottom: 8px;
}

.wd-grid-card-title a {
    color: var(--wd-text-primary);
    text-decoration: none;
    transition: color 0.2s ease;
}

.wd-grid-card-title a:hover {
    color: var(--wd-primary-container);
}

.wd-grid-card-location {
    display: flex;
    align-items: center;
    gap: 4px;
    color: var(--wd-text-secondary);
    font-size: 14px;
}

.wd-grid-card-location .material-symbols-outlined {
    font-size: 18px;
}

.wd-grid-card-logo {
    width: 64px;
    height: 64px;
    border-radius: var(--wd-radius);
    background: var(--wd-surface-low);
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
}

.wd-grid-card-logo img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.wd-grid-card-body {
    flex: 1;
    display: flex;
    flex-direction: column;
}

.wd-grid-card-social {
    display: flex;
    gap: 20px;
    font-size: 20px;
    margin-bottom: 16px;
}

.wd-grid-card-social a {
    transition: all 0.2s ease;
}

.wd-grid-card-social a:hover {
    transform: scale(1.1);
}

.wd-grid-card-social a.wd-social-linkedin {
    color: #0A66C2;
}

.wd-grid-card-social a.wd-social-linkedin:hover {
    opacity: 0.8;
}

.wd-grid-card-social a.wd-social-twitter {
    color: #000;
}

.wd-grid-card-social a.wd-social-twitter:hover {
    opacity: 0.7;
}

.wd-grid-card-social a.wd-social-globe {
    color: #9CA3AF;
}

.wd-grid-card-social a.wd-social-globe:hover {
    color: #4B5563;
}

/* ==========================================================================
   列表页空状态（无结果 UI 重写：原来是裸文本，太丑）
   ========================================================================== */
.wd-empty-state {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 14px;
    grid-column: 1 / -1;
    padding: 64px 24px;
    border: 2px dashed var(--wd-outline-variant);
    border-radius: 16px;
    background: var(--wd-surface-low);
    color: var(--wd-text-secondary);
    text-align: center;
}
.wd-empty-icon {
    width: 64px;
    height: 64px;
    border-radius: 50%;
    background: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 4px 12px rgba(0, 42, 95, 0.08);
    color: var(--wd-primary);
}
.wd-empty-icon .material-symbols-outlined {
    font-size: 32px;
    color: var(--wd-outline);
}
.wd-empty-text {
    font-family: var(--wd-font-body);
    font-size: 16px;
    font-weight: 500;
    color: var(--wd-text-primary);
}
.wd-empty-action {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-family: var(--wd-font-body);
    font-size: 14px;
    font-weight: 600;
    color: var(--wd-primary-container);
    cursor: pointer;
    padding: 8px 18px;
    border-radius: 999px;
    border: 1px solid var(--wd-outline-variant);
    background: #fff;
    transition: all 0.15s ease;
    text-decoration: none;
}
.wd-empty-action:hover {
    border-color: var(--wd-primary-container);
    color: var(--wd-primary);
    background: var(--wd-primary-fixed);
}

/* ==========================================================================
   列表卡片 padding/基础类加固（Tailwind Play CDN 偶发漏生成，互补双保险）
   ========================================================================== */
.p-card-padding {
    padding: 2rem;
}
.investor-card {
    background-color: #FFFFFF;
    border: 1px solid var(--wd-outline-variant);
    border-radius: 12px;
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.04);
    transition: all 0.2s ease-in-out;
}
.investor-card:hover {
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
}

/* ==========================================================================
   rounded-full 兜底
   --------------------------------------------------------------------------
   tailwind-config.js 里 `full: "0.75rem"`（12px）是错的 —— Tailwind 标准应为
   9999px。结果全站 179 个 chip / 标签（高 28px）拿到 12px 圆角而不是胶囊形。
   这里按语义强制修正（rounded-full 的语义就是胶囊 / 正圆）。
   注意：不要顺手改 config 里的 DEFAULT / lg / xl —— 那会全站改动圆角，影响面大，
   需要先跟设计确认。这里只修语义明确的 full。
   ========================================================================== */
.rounded-full {
    border-radius: 9999px;
}

/* ==========================================================================
   列表卡片外壳：.glass-card（fund）/ .tonal-card（startup）/ .investor-card
   --------------------------------------------------------------------------
   踩坑：前两者在 alone.dev 里**没有任何自定义定义**，只靠 Tailwind 的
   `rounded-xl` 出圆角。而 tailwind-config.js 的 borderRadius 被整体改小了一半
   （xl: 0.5rem = 8px，标准应为 0.75rem = 12px），导致：
     fund 卡片 8px / company 卡片 8px / investor 卡片 12px（自定义 CSS）—— 三页不一致。
   这里显式定义，三页统一到 M3 卡片规范 12px。
   注意：不写 background，保留各卡片原有的玻璃/纯白质感。
   ========================================================================== */
.glass-card,
.tonal-card {
    border-radius: 12px !important;
    border: 1px solid var(--wd-outline-variant);
    box-shadow: 0 4px 12px rgba(0, 42, 95, 0.04);
    transition: box-shadow 0.2s ease, transform 0.2s ease;
}
.glass-card:hover,
.tonal-card:hover {
    box-shadow: 0 8px 24px rgba(0, 42, 95, 0.08);
}
.investor-card {
    border-radius: 12px;
}

/* ==========================================================================
   列表卡片（fundlist / investorlist / companylist）列内对齐
   --------------------------------------------------------------------------
   之前 `flex flex-col gap-6` 让所有子块紧贴顶部，不同 chip 行数的卡片
   "Deal Stage Stats" 行会错位（截图：第三张 cards chips 多一行，整行下沉 36-56px）。
   现改成：
   - 卡片根 `flex flex-col`，子块用 padding-top 分隔
   - chips 区 `flex-grow: 1` 自动填充剩余空间
   - "Deal Stage Stats" 标题 `margin-top: auto` 强制推到底部
   配合 `grid:auto-fill,minmax(320px,1fr)` (默认 align-items: stretch)
   让整列卡片底部对齐，标题起始位置恒定。
   ========================================================================== */
.wd-card-chips {
    padding-top: 24px;        /* 原 gap-6 = 1.5rem = 24px */
    flex: 1 1 auto;
    min-height: 0;
    align-content: flex-start;
}
.wd-card-stat-title {
    margin-top: auto;          /* 撑到底 */
    padding-top: 16px;
}

/* ==========================================================================
   卡片头像容器（统一标准 —— 对齐 WeDeal-Web-Redesign-main 参考稿）
   --------------------------------------------------------------------------
   踩坑：fundlist 卡片头像原本只用 Tailwind 类 `w-20 h-20 rounded-xl ...`，
   Tailwind Play CDN 偶发漏生成 → 容器没有固定宽高，被内部 img 撑成
   **64x17 的扁条**（CDP 实测），整张卡片视觉崩坏。
   这里改用自定义类锁死全部几何属性，不依赖 CDN。

   三种头像尺寸标准（与参考稿一致）：
   - .wd-card-avatar     Fund 卡片 80x80 / 圆角 12 / 无内缩 / contain（留白）
   - .wd-investor-avatar Investor 卡片 64x64 / 圆角 8 / cover（填满）
   - .wd-card-avatar-tr  Startup 卡片 64x64 / 圆角 12 / cover（填满）
   ========================================================================== */
.wd-card-avatar {
    width: 80px;
    height: 80px;
    flex: 0 0 80px;
    box-sizing: border-box;
    padding: 0;                         /* 2026-09-19 去掉内缩：logo 直接撑满 80x80（contain 不裁切） */
    border-radius: 12px;
    border: 0;               /* 参考稿品牌底头像无 border，改用 shadow 提层次 */
    background: var(--wd-surface-container);
    box-shadow: 0 1px 2px rgba(0, 42, 95, 0.06);
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}
.wd-card-avatar img {
    max-width: 100%;
    max-height: 100%;
    width: auto;
    height: auto;
    object-fit: contain;
    display: block;
}
.wd-card-avatar .material-symbols-outlined {
    font-size: 34px;
    line-height: 1;
    color: var(--wd-outline);
}

/* ==========================================================================
   投资者卡片头像绝对定位，避免"压字"——头像固定右上角，标题/位置
   给予 min-w-0 + break-words 不再被头像遮挡
   ========================================================================== */
.wd-investor-avatar {
    position: absolute;
    top: 1.25rem;
    right: 1.25rem;
    width: 64px;
    height: 64px;
    border-radius: 8px;          /* 参考稿 investors.html 用 rounded-lg */
    background: var(--wd-surface-container);
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--wd-primary);
    flex-shrink: 0;
    box-shadow: 0 1px 2px rgba(0, 42, 95, 0.06);
}
.wd-investor-avatar img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}
.wd-investor-body {
    /* 头像占顶部右侧 64 + 上下内边距，下方正文避免被压 */
    padding-right: 76px;
    min-width: 0;
}
.wd-investor-body h3,
.wd-investor-body a {
    word-break: break-word;
    overflow-wrap: anywhere;
}

/* --------------------------------------------------------------------------
   Investor 卡片：行业 / 轮次标签区分展示
   - 行业：无背景「#Name」文本标签（参考稿样式），字号 12px
   - 轮次：小胶囊标签，独立一行，字号 12px
   -------------------------------------------------------------------------- */
.wd-investor-industries,
.wd-investor-stages {
    line-height: 1;
}

.wd-investor-industries {
    margin-top: 12px;
}

.wd-investor-industry {
    display: inline-block;
    font-family: var(--wd-font-body);
    font-size: 12px;
    line-height: 1.5;
    font-weight: 500;
    color: var(--wd-primary);
    padding: 0;
    background: transparent;
    border: 0;
    border-radius: 0;
    white-space: nowrap;
}

.wd-investor-stages {
    margin-top: 8px;
}

.wd-investor-stage {
    display: inline-block;
    font-family: var(--wd-font-body);
    font-size: 12px;
    line-height: 1.5;
    font-weight: 500;
    color: var(--wd-text-secondary);
    background: #f3f4f6;
    border: 0;
    border-radius: 9999px;
    padding: 3px 10px;
    white-space: nowrap;
}

/* Investor 详情页：空间更充裕，行业/轮次标签字号放大到 14px（与 label-md 一致） */
.wd-investor-detail .wd-investor-industry,
.wd-investor-detail .wd-investor-stage {
    font-size: 14px;
}

.wd-investor-detail .wd-investor-industries,
.wd-investor-detail .wd-investor-stages {
    margin-top: 4px;
}

/* --------------------------------------------------------------------------
   Investor 详情页头像（人物照）：128 方 / 8px 小圆角 / cover
   圆角对齐参考稿 company.html 的 Hero 头像（w-32 h-32 rounded-lg = 8px）。
   与 .wd-av-hero（机构 logo）的区别只在 contain/cover：logo 保留品牌留白，人物照填满。
   -------------------------------------------------------------------------- */
.wd-av-person {
    flex-shrink: 0;
    width: 128px;
    height: 128px;
    border-radius: 8px;
    overflow: hidden;
    background: var(--wd-surface-container-low);
    border: 1px solid var(--wd-outline-variant);
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 1px 2px rgba(0, 42, 95, 0.06);
}
.wd-av-person img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

/* 公司/Founders 列表卡同理：头像右上 + 标题右 padding 让位 */
.wd-card-avatar-tr {
    position: absolute;
    top: 1.5rem;
    right: 1.5rem;
    width: 64px;
    height: 64px;
    border-radius: 12px;
    overflow: hidden;
    background: var(--wd-surface-container);
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    z-index: 1;
    box-shadow: 0 1px 2px rgba(0, 42, 95, 0.06);
}
.wd-card-avatar-tr img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/* --------------------------------------------------------------------------
   deals 卡片 / 详情页头像固化尺寸
   Tailwind Play CDN 偶发漏生成 w-32 / h-32 / w-16 等几何类（fundlist 已踩过一次，
   头像塌成 64x17 扁条）。这里把尺寸与圆角写死，CDN 正常与否视觉都一致。
   -------------------------------------------------------------------------- */
.wd-av-deal,
.wd-av-hero,
.wd-av-portfolio,
.wd-av-member {
    flex-shrink: 0;
    overflow: hidden;
    background: var(--wd-surface-container-low);
    border: 1px solid var(--wd-outline-variant);
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 1px 2px rgba(0, 42, 95, 0.06);
}
/* deals 卡片 logo：128 方 / 圆角 12 / cover */
.wd-av-deal {
    width: 128px;
    height: 128px;
    border-radius: 12px;
}
.wd-av-deal img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}
/* 详情页主 logo：128 方 / 圆角 8 / contain（保留品牌留白） */
.wd-av-hero {
    width: 128px;
    height: 128px;
    border-radius: 8px;
}
.wd-av-hero img {
    width: 100%;
    height: 100%;
    object-fit: contain;
}
/* Portfolio 小 logo：56 方 / 圆角 8 / contain */
.wd-av-portfolio {
    width: 56px;
    height: 56px;
    border-radius: 8px;
}
.wd-av-portfolio img {
    width: 100%;
    height: 100%;
    object-fit: contain;
}
/* 团队成员头像：64 方 / 全圆 / cover */
.wd-av-member {
    width: 64px;
    height: 64px;
    border-radius: 9999px;
}
.wd-av-member img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.wd-card-body-pr {
    padding-right: 80px;
    min-width: 0;
}
.wd-card-body-pr h3,
.wd-card-body-pr p,
.wd-card-body-pr a {
    word-break: break-word;
    overflow-wrap: anywhere;
}

/* ==========================================================================
   国家/州选择下拉浮层（替代 dev 站缺失的 dialog.table）
   ========================================================================== */
.wd-loc-dropdown {
    background: #fff;
    border: 1px solid var(--wd-outline-variant);
    border-radius: 12px;
    box-shadow: 0 12px 32px rgba(0, 42, 95, 0.18);
    overflow: hidden;
    font-family: var(--wd-font-body);
}
.wd-loc-search {
    width: 100%;
    border: 0;
    border-bottom: 1px solid var(--wd-outline-variant);
    padding: 10px 14px;
    font-size: 14px;
    outline: none;
    background: var(--wd-surface-low);
}
.wd-loc-search:focus {
    background: #fff;
    border-bottom-color: var(--wd-primary-container);
}
.wd-loc-list {
    max-height: 280px;
    overflow-y: auto;
}
.wd-loc-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px 14px;
    cursor: pointer;
    font-size: 14px;
    color: var(--wd-text-primary);
    transition: background 0.12s ease;
}
.wd-loc-item:hover {
    background: var(--wd-primary-fixed);
    color: var(--wd-primary);
}
.wd-loc-flag {
    width: 20px;
    height: 14px;
    border-radius: 2px;
    object-fit: cover;
    background: var(--wd-surface-container);
    flex-shrink: 0;
}
.wd-loc-flag-default {
    background: var(--wd-outline-variant);
}
.wd-loc-title {
    flex: 1;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.wd-loc-abbr {
    color: var(--wd-text-secondary);
    font-size: 12px;
    font-weight: 500;
}
.wd-loc-empty {
    padding: 16px;
    text-align: center;
    color: var(--wd-text-secondary);
    font-size: 13px;
}

.wd-grid-card-tags {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}

.wd-grid-card-tag {
    padding: 4px 8px;
    background: var(--wd-surface-low);
    color: var(--wd-text-secondary);
    border-radius: 999px;
    font-size: 12px;
    font-weight: 600;
}

/* ==========================================================================
   已选筛选 chip + 筛选按钮 .is-set 态
   模板中 .LocationLabel / .SectorLabel / .StageLabel / .TypeLabel / .RegionLabel
   内部由 JS 填充为 <label class="btn btn-sm btn-light active"> 形式
   ========================================================================== */
.SelectLabelBox {
    display: none;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    margin-top: 12px;
    padding: 8px 0 0;
    border-top: 1px dashed var(--wd-outline-variant);
}
.SelectLabelBox.is-active {
    display: flex;
}
.SelectLabelBox > .flex { flex: 1; min-width: 0; }

.SelectLabelBox .btn-group {
    display: inline-flex;
    flex-wrap: wrap;
    gap: 6px;
}

/* 取代旧 bootstrap .btn.btn-sm.btn-light 的 M3 chip 风格 */
.SelectLabelBox .btn-group .btn,
.SelectLabelBox .btn-group label.btn {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 14px;
    background: var(--wd-primary-fixed);
    color: var(--wd-primary);
    border: 1px solid transparent;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 600;
    line-height: 1.2;
    cursor: default;
    transition: all 0.15s ease;
    margin: 0;
}
.SelectLabelBox .btn-group .btn:hover,
.SelectLabelBox .btn-group label.btn:hover {
    background: #c5d4ff;
}
.SelectLabelBox .btn-group .btn input[type="checkbox"],
.SelectLabelBox .btn-group label.btn input[type="checkbox"] {
    /* 隐藏内置 checkbox，chip 已经是选中态 */
    display: none;
}
.SelectLabelBox .btn-group .btn::before,
.SelectLabelBox .btn-group label.btn::before {
    content: 'check';
    font-family: 'Material Symbols Outlined';
    font-size: 14px;
    line-height: 1;
    color: var(--wd-primary);
}

/* ResetSector 清空标签 */
.SelectLabelBox .wd-label-clean,
.SelectLabelBox label.clean {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 6px 12px;
    color: var(--wd-text-secondary);
    font-size: 13px;
    font-weight: 600;
    cursor: pointer;
    border-radius: 999px;
    background: transparent;
    border: 1px solid var(--wd-outline-variant);
    transition: all 0.15s ease;
}
.SelectLabelBox .wd-label-clean:hover,
.SelectLabelBox label.clean:hover {
    color: var(--wd-primary);
    border-color: var(--wd-primary);
    background: var(--wd-primary-fixed);
}
.SelectLabelBox .wd-label-clean .material-symbols-outlined,
.SelectLabelBox label.clean .material-symbols-outlined {
    font-size: 14px;
}

/* 筛选按钮在已设值时的 .is-set 态 —— 配 wd_set_filter_button 工具函数使用 */
.btn-select-country.is-set,
.btn-select-type.is-set,
.btn-select-sector.is-set,
.btn-select-stage.is-set,
.btn-select-region.is-set {
    background: var(--wd-primary-fixed) !important;
    color: var(--wd-primary) !important;
    border-color: var(--wd-primary) !important;
}
.btn-select-country.is-set .title,
.btn-select-type.is-set .title,
.btn-select-sector.is-set .title,
.btn-select-stage.is-set .title,
.btn-select-region.is-set .title {
    color: var(--wd-primary);
    font-weight: 700;
}
/* 已设值时按钮右侧加一个微小的 × 用于点击清除（仅 .is-set 时显示） */
.btn-select-country.is-set::after,
.btn-select-type.is-set::after,
.btn-select-sector.is-set::after,
.btn-select-stage.is-set::after,
.btn-select-region.is-set::after {
    content: 'cancel';
    font-family: 'Material Symbols Outlined';
    font-size: 16px;
    line-height: 1;
    color: var(--wd-primary);
    margin-left: 4px;
    opacity: 0.6;
    transition: opacity 0.15s;
    pointer-events: auto;
}
.btn-select-country.is-set::after:hover,
.btn-select-type.is-set::after:hover,
.btn-select-sector.is-set::after:hover,
.btn-select-stage.is-set::after:hover,
.btn-select-region.is-set::after:hover {
    opacity: 1;
}

/* ==========================================================================
   UPGRADE PLAN 弹窗 —— M3 Basic Dialog 风格
   ========================================================================== */
.wd-modal-backdrop {
    position: fixed;
    inset: 0;
    background: rgba(0, 26, 51, 0.45);
    z-index: 10000;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 16px;
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.2s ease;
}
.wd-modal-backdrop.wd-modal-open {
    opacity: 1;
    pointer-events: auto;
}
.wd-modal {
    background: #ffffff;
    border-radius: 28px;
    max-width: 520px;
    width: 100%;
    padding: 24px 24px 16px;
    box-shadow: 0 24px 48px -12px rgba(0, 0, 0, 0.25);
    transform: scale(0.96);
    transition: transform 0.2s ease;
    position: relative;
}
.wd-modal-backdrop.wd-modal-open .wd-modal {
    transform: scale(1);
}
.wd-modal-header {
    display: flex;
    align-items: center;
    gap: 16px;
    margin-bottom: 12px;
}
.wd-modal-icon {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: var(--wd-primary-fixed);
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}
.wd-modal-icon .material-symbols-outlined {
    color: var(--wd-primary);
    font-size: 22px;
}
.wd-modal-title {
    flex: 1;
    font-size: 22px;
    font-weight: 600;
    line-height: 1.2;
    color: var(--wd-text-primary);
    margin: 0;
    font-family: var(--wd-font-head);
    letter-spacing: 0.2px;
}
.wd-modal-close {
    background: none;
    border: none;
    padding: 8px;
    border-radius: 50%;
    color: var(--wd-text-secondary);
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    transition: all 0.15s;
    flex-shrink: 0;
}
.wd-modal-close:hover {
    background: var(--wd-surface-low);
    color: var(--wd-text-primary);
}
.wd-modal-close .material-symbols-outlined {
    font-size: 22px;
}
.wd-modal-body {
    padding: 4px 0 16px 56px;
    color: var(--wd-text-secondary);
    font-family: var(--wd-font-body);
}
.wd-modal-text {
    font-size: 16px;
    line-height: 1.55;
    margin: 4px 0;
}
.wd-modal-text-strong {
    color: var(--wd-text-primary);
    font-weight: 600;
}
.wd-modal-footer {
    display: flex;
    gap: 8px;
    justify-content: flex-end;
    padding-top: 8px;
    border-top: 1px solid var(--wd-surface-container);
    margin-top: 8px;
}
.wd-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    padding: 10px 22px;
    border-radius: 999px;
    font-family: var(--wd-font-body);
    font-size: 14px;
    font-weight: 600;
    text-decoration: none;
    cursor: pointer;
    transition: all 0.15s;
    border: none;
    min-width: 80px;
    line-height: 1;
}
.wd-btn-primary {
    background: var(--wd-primary);
    color: #ffffff;
}
.wd-btn-primary:hover {
    background: var(--wd-primary-container);
    box-shadow: 0 6px 16px -4px rgba(0, 42, 95, 0.35);
}
.wd-btn-text {
    background: transparent;
    color: var(--wd-primary);
}
.wd-btn-text:hover {
    background: var(--wd-primary-fixed);
}

@media (max-width: 540px) {
    .wd-modal { border-radius: 20px; padding: 20px 16px 12px; }
    .wd-modal-body { padding-left: 0; }
    .wd-modal-footer { flex-direction: column-reverse; }
    .wd-btn { width: 100%; }
}

/* ==========================================================================
   付费权益提示 Banner（列表页顶部，仅免费/未登录用户展示）
   --------------------------------------------------------------------------
   M3 tonal 风格：主色系浅底 + 深蓝文字。
   - 默认由 PHP 按 auth_plan 决定是否渲染，避免首屏闪现后再消失
   - .wd-plan-banner.is-dismissed 由 JS 关闭时加上，本次会话内不再出现
   ========================================================================== */
.wd-plan-banner {
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 14px 16px;
    margin-bottom: 24px;
    border: 1px solid var(--wd-primary-fixed);
    border-left: 4px solid var(--wd-primary);
    border-radius: 12px;
    background: linear-gradient(90deg, var(--wd-primary-fixed) 0%, #eef3ff 100%);
    overflow: hidden;
    transition: opacity .2s ease, margin .2s ease, max-height .25s ease, padding .2s ease;
    max-height: 200px;
}
.wd-plan-banner.is-dismissed {
    opacity: 0;
    max-height: 0;
    margin-bottom: 0;
    padding-top: 0;
    padding-bottom: 0;
    border-width: 0;
    pointer-events: none;
}
.wd-plan-banner-icon {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: var(--wd-primary);
    color: #ffffff;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}
.wd-plan-banner-icon .material-symbols-outlined {
    font-size: 22px;
}
.wd-plan-banner-text {
    flex: 1;
    min-width: 0;
    font-family: var(--wd-font-body);
}
.wd-plan-banner-title {
    margin: 0;
    font-size: 15px;
    font-weight: 700;
    line-height: 1.4;
    color: var(--wd-primary);
}
.wd-plan-banner-desc {
    margin: 3px 0 0;
    font-size: 13px;
    line-height: 1.45;
    color: var(--wd-text-secondary);
}
.wd-plan-banner-desc strong {
    color: var(--wd-primary);
    font-weight: 600;
}
.wd-plan-banner-actions {
    display: flex;
    align-items: center;
    gap: 4px;
    flex-shrink: 0;
}
.wd-plan-banner .wd-btn {
    padding: 9px 20px;
    font-size: 13px;
}
.wd-plan-banner-close {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border: none;
    border-radius: 50%;
    background: transparent;
    color: var(--wd-primary);
    cursor: pointer;
    transition: background .15s;
    flex-shrink: 0;
}
.wd-plan-banner-close:hover {
    background: rgba(0, 42, 95, 0.08);
}
.wd-plan-banner-close .material-symbols-outlined {
    font-size: 20px;
}

@media (max-width: 768px) {
    .wd-plan-banner {
        flex-wrap: wrap;
        gap: 12px;
        padding: 14px;
    }
    .wd-plan-banner-text {
        flex: 1 1 auto;
        min-width: 200px;
    }
    .wd-plan-banner-actions {
        width: 100%;
        justify-content: flex-start;
    }
    .wd-plan-banner-close {
        position: absolute;
        top: 6px;
        right: 6px;
    }
    .wd-plan-banner { position: relative; }
}

/* ==========================================================================
   列表主容器兜底：避免与 header 的 <main class="main-container wd-main"> 嵌套
   --------------------------------------------------------------------------
   header 已经有 main，列表模板里曾用 <main class="max-w-container-max ..."> 二次嵌套。
   HTML5 解析会忽略第二个 main 并隐式闭合前一个，导致外层 main 没 max-width 全宽贴左。
   现统一改用 <div class="wd-list-wrap">，下面是兜底防止 Tailwind Play CDN 漏生成 max-w-container-max。
   ========================================================================== */
.wd-list-wrap {
    max-width: 1280px;
    width: 100%;
    margin-left: auto;
    margin-right: auto;
    padding-left: 24px;
    padding-right: 24px;
    padding-bottom: 32px;
    box-sizing: border-box;
}
@media (max-width: 768px) {
    .wd-list-wrap { padding-left: 16px; padding-right: 16px; }
}

/* 通用隐藏工具类：登录/注册脚本的锁定态、清除按钮等依赖 .hide 切换显隐 */
.hide { display: none !important; }

/* 左图标输入框兜底：确保 padding-left 一定 ≥ 图标 + 间距。
   ⚠️ 必须带 !important 且特异性 ⥖ (0,2,1)：接管块 §11.11 有 main.wd-main .pl-10{padding-left:10px !important}（app 的
   纯 px 类），会压过无 !important 的本类 → 登录/注册/找回密码页输入文字与图标重叠。
   适用于 account / email / password 等左侧带 Material Symbols 的 input。 */
main.wd-main input.wd-icon-input-l,
body:has(.wd-auth-page) input.wd-icon-input-l { padding-left: 2.75rem !important; }
/* 右图标输入框（同理，给 verify_code 右侧 captcha 等预留空间） */
main.wd-main input.wd-icon-input-r,
body:has(.wd-auth-page) input.wd-icon-input-r { padding-right: 4rem !important; }

/* 独立页（登录 / 注册 / 找回密码）品牌 logo：与参考稿一致 32×32。
   Tailwind Play CDN 偶发漏生成 w-8 / h-8 / object-contain，这里做兜底，
   避免 logo 被撑成扁条而挤歪后面的 WeDeal 文字。 */
.wd-auth-logo {
    width: 32px;
    height: 32px;
    object-fit: contain;
    flex: 0 0 auto;
    display: inline-block;
}

/* 独立页左侧 hero 面板底色（登录 / 注册 / 找回密码）。
   原来只靠 lh3.googleusercontent.com 的外链照片，国内该域名请求会一直挂起永不返回，
   面板退化成 #e5e8ec 灰底。这里用品牌色（深蓝 #002a5f + 暖橙 #FF8332）铺一层渐变底：
   照片能加载时被上层照片盖住，加载不了就由渐变兜底，任何网络环境下都是有设计的质感面，
   而不是一片灰。后续换成自托管照片只需替换图片层，本底不用动。 */
.wd-auth-hero {
    background-color: #00315e;
    background-image:
        radial-gradient(92% 56% at 15% 11%, rgba(255,158,74,0.80) 0%, rgba(255,140,50,0.42) 36%, rgba(255,130,40,0) 68%),
        radial-gradient(78% 48% at 88% 42%, rgba(0,132,220,0.45) 0%, rgba(0,132,220,0) 66%),
        linear-gradient(162deg, #005aa8 0%, #00315e 44%, #001a38 100%);
}

/* --- 社交品牌图标（2026-09-18，替换 FontAwesome） -----------------------------
 * fund / company 详情页的团队成员社交链接原用 `<i class="fa-brands fa-*">`，
 * 依赖整包 FontAwesome（102KB CSS + webfonts 目录）。
 * 实测本站 static/webfonts/ 只有 brands 字体，fa-solid-900.woff2 一直 404
 * （即 fa fa-* 实心图标本来就是坏的），而 redesign 页面只用到 3 个 brands 图标。
 * 改为内联 SVG（每条约 0.5KB，无外部请求、无字体依赖）。
 *
 * 尺寸不写死 px，用 1em 跟随父容器 font-size —— 原 FA 图标即此行为
 * （父级 `text-xl` / `text-lg` 决定大小），换 SVG 后视觉一致。
 * 不用 Tailwind 任意值类（如 w-[1em]），避免 Play CDN 漏生成（项目已知问题）。
 *
 * ⚠️ 不要在这里写 fill / stroke（2026-09-18 踩坑）：
 *    CSS 声明的优先级**高于** SVG 的行内表现属性（presentation attribute）。
 *    若此处写 `fill: currentColor`，则 SVG 上写的 `fill="none"` 会被覆盖，
 *    描边式图标（如 globe）会被整体填成实心色块（实测灰球）。
 *    因此填充/描边一律交由各 SVG 自身的 fill/stroke 属性决定。 */
.wd-social-icon {
    width: 1em;
    height: 1em;
    display: inline-block;
    vertical-align: -0.125em;
}

/* ============================================================================
 * 旧体系接管块 —— 为「摘掉 core.min.css / app.min.css」做的准备（2026-09-18）
 * ============================================================================
 * 背景：redesign 页面仍加载旧 CSS（core 217KB + app 471KB），其中一部分规则被
 *       redesign 页面实际使用。本块把那些规则「原样搬过来」，使 redesign 页面
 *       不再依赖这两个文件，之后才能安全地摘掉 header_meta 里的 <link>。
 *
 * 关键约束（务必遵守）：
 *   1. 旧 CSS 文件（static/css/core.min.css、app.min.css）**绝对不修改、不删除**，
 *      它们服务 197 个旧模板（后台 / user 中心 / 详情页）。
 *   2. 本块作用域只限 redesign 页面（旧页面零命中）：
 *      · body 级规则用 `body:has(main.wd-main), body:has(.wd-auth-page)` ——
 *        前者是列表/详情页的专属包裹层（header.tpl.htm:63），后者是 3 个独立
 *        认证页根容器的标记类（详见下方 §1：为什么不能挂 body 的 class）；
 *      · 元素级规则用 `main.wd-main` 前缀。
 *      旧页面两者都没有，因此本块对旧页面零影响。
 *   3. 值必须与旧 CSS 层叠后的「最终生效值」一致，本块只做接管，不重新设计。
 *      取值依据：无头 Chrome 实测 getComputedStyle 快照 + 旧 CSS 规则原文。
 *
 * 依据数据：wedeal-notes/08-按页摘旧CSS依赖扫描.md
 * ============================================================================ */

/* --- 1. body 基础（源自 app.min.css，摘除后唯一会「全站可见」的回归） ---------
 * app.min.css 的 `body{background-color:#f2f8f9}` 与 `body{font-size:13px}`
 * 是 redesign 页面全局底色与基准字号的唯一来源；wedeal-redesign.css 此前对 body
 * 零规则，直接摘会让 body 变纯白、字号从 13px 跳到 16px。
 *
 * ⚠️ 作用域不能用 `body.wd-redesign`（2026-09-18 实测否决）：
 *    header_meta.tpl.htm:150 在 <head> 里同步加载 core.min.js，其中的 pace.js
 *    在 HTML 解析到 <body> 之前就执行 `document.body.className = ...`，
 *    抢先占住浏览器隐式创建的空 body。服务端写在 <body class="wd-redesign"> 上的
 *    类名永远不会进入 DOM（实测 getAttribute('class') 最终为 "loaded pace-done"），
 *    该选择器零命中。
 *    改用 `body:has(main.wd-main)` —— 不依赖任何运行时可变的 class，
 *    只看 DOM 里有没有 header.tpl.htm:63 输出的专属包裹层，旧页面天然不命中。
 *    权重 (0,0,2) 高于旧 CSS 的裸 body (0,0,1)，可稳定胜出；Chrome 105+ 原生支持。
 *
 *    3 个独立认证页（login / register / find_password）不走公共 header、页面内没有
 *    <main>，故它们改用根容器上的 `wd-auth-page` 标记类（同样不依赖 body 的 class）。
 *    注意：底色沿用 app.min.css 的 #f2f8f9（与页面当前实际观感一致），不改为 M3 的
 *          --wd-background(#f7fafe)，避免接管动作本身带来视觉变化。 */
body:has(main.wd-main),
body:has(.wd-auth-page) {
    background-color: #f2f8f9;
    /* 字族/字号/字重：2026-09-19 由「接管旧 app 的 Arial / 13px / 300」改为
       对齐参考稿 body 基线（参考稿 body 为 font-body-md = Hanken Grotesk 16px/24px/400）。
       实测影响：7 个 redesign 页文档高度变化 ≤33px，无横向溢出。
       字族写字面量而非 var(--wd-font-body)，因为该变量定义在 main.wd-main 作用域内，body 取不到。 */
    font-family: 'Hanken Grotesk', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
    font-size: 16px;
    font-weight: 400;
    line-height: 1.5;
    color: #555555;
}

/* --- 2. .btn 结构补全（源自 core.min.css） -----------------------------------
 * redesign 只接管了 chip 的外观（背景/圆角/内距），但 .btn 的「结构属性」仍来自
 * core.min.css。摘掉后 chip 会失去 vertical-align:middle / text-align:center /
 * white-space:nowrap / user-select:none / cursor:pointer / position:relative，
 * 表现为文字换行、对齐漂移、圆角拼接失效（首尾 chip 的 border-radius 合并丢失）。 */
main.wd-main .btn {
    display: inline-block;
    vertical-align: middle;
    text-align: center;
    white-space: nowrap;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    cursor: pointer;
    position: relative;
    z-index: 1;
}

/* .btn 文字属性（源自 app.min.css 的 .btn 与 .btn-sm）—— 影响 .btn-primary/.btn-light
 * 那一行按钮的字号与字距。 */
main.wd-main .btn {
    font-size: 14px;
    letter-spacing: 1px;
    line-height: inherit;
    transition: 0.15s linear;
    outline: none;
}

main.wd-main .btn-sm {
    font-size: 12px;
    line-height: 20px;
}

/* --- 3. .btn-group / 工具类（源自 core.min.css + app.min.css） ---------------
 * .btn-group 的 inline-flex 布局与 flex-wrap 来自旧 CSS；摘掉后 chip 组会退化为
 * block 布局，chip 竖排。
 * .d-inline-block 与 .text-center 是 core.min.css 独有的带 !important 的工具类，
 * redesign 模板仍在用（.btn-group.d-inline-block、pricing 页的 .text-center），
 * 必须自带一份。 */
main.wd-main .btn-group {
    position: relative;
    display: inline-flex;
    vertical-align: middle;
    flex-wrap: wrap;
}

main.wd-main .d-inline-block {
    display: inline-block;
}

main.wd-main .text-center {
    text-align: center;
}

main.wd-main .text-left {
    text-align: left !important;
}

main.wd-main .text-right {
    text-align: right !important;
}

/* --- 4. .form-control 接管（源自 app.min.css） --------------------------------
 * 三页列表的「Select Country / Select State」下框依赖它：摘掉后 border-width 归 0、
 * padding 归 0、border-radius 归 0，输入框会完全塌掉。 */
main.wd-main .form-control {
    border-color: #e0e0e0;
    border-radius: 2px;
    color: #666666;
    padding: 5px 12px;
    font-size: 14px;
    line-height: inherit;
    font-weight: 300;
    transition: 0.2s linear;
}

/* --- 5. .hide 工具类已有兜底（见本文件上方 .hide{display:none!important}），
 *      此处不重复。.fade 仅 iOS 过渡，摘除后无视觉差异，不接管。 ------------ */

/* --- 6. 间距 / 圆角 / 阴影工具类（源自 core.min.css，2026-09-18 追加） --------
 * ⚠️ 背景：core.min.css 内嵌了整套 **Bootstrap 工具类**，与 Tailwind 同名但值不同，
 *    且带 `!important`，因此在 redesign 页面里**静默压过 Tailwind**：
 *
 *       类名        core(Bootstrap) 实际生效值    Tailwind 本意
 *       .p-3        padding: 1rem  (15px)        0.75rem (11.25px)
 *       .px-3       padding-x: 1rem (15px)       0.75rem (11.25px)
 *       .p-4        padding: 1.5rem (22.5px)     1rem    (15px)
 *       .mt-4       margin-top: 1.5rem (22.5px)  1rem    (15px)
 *       .rounded    border-radius: .25rem (3.75px)  0.25rem (3.75px) —— 同名同值
 *
 *    （注：本站 `html` 字号 15px 来自 app.min.css，故 1rem = 15px，非常规 16px。）
 *
 *    实测：直接摘掉 core.min.css 会让全站 **1100/4589 个元素（24%）** 发生可见变化
 *    —— 间距普遍从 15px 收紧到 11.25px、阴影换成 Tailwind 版本。
 *
 * 决策（2026-09-18 用户确认）：**「先摘，但补回现值」** —— 把 core 的现值搬过来，
 *    保证摘除后视觉零变化。后续若要收紧间距，应另开一轮「设计调整」，不要混在
 *    摘 CSS 的动作里（这样出问题好定位）。
 *
 * 值来源：core.min.css 规则原文（rem 单位原样照抄，不换算成 px，避免受 html 字号
 *    变化影响）；已用无头 Chrome 实测校验与 core 生效时 computed 值逐项一致。 */

/* 内距 —— 覆盖 Tailwind 同名类，保持 core 的 Bootstrap 尺度 */
main.wd-main .p-3, body:has(.wd-auth-page) .p-3 { padding: 1rem !important; }
main.wd-main .p-4, body:has(.wd-auth-page) .p-4 { padding: 1.5rem; }

main.wd-main .px-2, body:has(.wd-auth-page) .px-2 { padding-left: .5rem !important; padding-right: .5rem !important; }
main.wd-main .px-3, body:has(.wd-auth-page) .px-3 { padding-left: 1rem; padding-right: 1rem; }
main.wd-main .px-4, body:has(.wd-auth-page) .px-4 { padding-left: 1.5rem; padding-right: 1.5rem; }

main.wd-main .py-1, body:has(.wd-auth-page) .py-1 { padding-top: .25rem; padding-bottom: .25rem; }
main.wd-main .py-2, body:has(.wd-auth-page) .py-2 { padding-top: .5rem; padding-bottom: .5rem; }
main.wd-main .py-3, body:has(.wd-auth-page) .py-3 { padding-top: 1rem; padding-bottom: 1rem; }
main.wd-main .py-4, body:has(.wd-auth-page) .py-4 { padding-top: 1.5rem; padding-bottom: 1.5rem; }
main.wd-main .py-5, body:has(.wd-auth-page) .py-5 { padding-top: 3rem; padding-bottom: 3rem; }

main.wd-main .pt-5, body:has(.wd-auth-page) .pt-5 { padding-top: 3rem !important; }
main.wd-main .pb-5, body:has(.wd-auth-page) .pb-5 { padding-bottom: 3rem; }
main.wd-main .pl-3, body:has(.wd-auth-page) .pl-3 { padding-left: 1rem; }
main.wd-main .pr-2, body:has(.wd-auth-page) .pr-2 { padding-right: .5rem !important; }
main.wd-main .pr-3, body:has(.wd-auth-page) .pr-3 { padding-right: 1rem; }
main.wd-main .pr-4, body:has(.wd-auth-page) .pr-4 { padding-right: 1.5rem; }

/* 外边距 */
main.wd-main .mt-0, body:has(.wd-auth-page) .mt-0 { margin-top: 0; }
main.wd-main .mt-1, body:has(.wd-auth-page) .mt-1 { margin-top: .25rem; }
main.wd-main .mt-2, body:has(.wd-auth-page) .mt-2 { margin-top: .5rem; }
main.wd-main .mt-3, body:has(.wd-auth-page) .mt-3 { margin-top: 1rem; }
main.wd-main .mt-4, body:has(.wd-auth-page) .mt-4 { margin-top: 1.5rem; }
main.wd-main .mt-5, body:has(.wd-auth-page) .mt-5 { margin-top: 3rem; }

main.wd-main .mb-0, body:has(.wd-auth-page) .mb-0 { margin-bottom: 0; }
main.wd-main .mb-1, body:has(.wd-auth-page) .mb-1 { margin-bottom: .25rem; }
main.wd-main .mb-2, body:has(.wd-auth-page) .mb-2 { margin-bottom: .5rem; }
main.wd-main .mb-3, body:has(.wd-auth-page) .mb-3 { margin-bottom: 1rem !important; }
main.wd-main .mb-4, body:has(.wd-auth-page) .mb-4 { margin-bottom: 1.5rem; }

main.wd-main .ml-1, body:has(.wd-auth-page) .ml-1 { margin-left: .25rem; }
main.wd-main .ml-2, body:has(.wd-auth-page) .ml-2 { margin-left: .5rem; }
main.wd-main .mr-1, body:has(.wd-auth-page) .mr-1 { margin-right: .25rem !important; }
main.wd-main .mx-auto, body:has(.wd-auth-page) .mx-auto { margin-left: auto; margin-right: auto; }

/* 圆角 / 阴影。注意 .rounded 与 Tailwind 同名同值，但显式声明可避免「摘 core 后
 * 若 Tailwind 未生成该工具类」的极端情况（项目已知 CDN 漏生成问题）。 */
main.wd-main .rounded, body:has(.wd-auth-page) .rounded { border-radius: .25rem; }
main.wd-main .shadow-sm, body:has(.wd-auth-page) .shadow-sm { box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075); }
main.wd-main .shadow-lg, body:has(.wd-auth-page) .shadow-lg { box-shadow: 0 1rem 3rem rgba(0, 0, 0, .175); }

/* flex / 宽度工具类 */
main.wd-main .flex-wrap, body:has(.wd-auth-page) .flex-wrap { flex-wrap: wrap; }
main.wd-main .flex-shrink-0, body:has(.wd-auth-page) .flex-shrink-0 { flex-shrink: 0; }
main.wd-main .w-auto, body:has(.wd-auth-page) .w-auto { width: auto; }

/* --- 7. .fa / .fa-warning（源自 core.min.css 内嵌 FontAwesome 4.7 基础类）----
 * 仅 `views/redesign/global/show_message.tpl.htm:10` 一处 `<span class="fa fa-warning">`。
 * 该模板走**旧头尾**（global/home/header.tpl.htm），不加载 redesign header_meta，
 * 故实际不会在 redesign 页面出现；此处仅为「摘 core 后该类彻底无来源」兜底。
 * 注：本站 static/webfonts/ 缺 fa-solid-900，实心图标本就 404，保留原样不加字形。 */
main.wd-main .fa, body:has(.wd-auth-page) .fa {
    display: inline-block;
    font-size: inherit;
    text-rendering: auto;
}

/* --- 8. ★元素级默认值（源自 core.min.css 的 Bootstrap Reboot，2026-09-18 追加）--
 * ⚠️ 这是最容易被忽略的一层！摘 core 的回归里，「卡片高度 +58px」的真凶不是工具类，
 *    而是 Bootstrap 的**元素默认 margin**：
 *
 *       p        { margin-top: 0; margin-bottom: 1rem }    ← 16px
 *       h1..h6   { margin-top: 0; margin-bottom: .5rem }   ← 8px
 *       ul,ol,dl { margin-top: 0; margin-bottom: 1rem }
 *       hr       { margin: 1rem 0; border-top: 1px solid rgba(0,0,0,.1) }
 *
 *    实测：Fund List 卡片的 DEAL STAGE STATS 每格是 `<p>PS</p><p>2</p>`，
 *    core 给第一个 <p> 加了 16px 下边距 → 每格从 42px 涨到 74px（Δ32），
 *    20 张卡片累计让 main 高度 +391px。
 *
 *    注意：Tailwind 的 preflight 会把 margin 全部归零，所以**摘掉 core 后这些
 *    margin 会消失**（页面变矮），而不是变高——补写这些规则才是「还原现状」。
 *
 * 作用域：与 §1 同款，仅 redesign 页面命中。
 * 注意 hr：redesign 列表页用 `<hr class="my-6 border-outline-variant">` 作分隔线，
 *    core 的 `hr{border-top:1px solid rgba(0,0,0,.1)}` 是它 1px 高度的来源
 *    （Tailwind preflight 把 hr 设为 border 0 → 摘除后分隔线消失，实测 height 1px→0）。 */
:where(main.wd-main, .wd-auth-page) p {
    margin-top: 0;
    margin-bottom: 1rem;
}

:where(main.wd-main, .wd-auth-page) h1, :where(main.wd-main, .wd-auth-page) h2, :where(main.wd-main, .wd-auth-page) h3,
:where(main.wd-main, .wd-auth-page) h4, :where(main.wd-main, .wd-auth-page) h5, :where(main.wd-main, .wd-auth-page) h6 {
    margin-top: 0;
    margin-bottom: .5rem;
}

:where(main.wd-main, .wd-auth-page) ul, :where(main.wd-main, .wd-auth-page) ol, :where(main.wd-main, .wd-auth-page) dl {
    margin-top: 0;
    margin-bottom: 1rem;
}

/* label —— Bootstrap Reboot 的 `label{display:inline-block;margin-bottom:.5rem}`。
 * ⚠️ 这里**刻意只搬 margin-bottom，不搬 display**：
 *    认证页的 label 都带 Tailwind 的 `.block` 类（`<label class="block text-label-md...">`），
 *    Tailwind 的类选择器权重 (0,1,0) 高于 Bootstrap 的元素选择器 (0,0,1)，
 *    实测两种状态下 computed display 都是 block。若在此补 display:inline-block，
 *    虽然也不会赢（同为元素选择器、且本段更靠后 → 反而会赢！），会把 label 从 block
 *    改成 inline-block，破坏现有布局。**只搬 margin。**
 * 实测依据：登录页 / 注册页 / 找回密码页的「Password / Email」label 行，
 *    缺失该规则时行高 27.5px → 20px（Δ7.5px），三页累计落差 15px / 7.5px。 */
:where(main.wd-main, .wd-auth-page) label {
    margin-bottom: .5rem;
}

:where(main.wd-main, .wd-auth-page) hr {
    margin-top: 1rem;
    margin-bottom: 1rem;
    border: 0;
    border-top: 1px solid rgba(0, 0, 0, .1);
    overflow: visible;
    box-sizing: content-box;
    height: 0;
}

/* --- 9. 全局链接色兜底（源自 core.min.css 的 Bootstrap Reboot）---------------
 * core 原文是**裸元素选择器** `a{background-color:transparent;color:#007bff;
 * text-decoration:none}`，特异性 = 1 —— 它是「**零特异性兜底**」：只给**没有自己
 * 配色规则**的裸链接上蓝色 + 去下划线，任何 class 都能轻松覆盖它。
 *
 * ⚠️⚠️ 2026-09-18 修复（重要教训）：
 *   上一轮摘 core 时，为了把作用域限制在 redesign 内，把选择器改写成了
 *   `main.wd-main a`（特异性 11）。**这反而制造了全站性设计破坏**：
 *   特异性 11 > 设计 token 类（10）→ 把卡片/按钮/徽章**自己的背景色与文字色
 *   全部压平成「透明底 + #007bff 蓝字」**。实测波及 11 页大量元素：
 *     funddetail 284 个 <a> / home 124 / investorlist 76 / companydetail 18
 *   典型受害者：`.wd-hero-card--investor`（橙底白字→透明蓝字）、
 *   `.wd-hero-card--startup`（深蓝底白字→透明蓝字）、`.select_plan`（白底按钮）、
 *   `.wd-filter-btn`（筛选下拉框）、`.wd-search-submit`（深蓝搜索按钮）、
 *   `.company-title`（深蓝机构名）、`.text-text-primary` / `.text-gray-500` 等。
 *
 * ✅ 正确解法：用 `:where()` 把**整个选择器的特异性归零**（=0），
 *    再补一个元素选择器让它与 core 原文**完全等价**（特异性 1）：
 *      · 对裸链接 → 依然上蓝色 + 去下划线（兜底语义保留）
 *      · 对设计类 → 特异性 1 < 10，**设计类稳稳胜出**（不再压制）
 *    同时 `.wd-auth-page` 通过 `:where()` 保留了作用域隔离，
 *    不会洇到 197 个旧模板。
 *
 * 验证（CDP，11 页）：裸链接 96 个全部仍为 #007bff；设计色全部回归
 * （hero 橙/深蓝底白字、Select Plan 白底、筛选框白底、company-title 深蓝…）。
 *
 * ⚠️ 注意：Bootstrap 还带 `a:not(.btn){text-decoration:underline}`，
 *    但 redesign 页面实测未受影响（Tailwind 的 no-underline 类优先），故不接管下划线。
 *
 * 📌 同源隐患（本次未改，风险低，实测 11 页零差异）：
 *    §11.6 `main.wd-main h1~h6{letter-spacing:.5px}` 与
 *    §11.9 `main.wd-main h1~h6{word-break:break-all}` 同样把特异性从 1 提到 11。
 *    这两条属性极少被 class 争夺，暂保持现状；**若将来出现标题字距/换行被压平的
 *    现象，优先怀疑这里**，同样可用 `:where()` 收敛。 */
:where(main.wd-main, .wd-auth-page) a {
    color: #007bff;
    background-color: transparent;
    text-decoration: none;
}

:where(main.wd-main, .wd-auth-page) a:hover {
    color: #0056b3;
}

/* --- 10. ★Bootstrap modal 骨架（源自 core.min.css，2026-09-18 追加）---------
 * ⚠️ 这一组是「摘 core 后最刺眼的可见回归」，也是最容易漏掉的：
 *    core 里 `.modal{...display:none...}` 是弹窗**唯一的隐藏机制**。
 *
 *    首页有两处升级弹窗（views/redesign/index/main/index.tpl.htm:226 / 247）：
 *        <div class="modal modal-center fade wd-modal" id="modal-center">
 *    它们平时应当**完全不可见**（Bootstrap 用 display:none + position:fixed 压住）。
 *    摘掉 core 后 display 回落到默认 block，而 position:fixed/inset/z-index 也一并消失，
 *    于是弹窗直接摊在页面底部，实测露出两行 "Please upgrade to Unlimited Data Plan..."
 *    + 两个 "Upgrade Now" 按钮，占据 **80px**（documentHeight 8746 → 8826）。
 *
 *    同时弹窗**正常弹出时的外观**也全部来自 core：白底、1px 边框、圆角、
 *    header/body/footer 的 flex 布局与 padding。若不接管，点 "Upgrade Now" 弹出的
 *    会是一坨没有白底、没有分区的文字。
 *
 * 作用域：用 `.wd-modal`（redesign 专属标记类，见 index.tpl.htm:226/247）
 *    —— 旧页面同名弹窗没有这个类，因此本组规则对**后台/user 中心的 30+ 处
 *    .modal 弹窗零影响**（它们继续用 core.min.css，一字不改）。
 *
 * 值来源：core.min.css 原文逐条照抄（Bootstrap 4 modal 标准值），
 *    仅去掉 -ms- 前缀（本站在 Chrome 下运行）。
 * 注意 `.wd-modal .modal-content` 等外观微调已在本文件上方（§弹窗，921 行起）
 *    声明，本组只补**结构骨架**，不重复外观。 */

/* 10.1 隐藏机制 —— 最关键的一条。没有它弹窗会裸露在页面底部。 */
.wd-modal.modal {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 1050;
    display: none;
    overflow: hidden;
    outline: 0;
}

/* 弹窗打开时由 JS 加 .show（Bootstrap 行为），此处保证打开态可见并可滚动 */
.wd-modal.modal.show {
    display: block;
}
.wd-modal.modal.show {
    overflow-x: hidden;
    overflow-y: auto;
}

/* 10.2 对话框容器
 * ⚠️ 这里有一处「只搬 max-width、不搬 margin」的细节：
 *    本站弹窗的**居中**由 app.min.css 的 `.modal-center` 方案负责（app 仍在加载）：
 *        .modal-center .modal-dialog { margin:0; width:100%; position:absolute;
 *                                      bottom:50%; left:50%; transform:translate(-50%,50%) !important }
 *    而 Bootstrap 的 `@media(min-width:576px){.modal-dialog{margin:1.75rem auto;max-width:500px}}`
 *    里，**margin 与本站方案冲突**（会覆盖 app 的 margin:0 而破坏居中），
 *    **max-width 则是 core 独有的宽度约束**（实测缺失时 .modal-dialog 宽度
 *    从 500px 涨到 520px，连带 .modal-body 因换行从 150px 变成 110px）。
 *    故只接管 `max-width`。 */
.wd-modal.modal .modal-dialog {
    max-width: 500px;
    pointer-events: none;
}

.wd-modal.modal.fade .modal-dialog {
    transition: transform .3s ease-out;
    transform: translate(0, -25%);
}

.wd-modal.modal.show .modal-dialog {
    transform: translate(0, 0);
}

/* 10.3 内容盒（结构 + 白底；外观微调见上方「弹窗（Bootstrap modal 微调）」段）
 * ⚠️ background-color 必须补：摘 core 后实测 .modal-content 的 computed
 *    background 变成 rgba(0,0,0,0)（完全透明），弹窗会「透出」背后的页面内容。
 *
 * 刻意**不搬** Bootstrap 的 `border:1px solid rgba(0,0,0,.2)`：
 *    redesign 在 921 行已把 .wd-modal .modal-content 设计成 `border:none` +
 *    --wd-radius-lg + --wd-shadow（M3 风格浮起）。若在此搬回 1px 灰边，
 *    会覆盖掉前面的 border:none（本段在文件中更靠后），让弹窗长出旧样式的灰边。
 *    这是「接管 ≠ 照搬」的一处例外：外观以 redesign 既有设计为准。 */
.wd-modal.modal .modal-content {
    position: relative;
    display: flex;
    width: 100%;
    outline: 0;
    background-color: #fff;
    background-clip: padding-box;
    flex-direction: column;
    pointer-events: auto;
}

/* 10.4 三段式布局 */
.wd-modal.modal .modal-header {
    display: flex;
    padding: 1rem;
    border-bottom: 1px solid #e9ecef;
    border-top-right-radius: .3rem;
    border-top-left-radius: .3rem;
    align-items: flex-start;
    justify-content: space-between;
}

.wd-modal.modal .modal-header .close {
    margin: -1rem -1rem -1rem auto;
    padding: 1rem;
}

.wd-modal.modal .modal-title {
    margin-bottom: 0;
    line-height: 1.5;
}

.wd-modal.modal .modal-body {
    position: relative;
    padding: 1rem;
    flex: 1 1 auto;
}

.wd-modal.modal .modal-footer {
    display: flex;
    padding: 1rem;
    border-top: 1px solid #e9ecef;
    align-items: center;
    justify-content: flex-end;
}

.wd-modal.modal .modal-footer > :not(:first-child) {
    margin-left: .25rem;
}

.wd-modal.modal .modal-footer > :not(:last-child) {
    margin-right: .25rem;
}

/* 10.5 关闭按钮（.close 的 Bootstrap 基线）——
 * 摘 core 后 × 会变成普通文本大小、丢掉右浮动与透明度过渡。 */
.wd-modal.modal .close {
    float: right;
    color: #000;
    text-shadow: 0 1px 0 #fff;
    font-weight: 700;
    font-size: 1.5rem;
    line-height: 1;
    opacity: .5;
}

.wd-modal.modal .close:hover,
.wd-modal.modal .close:focus {
    color: #000;
    text-decoration: none;
    opacity: .75;
}

.wd-modal.modal button.close {
    padding: 0;
    border: 0;
    background-color: transparent;
    -webkit-appearance: none;
}

/* 10.6 遮罩层（backdrop）与 body 锁滚 —— 均由 core.min.js 的 modal 插件动态插入。
 * 实测插件常量：ab="modal-backdrop"、bb="modal-open"、db="show"（Bootstrap 4）。
 * 摘 core 后遮罩会变成全屏实心黑（background:#000 无 opacity），弹窗就没有"浮起"感，
 * 且 body 不会锁滚动。
 *
 * ⚠️ 类名必须用插件的真名 `.modal-backdrop`（它由 JS 插入到 body 下，不在 .wd-modal 内，
 *    无法用 .wd-modal 作前缀）。为保持「旧页面零命中」，用 `body:has(.wd-modal)` 限定
 *    —— 只有当页面上存在 redesign 专属弹窗时才生效；旧页面若同时有 .modal 弹窗，
 *    这里补的值与 core 完全一致，即便命中也是等值覆盖，无副作用。 */
body:has(.wd-modal.modal) .modal-backdrop {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 1040;
    background-color: #000;
}

body:has(.wd-modal.modal) .modal-backdrop.fade {
    opacity: 0;
}

body:has(.wd-modal.modal) .modal-backdrop.show {
    opacity: .5;
}

body:has(.wd-modal.modal).modal-open {
    overflow: hidden;
}

/* ============================================================================
 * 11. ★app.min.css（471KB）接管（2026-09-18 追加）
 * ============================================================================
 * app.min.css 是最后一个待摘的大 CSS。CDP 实测（base=摘掉 app / with=按真实顺序
 * 补回 app，顺序必须为 app(6) → flex.css(7) → wedeal-redesign.css(8)）发现
 * **3 处独有依赖**，其余 800+ 条差异全部由第 1 条（html 字号）级联而来。
 * ============================================================================ */

/* --- 11.1 ★html 根字号 15px —— 全站所有高度差的唯一真凶 ---------------------
 * app.min.css 里连写两条 `html{font-size:16px}` + `html{font-size:15px}`
 * （后者后出故胜出）。而 header_meta.tpl.htm 顶部的 Anti-FOUC 内联样式把
 * html 定为 16px，**只有 app 的 15px 能盖住它**。
 *
 * 摘掉 app 后 html 回落到 16px → 本页 1rem 从 15px 变 16px，
 * 于是**每一个 rem 基准的尺寸 +6.67%**：实测 11 页 docHeight 全部变大
 * （home 8746→8884、funddetail 7405→7698、pricing 4125→4423…），
 * 逐元素差异 75~1251 条，**几乎全是这一条级联出来的**（如 .wd-hero-title
 * margin-bottom 7.5px→8px、.wd-hero 高度 583→585）。
 *
 * ⚠️ 作用域说明：`html` 无法用 :has() 限定，但本文件（wedeal-redesign.css）
 *    只在 redesign 页面加载（旧 header_meta 不引用它），故裸写 html 是安全的
 *    —— 与旧页面零交集。旧页面继续由 app.min.css 提供 15px。
 *    值与 app 原文完全一致（15px），是「接管」不是「重新设计」。 */
html {
    font-size: 15px;
}

/* --- 11.2 主容器 flex 纵向布局（源自 app.min.css 的 .main-container 规则）-----
 * 原文：`body .main-container, body>main, body>div>main {
 *          position:relative; display:flex; flex-direction:column;
 *          min-height:100vh; transition:margin-left .3s ease-out }`
 * header.tpl.htm:63 输出的是 `<main class="main-container wd-main">`，同时命中
 * 前两个选择器。摘掉后 main 从 flex/relative 回落到 block/static，
 * **页脚的「吸底」效果失效**（内容不足时 footer 不再贴底），
 * 且子元素的外边距折叠行为改变。
 * 值逐条照抄 app 原文。 */
main.wd-main {
    position: relative;
    display: flex;
    flex-direction: column;
    min-height: 100vh;
    transition: margin-left .3s ease-out;
}

/* --- 11.3 pace.js 加载进度条（全部规则只存在于 app.min.css）------------------
 * header_meta.tpl.htm:150 同步加载 core.min.js，其内置 pace.js 在 <body> 里
 * 注入 4 个元素：.pace > (.pace-progress > .pace-progress-inner, .pace-activity)。
 * 平时靠 app 的 `.pace{display:none}` + `.pace-inactive{display:none}` 隐藏。
 *
 * 摘掉 app 后实测：`.pace.pace-inactive` 的 display 从 none 变 block，
 * 宽 749px 的进度条容器裸露在页面顶部（连带 4 个元素在逐元素对比里全部
 * 被识别为"多出来"的元素）。
 *
 * 作用域 body:has(main.wd-main), body:has(.wd-auth-page)：pace 元素本身
 * 无专属类可用，只能靠页面级 :has() 限定，旧页面零命中。
 * 值照抄 app：`.pace` 是 display:none（未被 data-provide 激活），
 * `.pace-inactive` 也是 display:none。 */
body:has(main.wd-main) .pace,
body:has(.wd-auth-page) .pace,
body:has(main.wd-main) .pace-inactive,
body:has(.wd-auth-page) .pace-inactive {
    display: none;
}

/* app 的 `.pace .pace-progress` 定位（进度条本体，激活时用）—— 一并接管，
 * 避免将来启用 pace 时时序/定位回归。
 *
 * ⚠️ 这里的 `#50a1ff` 是**全文件唯一有意保留的 app 旧色值**，不是漏改：
 *    · 本块目的是**逐字保真接管** app 原规则（`background:#50a1ff;
 *      position:fixed;top:0;left:0;width:100%;height:2px;z-index:12001`），
 *      便于将来与 app.min.css 原文逐字段比对，验证接管是否正确。
 *    · 实测 9 个 redesign 页面 `.pace` 均为 `display:none`（父元素关掉），
 *      `.pace-progress` 的 bbox 恒为 0×0 —— **零渲染，改色无任何视觉收益**。
 *    · 若将来真的启用 pace（移除本节 `.pace{display:none}`），应**连同语义一起
 *      重新设计**，届时改用 M3 令牌 `#002a5f`(primary) 或 `#003f89`
 *      (primary-container)；不要只替换颜色就上，否则进度条与页面配色体系脱节。 */
body:has(main.wd-main) .pace .pace-progress,
body:has(.wd-auth-page) .pace .pace-progress {
    background: #50a1ff;
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 2px;
    z-index: 12001;
}

/* --- 11.4 与 core 段同样需要、但 app 也参与贡献的元素级微调 -------------------
 * app.min.css 另有几条会被 redesign 页面命中的裸元素规则，实测**未产生可见差异**
 * （被 Tailwind 工具类或本文件上方规则覆盖），故此处**不接管**，仅登记备查：
 *   · `label{font-weight:400;font-size:12px;letter-spacing:.5px}` —— 认证页 label
 *     已由 Tailwind 的 .text-label-md 等类接管（§8 只补了 margin）。
 *   · `hr{border-top-color:rgba(77,82,89,.07);margin:2rem auto}` ——
 *     redesign 的 main.wd-main hr 已由 §8 接管（margin 1rem 0）。
 *   · `a{color:#50a1ff} a:hover{color:#555}` —— 被 §9 的 core 值（#007bff/#0056b3）
 *     和 Tailwind 类覆盖；实测 computed 无差异。
 *   · `p{word-break:break-all}` / `b,strong{font-weight:bold}` /
 *     `small,.small{...}` —— 实测零命中或等值。
 *   · `.btn{font-size:14px;letter-spacing:1px;transition:.15s linear}` ——
 *     已由 §2 第 2 组接管。 */

/* --- 11.5 ★app 的「px 数值型」间距工具类（与 core 的 Bootstrap rem 尺度不同）----
 * ⚠️ 这是 app 与 core 的一个**关键差异**：core 用 Bootstrap 的 rem 尺度
 *    （.p-3 = 1rem = 15px），而 app 另有一套 **纯 px 数值**的 `.m*-N / .p*-N`
 *    （N ∈ 10,12,15,16,20,24,25,30,35,40,45,50,60,…,500），值为 N px 且带 !important。
 *
 *    两者在 redesign 页面**同时命中**且值不同，例如：
 *        .mb-16 → app 16px(!important)  vs  Tailwind 4rem = 60px（无 !important）
 *        .mb-10 → app 10px(!important)  vs  Tailwind 2.5rem = 37.5px
 *        .mb-12 → app 12px(!important)  vs  Tailwind 3rem = 45px
 *    因 app 带 !important 且 Tailwind CDN 的 <style> 注入位置更靠前，**app 胜出**。
 *    摘掉 app 后这些类会回落到 Tailwind 的 rem 值 → 卡片下间距从 10px 变 37.5px、
 *    pricing 区块从 16px 变 60px（实测 docH 差 27~143px）。
 *
 *    实测命中的 12 个（redesign 模板 + API 拼接 HTML 全量扫描 ∩ app 定义）：
 *        .mb-10 .mb-12 .mb-16 .mt-10 .mt-12 .my-50 .p-50
 *        .pb-12 .pl-10 .pr-10 .pr-24 .px-12
 *    值照抄 app 原文（px 数值原样，不换算成 rem）。 */
main.wd-main .mb-10, body:has(.wd-auth-page) .mb-10 { margin-bottom: 10px; }
main.wd-main .mb-12, body:has(.wd-auth-page) .mb-12 { margin-bottom: 12px; }
main.wd-main .mb-16, body:has(.wd-auth-page) .mb-16 { margin-bottom: 16px; }
main.wd-main .mt-10, body:has(.wd-auth-page) .mt-10 { margin-top: 10px !important; }
main.wd-main .mt-12, body:has(.wd-auth-page) .mt-12 { margin-top: 12px; }
main.wd-main .my-50, body:has(.wd-auth-page) .my-50 { margin-top: 50px !important; margin-bottom: 50px !important; }
main.wd-main .p-50,  body:has(.wd-auth-page) .p-50  { padding: 50px !important; }
main.wd-main .pb-12, body:has(.wd-auth-page) .pb-12 { padding-bottom: 12px; }
main.wd-main .pl-10, body:has(.wd-auth-page) .pl-10 { padding-left: 10px !important; }
main.wd-main .pr-10, body:has(.wd-auth-page) .pr-10 { padding-right: 10px; }
main.wd-main .pr-24, body:has(.wd-auth-page) .pr-24 { padding-right: 24px !important; }
main.wd-main .px-12, body:has(.wd-auth-page) .px-12 { padding-right: 12px; padding-left: 12px; }

/* --- 11.6 标题元素基线（app 的 h1..h6 规则）----------------------------------
 * app 原文：`h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6 {
 *              font-family:'Arial',"微软雅黑",sans-serif; font-weight:300;
 *              color:#313944; word-break:break-all; line-height:1.5; letter-spacing:.5px }`
 *
 * ⚠️ 这条规则**部分属性实际生效**（redesign 的标题大多用 Tailwind 的
 *    text- / font- 前缀类覆盖了 font-size/font-weight/color），**唯独 letter-spacing
 *    没人管** —— Tailwind 默认不设 letter-spacing，故 app 的 .5px 直接生效。
 *    摘掉后标题字距从 0.5px 变 normal，长标题的宽度/换行会轻微变化（实测
 *    列表页 H1 / 卡片标题共 5~6 处 ls 差异）。
 *
 * 因此**只接管 letter-spacing**，其余属性保持现状（Tailwind 类胜出，已实测无差异）。
 * 用 `:where(main.wd-main, .wd-auth-page)` 限定作用域并**把特异性归零**（=裸元素 1，
 * 与 core 原文等价），避免压过设计类；旧页面零命中。 */
:where(main.wd-main, .wd-auth-page) h1, :where(main.wd-main, .wd-auth-page) h2, :where(main.wd-main, .wd-auth-page) h3,
:where(main.wd-main, .wd-auth-page) h4, :where(main.wd-main, .wd-auth-page) h5, :where(main.wd-main, .wd-auth-page) h6 {
    letter-spacing: .5px;
}

/* --- 11.7 ★配色工具类：已改为 M3 设计色（2026-09-18 配色修复）-------------------
 * 【历史】摘 app.min.css 时，app 里有一套 `.text-primary / .bg-primary / .text-secondary`
 *    工具类，颜色与 Tailwind 同名类完全不同且带 !important。当时本轮任务要求
 *    「摘 CSS 且零视觉变化」，故此处**照搬了 app 的旧值**（#50a1ff / #e4e7ea / #faa64b）
 *    并如实注明「这属于历史污染，配色调整应单独立项」。
 *
 * 【问题】照搬旧值造成了一个**线上配色 bug**：
 *    tailwind-custom.css 里定义的新设计色（`.text-primary{color:#002a5f}` 等）同为
 *    !important，而本文件加载在它**_之后** → **旧色值压过新设计色**。
 *    实测后果：`.text-primary` 全站 280 个元素渲染成亮蓝 #50a1ff 而非深海军蓝 #002a5f，
 *    fundlist 页大标题「Discover 5000+ Venture Funds」明显跑色，与深蓝 logo / 按钮 / 边框不搭。
 *
 * 【修复】把值换成 M3 设计色（与 tailwind-custom.css / tailwind-config.js 的 token 一致）：
 *        .text-primary     #50a1ff  →  #002a5f   (primary)
 *        .bg-primary       #50a1ff  →  #002a5f   (primary)
 *        .text-secondary   #e4e7ea  →  #FF8332   (secondary)
 *        .bg-secondary     #e4e7ea  →  #FF8332   (secondary)
 *        .text-warning     #faa64b  →  **已删除**（死代码，见下）
 *
 *    ⚠️ `.text-warning` 为什么删：全站唯一「文本上是 text-warning」的模板是
 *    `views/redesign/global/show_message.tpl.htm:10`，但该页走**旧头尾**
 *    （`global/home/header.tpl.htm` + 旧 Bootstrap 类 .media/.b-1/.p-50），
 *    实际渲染时既无 `main.wd-main` 也无 `.wd-auth-page`，**这条接管规则从未命中**。
 *    实测验证：`/fund/1` 与 `/company/1` 会 302 到旧列表页，其 `text-warning`
 *    颜色 #faa64b 来自**旧的 app.min.css 自身**，与本接管块无关 → 删除零影响。
 *
 *    作用域与 !important 保持不变（仍用于压过进入作用域内的其他同名类），仅修正色值。 */
main.wd-main .text-primary, body:has(.wd-auth-page) .text-primary { color: #002a5f; }
main.wd-main .bg-primary,   body:has(.wd-auth-page) .bg-primary   { background-color: #002a5f; color: #fff; }
main.wd-main .text-secondary, body:has(.wd-auth-page) .text-secondary { color: #FF8332; }
main.wd-main .bg-secondary,   body:has(.wd-auth-page) .bg-secondary   { background-color: #FF8332 !important; color: #fff; }

/* hover / focus 态同步改为 M3 设计色，避免 hover 时从 #002a5f 掉到 §9 的 #0056b3。 */
main.wd-main a.text-primary:hover, main.wd-main a.text-primary:focus,
body:has(.wd-auth-page) a.text-primary:hover, body:has(.wd-auth-page) a.text-primary:focus {
    color: #002a5f !important;
}

/* --- 11.8 .opacity-* 工具类（app 带 !important，压过 tailwind-custom.css 的组件规则）--
 * app 原文：`.opacity-70{opacity:.7 !important}` / `.opacity-75{opacity:.75 !important}`
 *
 * ⚠️ 这条的坑很隐蔽：Investor List 的社交图标同时带
 *    `class="social-icon ... opacity-70"`，而 tailwind-custom.css 里有
 *    `.investor-card .social-icon{opacity:0.6}`（特异性 0,2,0 > 0,1,0，
 *    按理应胜出）。但 app 的 `.opacity-70` **带 !important**，
 *    !important 跨特异性直接取胜 → 生产环境实际渲染 **0.7**（不是 0.6）。
 *
 *    摘掉 app 后图标 opacity 从 0.7 掉到 0.6（Investor List 共 33 个图标）。
 *    值照抄 app（.7 / .75），保持零变化。 */
main.wd-main .opacity-70, body:has(.wd-auth-page) .opacity-70 { opacity: .7; }
main.wd-main .opacity-75, body:has(.wd-auth-page) .opacity-75 { opacity: .75 !important; }

/* --- 11.9 word-break:break-all（app 的 p 与 h1..h6，会被后代继承）-------------
 * app 原文两条：
 *   `p{word-break:break-all}`
 *   `h1,h2,h3,h4,h5,h6,.h1..{ ...; word-break:break-all; ... }`
 *
 * ⚠️ word-break 是**继承属性**，所以 app 给 <p>/<h*> 设了 break-all 后，
 *    它们里面的 <a>/<span> 等后代**一并变成 break-all**。
 *    实测：Fund List 的卡片名 `<p><a href="/fund/AndreessenHorowitz/">Andreessen Horowitz</a></p>`
 *    在 break-all 下允许**单词中间断行**，换行点与 normal 不同 →
 *    长名称的 <a> 实测宽度从 105px 变 175px（5 个卡片），是**可见的换行差异**。
 *
 * 只接管这两条（h1..h6 段已在 §11.6 中补了 letter-spacing，此处补 word-break）。
 * 值照抄 app。 */
:where(main.wd-main, .wd-auth-page) p {
    word-break: break-all;
}

:where(main.wd-main, .wd-auth-page) h1, :where(main.wd-main, .wd-auth-page) h2, :where(main.wd-main, .wd-auth-page) h3,
:where(main.wd-main, .wd-auth-page) h4, :where(main.wd-main, .wd-auth-page) h5, :where(main.wd-main, .wd-auth-page) h6 {
    word-break: break-all;
}

/* --- 11.10 label 的 letter-spacing（app 的 `label{font-weight:400;font-size:12px;letter-spacing:.5px}`）--
 * §8 当时只搬了 app 的 `label{margin-bottom:.5rem}`（来自 core），
 * 漏了 app 自己的这条 —— 实测 login 页 "Remember me" 的 <label>
 * 字距从 0.5px 变 normal，宽度 109.11px → 103.61px。
 * 只补 letter-spacing（font-size/font-weight 由 Tailwind 的 .text-body-md 等类接管，实测无差异）。 */
:where(main.wd-main, .wd-auth-page) label {
    letter-spacing: .5px;
}

/* --- 11.11 ★刻意【不接管】：app 的两条 !important 一直在污染 redesign ---------
 * app.min.css 里有 704 个「裸工具类 + !important」规则，其中 **32 个** 与
 * redesign 页面实际使用的 class 同名（交集扫描：19 个模板/JS × 601 个 class）。
 * 绝大多数已由 §11.5~§11.10 按 app 现值接管。但有 **两条** 属于 app 在
 * **覆盖 redesign 的设计意图**（不是 redesign 依赖 app），故这里**刻意不搬**，
 * 让它们随 app 摘除一并消失 —— 等于顺手修掉两个线上 bug：
 *
 * ① `.border{ border:1px solid #f0f0f0 !important }` 与 `.b-1{ 同值 }`
 *    redesign 的输入框/卡片/chip 用 `border border-outline-variant` 表达
 *    「1px 描边 + 设计色」，其中 `border-outline-variant` 已在本文件顶部
 *    定义为 `#c3c6d3`（design token）。但 app 的 `.border{...#f0f0f0!important}`
 *    靠 `!important` 直接压过它 → 线上实际渲染成 app 的浅灰 #f0f0f0。
 *    实测命中（3 态对照，生产态 vs 摘除态）：
 *      fundlist 5 处、companylist 2、investorlist 3、deals 2、
 *      funddetail 182、companydetail 1 —— 全是#c3c6d3 → #f0f0f0 的色差。
 *    摘除 app 后自动回到设计色 #c3c6d3。
 *    ⚠️ 注意 `.b-1` 是与 `.border` 同值的另一写法，同样不接管。
 *
 * ② `.w-100,.w-full{ width:100% !important }`
 *    Pricing 页的 "Select Plan" 按钮 class 为 `... w-full md:w-auto`，
 *    设计意图是「移动端撑满、≥768px 桌面端自适应」。Tailwind 的 `md:w-auto`
 *    是**媒体查询内**规则（无 !important），被 app 的 `.w-full{100%!important}`
 *    跨特异性压过 → 桌面端按钮被拉成 541.5px（应约 95.6px）。
 *    摘除 app 后按钮回到自适应的 95.6px（= 参考稿 pricing.html 的原意）。
 *
 * 结论：这两条**不写入接管块**。若日后发现某处确实需要 app 这一行为，
 * 应改为在 redesign 侧用**显式设计类**表达，而不是把 `!important` 搬回来。
 *
 * —— 与 §11.4「无差异故不搬」的区别：
 *    §11.4 是「搬与不搬实测都一样」；本节是「搬了反而把 bug 带进来」。
 *
 * 【复现命令】tmp/cdp-threeway.js（生产态 = 插回 app 到 flex.css 之前）
 *   期望输出：除上述两类的元素外，全 11 页 0 差异。 */

/* --- 11.12 app 的 @font-face 与根元素基线（备查，无需接管）-------------------
 * · `body{ font-family:'Arial',"微软雅黑",sans-serif; ... }` —— 实测在真实加载
 *   顺序下，flex.css:134 的 `body{font-family:Arial}` 在 app 之后加载并胜出，
 *   故 body 实际字族一直是 Arial；摘 app 后不变。（见 §11.4 同理）
 * · `body{ background-color:#f2f8f9 }` —— 被 redesign 的 body 背景（本文件
 *   顶部 `body:has(main.wd-main)` / 认证页规则）接管，实测无差异。
 * · `html{font-size:16px}` —— 被同文件后面的 `html{font-size:15px}` 覆盖，
 *   真正生效值是 15px，已由 §11.1 接管。 */


/* --------------------------------------------------------------------------
   Pricing 主按钮（Featured Plan）：几何属性自定义类兜底
   背景：接管块 `main.wd-main .px-12{padding:12px}`（app 的 px 数值类）与
   `main.wd-main .py-4{padding:1.5rem}`（core 的 Bootstrap 尺度类）同名压制 Tailwind
   的 `.px-12{3rem}` / `.py-4{1rem}`，按钮被压扁。几何属性不依赖 Tailwind CDN，
   值对齐参考稿 pricing.html（px-12 py-4 rounded-xl font-bold text-lg）。
   -------------------------------------------------------------------------- */
.wd-btn-select {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .5rem;
    width: 100%;
    padding: 1rem 3rem;
    border-radius: .75rem;
    font-size: 18px;
    font-weight: 700;
    line-height: 1.5;
    text-align: center;
    cursor: pointer;
    transition: opacity .15s ease;
}
@media (min-width: 768px) {
    .wd-btn-select { width: auto; }
}
.wd-btn-select:hover { opacity: .9; }

/* --------------------------------------------------------------------------
   Toast 提示接管（app.min.css / core.min.css 原文照抄，值未改动）
   背景：app.toast() 依赖 .toast 的固定定位样式；随 app.min.css 摘除而丢失后，
   toast 节点被 append 到 body 末尾按 static 渲染在页面最底部之外 →
   登录失败等所有 app.toast 提示用户完全看不到（/login/_process/ 返回
   msg:"Invalid username, email or password." 不显示即此因）。
   同时接管 core 的 .bg-danger/.bg-success/.bg-warning/.bg-info（toast 的底色来源）。
   作用域：redesign 页（含 auth 页）。z-index 11051、顶部全宽滑入 = app 原文。
   -------------------------------------------------------------------------- */
body:has(main.wd-main) .toast, body:has(.wd-auth-page) .toast { padding: 14px 24px; line-height: 20px; color: #fff; background: #323232; display: flex; justify-content: space-between; position: fixed; bottom: 0; left: 50%; transform: translateX(-50%) translateY(100%); transition: .3s; box-shadow: 0 3px 2px rgba(0, 0, 0, .2); z-index: 11051; min-width: 288px; max-width: 80%; border-top-left-radius: 2px; border-top-right-radius: 2px; }
body:has(main.wd-main) .toast.reveal, body:has(.wd-auth-page) .toast.reveal { transform: translateX(-50%) translateY(0); }
body:has(main.wd-main) .toast .text, body:has(.wd-auth-page) .toast .text { flex-basis: 1; font-weight: 400; white-space: nowrap; margin-right: 48px; }
body:has(main.wd-main) .toast .action, body:has(.wd-auth-page) .toast .action { text-transform: uppercase; font-weight: 400; font-size: .875rem; }
body:has(main.wd-main) .toast .action a:hover, body:has(.wd-auth-page) .toast .action a:hover { text-decoration: none; }
body:has(main.wd-main) .toast, body:has(.wd-auth-page) .toast { top: 0; bottom: auto; left: 0; max-width: 100%; width: 100%; transform: translateX(0) translateY(-100px); border-top-left-radius: 0; border-top-right-radius: 0; }
body:has(main.wd-main) .toast.reveal, body:has(.wd-auth-page) .toast.reveal { transform: translateX(0) translateY(0); }

body:has(main.wd-main) .bg-danger, body:has(.wd-auth-page) .bg-danger { background-color: #dc3545 !important; }
body:has(main.wd-main) .bg-success, body:has(.wd-auth-page) .bg-success { background-color: #28a745 !important; }
body:has(main.wd-main) .bg-warning, body:has(.wd-auth-page) .bg-warning { background-color: #ffc107 !important; }
body:has(main.wd-main) .bg-info, body:has(.wd-auth-page) .bg-info { background-color: #17a2b8 !important; }
