/* Capabilities 归档页页头 —— token 型 widget，快照名 pages/capability-archive-header。
   HTML 结构抄 jcrapid.com /services/index.html 的真实页头区块（image-box：
   h1 标题 + 说明段落），去掉了 elementor-element-xxxxx 这类每次编辑随机生成的
   实例哈希类（同 header.css/footer.css 的既有约定，抄了不会更真实）。

   下面 .jiesheng-capability-archive-header 是我们自己加的外层排版类，
   跟 home-shared.css 的 .jiesheng-home-services 是同一个视觉规格
   （max-width 1200px 居中、内容区居中对齐），故意保持一致——两个页面
   的页头本来就是同一套 Elementor image-box 视觉语言。
   .elementor-widget-image-box 起下面这批真实 Elementor/Astra 规则由
   tools/extract-matching-css.py 从 ref/raw/jcrapid.com/wp-content/plugins/
   elementor(-pro)/assets/css/frontend.min.css + wp-content/uploads/elementor/
   css/post-4.css 抽取追加在本文件末尾，不在这里手写。 */

/* 🚩 2026-09-04 建 probe-map（capabilities-archive.json）实测才发现：这不是
   纯文字页头，jcrapid.com 真实页面这个容器（elementor-element-a0f7ed2）带
   `data-settings="{"background_background":"classic"}"`——是张带暗遮罩的
   全宽背景banner（padding-top:120px/padding-bottom:100px，overlay-opacity
   0.27，标题白色 72px），之前只抠了里面的 image-box 文字 widget，漏了外层
   这个背景容器，标题因此错渲染成黑字小号（44px）。背景图换成客户旧站
   cncpartschina.com 的真实工厂照（"One-Stop Precision Machining Service"，
   跟 Capabilities 主题贴合），不是照搬 jcrapid 自己的图（合规基线）。
   真实 padding/遮罩值跟 .e-con 覆盖坑同款，要放在文件末尾才生效，
   见文件末尾"页头 banner 背景/遮罩覆盖"。 */
