/* Portal — 纯白底 · 浅蓝描边框 · 无渐变（仅改本文件；布局与功能不变） */

:root {

    --portal-blue: #4f92e0;

    --portal-blue-deep: #2d6bb8;

    --portal-blue-soft: #8eb8f0;

    --portal-blue-tint: #e8f3fc;

    --portal-bg: #ffffff;

    --portal-panel: #ffffff;

    --portal-text: #152838;

    --portal-muted: #5a6b7c;

    --portal-border: #d8e6f4;

    --portal-border-strong: #b8d4ef;

    --portal-heading: #1a3a62;

    --portal-hero-glow: rgba(91, 143, 216, 0.22);

    --portal-glow-blue: rgba(91, 143, 216, 0.45);

    --portal-glow-blue-soft: rgba(91, 143, 216, 0.28);

    --portal-space-sm: 12px;

    --portal-space-md: 20px;

    --portal-header-min-h: 60px;

    /* 首页轮播高度上限（再压低）；宽度由 .portal-hero__carousel-wrap 拉满视口，高度与宽约 3:1 取较小值 */

    --portal-hero-carousel-max-h: min(20vh, 200px);

    --portal-hero-carousel-min-h: 84px;

    /* 背景在最底，主内容与顶栏在上（勿与 blur 子层混用负 z-index） */

    --portal-z-bg-deco: 1;

    --portal-z-page: 2;

    --portal-z-header: 200;

    /*

     * 字号阶梯（均随 html 根字号 / 插件前台字号缩放）：

     * 顶栏 nav = 全站「上限」；页内 h1/h2/卡片标题 ≤ 顶栏；正文再小一档。

     */

    /* 顶栏导航与语言：略小于旧版 1.1875rem，避免中文项多时换行 */

    --portal-nav-font: 1.0625rem;

    --portal-rich-heading-font: 1rem;

    --portal-body-font: 0.875rem;

    /* 固定底栏页脚高度（与 .portal-footer--icp-only 内边距 + 一行文案大致一致；含备案旁联系方式时略抬高） */

    --portal-footer-icp-h: 56px;

}

.portal-body {

    margin: 0;

    background-color: #ffffff;

    color: var(--portal-text);

    font-family: "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;

    font-size: var(--portal-body-font);

    line-height: 1.65;

    background-image: none;

    box-sizing: border-box;

    /* 小屏防横向滚动：优先靠子项 min-width:0 / 富文本约束 */

    overflow-x: hidden;

    overflow-x: clip;

}

.portal-body *,

.portal-body *::before,

.portal-body *::after {

    box-sizing: border-box;

}

.portal-inner {

    max-width: 1120px;

    margin: 0 auto;

    padding: 0 max(20px, env(safe-area-inset-left, 0px)) 0 max(20px, env(safe-area-inset-right, 0px));

}

/* 顶栏：左侧再收紧，LOGO+公司名再左移，为中间导航让出宽度 */

.portal-header .portal-inner {

    padding-left: max(2px, env(safe-area-inset-left, 0px));

    padding-right: max(20px, env(safe-area-inset-right, 0px));

}

.portal-header {

    position: fixed;

    top: 0;

    left: 0;

    right: 0;

    z-index: var(--portal-z-header);

    width: 100%;

    background: #ffffff;

    border-bottom: 1px solid var(--portal-border-strong);

    backdrop-filter: none;

    box-shadow: 0 1px 0 rgba(255, 255, 255, 1) inset, 0 2px 8px rgba(45, 107, 184, 0.06);

}

.portal-header::before {

    content: "";

    position: absolute;

    left: 0;

    right: 0;

    top: 0;

    height: 3px;

    pointer-events: none;

    background: var(--portal-blue);

    opacity: 1;

    box-shadow: none;

}

.portal-header::after {

    display: none;

}

.portal-header__row {

    display: flex;

    align-items: center;

    gap: 20px;

    min-height: var(--portal-header-min-h);

    flex-wrap: wrap;

    justify-content: space-between;

}

.portal-brand {

    display: inline-flex;

    flex: 0 1 auto;

    align-items: center;

    gap: clamp(4px, 0.75vw, 10px);

    min-width: 0;

    max-width: 100%;

    margin-left: -14px;

    color: var(--portal-heading);

    font-weight: 700;

    letter-spacing: 0.02em;

    text-decoration: none;

    font-size: var(--portal-nav-font);

}

.portal-brand__name {

    flex: 0 1 auto;

    min-width: 0;

    font-weight: 800;

    letter-spacing: 0.03em;

    color: var(--portal-heading);

    line-height: 1.2;

    white-space: nowrap;

    overflow: hidden;

    text-overflow: ellipsis;

    text-shadow: none;

}

.portal-brand__mark {

    flex: 0 0 auto;

    display: inline-block;

    padding: 6px 0 6px 12px;

    border-left: 4px solid var(--portal-blue);

    box-shadow: none;

    text-transform: none;

    font-variant-numeric: tabular-nums;

    letter-spacing: 0.04em;

    text-shadow: none;

    filter: none;

}

.portal-brand__img {

    display: block;

    flex: 0 0 auto;

    height: clamp(32px, 4vw, 46px);

    width: auto;

    max-width: min(168px, 36vw);

    object-fit: contain;

    object-position: left center;

}

.portal-nav {

    display: flex;

    flex: 1 1 auto;

    flex-wrap: wrap;

    gap: 10px 14px;

    align-items: center;

    justify-content: center;

    min-width: 0;

}

.portal-nav-toggle {

    display: none;

    flex-shrink: 0;

    flex-direction: column;

    justify-content: center;

    align-items: center;

    gap: 5px;

    width: 44px;

    height: 44px;

    padding: 0;

    margin: 0;

    border: 1px solid var(--portal-border-strong);

    border-radius: 8px;

    background: var(--portal-panel);

    color: var(--portal-heading);

    cursor: pointer;

    -webkit-tap-highlight-color: transparent;

    transition: background 0.15s ease, border-color 0.15s ease;

}

.portal-nav-toggle:hover {

    border-color: var(--portal-blue);

    background: var(--portal-blue-tint);

}

.portal-nav-toggle__bar {

    display: block;

    width: 20px;

    height: 2px;

    border-radius: 1px;

    background: currentColor;

    transition: transform 0.2s ease, opacity 0.2s ease;

}

.portal-nav-toggle.is-open .portal-nav-toggle__bar:nth-child(1) {

    transform: translateY(7px) rotate(45deg);

}

.portal-nav-toggle.is-open .portal-nav-toggle__bar:nth-child(2) {

    opacity: 0;

}

.portal-nav-toggle.is-open .portal-nav-toggle__bar:nth-child(3) {

    transform: translateY(-7px) rotate(-45deg);

}

/* 顶栏：字号略高于正文，全站主导航层级 */

.portal-nav a {

    color: #475569;

    text-decoration: none;

    font-size: var(--portal-nav-font);

    font-weight: 600;

    letter-spacing: 0.02em;

    padding: 4px 0;

    border-bottom: 2px solid transparent;

    transition: color 0.18s ease, border-color 0.18s ease;

}

.portal-nav a:hover {

    color: var(--portal-blue-deep);

    border-bottom-color: rgba(91, 143, 216, 0.55);

}

/* 技术资料：一级 + 下拉子项（桌面悬停 / 键盘 focus-within） */

.portal-nav__dropdown-wrap {

    position: relative;

    flex: 0 1 auto;

    min-width: 0;

}

.portal-nav__trigger {

    display: inline-block;

    padding: 4px 0;

    font-size: var(--portal-nav-font);

    font-weight: 600;

    letter-spacing: 0.02em;

    color: #475569;

    cursor: default;

    user-select: none;

    border-bottom: 2px solid transparent;

}

