/*
 * 悬停翻转盒 .cms-block-hover-box
 * 结构：wrapper > inner(3D) > front + back；同层 back-overlay 仅用于悬停后接点击
 * 设置：容器比例(自动/固定)、翻转方向、图片填充、标题样式、设计选项
 */
.cms-block-hover-box {
    --hover-box-aspect: 1;
    perspective: 1200px;
    perspective-origin: center center;
    position: relative;
    width: 100%;
    aspect-ratio: var(--hover-box-aspect);
    min-height: 120px;
    overflow: hidden;
    transform: translateZ(0);
    isolation: isolate;
}
.cms-hover-box-inner {
    position: absolute;
    inset: 0;
    transition: transform 0.55s cubic-bezier(0.4, 0, 0.2, 1);
    transform-style: preserve-3d;
    backface-visibility: hidden;
    -webkit-backface-visibility: hidden;
}
.cms-block-hover-box:hover .cms-hover-box-inner {
    transform: rotateY(180deg);
}
.cms-block-hover-box:hover .cms-hover-box-front {
    pointer-events: none !important;
    z-index: -1;
}
.cms-hover-box-flip-vertical:hover .cms-hover-box-inner {
    transform: rotateY(0) rotateX(180deg);
}
.cms-hover-box-flip-vertical:hover .cms-hover-box-front {
    pointer-events: none !important;
    z-index: -1;
}

.cms-hover-box-front,
.cms-hover-box-back {
    position: absolute;
    inset: 0;
    backface-visibility: hidden;
    -webkit-backface-visibility: hidden;
    overflow: hidden;
}
.cms-hover-box-front {
    transform: translateZ(1px);
    z-index: 1;
}
.cms-hover-box-front img {
    width: 100%;
    height: 100%;
    max-width: none;
    max-height: none;
    object-fit: cover;
    display: block;
    vertical-align: top;
}
.cms-hover-box-back {
    transform: translateZ(-1px) rotateY(180deg);
    z-index: 0;
    display: flex;
    flex-direction: column;
    justify-content: center;
    overflow-y: auto;
    padding: 1rem;
    box-sizing: border-box;
}
.cms-hover-box-flip-vertical .cms-hover-box-back {
    transform: translateZ(-1px) rotateY(0) rotateX(180deg);
}

/* 背面可点击层：悬停时延迟出现，离开时立即隐藏，与翻回动画一致 */
.cms-hover-box-back-overlay {
    position: absolute;
    inset: 0;
    z-index: 10;
    padding: 1rem;
    box-sizing: border-box;
    /* background/color 由模板内联样式根据背面样式设置 */
    opacity: 0;
    pointer-events: none;
    transition: opacity 0s; /* 离开时立即消失，只保留卡片翻回 */
}
.cms-block-hover-box:hover .cms-hover-box-back-overlay {
    opacity: 1;
    pointer-events: auto;
    transition: opacity 0.1s ease-out 0.5s; /* 悬停时等翻转快结束再淡入 */
}

/* 饼图环形进度 */
.cms-block-pie-chart .circle {
    transition: stroke-dasharray 0.8s ease-out;
}
.cms-block-pie-chart svg {
    display: block;
}

/* 行设置：前台渲染 */
.cms-row.cms-row-align-top { align-items: flex-start; }
.cms-row.cms-row-align-middle { align-items: center; }
.cms-row.cms-row-align-bottom { align-items: flex-end; }
.cms-row.cms-row-equal-height { align-items: stretch; }
.cms-row.cms-row-equal-height .cms-column { display: flex; flex-direction: column; }
.cms-row.cms-row-equal-height .cms-block { flex: 1 1 auto; }

/* Row stretch：全宽行（突破 container/列 到视口宽度）
 * .cms-row 的父级是 .cms-region（Bootstrap col），故用 (100vw - 100%)/2 的负 margin 向两侧撑满
 * 勿在 .cms-page 或 .container 上设 overflow-x: hidden，否则会裁掉伸出的全宽行
 */