.jiesheng-capability-archive-header { max-width: 100%; box-sizing: border-box; position: relative; overflow: hidden; background-size: cover; background-position: center; background-color: var(--text-strong); }
.jiesheng-capability-archive-header > .elementor-widget { position: relative; z-index: 1; }
.jiesheng-capability-archive-header .elementor-image-box-content { text-align: center; max-width: 640px; margin: 0 auto; }
.jiesheng-capability-archive-header .elementor-image-box-title { font-size: 72px; line-height: 1.2; color: #fff; margin: 0 0 20px; }
.jiesheng-capability-archive-header .elementor-image-box-description { color: #fff; margin: 0; }

/* --display 坑（SPEC §1）：这个页头是单 widget 容器，缺 display:flex 不影响
   视觉（浏览器默认 block 也能居中撑满），但补上跟 home-shared.css 的
   .e-flex 规则保持一致，避免以后往这个容器里加第二个子元素时才踩坑。 */
.e-flex { --display: flex; display: flex; flex-wrap: wrap; }

/* ── 卡片网格（capability-archive-grid widget，Pattern A：冻结 HTML 是 PHP
   字符串本身，没有配对的 .html 快照文件，靠这份 CSS 提供样式）——
   跟 home-shared.css 的 .jiesheng-home-services-grid/.jiesheng-service-card
   数值故意保持一致（同一套卡片视觉语言，见那边 2026-09-04 的实测值注释：
   卡片左对齐、图直角 3:2、标题 18px）。这份文件同时被
   capability-archive-header（token widget）和 capability-archive-grid
   （数据 widget）两个 widget 的 get_style_depends() 引用。 */
.jiesheng-capability-archive-grid {
	--display: grid;
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 28px;
	max-width: 1200px;
	padding: 0 24px 56px;
	box-sizing: border-box;
}
/* 🚩 2026-09-04：外层 wrap container 补了 content_width:full 之后才暴露的坑——
   这个 widget 自己硬编码的根 class 里带了真实 `e-con-full`（抄自 home-services.php），
   会命中 Elementor 真实 `.e-con{margin-inline-start:var(--margin-inline-start)}`
   全局规则（该变量默认兜底 0），跟上面这条单类选择器同优先级，源码顺序更靠后
   （真正生效的是 Elementor 自己的 assets/css/frontend.min.css，不是本文件里
   任何一份"自动抽取"复制品，跟 blog-shared.css 那次同一个坑）。之前外层容器
   本来就比 1200px 窄，两栏内容宽度反正是父容器给多少用多少，居中与否根本
   显不出来；父容器改成真宽满屏之后这个坑才露出来。用"加一个类名"的方式
   把选择器优先级提到两个类（0,2,0），跟单类的 `.e-con` 规则比谁的类多而不是
   比谁的顺序靠后，稳赢，不用依赖加载顺序。 */
.jiesheng-capability-archive-grid.e-con {
	margin-left: auto;
	margin-right: auto;
}

.jiesheng-capability-card { text-align: left; }
.jiesheng-capability-card img,
.jiesheng-capability-card .jiesheng-card-noimg {
	width: 100%;
	aspect-ratio: 3 / 2;
	object-fit: cover;
	border-radius: 0;
	display: block;
	background: #eef1f6;
}
.jiesheng-capability-card h5.elementor-heading-title { margin: 14px 0 0; font-size: 18px; line-height: 1.4; }
.jiesheng-capability-card h5.elementor-heading-title a { color: var(--text-strong); text-decoration: none; }
.jiesheng-capability-card h5.elementor-heading-title a:hover { color: var(--brand); }
.jiesheng-capability-card .elementor-widget-text-editor p { margin: 6px 0 0; font-size: 14px; color: var(--text); line-height: 1.6; }

@media (max-width: 900px) {
	.jiesheng-capability-archive-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 600px) {
	.jiesheng-capability-archive-grid { grid-template-columns: 1fr; }
}


/* === 自动抽取：参考站全局共享样式表（tools/extract-matching-css.py），按类名精确匹配抽取，minified 原文，未重新排版 === */
.elementor .elementor-widget:not(.elementor-widget-text-editor):not(.elementor-widget-theme-post-content) figure{margin:0}
.e-con-inner>.elementor-element.elementor-absolute,.e-con>.elementor-element.elementor-absolute,.elementor-widget-wrap>.elementor-element.elementor-absolute{position:absolute}
.e-con-inner>.elementor-element.elementor-fixed,.e-con>.elementor-element.elementor-fixed,.elementor-widget-wrap>.elementor-element.elementor-fixed{position:fixed}
.elementor-element:where(.e-con-full,.elementor-widget){align-content:var(--align-content);align-items:var(--align-items);flex-direction:var(--flex-direction);flex-wrap:var(--flex-wrap);gap:var(--row-gap) var(--column-gap);justify-content:var(--justify-content)}
.elementor-widget{position:relative}
.elementor-widget:not(:last-child){margin-block-end:var(--kit-widget-spacing,20px)}
.elementor-widget:not(:last-child).elementor-absolute,.elementor-widget:not(:last-child).elementor-widget__width-auto,.elementor-widget:not(:last-child).elementor-widget__width-initial{margin-block-end:0}
.e-con{--border-radius:0;--border-top-width:0px;--border-right-width:0px;--border-bottom-width:0px;--border-left-width:0px;--border-style:initial;--border-color:initial;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--content-width:min(100%,var(--container-max-width,1140px));--width:100%;--min-height:initial;--height:auto;--text-align:initial;--margin-top:0px;--margin-right:0px;--margin-bottom:0px;--margin-left:0px;--padding-top:var(--container-default-padding-top,10px);--padding-right:var(--container-default-padding-right,10px);--padding-bottom:var(--container-default-padding-bottom,10px);--padding-left:var(--container-default-padding-left,10px);--position:relative;--z-index:revert;--overflow:visible;--gap:var(--widgets-spacing,20px);--row-gap:var(--widgets-spacing-row,20px);--column-gap:var(--widgets-spacing-column,20px);--overlay-mix-blend-mode:initial;--overlay-opacity:1;--overlay-transition:0.3s;--e-con-grid-template-columns:repeat(3,1fr);--e-con-grid-template-rows:repeat(2,1fr);border-radius:var(--border-radius);height:var(--height);min-height:var(--min-height);min-width:0;overflow:var(--overflow);position:var(--position);width:var(--width);z-index:var(--z-index);--flex-wrap-mobile:wrap}
.e-con:where(:not(.e-div-block-base)){transition:background var(--background-transition,.3s),border var(--border-transition,.3s),box-shadow var(--border-transition,.3s),transform var(--e-con-transform-transition-duration,.4s)}
.e-con{--margin-block-start:var(--margin-top);--margin-block-end:var(--margin-bottom);--margin-inline-start:var(--margin-left);--margin-inline-end:var(--margin-right);--padding-inline-start:var(--padding-left);--padding-inline-end:var(--padding-right);--padding-block-start:var(--padding-top);--padding-block-end:var(--padding-bottom);--border-block-start-width:var(--border-top-width);--border-block-end-width:var(--border-bottom-width);--border-inline-start-width:var(--border-left-width);--border-inline-end-width:var(--border-right-width)}
body.rtl .e-con{--padding-inline-start:var(--padding-right);--padding-inline-end:var(--padding-left);--margin-inline-start:var(--margin-right);--margin-inline-end:var(--margin-left);--border-inline-start-width:var(--border-right-width);--border-inline-end-width:var(--border-left-width)}
.e-con{margin-block-end:var(--margin-block-end);margin-block-start:var(--margin-block-start);margin-inline-end:var(--margin-inline-end);margin-inline-start:var(--margin-inline-start);padding-inline-end:var(--padding-inline-end);padding-inline-start:var(--padding-inline-start)}
.e-con.e-flex{--flex-direction:column;--flex-basis:auto;--flex-grow:0;--flex-shrink:1;flex:var(--flex-grow) var(--flex-shrink) var(--flex-basis)}
.e-con-full,.e-con>.e-con-inner{padding-block-end:var(--padding-block-end);padding-block-start:var(--padding-block-start);text-align:var(--text-align)}
.e-con-full.e-flex,.e-con.e-flex>.e-con-inner{flex-direction:var(--flex-direction)}
.e-con,.e-con>.e-con-inner{display:var(--display)}
.e-con.e-grid{--grid-justify-content:start;--grid-align-content:start;--grid-auto-flow:row}
.e-con.e-grid,.e-con.e-grid>.e-con-inner{align-content:var(--grid-align-content);align-items:var(--align-items);grid-auto-flow:var(--grid-auto-flow);grid-template-columns:var(--e-con-grid-template-columns);grid-template-rows:var(--e-con-grid-template-rows);justify-content:var(--grid-justify-content);justify-items:var(--justify-items)}
.e-con-boxed.e-flex{align-content:normal;align-items:normal;flex-direction:column;flex-wrap:nowrap;justify-content:normal}
.e-con.e-flex>.e-con-inner{align-content:var(--align-content);align-items:var(--align-items);align-self:auto;flex-basis:auto;flex-grow:1;flex-shrink:1;flex-wrap:var(--flex-wrap);justify-content:var(--justify-content)}
.e-con.e-grid>.e-con-inner{align-items:var(--align-items);justify-items:var(--justify-items)}
.e-con>.e-con-inner{gap:var(--row-gap) var(--column-gap);height:100%;margin:0 auto;max-width:var(--content-width);padding-inline-end:0;padding-inline-start:0;width:100%}
:is(.elementor-section-wrap,[data-elementor-id])>.e-con{--margin-left:auto;--margin-right:auto;max-width:min(100%,var(--width))}
:is([data-widget_type="e-component.default"],[data-widget_type="e-component.default"]>.elementor-section-wrap)>.e-con{--margin-right:0px;--margin-left:0px}
.e-con .elementor-widget.elementor-widget{margin-block-end:0}
.e-con:before,.e-con>.elementor-background-slideshow:before,.e-con>.elementor-motion-effects-container>.elementor-motion-effects-layer:before,:is(.e-con,.e-con>.e-con-inner)>.elementor-background-video-container:before{border-block-end-width:var(--border-block-end-width);border-block-start-width:var(--border-block-start-width);border-color:var(--border-color);border-inline-end-width:var(--border-inline-end-width);border-inline-start-width:var(--border-inline-start-width);border-radius:var(--border-radius);border-style:var(--border-style);content:var(--background-overlay);display:block;height:max(100% + var(--border-top-width) + var(--border-bottom-width),100%);left:calc(0px - var(--border-left-width));mix-blend-mode:var(--overlay-mix-blend-mode);opacity:var(--overlay-opacity);position:absolute;top:calc(0px - var(--border-top-width));transition:var(--overlay-transition,.3s);width:max(100% + var(--border-left-width) + var(--border-right-width),100%)}
.e-con:before{transition:background var(--overlay-transition,.3s),border-radius var(--border-transition,.3s),opacity var(--overlay-transition,.3s)}
.e-con>.elementor-background-slideshow,:is(.e-con,.e-con>.e-con-inner)>.elementor-background-video-container{border-block-end-width:var(--border-block-end-width);border-block-start-width:var(--border-block-start-width);border-color:var(--border-color);border-inline-end-width:var(--border-inline-end-width);border-inline-start-width:var(--border-inline-start-width);border-radius:var(--border-radius);border-style:var(--border-style);height:max(100% + var(--border-top-width) + var(--border-bottom-width),100%);left:calc(0px - var(--border-left-width));top:calc(0px - var(--border-top-width));width:max(100% + var(--border-left-width) + var(--border-right-width),100%)}
@media (max-width:767px) {
:is(.e-con,.e-con>.e-con-inner)>.elementor-background-video-container.elementor-hidden-mobile{display:none}
}
:is(.e-con,.e-con>.e-con-inner)>.elementor-background-video-container:before{z-index:1}
:is(.e-con,.e-con>.e-con-inner)>.elementor-background-slideshow:before{z-index:2}
.e-con .elementor-widget{min-width:0}
.e-con .elementor-widget-empty,.e-con .elementor-widget-google_maps,.e-con .elementor-widget-video,.e-con .elementor-widget.e-widget-swiper{width:100%}
.e-con>.e-con-inner>.elementor-widget>.elementor-widget-container,.e-con>.elementor-widget>.elementor-widget-container{height:100%}
.e-con.e-con>.e-con-inner>.elementor-widget,.elementor.elementor .e-con>.elementor-widget{max-width:100%}
.e-con .elementor-widget:not(:last-child){--kit-widget-spacing:0px}
@media (max-width:767px) {
.e-con.e-flex{--width:100%;--flex-wrap:var(--flex-wrap-mobile)}
.e-con.e-flex .elementor-widget-archive-posts{width:100%}
}
.elementor-element:where(:not(.e-con)):where(:not(.e-div-block-base)) .elementor-widget-container,.elementor-element:where(:not(.e-con)):where(:not(.e-div-block-base)):not(:has(.elementor-widget-container)){transition:background .3s,border .3s,border-radius .3s,box-shadow .3s,transform var(--e-transform-transition-duration,.4s)}
.e-transform .elementor-widget-container,.e-transform:not(:has(.elementor-widget-container)){transform:perspective(var(--e-transform-perspective,0)) rotate(var(--e-transform-rotateZ,0)) rotateX(var(--e-transform-rotateX,0)) rotateY(var(--e-transform-rotateY,0)) translate(var(--e-transform-translate,0)) translateX(var(--e-transform-translateX,0)) translateY(var(--e-transform-translateY,0)) scaleX(calc(var(--e-transform-flipX, 1) * var(--e-transform-scaleX, var(--e-transform-scale, 1)))) scaleY(calc(var(--e-transform-flipY, 1) * var(--e-transform-scaleY, var(--e-transform-scale, 1)))) skewX(var(--e-transform-skewX,0)) skewY(var(--e-transform-skewY,0));transform-origin:var(--e-transform-origin-y) var(--e-transform-origin-x)}
.e-con.e-transform{transform:perspective(var(--e-con-transform-perspective,0)) rotate(var(--e-con-transform-rotateZ,0)) rotateX(var(--e-con-transform-rotateX,0)) rotateY(var(--e-con-transform-rotateY,0)) translate(var(--e-con-transform-translate,0)) translateX(var(--e-con-transform-translateX,0)) translateY(var(--e-con-transform-translateY,0)) scaleX(calc(var(--e-con-transform-flipX, 1) * var(--e-con-transform-scaleX, var(--e-con-transform-scale, 1)))) scaleY(calc(var(--e-con-transform-flipY, 1) * var(--e-con-transform-scaleY, var(--e-con-transform-scale, 1)))) skewX(var(--e-con-transform-skewX,0)) skewY(var(--e-con-transform-skewY,0));transform-origin:var(--e-con-transform-origin-y) var(--e-con-transform-origin-x)}
.elementor-editor-active .elementor.elementor-edit-mode .elementor-widget.elementor-global-widget:hover{outline:1px solid #fec449}
.elementor-edit-area-active .elementor-widget-woocommerce-menu-cart.elementor-widget.elementor-loading.elementor-menu-cart--shown{opacity:1}
.elementor-edit-area-active .elementor-widget-woocommerce-menu-cart.elementor-widget.elementor-loading.elementor-menu-cart--shown .elementor-menu-cart__container{z-index:9999}
.elementor-widget-price-table .elementor-widget-container{overflow:hidden;background-color:#f7f7f7}
.elementor-widget-flip-box.elementor-flip-box--flipped .elementor-widget-container .elementor-flip-box__front{display:none}
.elementor-widget-flip-box.elementor-flip-box--flipped .elementor-widget-container .elementor-flip-box__back{-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}
.elementor-cta,.elementor-widget-call-to-action .elementor-widget-container{overflow:hidden}
.elementor-widget-share-buttons.elementor-grid-0 .elementor-widget-container{font-size:0}
.elementor-widget-hotspot .elementor-widget-container{position:relative;display:inline-block;width:var(--container-width);max-width:var(--container-max-width);height:var(--container-height)}
.elementor-widget-hotspot .elementor-widget-container>img{display:block;width:var(--image-width,auto);height:var(--container-height);opacity:var(--opacity,1)}
.elementor-widget-nav-menu .elementor-widget-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}
.elementor-widget-table-of-contents .elementor-widget-container{min-height:var(--box-min-height);border:var(--box-border-width,1px) solid var(--box-border-color,#a4afb7);border-radius:var(--box-border-radius,3px);background-color:var(--box-background-color);-webkit-transition:min-height .4s;-o-transition:min-height .4s;transition:min-height .4s;overflow:hidden}
.e-con{--container-max-width:1400px;--container-default-padding-top:0px;--container-default-padding-right:0px;--container-default-padding-bottom:0px;--container-default-padding-left:0px;}
.elementor-widget:not(:last-child){margin-block-end:0px;}
@media(max-width:1024px) {
.e-con{--container-max-width:1024px;}
}
@media(max-width:767px) {
.e-con{--container-max-width:767px;}
}

/* ── 页头 banner 背景/遮罩覆盖 ──
   同 home-shared.css「hero 遮罩覆盖」/「Services/Testimonials/News 容器左右
   padding 覆盖」同一个坑：上面 .e-con{--container-default-padding-*:0px} /
   .e-con-full{padding-block-*:...} 这些真实抽取的规则跟本文件早前
   .jiesheng-capability-archive-header 的 padding 同优先级（都是单类选择器），
   源码顺序更靠后的赢，必须放在这里才生效。padding-top:120px/
   padding-bottom:100px、overlay-opacity:0.27 是 probe.py 实测 jcrapid.com
   /services/index.html 真实值（capabilities-archive.json 的“容器”采样点），
   遮罩色沿用 home-hero 已经调过的 rgba(8,8,8,.7)（同一批客户工厂照片色调，
   没有理由用不同的遮罩深度）。 */
.jiesheng-capability-archive-header {
	padding-top: 120px;
	padding-bottom: 100px;
	padding-left: 24px;
	padding-right: 24px;
}
.jiesheng-capability-archive-header:before {
	content: "";
	position: absolute;
	inset: 0;
	background: rgba(8, 8, 8, 0.7);
}

/* .jiesheng-capability-archive-grid 左右 padding 覆盖，跟上面同一个坑
   （这个网格容器也带 e-con-full/e-con class）。
   参考站 jcrapid.com services/index.html 实测：卡片网格外层容器（f63087a）
   padding-top:100px / padding-bottom:100px，之前只覆盖了左右，漏了上下。 */
.jiesheng-capability-archive-grid {
	padding-top: 100px;
	padding-bottom: 100px;
	padding-left: 40px;
	padding-right: 40px;
}

/* 图片 hover 放大动效——参考站通过 Elementor 按需加载
   wp-content/plugins/elementor/assets/lib/animations/styles/e-animation-grow.min.css
   注入这两条规则。快照冻结方案不走 Elementor 的按需加载机制，手动补到这里。 */
.elementor-animation-grow { transition-duration: .3s; transition-property: transform; }
.elementor-animation-grow:hover,
.elementor-animation-grow:focus,
.elementor-animation-grow:active { transform: scale(1.1); }