.portal-nav__dropdown {

    display: none;

    position: absolute;

    left: 0;

    /* 与触发区之间勿留空隙：否则鼠标经过空隙会离开 .portal-nav__dropdown-wrap，下拉立刻收起 */

    top: 100%;

    min-width: 11em;

    padding: 8px 0;

    background: #ffffff;

    border: 1px solid var(--portal-border-strong);

    border-radius: 10px;

    box-shadow: 0 6px 20px rgba(45, 107, 184, 0.1);

    z-index: 220;

    flex-direction: column;

    align-items: stretch;

}

/* 向上延伸命中区，斜向移动鼠标时仍算在下拉上，避免「捉迷藏」 */

.portal-nav__dropdown::before {

    content: "";

    position: absolute;

    left: 0;

    right: 0;

    height: 14px;

    bottom: 100%;

}

.portal-nav__dropdown a {

    display: block;

    padding: 8px 14px;

    font-size: calc(var(--portal-nav-font) * 0.96);

    font-weight: 600;

    white-space: nowrap;

    border-bottom: 0;

}

.portal-nav__dropdown a:hover {

    background: var(--portal-blue-tint);

    border-bottom-color: transparent;

    color: var(--portal-blue-deep);

}

.portal-nav__dropdown-wrap:hover .portal-nav__dropdown,

.portal-nav__dropdown-wrap:focus-within .portal-nav__dropdown {

    display: flex;

}

@media (min-width: 901px) {

    .portal-nav__dropdown-wrap {

        align-self: center;

    }

}

.portal-lang {

    flex: 0 0 auto;

    font-size: var(--portal-nav-font);

    display: flex;

    align-items: center;

    flex-wrap: wrap;

    gap: 2px 0;

}

.portal-lang__link {

    color: var(--portal-muted);

    text-decoration: none;

    margin: 0 2px;

    padding: 5px 9px;

    border-radius: 6px;

    border: 1px solid transparent;

    transition: color 0.15s ease, background 0.15s ease, border-color 0.15s ease;

}

.portal-lang__link:hover {

    color: var(--portal-blue-deep);

    border-color: var(--portal-border);

    background: var(--portal-blue-tint);

}

.portal-lang__link.is-active {

    color: #fff;

    font-weight: 600;

    border-color: var(--portal-blue-deep);

    background: var(--portal-blue-deep);

    box-shadow: none;

}

.portal-lang-sep {

    color: var(--portal-border-strong);

    margin: 0 2px;

    opacity: 0.85;

}

.portal-main {

    position: relative;

    z-index: var(--portal-z-page);

    min-height: 60vh;

    padding-top: calc(var(--portal-header-min-h) + 12px);

}

/* 全站：页脚与首页一致 — 固定视口底栏，主内容区预留底距，避免内容压住备案与联系方式 */

body.portal-body {

    min-height: 100dvh;

    display: flex;

    flex-direction: column;

}

body.portal-body > .portal-header {

    flex: 0 0 auto;

}

body.portal-body > .portal-home-bg {

    flex: 0 0 auto;

}

body.portal-body > .portal-main {

    flex: 1 1 auto;

    min-height: 0;

    padding-bottom: calc(var(--portal-footer-icp-h) + env(safe-area-inset-bottom, 0px));

}

body.portal-body > .portal-footer.portal-footer--icp-only {

    position: fixed;

    bottom: 0;

    left: 0;

    right: 0;

    z-index: 50;

    flex: 0 0 auto;

}

/* 首页：顶栏与备案栏之间全铺背景图（不占顶栏/备案高度），模糊与不透明度来自后台内联变量 */

.portal-home-bg {

    --portal-bg-b: none;

    --portal-bg-blur: 0px;

    --portal-bg-photo-opacity: 1;

    position: fixed;

    top: var(--portal-header-min-h);

    bottom: calc(var(--portal-footer-icp-h) + env(safe-area-inset-bottom, 0px));

    left: 0;

    right: 0;

    z-index: var(--portal-z-bg-deco);

    pointer-events: none;

    overflow: hidden;

}

.portal-home-bg::before {

    content: "";

    position: absolute;

    /* 略放大裁切边，避免 blur 产生透明边 */

    left: -24px;

    right: -24px;

    top: -24px;

    bottom: -24px;

    background-image: var(--portal-bg-b);

    background-size: cover;

    background-position: center;

    background-repeat: no-repeat;

    filter: blur(var(--portal-bg-blur));

    opacity: var(--portal-bg-photo-opacity);

    transform: translateZ(0);

}

/* 首页：去 body 渐变底（由 B 区背景图承担）；主区内纵向 flex 撑满三卡区 */

body.portal-body:has(.portal-home-stack--cards-only) {

    background-image: none;

}

body.portal-body:has(.portal-home-stack--cards-only) > .portal-main {

    display: flex;

    flex-direction: column;

}

.portal-home-stack.portal-home-stack--cards-only {

    /* 三卡同比例基准；在既有 1.18 上再放大 25% ≈ 1.475 */

    --portal-home-feat-s: 1.475;

    flex: 1 1 auto;

    display: flex;

    flex-direction: column;

    align-items: stretch;

    justify-content: flex-start;

    min-height: 0;

    padding: 20px 0 32px;

    background: transparent;

}

.portal-home-cards-only {

    flex: 0 1 auto;

    width: 100%;

    display: flex;

    flex-direction: column;

    align-items: stretch;

    /* 与下方三卡拉开距离，避免放大后视觉上侵占品牌主副标题区 */

    gap: 24px;

}

/* 首页顶栏下品牌主副标题（大标题明显大于导航字号） */

.portal-home-lead {

    flex-shrink: 0;

    text-align: center;

    margin: 0 0 16px;

    padding: 12px 0 8px;

}

.portal-home-lead__title {

    margin: 0 0 18px;

    font-size: clamp(1.65rem, 1.1rem + 2.8vw, 2.85rem);

    font-weight: 800;

    line-height: 1.28;

    letter-spacing: 0.04em;

    color: var(--portal-heading);

    text-shadow: none;

}

.portal-home-lead__sub {

    margin: 0 auto;

    max-width: 48em;

    font-size: clamp(0.9375rem, 0.82rem + 0.55vw, 1.1875rem);

    line-height: 1.75;

    color: var(--portal-muted);

}

/* 首页三卡：始终单行；用等分收缩代替「最小幅宽+换行」，避免两排；横向间距收紧 */

.portal-home-stack--cards-only .portal-home-feat-flow {

    width: 100%;

    max-width: min(1220px, 100%);

    margin-left: auto;

    margin-right: auto;

    flex-direction: row;

    flex-wrap: nowrap;

    justify-content: center;

    align-items: stretch;

    align-content: center;

    gap: calc(14px * var(--portal-home-feat-s)) calc(12px * var(--portal-home-feat-s));

}

.portal-home-stack--cards-only .portal-home-feat-flow__item {

    flex: 1 1 0;

    min-width: 0;

    max-width: none;

}

.portal-home-stack--cards-only .portal-home-feat-flow__arrow {

    flex-shrink: 0;

    font-size: calc(1.55rem * var(--portal-home-feat-s));

}

.portal-home-stack--cards-only .portal-card.portal-card--feature {

    /* 加高少加宽：纵向留白略大、横向略收，单行变窄时仍显高不挤宽 */

    padding: calc(26px * var(--portal-home-feat-s)) calc(14px * var(--portal-home-feat-s));

    padding-top: calc(22px * var(--portal-home-feat-s));

    border-radius: calc(12px * var(--portal-home-feat-s));

    min-height: calc(148px * var(--portal-home-feat-s));

    box-sizing: border-box;

}

.portal-home-stack--cards-only .portal-card__icon {

    width: calc(46px * var(--portal-home-feat-s));

    height: calc(46px * var(--portal-home-feat-s));

    margin-bottom: calc(12px * var(--portal-home-feat-s));

    font-size: calc(1.22rem * var(--portal-home-feat-s));

    border-radius: calc(10px * var(--portal-home-feat-s));

}