.cms-row.cms-row-stretch-stretch_row,
.cms-row.cms-row-stretch-stretch_row_content,
.cms-row.cms-row-stretch-stretch_row_content_no_paddings {
    width: 100vw;
    max-width: 100vw;
    margin-left: calc(-1 * (100vw - 100%) / 2);
    margin-right: calc(-1 * (100vw - 100%) / 2);
    box-sizing: border-box;
}
/* stretch_row：仅行全宽，内容保持与 container 同宽（由 .cms-row-inner 限制） */
.cms-row.cms-row-stretch-stretch_row .cms-row-inner {
    width: 100%;
    max-width: 1320px;
    margin-left: auto;
    margin-right: auto;
    padding-left: var(--bs-gutter-x, 0.75rem);
    padding-right: var(--bs-gutter-x, 0.75rem);
    display: flex;
    flex-wrap: wrap;
    margin-top: calc(var(--bs-gutter-y, 0.5rem) * -1);
    margin-bottom: calc(var(--bs-gutter-y, 0.5rem) * -1);
}
.cms-row.cms-row-stretch-stretch_row .cms-row-inner > .cms-column {
    padding-top: var(--bs-gutter-y, 0.5rem);
    padding-bottom: var(--bs-gutter-y, 0.5rem);
}
/* stretch_row_content：行与内容都全宽，无内层限制 */
/* stretch_row_content_no_paddings：行与内容全宽，且去掉行内边距 */
.cms-row.cms-row-stretch-stretch_row_content_no_paddings {
    padding-left: 0;
    padding-right: 0;
}
.cms-row.cms-row-stretch-stretch_row_content_no_paddings .cms-column {
    padding-left: calc(var(--bs-gutter-x, 0.75rem) / 2);
    padding-right: calc(var(--bs-gutter-x, 0.75rem) / 2);
}

/* Hero banner */
.cms-hero-img { width: 100%; max-width: 420px; margin: 0 auto; }
.cms-hero-btn { margin-right: 1rem; margin-bottom: 0.5rem; padding: 0.75rem 2rem; font-size: 1.1rem; border-radius: 50px; transition: transform 0.3s, box-shadow 0.3s; }
.cms-hero-btn:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);}
.cms-hero-btn-shadow-sm { box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); }
.cms-hero-btn-shadow-md { box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); }
.cms-hero-btn-shadow-lg { box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175); }
.cms-hero-btn-hover-lift:hover { transform: translateY(-2px); }
.cms-hero-btn-hover-lift.cms-hero-btn-shadow-sm:hover { box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.1); }
.cms-hero-btn-hover-lift.cms-hero-btn-shadow-md:hover { box-shadow: 0 0.75rem 1.5rem rgba(0, 0, 0, 0.2); }
.cms-hero-btn-hover-lift.cms-hero-btn-shadow-lg:hover { box-shadow: 0 1.25rem 4rem rgba(0, 0, 0, 0.25); }
.cms-hero-btn-hover-darken:hover { filter: brightness(0.9); }
.cms-hero-btn-hover-outline:hover { background-color: transparent !important; border-color: currentColor; }

/* 行内动画（可选）；有延迟时用 backwards 在延迟期间保持初始帧（隐藏），延迟结束后再播放 */
.cms-animate.cms-animate-fadeIn { animation: cms-fadeIn 0.6s ease-out; }
.cms-animate.cms-animate-fadeInUp { animation: cms-fadeInUp 0.6s ease-out; }
.cms-animate.cms-animate-fadeInDown { animation: cms-fadeInDown 0.6s ease-out; }
.cms-animate.cms-animate-slideInLeft { animation: cms-slideInLeft 0.5s ease-out; }
.cms-animate.cms-animate-slideInRight { animation: cms-slideInRight 0.5s ease-out; }
.cms-animate.cms-animate-zoomIn { animation: cms-zoomIn 0.4s ease-out; }
.cms-animate.cms-animate-has-delay { animation-fill-mode: backwards; }
@keyframes cms-fadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes cms-fadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }
@keyframes cms-fadeInDown { from { opacity: 0; transform: translateY(-20px); } to { opacity: 1; transform: translateY(0); } }
@keyframes cms-slideInLeft { from { opacity: 0; transform: translateX(-30px); } to { opacity: 1; transform: translateX(0); } }
@keyframes cms-slideInRight { from { opacity: 0; transform: translateX(30px); } to { opacity: 1; transform: translateX(0); } }
@keyframes cms-zoomIn { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } }

/* 通用设计选项：鼠标悬停动画（容器） */
.cms-design-hover-lift,
.cms-design-hover-scale,
.cms-design-hover-shadow,
.cms-design-hover-lift_shadow {
    transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.cms-design-hover-lift:hover { transform: translateY(-4px); }
.cms-design-hover-scale:hover { transform: scale(1.03); }
.cms-design-hover-shadow:hover { box-shadow: 0 10px 25px rgba(0, 0, 0, 0.12); }
.cms-design-hover-lift_shadow:hover {
    transform: translateY(-4px);
    box-shadow: 0 12px 28px rgba(0, 0, 0, 0.15);
}

/* Heading：inline-block，底线 ::after 在标题内 */
.cms-block.cms-block-heading {
    display: inline-block;
}
.cms-block.cms-block-heading.cms-heading-has-bottom-line::after {
    content: '';
    display: block;
    width: 60px;
    height: 4px;
    background: var(--cms-heading-line-color, currentColor);
    margin-top: 0.75rem;
}

/* 分割线：容器、线条、标题、标题前 ICON */
.cms-block-divider .cms-divider-hr {
    border: none;
    border-top: 1px solid rgba(0, 0, 0, 0.1);
    margin: 0;
}
.cms-block-divider .cms-divider-hr-single {
    flex: 1 1 auto;
    width: 100%;
}
.cms-divider-title-wrap {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    flex-shrink: 0;
}
.cms-divider-title {
    white-space: nowrap;
}
.cms-divider-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.5em;
    height: 1.5em;
    line-height: 1;
    flex-shrink: 0;
}
.cms-divider-icon.bi {
    font-style: normal;
}

