/* 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;
}
.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;
}
@media (max-width: 768px) {
    .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);
}
/* 卡片配图：模板内用 <img>，由浏览器先等比缩放再裁切溢出区；
   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 / 封面）：在默认 140px 基础上再高约三分之一 */
.portal-card > .portal-card__cover {
    height: 187px;
}

/* 正文分段 / 研发动态分段内配图：与顶图同款 cover + 居中裁切（img 子元素），宽度随卡片铺满 */
.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%；高度约为原来的 2/3（与 80% 宽配合：aspect-ratio 32/15 = (16/9)÷(2/3)÷0.8）
 */
.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;
}
.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: 180px;
    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);
}
.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);
    }
}/* Fix: EN/VI header overlap on medium desktop widths */
/* ===== FORCE FIX: EN/VI nav overlap ===== */
/* ===== EN/VI desktop compact nav (keep visible) ===== */
/* ===== EN/VI desktop compact nav (keep visible) ===== */
@media (min-width: 901px) {
  html[lang="en"] .portal-header__row,
  html[lang="vi"] .portal-header__row {
    display: flex !important;
    flex-wrap: nowrap !important;
    align-items: center !important;
    gap: 6px !important;
  }

  html[lang="en"] .portal-brand,
  html[lang="vi"] .portal-brand {
    flex: 0 0 auto !important;
    max-width: 150px !important;
    margin-left: -6px !important;
  }

  html[lang="en"] .portal-brand__name,
  html[lang="vi"] .portal-brand__name {
    display: none !important; /* 只隐藏公司长名称，释放空间 */
  }

  html[lang="en"] .portal-brand__img,
  html[lang="vi"] .portal-brand__img {
    max-width: 110px !important;
    height: 30px !important;
  }

  html[lang="en"] .portal-nav,
  html[lang="vi"] .portal-nav {
    display: flex !important;
    flex: 1 1 auto !important;
    min-width: 0 !important;
    flex-wrap: nowrap !important;
    justify-content: center !important;
    gap: 2px !important;
    overflow: visible !important;
  }

  html[lang="en"] .portal-nav > a,
  html[lang="vi"] .portal-nav > a,
  html[lang="en"] .portal-nav__trigger,
  html[lang="vi"] .portal-nav__trigger {
    font-size: 12px !important;
    padding: 4px 2px !important;
    letter-spacing: 0 !important;
    white-space: nowrap !important;
  }

  html[lang="en"] .portal-lang,
  html[lang="vi"] .portal-lang {
    flex: 0 0 auto !important;
    font-size: 12px !important;
    white-space: nowrap !important;
  }

  html[lang="en"] .portal-lang__link,
  html[lang="vi"] .portal-lang__link {
    padding: 3px 4px !important;
  }

  html[lang="en"] .portal-nav-toggle,
  html[lang="vi"] .portal-nav-toggle {
    display: none !important;
  }
}