.portal-home-stack--cards-only .portal-card h3 {

    margin-bottom: calc(10px * var(--portal-home-feat-s));

    font-size: calc(clamp(var(--portal-body-font), 1.35vw, var(--portal-rich-heading-font)) * var(--portal-home-feat-s));

}

.portal-home-stack--cards-only .portal-card--feature > p {

    margin: 0;

    font-size: calc(var(--portal-body-font) * var(--portal-home-feat-s));

    line-height: 1.72;

    color: var(--portal-muted);

}

.portal-hero {

    position: relative;

    overflow: hidden;

    padding: 64px 0 48px;

    border-bottom: 1px solid var(--portal-border);

    background: #ffffff;

}

.portal-hero::before,

.portal-hero::after {

    display: none;

}

.portal-hero .portal-inner {

    position: relative;

    z-index: 1;

}

.portal-hero h1 {

    /* 与顶栏同一上限，避免首页主标题压过导航 */

    font-size: clamp(var(--portal-rich-heading-font), 2.6vw, var(--portal-nav-font));

    margin: 0 0 12px;

    letter-spacing: 0.05em;

    font-weight: 700;

    color: var(--portal-heading);

    text-shadow: none;

}

.portal-hero__sub {

    color: var(--portal-muted);

    max-width: 720px;

    line-height: 1.7;

    margin: 0 0 24px;

    font-size: var(--portal-body-font);

}

.portal-hero__cta {

    display: flex;

    gap: 12px;

    flex-wrap: wrap;

}

/* 首页广告轮播（旧版；后台已移除「首页广告」配置项，保留样式供静态页/回滚） */

.portal-hero--carousel {

    padding: 12px 0 14px;

    overflow-x: hidden;

}

/* 轮播区单独拉满视口宽，不受 .portal-inner max-width:1120px 限制 */

.portal-hero--carousel .portal-hero__carousel-wrap {

    max-width: none;

    width: 100%;

    margin-left: 0;

    margin-right: 0;

    padding-left: max(0px, env(safe-area-inset-left, 0px));

    padding-right: max(0px, env(safe-area-inset-right, 0px));

}

.portal-hero__carousel-wrap {

    width: 100%;

}

.portal-hero__frame {

    position: relative;

    border-radius: 12px;

    overflow: hidden;

    border: 1px solid rgba(91, 143, 216, 0.22);

    box-shadow:

        0 0 0 1px rgba(255, 255, 255, 0.5) inset,

        0 14px 44px -12px rgba(30, 58, 95, 0.16),

        0 0 36px rgba(91, 143, 216, 0.18);

    background: var(--portal-panel);

}

/* 必须写在通用 .portal-hero__frame 之后，否则 border / border-radius 简写会把通栏样式盖掉 */

.portal-hero--carousel .portal-hero__frame {

    border-radius: 0;

    border-left: none;

    border-right: none;

}

.portal-hero__slides {

    position: relative;

    width: 100%;

    overflow: hidden;

    /* 视口全宽时约 3:1；高度用 vw 算避免父级高度为 auto 时 100% 失效，并夹在 min～max 之间 */

    height: clamp(

        var(--portal-hero-carousel-min-h),

        min(calc(100vw / 3), var(--portal-hero-carousel-max-h)),

        var(--portal-hero-carousel-max-h)

    );

}

.portal-hero__slide {

    position: absolute;

    inset: 0;

    opacity: 0;

    z-index: 0;

    transition: opacity 0.45s ease;

    pointer-events: none;

    overflow: hidden;

}

.portal-hero__slide.is-active {

    opacity: 1;

    z-index: 1;

    pointer-events: auto;

}

.portal-hero__slide img {

    display: block;

    width: 100%;

    height: 100%;

    object-fit: cover;

    object-position: center;

}

/* 首页：顶栏下品牌主副标题 + 三卡（.portal-home-stack--cards-only） */

.portal-hero__dots {

    display: flex;

    flex-wrap: wrap;

    justify-content: center;

    gap: 8px;

    padding: 10px 10px 12px;

    background: #ffffff;

}

.portal-hero__dot {

    width: 9px;

    height: 9px;

    padding: 0;

    border-radius: 50%;

    border: 1px solid var(--portal-border-strong);

    background: rgba(255, 255, 255, 0.85);

    cursor: pointer;

    transition: transform 0.15s ease, background 0.15s ease, border-color 0.15s ease;

}

.portal-hero__dot:hover {

    border-color: var(--portal-blue);

    transform: scale(1.12);

}

.portal-hero__dot.is-active {

    background: var(--portal-blue);

    border-color: var(--portal-blue-deep);

    transform: scale(1.15);

}

.portal-hero__empty {

    text-align: center;

    padding: 28px 16px 20px;

    color: var(--portal-muted);

    font-size: var(--portal-body-font);

}

.portal-hero__empty p {

    margin: 0 0 8px;

}

.portal-hero__empty-hint {

    font-size: var(--portal-body-font);

    opacity: 0.92;

}

.portal-btn {

    display: inline-block;

    padding: 10px 20px;

    border-radius: 8px;

    text-decoration: none;

    font-weight: 600;

    border: 1px solid transparent;

    cursor: pointer;

    font-size: var(--portal-body-font);

}

.portal-btn--primary {

    background: var(--portal-blue);

    color: #ffffff;

    border-color: var(--portal-blue-deep);

    box-shadow: none;

}

.portal-btn--primary:hover {

    filter: brightness(1.05);

    background: var(--portal-blue-deep);

    box-shadow: none;

}

.portal-btn--ghost {

    border-color: var(--portal-border-strong);

    color: var(--portal-heading);

    background: var(--portal-panel);

}

.portal-btn--ghost:hover {

    border-color: var(--portal-blue);

    color: var(--portal-blue);

    background: var(--portal-blue-tint);

}

.portal-btn--small {

    padding: 6px 12px;

    font-size: 0.8125rem;

}

.portal-section {

    padding: 44px 0;

}

.portal-section h2 {

    margin-top: 0;

    /* 实验室 / 频道内分块标题：不大于顶栏 */

    font-size: var(--portal-rich-heading-font);

    color: var(--portal-heading);

    font-weight: 700;

    letter-spacing: 0.05em;

    text-shadow: none;

    padding-bottom: 8px;

    border-bottom: 3px solid var(--portal-blue-soft);

    background: none;

}

.portal-grid {

    display: grid;

    gap: 20px;

}

.portal-grid--3 {

    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));

}



/* 首页「能力概览」：三卡拉开间距 + 流程箭头（横排右指，窄屏竖排下指） */

.portal-home-feat-flow {

    display: flex;

    flex-direction: row;

    flex-wrap: wrap;

    align-items: stretch;

    justify-content: center;

    gap: 22px 36px;

    max-width: 1180px;

    margin-left: auto;

    margin-right: auto;

}

.portal-home-feat-flow__item {

    flex: 1 1 210px;

    max-width: 340px;

    min-width: 0;

}

.portal-home-feat-flow__link {

    display: block;

    text-decoration: none;

    color: inherit;

    transition: box-shadow 0.18s ease, transform 0.18s ease, border-color 0.18s ease;

}

.portal-home-feat-flow__link:hover,

.portal-home-feat-flow__link:focus-visible {

    box-shadow: 0 10px 28px rgba(91, 143, 216, 0.18);

    transform: translateY(-2px);

    outline: none;

}

.portal-home-feat-flow__arrow {

    flex: 0 0 auto;

    align-self: center;

    display: flex;

    align-items: center;

    justify-content: center;

    color: var(--portal-blue-deep);

    font-size: 1.55rem;

    opacity: 0.9;

    text-shadow: none;

    padding: 0 4px;

    user-select: none;

    pointer-events: none;

}

.portal-grid--2 {

    grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));

}



/* 产品中心：维度顶栏 + 侧栏分类 + 主区列表 */

.portal-product-dim-tabs {

    display: flex;

    flex-wrap: wrap;

    align-items: center;

    gap: 0.35rem 0.5rem;

    margin: 0.75rem 0 0;

    font-size: var(--portal-body-font);

}