/* 内容容器：容器区块，可内嵌子区块 */
.cms-block-content-box {
    display: block;
    box-sizing: border-box;
    transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.cms-content-box-inner {
    display: block;
    height: 100%;
}
.cms-content-box-inner > * + * {
    margin-top: 0.75rem;
}
.cms-content-box-link {
    text-decoration: none;
    color: inherit;
}
.cms-content-box-link:hover {
    color: inherit;
}

/* 图标块 */
.cms-block-icon-block {
    width: 80px;
    height: 80px;
    background: linear-gradient(135deg, var(--primary-color, var(--bs-primary, #0d6efd)), var(--primary-light, #6ea8fe));
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: white;
    font-size: 2rem;
}
.cms-block-icon-block .cms-icon-block-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    line-height: 1;
    color: inherit;
}
.cms-block-icon-block .cms-icon-block-icon i {
    line-height: 1;
}
/* 悬停效果：No Effect */
.cms-content-box-hover-none:hover {
    /* 无额外效果 */
}
/* 悬停效果：Shadow */
.cms-content-box-hover-shadow:hover {
    box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.1);
}
/* 悬停效果：Slide Up */
.cms-content-box-hover-slide_up:hover {
    transform: translateY(-4px);
}
/* 悬停效果：Shadow and Slide Up */
.cms-content-box-hover-shadow_slide_up:hover {
    transform: translateY(-4px);
    box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.1);
}

/* 后台：内容容器内层（拖放区块到此处），内边距让内部区块不贴边 */
.cms-pb-block-inner {
    min-height: 48px;
    padding: 0.5rem;
    margin-top: 0.25rem;
    background: #f8f9fa;
    border: 1px dashed #dee2e6;
    border-radius: 6px;
}
.cms-pb-block-inner > .cms-pb-block {
    margin-bottom: 0.5rem;
}
.cms-pb-block-inner > .cms-pb-block:last-child {
    margin-bottom: 0;
}
.cms-pb-block-placeholder {
    font-size: 0.8rem;
    color: #6c757d;
    padding: 0.25rem 0;
}
/* 富文本展示样式已移至 custom.css，供 .cms-block-rich-text、.article-content 等全局复用 */

/* 图标选择器：Bootstrap Icons 全量可搜索+分类，不撑破容器 */
.cms-icon-select-menu-bi {
    max-width: 100%;
    box-sizing: border-box;
}
.cms-icon-select-menu-bi .cms-icon-grid {
    display: grid;
    grid-template-columns: repeat(6, minmax(0, 1fr));
    gap: 0.25rem;
    min-width: 0;
}
.cms-icon-grid-cell {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    min-width: 0;
    aspect-ratio: 1;
    padding: 0.25rem !important;
    overflow: hidden;
}
.cms-icon-grid-cell i {
    font-size: 1.1rem;
}
.cms-icon-select-menu-bi .form-control-sm,
.cms-icon-select-menu-bi .form-select-sm {
    font-size: 0.8rem;
    max-width: 100%;
}

/* 产品列表区块 */
.cms-block-product-list {
    --cms-product-gap: 0.75rem;
}
.cms-product-list-bordered .card {
    border: 1px solid var(--bs-border-color, #dee2e6);
}
.cms-product-list-shadow .card {
    box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
}
.cms-product-list-shadow .card:hover {
    box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
}
.cms-product-list-horizontal .cms-product-list-items {
    display: flex;
    flex-direction: column;
    gap: var(--cms-product-gap, 1rem);
}
.cms-product-list-horizontal .cms-product-list-item-wrap {
    gap: var(--cms-product-gap, 1rem);
}
.cms-product-list-item-horizontal .card-body {
    flex-wrap: wrap;
}
.cms-product-list-item-horizontal .cms-product-img {
    max-height: 220px;
    object-fit: cover;
}

/* 产品列表 - 网格现代化卡片（与 /product 页一致） */
.cms-block-product-list .cms-pl-card {
    border: 1px solid var(--border-color, #dee2e6);
    border-radius: 10px;
    overflow: hidden;
    transition: transform 0.25s ease, box-shadow 0.25s ease;
    background: #fff;
}
.cms-block-product-list .cms-pl-card-bordered {
    border-width: 1px;
}
.cms-block-product-list .cms-pl-card-shadow {
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
}
.cms-block-product-list .cms-pl-card-link-wrap {
    position: relative;
    height: 100%;
    display: flex;
    flex-direction: column;
}
.cms-block-product-list .cms-pl-card-link {
    text-decoration: none;
    color: inherit;
    display: flex;
    flex-direction: column;
    flex: 1;
    min-height: 0;
    overflow: hidden;
}
.cms-block-product-list .cms-pl-card-link:hover {
    color: inherit;
}
.cms-block-product-list .cms-pl-card-image-wrap {
    position: relative;
    overflow: hidden;
    background: var(--light-bg, #f8f9fa);
    flex-shrink: 0;
}
.cms-block-product-list .cms-pl-card-category-badge {
    position: absolute;
    top: 0.5rem;
    left: 0.5rem;
    background: rgba(0, 0, 0, 0.5);
    color: #fff;
    font-size: 0.7rem;
    padding: 0.2rem 0.5rem;
    border-radius: 4px;
    text-decoration: none;
    z-index: 2;
}
.cms-block-product-list .cms-pl-card-category-badge:hover {
    color: #fff;
    background: rgba(0, 0, 0, 0.7);
}
.cms-block-product-list .cms-pl-card-status-badge {
    position: absolute;
    top: 0.5rem;
    right: 0.5rem;
    font-size: 0.7rem;
    padding: 0.2rem 0.5rem;
    border-radius: 4px;
    text-decoration: none;
    z-index: 2;
}
.cms-block-product-list .cms-pl-card-status-badge:hover {
    color: inherit;
    opacity: 0.9;
}
.cms-block-product-list .cms-pl-list-image-wrap {
    position: relative;
}
.cms-block-product-list .cms-pl-list-image-wrap .cms-pl-card-category-badge,
.cms-block-product-list .cms-pl-list-image-wrap .cms-pl-card-status-badge {
    position: absolute;
    top: 0.35rem;
    font-size: 0.65rem;
    padding: 0.15rem 0.4rem;
}
.cms-block-product-list .cms-pl-list-image-wrap .cms-pl-card-category-badge { left: 0.35rem; }
.cms-block-product-list .cms-pl-list-image-wrap .cms-pl-card-status-badge { right: 0.35rem; }
.cms-block-product-list .cms-pl-card-img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform 0.35s ease;
}
.cms-block-product-list .cms-pl-card:hover .cms-pl-card-img {
    transform: scale(1.05);
}
.cms-block-product-list .cms-pl-card-placeholder {
    width: 100%;
    height: 100%;
    min-height: 140px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: #adb5bd;
    font-size: 2.5rem;
}
.cms-block-product-list .cms-pl-card-body {
    padding: 1.25rem;
    flex: 1;
    display: flex;
    flex-direction: column;
    min-height: 0;
}
.cms-block-product-list .cms-pl-card-title {
    font-size: 1.05rem;
    font-weight: 600;
    color: var(--dark-text, #212529);
    margin-bottom: 0.35rem;
    line-height: 1.35;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.cms-block-product-list .cms-pl-card-price {
    margin-bottom: 0.5rem;
}
.cms-block-product-list .cms-pl-card-price-current {
    font-size: 1.1rem;
    font-weight: 700;
    color: var(--primary-color, #0d6efd);
}
.cms-block-product-list .cms-pl-card-price-original {
    font-size: 0.85rem;
    color: #6c757d;
    text-decoration: line-through;
    margin-left: 0.35rem;
}
.cms-block-product-list .cms-pl-card-desc {
    font-size: 0.85rem;
    color: var(--secondary-color, #6c757d);
    margin-bottom: 0.75rem;
    line-height: 1.45;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    flex: 1;
    min-height: 0;
}
.cms-block-product-list .cms-pl-card-cta {
    font-size: 0.9rem;
    font-weight: 500;
    color: var(--primary-color, #0d6efd);
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    transition: gap 0.2s ease;
    margin-top: auto;
}
.cms-block-product-list .cms-pl-card:hover .cms-pl-card-cta {
    gap: 0.5rem;
}
.cms-block-product-list .cms-pl-category {
    font-size: 0.8rem;
}
.cms-block-product-list .cms-pl-status {
    font-size: 0.7rem;
    font-weight: 500;
}
.cms-block-product-list .cms-pl-alias {
    font-size: 0.85rem;
}
.cms-block-product-list .cms-pl-tags {
    display: flex;
    flex-wrap: wrap;
    gap: 0.25rem;
}
.cms-block-product-list .cms-pl-tag {
    font-size: 0.7rem;
    font-weight: 500;
}
.cms-block-product-list .cms-pl-card-hover-shadow:hover {
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
}
.cms-block-product-list .cms-pl-card-hover-lift:hover {
    transform: translateY(-4px);
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
}

/* 产品列表 AJAX 翻页加载状态 */
.cms-block[data-block-type="product_list"].cms-product-list-loading {
    opacity: 0.7;
    pointer-events: none;
}

/* 列表布局下的卡片悬停（原有） */
.cms-block-product-list .cms-product-card-hover-shadow {
    transition: box-shadow 0.25s ease;
}
.cms-block-product-list .cms-product-card-hover-shadow:hover {
    box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
}
.cms-block-product-list .cms-product-card-hover-lift {
    transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.cms-block-product-list .cms-product-card-hover-lift:hover {
    transform: translateY(-4px);
    box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.12);
}

/* 职位列表区块 */
.cms-block-job-list-wrap .cms-job-list-empty {
    text-align: center;
    padding: 2.5rem 1rem;
    color: #6c757d;
}
.cms-block-job-list-wrap .cms-job-list-empty i {
    font-size: 3rem;
    display: block;
    margin-bottom: 0.75rem;
    opacity: 0.6;
}
.cms-block-job-list-wrap .cms-job-list-card {
    background: #f8f9fa;
    border: 1px solid #dee2e6;
    border-radius: 8px;
    padding: 1.25rem;
    transition: border-color 0.2s ease, box-shadow 0.2s ease;
    height: 100%;
}
.cms-block-job-list-wrap.cms-job-list-bordered .cms-job-list-card {
    border-width: 1px;
}
.cms-block-job-list-wrap.cms-job-list-shadow .cms-job-list-card {
    box-shadow: 0 1px 3px rgba(0,0,0,0.08);
}
.cms-block-job-list-wrap .cms-job-list-card:hover {
    border-color: #0d6efd;
    box-shadow: 0 4px 12px rgba(13, 110, 253, 0.15);
}
.cms-block-job-list-wrap.cms-job-list-hover-shadow .cms-job-list-card:hover {
    box-shadow: 0 6px 20px rgba(0,0,0,0.12);
}
.cms-block-job-list-wrap.cms-job-list-hover-lift .cms-job-list-card:hover {
    transform: translateY(-2px);
}
.cms-block-job-list-wrap .cms-job-list-card-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.5rem;
    margin-bottom: 0.75rem;
}
.cms-block-job-list-wrap .cms-job-list-position-name {
    font-size: 1.1rem;
    font-weight: 600;
    color: #333;
}
.cms-block-job-list-wrap .cms-job-list-salary {
    color: #0d6efd;
    font-weight: 600;
    font-size: 1rem;
}
.cms-block-job-list-wrap .cms-job-list-card-info {
    display: flex;
    flex-wrap: wrap;
    gap: 1rem;
    font-size: 0.9rem;
    color: #666;
    margin-bottom: 0.75rem;
}
.cms-block-job-list-wrap .cms-job-list-card-info span {
    display: inline-flex;
    align-items: center;
}
.cms-block-job-list-wrap .cms-job-list-card-info i {
    margin-right: 0.35rem;
    color: #0d6efd;
}
.cms-block-job-list-wrap .cms-job-list-card-actions {
    display: flex;
    gap: 0.5rem;
    flex-wrap: wrap;
    margin-top: 0.75rem;
}
.cms-block-job-list-wrap .cms-job-list-detail-label {
    font-weight: 600;
    color: #0d6efd;
    margin-bottom: 0.35rem;
    display: block;
}
.cms-block-job-list-wrap .cms-job-list-detail-value {
    color: #555;
    line-height: 1.6;
}
.cms-block-job-list-wrap .cms-job-list-detail-item {
    margin-bottom: 1rem;
}
/* 职位列表弹窗 */
body.cms-job-list-modal-open {
    overflow: hidden;
}
.cms-job-list-modal {
    position: fixed;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    z-index: 1060;
    overflow: auto;
    padding: 1.25rem;
    box-sizing: border-box;
}
.cms-job-list-modal-backdrop {
    position: fixed;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    background: rgba(0,0,0,0.5);
    z-index: 1061;
}
.cms-job-list-modal-content {
    position: relative;
    z-index: 1062;
    background: #fff;
    margin: 0 auto;
    max-width: 700px;
    max-height: calc(100vh - 2.5rem);
    border-radius: 8px;
    box-shadow: 0 10px 40px rgba(0,0,0,0.25);
    display: flex;
    flex-direction: column;
    overflow: hidden;
}
.cms-job-list-application-content {
    max-width: 800px;
}
.cms-job-list-modal-header {
    background: linear-gradient(135deg, #0d6efd 0%, #0a58ca 100%);
    color: #fff;
    padding: 1rem 1.5rem;
    padding-right: 3rem;
    border-radius: 8px 8px 0 0;
    flex-shrink: 0;
}
.cms-job-list-application-header {
    background: linear-gradient(135deg, #198754 0%, #146c43 100%);
}
.cms-job-list-modal-title {
    margin: 0;
    font-size: 1.25rem;
}
.cms-job-list-modal-close {
    position: absolute;
    top: 0.75rem;
    right: 1rem;
    font-size: 1.75rem;
    cursor: pointer;
    line-height: 1;
    width: 2rem;
    height: 2rem;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 4px;
}
.cms-job-list-modal-close:hover {
    background: rgba(255,255,255,0.15);
}
.cms-job-list-modal-body {
    padding: 1.5rem;
    overflow-y: auto;
    flex: 1;
    min-height: 0;
}
.cms-job-list-modal-footer {
    padding: 1rem 1.5rem;
    border-top: 1px solid #dee2e6;
    display: flex;
    justify-content: flex-end;
    gap: 0.5rem;
    flex-shrink: 0;
}

/* 媒体画廊：间距(上下左右一致)、悬停效果 */
.cms-block-media-gallery.cms-gallery-has-gap {
    margin-left: calc(-1 * var(--cms-gallery-gap, 8px) / 2);
    margin-right: calc(-1 * var(--cms-gallery-gap, 8px) / 2);
    margin-top: calc(-1 * var(--cms-gallery-gap, 8px) / 2);
    margin-bottom: calc(-1 * var(--cms-gallery-gap, 8px) / 2);
}
.cms-block-media-gallery.cms-gallery-has-gap > [class*="col-"] {
    padding-left: calc(var(--cms-gallery-gap, 8px) / 2);
    padding-right: calc(var(--cms-gallery-gap, 8px) / 2);
    padding-top: calc(var(--cms-gallery-gap, 8px) / 2);
    padding-bottom: calc(var(--cms-gallery-gap, 8px) / 2);
}
.cms-block-media-gallery .cms-gallery-ratio-wrap,
.cms-block-media-gallery > [class*="col-"] {
    overflow: hidden;
}
.cms-block-media-gallery.cms-gallery-hover-zoom a img,
.cms-block-media-gallery.cms-gallery-hover-darken a img {
    transition: transform 0.3s ease, filter 0.3s ease;
}
.cms-block-media-gallery.cms-gallery-hover-zoom a:hover img {
    transform: scale(1.06);
}
.cms-block-media-gallery.cms-gallery-hover-darken a:hover img {
    filter: brightness(0.82);
}

/* 懒加载：占位背景 + 图片加载完成后淡入 */
.cms-block-media-gallery .cms-gallery-lazy-wrap {
    background: linear-gradient(90deg, #f0f0f0 25%, #e8e8e8 50%, #f0f0f0 75%);
    background-size: 200% 100%;
    animation: cms-gallery-lazy-shimmer 1.2s ease-in-out infinite;
}
.cms-block-media-gallery .cms-gallery-img-lazy {
    opacity: 0;
    transition: opacity 0.4s ease;
}
.cms-block-media-gallery .cms-gallery-img-lazy.loaded {
    opacity: 1;
}
@keyframes cms-gallery-lazy-shimmer {
    0% { background-position: 200% 0; }
    100% { background-position: -200% 0; }
}

/* 媒体画廊分页：隐藏未当前页/未加载的项 */
.cms-block-media-gallery .cms-gallery-item-hidden {
    display: none !important;
}

/* 媒体轮播：固定比例容器，使不同尺寸/比例媒体统一展示框 */
.cms-block-media-carousel .carousel-item .cms-carousel-ratio-wrap {
    overflow: hidden;
    background: #f0f0f0;
}
.cms-block-media-carousel .carousel-item .cms-carousel-ratio-wrap img {
    display: block;
}
.cms-block-media-carousel .carousel-inner {
    overflow: hidden;
}
.cms-block-media-carousel .carousel-item {
    min-height: 0;
}

/* 媒体轮播：当前 slide 置于最上层，避免滑动过渡层遮挡视频控件 */
.cms-block-media-carousel .carousel-item {
    z-index: 1;
}
.cms-block-media-carousel .carousel-item.active {
    z-index: 2;
    position: relative;
}

/* 媒体轮播：左右小圆钮、底部默认长白条；仅鼠标移入轮播区域时显示 */
.cms-block-media-carousel .carousel-control-prev,
.cms-block-media-carousel .carousel-control-next,
.cms-block-media-carousel .carousel-indicators {
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.2s ease;
}
.cms-block-media-carousel:hover .carousel-control-prev,
.cms-block-media-carousel:hover .carousel-control-next,
.cms-block-media-carousel:hover .carousel-indicators {
    opacity: 1;
    pointer-events: auto;
}
.cms-block-media-carousel .carousel-control-prev,
.cms-block-media-carousel .carousel-control-next {
    z-index: 15;
    width: 44px;
    height: 44px;
    top: 50%;
    bottom: auto;
    transform: translateY(-50%);
    border-radius: 50%;
    background: rgba(0, 0, 0, 0.4);
    border: 0;
    margin: 0;
    padding: 0;
    transition: opacity 0.2s ease, background 0.2s ease;
}
.cms-block-media-carousel .carousel-control-prev {
    left: 12px;
    right: auto;
}
.cms-block-media-carousel .carousel-control-next {
    right: 12px;
    left: auto;
}
.cms-block-media-carousel .carousel-control-prev:hover,
.cms-block-media-carousel .carousel-control-next:hover {
    background: rgba(0, 0, 0, 0.55);
}
.cms-block-media-carousel .carousel-control-prev-icon,
.cms-block-media-carousel .carousel-control-next-icon {
    width: 1.25rem;
    height: 1.25rem;
}
/* 底部默认长白条，不半透明 */
.cms-block-media-carousel .carousel-indicators {
    z-index: 15;
}

/* 价格表：卡片样式与悬停 */
.cms-block-pricing.cms-pricing-bordered .cms-pricing-card {
    border: 1px solid rgba(0, 0, 0, 0.08);
}
.cms-block-pricing.cms-pricing-shadow .cms-pricing-card {
    box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
}
.cms-block-pricing .cms-card-hover-shadow {
    transition: box-shadow 0.25s ease;
}
.cms-block-pricing .cms-card-hover-shadow:hover {
    box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.12);
}
.cms-block-pricing .cms-card-hover-lift {
    transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.cms-block-pricing .cms-card-hover-lift:hover {
    transform: translateY(-4px);
    box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.1);
}
.cms-block-pricing .cms-pricing-highlight {
    border-width: 2px !important;
}

/* 文章列表：与产品列表一致的布局（网格用 row gutter，列表用 items gap） */
.cms-block-post-grid {
    --cms-post-list-gap: 0.75rem;
}
.cms-block-post-grid.cms-post-list-horizontal .cms-post-list-items {
    display: flex;
    flex-direction: column;
    gap: var(--cms-post-list-gap, 1rem);
}
.cms-block-post-grid.cms-post-list-horizontal .cms-post-list-item-wrap {
    gap: var(--cms-post-list-gap, 1rem);
}
.cms-block-post-grid.cms-post-list-horizontal .cms-post-list-item-horizontal .card-body {
    flex-wrap: wrap;
}
.cms-block-post-grid.cms-post-list-horizontal .cms-post-list-image-wrap {
    position: relative;
}
.cms-block-post-grid.cms-post-list-horizontal .cms-post-list-img {
    max-height: 220px;
    width: 160px;
    object-fit: cover;
    display: block;
}
.cms-block-post-grid.cms-post-list-horizontal .cms-post-list-image-wrap .ratio {
    width: 160px;
    min-height: 120px;
}
.cms-block-post-grid .cms-post-list-card-hover-shadow {
    transition: box-shadow 0.25s ease;
}
.cms-block-post-grid .cms-post-list-card-hover-shadow:hover {
    box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.12);
}
.cms-block-post-grid .cms-post-list-card-hover-lift {
    transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.cms-block-post-grid .cms-post-list-card-hover-lift:hover {
    transform: translateY(-4px);
    box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.1);
}

/* 文章列表网格：图片容器、悬停放大、无图占位（与产品列表一致）；卡片 overflow 裁剪圆角内 */
.cms-block-post-grid .cms-post-card {
    overflow: hidden;
}
.cms-block-post-grid .cms-post-card-link-wrap {
    position: relative;
    height: 100%;
    display: flex;
    flex-direction: column;
}
.cms-block-post-grid .cms-post-card-link {
    text-decoration: none;
    color: inherit;
}
.cms-block-post-grid .cms-post-card-link:hover {
    color: inherit;
}
/* 仅包图片的链接，不占满整卡，避免与 card-body 内其它 <a> 嵌套 */
.cms-block-post-grid .cms-post-card-link--img {
    display: block;
    flex: 0 0 auto;
}
.cms-block-post-grid .cms-post-card-image-wrap {
    position: relative;
    overflow: hidden;
    background: var(--light-bg, #f8f9fa);
    flex-shrink: 0;
}
.cms-block-post-grid .cms-post-card-img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform 0.35s ease;
}
.cms-block-post-grid .cms-post-card:hover .cms-post-card-img {
    transform: scale(1.05);
}
.cms-block-post-grid .cms-post-card-placeholder {
    width: 100%;
    height: 100%;
    min-height: 140px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: #adb5bd;
    font-size: 2.5rem;
}
.cms-block-post-grid .cms-post-card-body {
    padding: 1.25rem;
    flex: 1;
    display: flex;
    flex-direction: column;
    min-height: 0;
}
.cms-block-post-grid .cms-post-card-body .cms-post-card-cta {
    margin-top: auto;
}

/* 文章列表：分类、meta 行（作者/日期/浏览量/状态/编辑链接） */
.cms-block-post-grid .cms-post-category {
    font-size: 0.85rem;
    font-weight: 500;
    color: var(--cms-post-category-color, #dc3545);
    text-decoration: none;
}
.cms-block-post-grid .cms-post-category:hover {
    color: var(--cms-post-category-color, #dc3545);
    text-decoration: underline;
}
.cms-block-post-grid .cms-post-meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem 1rem;
    margin-bottom: 0.5rem;
}
.cms-block-post-grid .cms-post-meta-item {
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    color: inherit;
    text-decoration: none;
}
.cms-block-post-grid .cms-post-meta-item:hover {
    color: inherit;
}
.cms-block-post-grid .cms-post-meta .cms-post-status-tag {
    font-weight: 500;
}

/* 媒体画廊/媒体轮播：视频与 iframe 填满比例容器 */
.cms-gallery-video-wrap iframe,
.cms-gallery-video-wrap video,
.cms-carousel-video-wrap iframe,
.cms-carousel-video-wrap video {
    border: 0;
    object-fit: cover;
}
.cms-gallery-video-wrap video,
.cms-carousel-video-wrap video {
    display: block;
}

/* 视频播放器：竖屏宽高比（Bootstrap 仅提供 16:9 / 4:3 / 1:1） */
.ratio-9x16 { --bs-aspect-ratio: 177.78%; }
.ratio-3x4 { --bs-aspect-ratio: 133.33%; }
.ratio-2x3 { --bs-aspect-ratio: 150%; }