.portal-product-dim-tabs .portal-link {

    border-bottom: 2px solid transparent;

    padding-bottom: 2px;

    transition: color 0.15s ease, border-color 0.15s ease;

}

.portal-product-dim-tabs__sep {

    color: var(--portal-muted);

    user-select: none;

}

.portal-product-dim-tabs .portal-link.is-active {

    font-weight: 700;

    color: var(--portal-blue-deep);

    text-shadow: none;

    border-bottom-color: var(--portal-blue);

}

.portal-product-hub {

    display: grid;

    grid-template-columns: minmax(160px, 220px) 1fr;

    gap: 24px 28px;

    align-items: start;

}

.portal-product-sidebar {

    position: sticky;

    top: 1rem;

}

.portal-product-sidebar__list {

    list-style: none;

    margin: 0;

    padding: 0;

}

.portal-product-sidebar__list li + li {

    margin-top: 4px;

}

.portal-product-sidebar__link {

    display: block;

    padding: 8px 12px;

    border-radius: 8px;

    text-decoration: none;

    color: var(--portal-muted);

    border: 1px solid transparent;

    font-size: var(--portal-body-font);

    line-height: 1.4;

}

.portal-product-sidebar__link:hover {

    background: var(--portal-blue-tint);

    color: var(--portal-heading);

}

.portal-product-sidebar__link.is-active {

    background: var(--portal-blue-tint);

    border-color: var(--portal-border-strong);

    color: var(--portal-heading);

    font-weight: 600;

    box-shadow: none;

}

.portal-product-main {

    min-width: 0;

}

.portal-product-main--full {

    min-width: 0;

}

.portal-product-pick-hint {

    margin: 0;

    max-width: 36em;

}

/* 产品中心：左列含维度标题+分类/产品列表，右列详情与之顶对齐 */

.portal-product-master__head .portal-product-dim-tabs {

    margin-top: 0;

}

.portal-product-master__head {

    margin: 0 0 0.35rem;

    padding: 0;

}

.portal-product-master__h1 {

    margin: 0.35rem 0 0;

    font-size: clamp(1.05rem, 0.95rem + 0.45vw, 1.35rem);

    font-weight: 800;

    color: var(--portal-heading);

    letter-spacing: 0.02em;

}

.portal-product-master {

    display: grid;

    grid-template-columns: minmax(200px, 280px) 1fr;

    gap: 24px 28px;

    align-items: start;

}

.portal-product-master__left-col {

    display: flex;

    flex-direction: column;

    gap: 0.65rem;

    min-width: 0;

    align-self: start;

}

.portal-product-master__aside {

    position: sticky;

    top: calc(var(--portal-header-min-h, 60px) + 8px);

    flex: 1 1 auto;

    min-height: 0;

    max-height: calc(100vh - var(--portal-header-min-h, 60px) - 12rem);

    overflow-y: auto;

    padding-right: 4px;

}

.portal-product-sidebar__section-title {

    font-size: 0.78rem;

    font-weight: 700;

    color: var(--portal-blue-deep);

    letter-spacing: 0.06em;

    text-transform: uppercase;

    margin: 0 0 8px;

    padding: 0 2px;

}

.portal-product-sidebar__section--products {

    margin-top: 1.25rem;

    padding-top: 1rem;

    border-top: 1px solid var(--portal-border);

}

.portal-product-sidebar__list--compact .portal-product-sidebar__link {

    padding: 6px 10px;

    font-size: calc(var(--portal-body-font) * 0.98);

}

.portal-product-sidebar__empty {

    margin: 0;

    font-size: calc(var(--portal-body-font) * 0.95);

}

.portal-product-master__detail {

    min-width: 0;

    background: #ffffff;

    border: 1px solid var(--portal-border-strong);

    border-radius: 12px;

    padding: 20px 22px;

    min-height: 260px;

}

/* 产品中心：右栏详情区放大，接近顶栏与备案栏之间的可视高度 */

.portal-section.portal-section--product-master {

    padding-top: 24px;

    padding-bottom: calc(var(--portal-footer-icp-h) + 16px);

}

.portal-section--product-master .portal-product-master {

    grid-template-columns: minmax(168px, 248px) minmax(0, 1fr);

    gap: 18px 28px;

    align-items: start;

    min-height: calc(100dvh - var(--portal-header-min-h) - var(--portal-footer-icp-h) - 10.5rem);

}

.portal-section--product-master .portal-product-master__detail {

    align-self: start;

    min-height: calc(100dvh - var(--portal-header-min-h) - var(--portal-footer-icp-h) - 9.25rem);

    max-height: calc(100dvh - var(--portal-header-min-h) - var(--portal-footer-icp-h) - 8.5rem);

    overflow-y: auto;

    padding: clamp(1.35rem, 2.8vw, 2.85rem) clamp(1.2rem, 3.2vw, 2.6rem);

    display: flex;

    flex-direction: column;

    -webkit-overflow-scrolling: touch;

}

.portal-section--product-master .portal-product-master__detail > .portal-product-detail-pane-inner {

    flex: 1 1 auto;

    width: 100%;

}

.portal-section--product-master .portal-product-detail-pane__title {

    font-size: clamp(1.2rem, 1.05rem + 0.55vw, 1.55rem);

}

.portal-section--product-master .portal-lead.portal-rich-summary {

    font-size: clamp(0.95rem, 0.88rem + 0.35vw, 1.05rem);

}

/* 未选分类/无产品时的提示：在放大后的右栏内垂直居中 */

.portal-section--product-master .portal-product-master__detail > p.portal-muted {

    flex: 1 1 auto;

    display: flex;

    align-items: center;

    justify-content: center;

    align-self: stretch;

    text-align: center;

    max-width: 46rem;

    margin: 0 auto;

    width: 100%;

    padding: clamp(1rem, 7vh, 5rem) clamp(1rem, 4vw, 2.5rem);

    font-size: clamp(0.9rem, 0.82rem + 0.42vw, 1.1rem);

    line-height: 1.75;

}

.portal-product-detail-pane-inner {

    min-width: 0;

}

.portal-product-detail-pane__title {

    margin: 0 0 0.65rem;

    font-size: clamp(1.1rem, 1rem + 0.35vw, 1.35rem);

    color: var(--portal-heading);

    line-height: 1.35;

}

/* 产品中心：封面图与简介内 Markdown 插图（站内路径校验通过后输出） */

.portal-product-cover-wrap {

    margin: 0 0 1rem;

    max-width: min(960px, 100%);

}

.portal-product-cover-wrap--pane {

    margin-bottom: 0.85rem;

}

.portal-product-cover {

    display: block;

    width: 100%;

    max-height: min(48vh, 420px);

    object-fit: contain;

    border-radius: 10px;

    border: 1px solid var(--portal-border-strong);

    background: var(--portal-panel);

}

.portal-rich-summary .portal-summary-md-img {

    display: block;

    max-width: 100%;

    height: auto;

    margin: 0.75rem 0;

    border-radius: 8px;

    border: 1px solid var(--portal-border);

}

.portal-product-detail-pane__spec-h {

    margin: 1.25rem 0 0.35rem;

    font-size: 1rem;

    color: var(--portal-heading);

}

/* 研发与检测：三子页顶栏切换 */

.portal-lab-subnav {

    display: flex;

    flex-wrap: wrap;

    align-items: center;

    gap: 0.35rem 0.5rem;

    margin: 0 0 0.75rem;

    font-size: var(--portal-body-font);

}

.portal-lab-subnav__sep {

    color: var(--portal-muted);

    user-select: none;

}

.portal-lab-subnav .portal-link {

    border-bottom: 2px solid transparent;

    padding-bottom: 2px;

}

.portal-lab-subnav .portal-link.is-active {

    font-weight: 700;

    color: var(--portal-blue-deep);

    border-bottom-color: var(--portal-blue);

}

/* 材料检测认证：自研页与代理页之间的上一页/下一页 */

.portal-lab-sibling-nav {

    margin-top: 2rem;

    padding-top: 1.25rem;

    border-top: 1px solid var(--portal-border-strong);

    display: flex;

    flex-wrap: wrap;

    align-items: center;

    justify-content: flex-start;

    gap: 0.75rem 1rem;

}

.portal-lab-sibling-nav__link {

    font-weight: 600;

}

.portal-lab-sibling-nav__link--next {

    margin-left: auto;

}

/* 产品中心等双栏：与顶栏同一主断点 900px，避免 769–900px 平板竖屏仍双栏挤爆 */

@media (max-width: 900px) {

    .portal-section--product-master .portal-product-master {

        min-height: 0;

    }

    .portal-section--product-master .portal-product-master__detail {

        min-height: min(72dvh, 520px);

        max-height: none;

    }

    .portal-product-master {

        grid-template-columns: 1fr;

    }

    .portal-product-master__aside {

        position: static;

        max-height: none;

        overflow: visible;

    }

    .portal-product-hub {

        grid-template-columns: 1fr;

    }

    .portal-product-sidebar {

        position: static;

    }

    .portal-product-sidebar__list {

        display: flex;

        flex-wrap: wrap;

        gap: 6px;

    }

    .portal-product-sidebar__list li + li {

        margin-top: 0;

    }

    .portal-product-sidebar__link {

        white-space: nowrap;

    }

}



.portal-card {

    position: relative;

    overflow: hidden;

    background: #ffffff;

    border: 1px solid var(--portal-border-strong);

    border-radius: 12px;

    padding: 20px;

    box-shadow: 0 1px 3px rgba(45, 107, 184, 0.06);

    border-left: 4px solid var(--portal-blue-soft);

}

.portal-card::before {

    content: "";

    position: absolute;

    top: 0;

    left: 0;

    right: 0;

    height: 3px;

    pointer-events: none;

    border-radius: 12px 12px 0 0;

    background: var(--portal-blue-soft);

    box-shadow: none;

    opacity: 1;

}

/* 卡片四角 HUD 细线（炫感加在内容区，不碰顶栏导航） */

.portal-card--feature {

    padding-top: 18px;

}

.portal-card__icon {

    width: 44px;

    height: 44px;

    margin-bottom: 12px;

    display: flex;

    align-items: center;

    justify-content: center;

    border-radius: 10px;

    font-size: 1.2rem;

    color: var(--portal-blue-deep);

    background: var(--portal-blue-tint);

    border: 1px solid var(--portal-border-strong);

    box-shadow: none;

}

.portal-card h3 {

    margin-top: 0;

    margin-bottom: 12px;

    color: var(--portal-heading);

    /* 介于正文与分块 h2 之间，且不大于顶栏 */

    font-size: clamp(var(--portal-body-font), 1.35vw, var(--portal-rich-heading-font));

    letter-spacing: 0.02em;

    font-weight: 700;

    line-height: 1.35;

}

/* 频道页卡片内正文：与顶栏导航同一基准字号 */

.portal-card > .portal-muted {

    font-size: var(--portal-body-font);

    line-height: 1.75;

    margin-top: 0;

}

.portal-card > .portal-muted + .portal-muted {

    margin-top: 10px;

}



/*

 * 后台富文本注入 .portal-muted / .portal-rich-summary / .portal-prose 时，

 * 内层 p、h2 等常继承 Bootstrap/浏览器默认，观感比顶栏还大 —— 在此统一压到「正文 < 小节标题 < 顶栏」。

 */

.portal-body .portal-card .portal-muted,

.portal-body .portal-article-block .portal-muted,

.portal-body .portal-rich-summary {

    font-size: var(--portal-body-font);

    line-height: 1.65;

}

.portal-body .portal-card .portal-muted :is(p, ul, ol, li, td, th, dd, dt, blockquote, address, a),

.portal-body .portal-article-block .portal-muted :is(p, ul, ol, li, td, th, dd, dt, blockquote, address, a),

.portal-body .portal-rich-summary :is(p, ul, ol, li, td, th, dd, dt, blockquote, address, a) {

    font-size: var(--portal-body-font) !important;

    line-height: 1.65;

}

.portal-body .portal-card .portal-muted :is(h1, h2, h3, h4, h5, h6),

.portal-body .portal-article-block .portal-muted :is(h1, h2, h3, h4, h5, h6),

.portal-body .portal-rich-summary :is(h1, h2, h3, h4, h5, h6),

.portal-body .portal-prose :is(h1, h2, h3, h4, h5, h6) {

    font-size: var(--portal-rich-heading-font) !important;

    line-height: 1.35;

    font-weight: 700;

    margin: 0.75em 0 0.35em;

    color: var(--portal-heading);

}

.portal-body .portal-prose :is(p, ul, ol, li, td, dd, dt, blockquote, address, a) {

    font-size: var(--portal-body-font) !important;

    line-height: 1.75;

    color: var(--portal-muted);

}



.portal-card p {

    color: var(--portal-muted);

    line-height: 1.65;

    margin: 0;

    font-size: var(--portal-body-font);

}

/* 卡片配图：适当裁切，上下各截少量，避免极端压缩变形 */

   object-position:center 保证上下对称裁切。 */

.portal-card__cover {

    position: relative;

    overflow: hidden;

    height: 140px;

    border-radius: 8px;

    margin-bottom: 12px;

    background-color: var(--portal-panel);

    border: 1px solid var(--portal-border);

}

.portal-card__cover img {

    display: block;

    width: 100%;

    height: 100%;

    object-fit: cover;

    object-position: center center;

}



/* 卡片顶图（image_url / 封面）：较高容器减少裁切量 */

.portal-card > .portal-card__cover {

    height: 187px;

}



/* 正文分段 / 研发动态分段内配图：居中裁切，宽度随卡片铺满 */

.portal-body .portal-article-block .portal-card__cover,

.portal-body .portal-rd-block .portal-card__cover {

    width: 100%;

    height: auto;

    min-height: clamp(292px, 43vw, 586px);

    aspect-ratio: 16 / 9;

}



/* RD 分段在同一卡片内增加可视分隔，避免看起来像一整段正文 */

.portal-body .portal-rd-block + .portal-rd-block {

    margin-top: 0.95rem;

    padding-top: 0.85rem;

    border-top: 1px dashed var(--portal-border-strong);

}



/*

 * 原料贴牌代工 / 定制化改性 / 研发与检测中心：分段图与卡片顶图（减少裁切）

 * 宽度为原来的 80%；高度适当加大以减少裁切

 */

.portal-body.portal-page--compact-article-covers .portal-card > .portal-card__cover {

    width: 80%;

    max-width: 80%;

    margin-left: auto;

    margin-right: auto;

    height: calc(187px * 2 / 3);

}

.portal-body.portal-page--compact-article-covers .portal-article-block .portal-card__cover,

.portal-body.portal-page--compact-article-covers .portal-rd-block .portal-card__cover {

    width: 80%;

    max-width: 80%;

    margin-left: auto;

    margin-right: auto;

    min-height: 0;

    aspect-ratio: 32 / 15;

}



/* 关于我们等单页：同上展示规则，宽度限制在阅读舒适区内 */

.portal-body .portal-section > .portal-card__cover--section {

    width: 100%;

    max-width: 960px;

    margin: 0.75rem auto;

    height: auto;

    min-height: clamp(292px, 43vw, 586px);

    aspect-ratio: 16 / 9;

}



/* 产品中心：材料 / 产品维度标签（可点击互跳筛选） */

.portal-card--product .portal-product-dim-tags {

    margin-top: 10px;

}

.portal-product-dim-tags__row {

    margin-top: 6px;

    display: flex;

    flex-wrap: wrap;

    align-items: center;

    gap: 6px 10px;

}

.portal-product-dim-tags__label {

    font-size: 0.85em;

    color: var(--portal-muted);

    min-width: 4.5em;

}

.portal-tag {

    display: inline-block;

    padding: 2px 10px;

    border-radius: 999px;

    border: 1px solid var(--portal-border);

    font-size: var(--portal-body-font);

    background: var(--portal-panel);

    text-decoration: none;

}

.portal-tag--material {

    border-color: rgba(91, 143, 216, 0.38);

    background: rgba(91, 143, 216, 0.08);

}

.portal-tag--application {

    border-color: rgba(25, 135, 84, 0.35);

    background: rgba(25, 135, 84, 0.08);

}



.portal-footer {

    position: relative;

    z-index: var(--portal-z-page);

    border-top: 1px solid var(--portal-border-strong);

    padding: 28px 0;

    background: #ffffff;

    color: var(--portal-muted);

    font-size: var(--portal-body-font);

    box-shadow: none;

}

.portal-footer.portal-footer--icp-only {

    padding: 10px 0 max(10px, env(safe-area-inset-bottom, 0px));

    box-shadow: none;

    background: #ffffff;

    border-top: 1px solid var(--portal-border-strong);

}

.portal-footer--icp-only .portal-footer__icp {

    text-align: center;

}

.portal-footer__icp-row {

    display: flex;

    flex-wrap: wrap;

    align-items: center;

    justify-content: center;

    gap: 6px 10px;

    margin: 0 auto;

    max-width: 100%;

    font-size: clamp(12px, 0.82rem + 0.2vw, calc(var(--portal-body-font) * 1.02));

    line-height: 1.45;

}

.portal-footer__icp-text,

.portal-footer__contact {

    display: inline-block;

    max-width: 100%;

    word-break: break-word;

}

.portal-footer__icp-sep {

    opacity: 0.55;

    user-select: none;

}

.portal-footer__company {

    margin: 0 0 8px;

    color: var(--portal-text);

    font-size: var(--portal-body-font);

}

.portal-footer__icp {

    margin: 0;

    font-size: var(--portal-body-font);

    color: var(--portal-muted);

    letter-spacing: 0.02em;

}

.portal-page-head {

    padding: 36px 0 8px;

}

.portal-page-head h1 {

    margin: 0 0 8px;

    /* 频道页大标题：不大于顶栏，避免「研发与检测中心」比导航抢眼 */

    font-size: clamp(var(--portal-rich-heading-font), 2.2vw, var(--portal-nav-font));

    font-weight: 700;

    letter-spacing: 0.05em;

    color: var(--portal-heading);

    text-shadow: none;

    word-break: break-word;

    overflow-wrap: anywhere;

}

.portal-lead {

    color: var(--portal-muted);

    max-width: 720px;

    line-height: 1.7;

    font-size: var(--portal-body-font);

}

.portal-muted {

    color: var(--portal-muted);

}

.portal-link {

    color: var(--portal-blue);

    text-decoration: none;

}

.portal-link:hover {

    text-decoration: underline;

}

.portal-table-wrap {

    overflow-x: auto;

}

.portal-table {

    width: 100%;

    border-collapse: collapse;

    background: var(--portal-panel);

    border: 1px solid var(--portal-border);

    border-radius: 8px;

    overflow: hidden;

}

.portal-table th,

.portal-table td {

    padding: 12px 14px;

    border-bottom: 1px solid var(--portal-border);

    text-align: left;

    font-size: var(--portal-body-font);

}

.portal-table th {

    color: var(--portal-heading);

    font-weight: 600;

    background: var(--portal-blue-tint);

}

.portal-dl {

    display: grid;

    grid-template-columns: 140px 1fr;

    gap: 8px 16px;

}

.portal-dl dt {

    color: var(--portal-muted);

}

.portal-dl dd {

    margin: 0;

}

.portal-dl-list {

    list-style: none;

    padding: 0;

    margin: 0;

}

.portal-dl-list li {

    display: flex;

    justify-content: space-between;

    align-items: center;

    gap: 16px;

    padding: 14px 0;

    border-bottom: 1px solid var(--portal-border);

}

.portal-dl-list__title {

    font-weight: 600;

    color: var(--portal-text);

}

.portal-form label {

    display: block;

    margin: 12px 0 6px;

    color: var(--portal-muted);

    font-size: var(--portal-body-font);

}

.portal-input {

    width: 100%;

    max-width: 520px;

    padding: 10px 12px;

    border-radius: 8px;

    border: 1px solid var(--portal-border-strong);

    background: #ffffff;

    color: var(--portal-text);

    box-sizing: border-box;

    font-size: var(--portal-body-font);

}

.portal-input:focus {

    outline: none;

    border-color: var(--portal-blue);

    box-shadow: 0 0 0 3px rgba(91, 143, 216, 0.14);

}

.portal-alert {

    color: var(--portal-blue-deep);

    margin-top: 12px;

}

.portal-prose p {

    line-height: 1.75;

    color: var(--portal-muted);

    font-size: var(--portal-body-font);

}

.portal-rich-summary {

    white-space: normal;

    word-break: break-word;

}

.portal-rich-summary .portal-code-block {

    margin: 10px 0;

    padding: 12px 14px;

    border-radius: 8px;

    border: 1px solid var(--portal-border-strong);

    background: var(--portal-blue-tint);

    color: #1f2d3d;

    overflow-x: auto;

    font-family: Consolas, Monaco, "Courier New", monospace;

    font-size: 0.9rem;

    line-height: 1.55;

}

.portal-rich-summary .portal-code-block code {

    white-space: pre;

}



/* —— 联系我们：侧栏 + 表单 —— */

.portal-contact-layout {

    display: grid;

    grid-template-columns: minmax(260px, 320px) 1fr;

    gap: 28px 40px;

    align-items: start;

}

.portal-contact-layout--solo {

    grid-template-columns: 1fr;

}

@media (max-width: 900px) {

    .portal-contact-layout {

        grid-template-columns: 1fr;

    }

}

.portal-contact-aside__title,

.portal-contact-main__title {

    font-size: 1.125rem;

    font-weight: 600;

    color: var(--portal-text);

    margin: 0 0 12px;

}

.portal-contact-card {

    padding: 18px 20px;

}

.portal-contact-line {

    display: flex;

    gap: 10px 14px;

    padding: 10px 0;

    border-bottom: 1px solid var(--portal-border);

    font-size: var(--portal-body-font);

}

.portal-contact-line:last-child {

    border-bottom: 0;

}

.portal-contact-line--block {

    flex-direction: column;

    align-items: flex-start;

}

/* 横向行里 __k 的 88px 是「标签宽度」；纵向 block 时同一规则会变成「标签高度」，地址与「地址」字样被撑开 */

.portal-contact-line--block .portal-contact-line__k {

    flex: 0 0 auto;

    width: 100%;

    max-width: none;

    margin-bottom: 4px;

}

.portal-contact-line--block .portal-contact-line__v {

    width: 100%;

}

.portal-contact-line__k {

    flex: 0 0 88px;

    color: var(--portal-muted);

    font-weight: 500;

}

.portal-contact-line__v {

    color: var(--portal-text);

    word-break: break-word;

}

.portal-contact-line__v--multiline {

    white-space: pre-wrap;

}

.portal-contact-line__v a {

    color: var(--portal-blue-deep);

    text-decoration: none;

}

.portal-contact-line__v a:hover {

    text-decoration: underline;

}

.portal-contact-form .portal-req {

    color: #c0392b;

    font-weight: 600;

}

.portal-form-hint {

    margin: -4px 0 8px;

    font-size: var(--portal-body-font);

    color: var(--portal-muted);

    line-height: 1.55;

    max-width: 640px;

}

.portal-form-error {

    color: #c0392b;

    margin-top: 8px;

    font-size: var(--portal-body-font);

}

.portal-contact-flash {

    margin-top: 8px;

}

.portal-input--select {

    max-width: 640px;

    appearance: auto;

}

.portal-input--textarea {

    max-width: 640px;

    min-height: 140px;

    resize: vertical;

    line-height: 1.6;

}



/* —— 小屏：顶栏栅格、抽屉式主导航、安全区 —— */

@media (max-width: 900px) {

    :root {

        --portal-header-min-h: 52px;

    }

    .portal-header__row {

        display: grid;

        grid-template-columns: 1fr auto auto;

        grid-template-rows: auto auto;

        align-items: center;

        column-gap: 10px;

        row-gap: 0;

        min-height: var(--portal-header-min-h);

    }

    .portal-main {

        /* 小屏抽屉导航展开时，预留更大顶部空间避免首屏被压住 */

        padding-top: calc(var(--portal-header-min-h) + 18px);

    }

    .portal-brand {

        grid-column: 1;

        grid-row: 1;

        gap: 6px;

        max-width: 100%;

    }

    .portal-brand__name {

        max-width: min(200px, 46vw);

    }

    .portal-header .portal-inner {

        padding-left: max(6px, env(safe-area-inset-left, 0px));

    }

    html[lang="en"] .portal-brand,

    html[lang="vi"] .portal-brand {

        max-width: min(280px, 72vw);

        margin-left: -6px;

    }

    html[lang="en"] .portal-brand__name,

    html[lang="vi"] .portal-brand__name {

        max-width: min(9em, 42vw);

    }

    .portal-nav-toggle {

        display: inline-flex;

        grid-column: 2;

        grid-row: 1;

    }

    .portal-lang {

        grid-column: 3;

        grid-row: 1;

        justify-self: end;

    }

    .portal-nav {

        grid-column: 1 / -1;

        grid-row: 2;

        flex: none;

        flex-direction: column;

        align-items: stretch;

        justify-content: flex-start;

        width: 100%;

        max-height: 0;

        overflow: hidden;

        margin: 0;

        padding: 0;

        border-top: 1px solid transparent;

        transition: max-height 0.28s ease, padding 0.28s ease, border-color 0.2s ease;

    }

    .portal-nav.portal-nav--open {

        max-height: min(72vh, 400px);

        overflow-y: auto;

        padding: var(--portal-space-sm) 0;

        border-top-color: var(--portal-border);

        -webkit-overflow-scrolling: touch;

    }

    .portal-nav > a {

        padding: 12px 4px;

        font-size: var(--portal-nav-font);

        border-bottom: 1px solid var(--portal-border);

        border-radius: 0;

    }

    .portal-nav > a:last-of-type {

        border-bottom: 0;

    }

    .portal-nav__dropdown-wrap {

        border-bottom: 1px solid var(--portal-border);

    }

    .portal-nav__trigger {

        display: block;

        padding: 12px 4px;

        font-size: var(--portal-nav-font);

        font-weight: 600;

        color: var(--portal-heading);

    }

    .portal-nav__dropdown {

        display: flex;

        position: static;

        flex-direction: column;

        min-width: 0;

        padding: 0 0 4px;

        margin: 0;

        background: transparent;

        border: 0;

        border-radius: 0;

        box-shadow: none;

        z-index: auto;

    }

    .portal-nav__dropdown a {

        padding: 10px 4px 10px 1.1rem;

        font-size: var(--portal-nav-font);

        border-bottom: 1px solid var(--portal-border);

    }

    .portal-nav__dropdown a:last-child {

        border-bottom: 0;

    }

    .portal-lang__link {

        min-height: 40px;

        min-width: 40px;

        display: inline-flex;

        align-items: center;

        justify-content: center;

        padding: 6px 8px;

    }

    body.portal-nav-open {

        overflow: hidden;

    }

    .portal-inner {

        padding-left: max(16px, env(safe-area-inset-left, 0px));

        padding-right: max(16px, env(safe-area-inset-right, 0px));

    }

    .portal-section {

        padding: 32px 0;

    }

    .portal-home-feat-flow {

        flex-direction: column;

        align-items: stretch;

        gap: 10px 0;

    }

    .portal-home-feat-flow__item {

        max-width: none;

    }

    .portal-home-feat-flow__arrow {

        align-self: center;

        padding: 2px 0 6px;

        transform: rotate(90deg);

    }

    /* 首页三卡：小屏仍保持一行三卡 + 横箭头，不沿用全站竖排两排观感 */

    .portal-home-stack--cards-only .portal-home-feat-flow {

        flex-direction: row;

        flex-wrap: nowrap;

        align-items: stretch;

        gap: 8px 6px;

        max-width: 100%;

    }

    .portal-home-stack--cards-only .portal-home-feat-flow__item {

        flex: 1 1 0;

        min-width: 0;

    }

    .portal-home-stack--cards-only .portal-home-feat-flow__arrow {

        transform: none;

        align-self: stretch;

        padding: 0 1px;

        font-size: calc(1.1rem * var(--portal-home-feat-s, 1));

    }

    .portal-hero {

        padding: 40px 0 32px;

    }

    .portal-hero--carousel {

        padding: 8px 0 10px;

    }

    body.portal-body {

        --portal-footer-icp-h: 64px;

    }

    .portal-home-stack--cards-only {

        /* 窄屏在 1 的基础上同比例 +25% */

        --portal-home-feat-s: 1.25;

        padding: 16px 0 24px;

    }

    .portal-home-cards-only {

        gap: 18px;

    }

    .portal-home-lead {

        margin-bottom: 20px;

        padding: 6px 0 4px;

    }

    .portal-home-lead__title {

        margin-bottom: 12px;

        font-size: clamp(1.32rem, 0.88rem + 2vw, 1.9rem);

    }

    .portal-home-lead__sub {

        font-size: var(--portal-body-font);

    }

    .portal-page-head {

        padding: 24px 0 6px;

    }

    .portal-dl {

        grid-template-columns: 1fr;

    }

    .portal-dl dt {

        font-weight: 600;

        color: var(--portal-heading);

    }

    .portal-footer {

        padding-bottom: max(28px, env(safe-area-inset-bottom, 0px));

    }

    .portal-footer.portal-footer--icp-only {

        padding: 8px 0 max(8px, env(safe-area-inset-bottom, 0px));

    }

}



@media (min-width: 901px) {

    .portal-header__row {

        flex-wrap: nowrap;

        gap: clamp(6px, 1vw, 14px);

    }

    .portal-nav {

        /* 允许在单行内随视口变窄而收缩，避免长文案链接互相叠字 */

        flex: 1 1 auto;

        min-width: 0;

        max-height: none !important;

        overflow: visible !important;

        padding-top: 0 !important;

        padding-bottom: 0 !important;

        border-top: none !important;

        flex-wrap: nowrap;

        gap: clamp(2px, 0.45vw, 10px);

        justify-content: center;

    }

    .portal-nav a {

        flex: 0 1 auto;

        min-width: 0;

        white-space: nowrap;

        padding: 4px clamp(2px, 0.35vw, 6px);

        /* 随视口略缩放，减轻英文/越南语长词顶死一行 */

        font-size: clamp(0.6875rem, 0.3rem + 0.62vw, var(--portal-nav-font));

    }

    .portal-brand {

        min-width: 0;

        max-width: min(260px, 30vw);

        flex: 0 1 auto;

        font-size: clamp(0.75rem, 0.32rem + 0.65vw, var(--portal-nav-font));

    }

    .portal-nav__trigger {

        font-size: clamp(0.6875rem, 0.3rem + 0.62vw, var(--portal-nav-font));

    }

    .portal-lang {

        flex-wrap: nowrap;

        font-size: clamp(0.6875rem, 0.3rem + 0.62vw, var(--portal-nav-font));

    }

    .portal-lang__link {

        padding: 4px clamp(4px, 0.5vw, 9px);

    }

    body.portal-nav-open {

        overflow: auto !important;

    }

}



/*

 * 英文 / 越南语顶栏更长：在单行不换行前提下再压一档字号与间距（html lang 来自 layout）

 */

@media (min-width: 901px) {

    html[lang="en"] .portal-header__row,

    html[lang="vi"] .portal-header__row {

        gap: clamp(4px, 0.75vw, 12px);

    }

    html[lang="en"] .portal-nav,

    html[lang="vi"] .portal-nav {

        gap: clamp(1px, 0.28vw, 6px);

    }

    html[lang="en"] .portal-nav a,

    html[lang="vi"] .portal-nav a {

        font-size: clamp(0.625rem, 0.18rem + 0.72vw, 0.9375rem);

        letter-spacing: 0.01em;

        padding: 4px 2px;

    }

    html[lang="en"] .portal-nav__trigger,

    html[lang="vi"] .portal-nav__trigger {

        font-size: clamp(0.625rem, 0.18rem + 0.72vw, 0.9375rem);

        letter-spacing: 0.01em;

        padding: 4px 2px;

    }

    html[lang="en"] .portal-brand,

    html[lang="vi"] .portal-brand {

        font-size: clamp(0.6875rem, 0.22rem + 0.68vw, 0.9375rem);

        flex: 0 1 auto;

        max-width: min(210px, 28vw);

        margin-left: -14px;

    }

    html[lang="en"] .portal-brand__img,

    html[lang="vi"] .portal-brand__img {

        max-width: min(120px, 28vw);

        height: clamp(28px, 3.2vw, 40px);

    }

    html[lang="en"] .portal-brand__name,

    html[lang="vi"] .portal-brand__name {

        font-size: clamp(0.625rem, 0.14rem + 0.62vw, 0.8125rem);

        letter-spacing: 0.02em;

        max-width: min(9em, 22vw);

    }

    html[lang="en"] .portal-lang,

    html[lang="vi"] .portal-lang {

        font-size: clamp(0.625rem, 0.18rem + 0.72vw, 0.9375rem);

    }

    html[lang="en"] .portal-lang__link,

    html[lang="vi"] .portal-lang__link {

        padding: 4px 5px;

    }

}



/* 技术文章：全屏简约列表 + 详情 */

.portal-tech {

    max-width: 720px;

    margin: 0 auto;

    padding: 24px 0 48px;

}

.portal-tech--list {

    min-height: calc(100vh - var(--portal-header-min-h) - var(--portal-footer-icp-h) - 48px);

}

@supports (height: 100dvh) {

    .portal-tech--list {

        min-height: calc(100dvh - var(--portal-header-min-h) - var(--portal-footer-icp-h) - 48px);

    }

}

.portal-tech__title {

    margin: 0 0 1.5rem;

    font-size: clamp(1.25rem, 1rem + 1.2vw, 1.65rem);

    font-weight: 700;

    letter-spacing: 0.02em;

    color: var(--portal-heading);

    line-height: 1.35;

}

.portal-tech__empty {

    margin: 0;

    color: var(--portal-muted);

    font-size: var(--portal-body-font);

}

.portal-tech__list {

    list-style: none;

    margin: 0;

    padding: 0;

}

.portal-tech__item {

    margin: 0;

    padding: 0;

    border-bottom: 1px solid var(--portal-border);

}

.portal-tech__item:first-child {

    border-top: 1px solid var(--portal-border);

}

.portal-tech__link {

    display: block;

    padding: 0.85rem 0;

    color: var(--portal-text);

    text-decoration: none;

    font-size: var(--portal-body-font);

    line-height: 1.5;

    transition: color 0.15s ease;

}

.portal-tech__link:hover {

    color: var(--portal-blue-deep);

}

.portal-tech__back {

    margin: 0 0 1rem;

}

.portal-tech__backlink {

    font-size: var(--portal-body-font);

    color: var(--portal-muted);

    text-decoration: none;

}

.portal-tech__backlink:hover {

    color: var(--portal-blue-deep);

}

.portal-tech__body {

    margin-top: 0.5rem;

    font-size: var(--portal-body-font);

    line-height: 1.75;

    color: var(--portal-text);

}



/* 静态聚合页 /static/portal/home-feat-overview.html：锚点避开固定顶栏；段间「继续向下」提示 */

.portal-home-feat-overview__block {

    scroll-margin-top: calc(var(--portal-header-min-h) + 16px);

}

.portal-home-feat-overview__down {

    display: flex;

    align-items: center;

    justify-content: center;

    padding: 10px 0 36px;

    color: var(--portal-blue-deep);

    font-size: 2rem;

    line-height: 1;

    opacity: 0.88;

    user-select: none;

    pointer-events: none;

}

.portal-home-feat-overview__down i {

    text-shadow: none;

    animation: portal-home-feat-overview-bob 1.55s ease-in-out infinite;

}

@keyframes portal-home-feat-overview-bob {

    0%,

    100% {

        transform: translateY(0);

    }

    50% {

        transform: translateY(10px);

    }

}



/* ========== Mobile baseline: main column + CMS rich content overflow ========== */

.portal-body > .portal-main {

    min-width: 0;

    max-width: 100%;

}

/* 后台富文本 / Markdown：图片、嵌入、表格、代码块不撑破视口 */

.portal-body .portal-prose img,

.portal-body .portal-muted img,

.portal-body .portal-rich-summary img,

.portal-body .portal-article-block img,

.portal-body .portal-rd-block img,

.portal-body .portal-section .portal-card img {

    max-width: 100%;

    height: auto;

}

.portal-body .portal-prose video,

.portal-body .portal-muted video,

.portal-body .portal-rich-summary video,

.portal-body .portal-prose iframe,

.portal-body .portal-muted iframe,

.portal-body .portal-rich-summary iframe {

    max-width: 100%;

}

.portal-body .portal-prose table,

.portal-body .portal-muted table,

.portal-body .portal-rich-summary table,

.portal-body .portal-article-block table,

.portal-body .portal-rd-block table {

    display: block;

    width: 100%;

    max-width: 100%;

    overflow-x: auto;

    -webkit-overflow-scrolling: touch;

}

.portal-body .portal-prose pre,

.portal-body .portal-muted pre,

.portal-body .portal-rich-summary pre {

    max-width: 100%;

    overflow-x: auto;

    -webkit-overflow-scrolling: touch;

}



/* 极窄屏：首页三卡改竖排，避免三列挤成一团 */

@media (max-width: 480px) {

    .portal-home-stack--cards-only .portal-home-feat-flow {

        flex-direction: column;

        flex-wrap: nowrap;

        align-items: stretch;

        gap: 14px;

    }

    .portal-home-stack--cards-only .portal-home-feat-flow__arrow {

        transform: rotate(90deg);

        padding: 4px 0;

        align-self: center;

    }

    .portal-home-stack--cards-only .portal-home-feat-flow__item {

        flex: 1 1 auto;

        max-width: none;

    }

}



/* 小屏抽屉导航：触控最小高度（与 max-width:900 顶栏折叠一致） */

@media (max-width: 900px) {

    .portal-nav.portal-nav--open > a,

    .portal-nav.portal-nav--open .portal-nav__dropdown a {

        min-height: 44px;

        display: flex;

        align-items: center;

    }

    .portal-nav.portal-nav--open .portal-nav__trigger {

        min-height: 44px;

        display: flex;

        align-items: center;

    }

    .portal-tech__link {

        min-height: 44px;

        display: flex;

        align-items: center;

    }

    .portal-contact-form .portal-btn,

    .portal-contact-form button.portal-btn {

        min-height: 44px;

        display: inline-flex;

        align-items: center;

        justify-content: center;

    }

    .portal-product-dim-tabs .portal-link {

        min-height: 44px;

        display: inline-flex;

        align-items: center;

    }

    .portal-lab-subnav .portal-link {

        min-height: 44px;

        display: inline-flex;

        align-items: center;

    }

}


/* 修正：恢复卡片配图 height:100%，不被通用 img height:auto 覆盖 */
/* 优先级 >=0,3,1，高于或等于上方 6 个通用 img 选择器，且位置靠后确保生效 */
.portal-body .portal-article-block .portal-card__cover img,
.portal-body .portal-rd-block .portal-card__cover img,
.portal-body .portal-section .portal-card .portal-card__cover img {
    height: 100%;
}