/*
 * prose.css
 * ----------------------------------------------------------------------
 * Shared "prose" rules for multi-line description blocks across the site.
 *
 * Design contract (see docs/需求修改/客户反馈修改需求翻译与实施方案_08112026.md §1):
 *   - §1.1 文字两端对齐 — ONLY opt-in classes; never global `p`.
 *   - §1.3 描述段上下留白 — 提供 --prose-block-space token,不强制覆盖页面已设置的 margin。
 *
 * 不要做的事:
 *   - 不强制重置 .section-intro / .lead 等已存在的页面级间距;
 *   - 不在 <h1>..<h6> / button / 数字上 justify;
 *   - 不在 prefers-reduced-motion 下破坏节奏。
 *
 * Loading order:
 *   Enqueued after per-page CSS so these rules win on specificity ties.
 * ----------------------------------------------------------------------
 */

/* ----- 1. 两端对齐公共类（仅描述类容器 opt-in） ------------------------ */

.prose,
.copy-block {
  text-align: justify;
  text-justify: inter-ideograph;
  text-align-last: left;
  -webkit-text-justify: inter-ideograph;
}

.prose > p,
.copy-block > p {
  text-align: inherit;
  text-justify: inherit;
  text-align-last: inherit;
}

/* ----- 2. 上下留白 token（页面需要时手动挂 .prose 即可） ------------- */

.prose,
.copy-block {
  --prose-block-space: 24px;
}

.prose > p + p,
.copy-block > p + p {
  margin-top: calc(var(--prose-block-space) * 0.5);
}

/* ----- 3. 产品详情页：已有的描述类容器,opt-in 挂两端对齐 --------------- */
/* 只补两端对齐,不重置页面已有的 max-width / margin / text-align。       */

.stack-copy p,
.product-capabilities__content > p:not(.product-capabilities__eyebrow),
.product-copy p,
.about-text,
.news-head p,
.featured-news p,
.blog-page .box-item .right p {
  text-align: justify;
  text-justify: inter-ideograph;
  text-align-last: left;
  -webkit-text-justify: inter-ideograph;
  /* 试运行补丁（2026-08-12 优势卡截图反馈后升级）：
   * - hyphens: auto       — 让浏览器在不可分割的英文长词处自动插入连字符；
   * - word-spacing: -0.05em — 让浏览器"撑宽空格"没那么激进，轻微推向"先换行"；
   * - overflow-wrap: break-word — 当一整段都装不下时（如 `single-sided`、`PCBs` 这种
   *                          不可分割的复合词/缩写），允许浏览器在词内换行；
   * - hyphenate-limit-chars: 6 3 3 — 保护短词与数字不被强制切。
   * 注意：title / button / number 仍然受 §4 安全护栏保护。
   * 验收证据：docs/需求修改/验收记录/单面板优势卡片-justify-单词间距过大_20260812.png
   * 上传后由跟单同事在浏览器硬刷（Ctrl+Shift+R）确认视觉差异。 */
  hyphens: auto;
  -webkit-hyphens: auto;
  word-spacing: -0.05em;
  overflow-wrap: break-word;
  word-wrap: break-word;
  hyphenate-limit-chars: 6 3 3;
}

/* v5 — narrow advantage cards use left alignment (2026-08-12).
 * justify in 4-column English cards causes excessive word-spacing;
 * customer accepted left-align over strict justify on this component. */
.advantage-card p,
.hf-advantage-card p {
  text-align: left;
  text-justify: auto;
  hyphens: none;
  -webkit-hyphens: none;
  word-spacing: normal;
}

/* Left-aligned impedance advantage copy: hyphenate long English words at line breaks. */
.impedance-page .ic-advantages__grid p {
  text-align: start;
  text-justify: auto;
  word-spacing: normal;
  hyphens: auto;
  -webkit-hyphens: auto;
  overflow-wrap: break-word;
  word-wrap: break-word;
  hyphenate-limit-chars: 6 3 3;
}

/* PCB 详情页共用下半页 (template-parts/product-detail-common.php)
 * 与 page-pcb-variant.php / page-product.php 上半页。
 * 覆盖 customer-feedback §3 共用需求 + §3.2 第9行 FAQ 描述段。
 * 注意：方案 §3.2 写的 `.faq-item__answer` 在模板里不存在，
 * FAQ 答案实际是 `.faq-item` 内层裸 `<p>`，已修正。 */
.product-dfm__description,
.dfm-list p,
.solution-item__body p,
.quality-copy p,
.quality-note,
.cert-copy p,
.applications-hero p,
.faq-item p,
.section-lead,
.product-hero__copy {
  text-align: justify;
  text-justify: inter-ideograph;
  text-align-last: left;
  -webkit-text-justify: inter-ideograph;
  /* 试运行补丁（2026-08-12 升级）：
   * 同 §3 段说明：hyphens: auto + word-spacing 收紧 + overflow-wrap 允许断词。
   * 验收证据同 §3。 */
  hyphens: auto;
  -webkit-hyphens: auto;
  word-spacing: -0.05em;
  overflow-wrap: break-word;
  word-wrap: break-word;
  hyphenate-limit-chars: 6 3 3;
}

/* SMT / DIP 详情页 (inc/template-assemblies.php)。
 * 覆盖 customer-feedback §4.1 共用描述段。 */
.smt-section .lead,
.smt-section .smt-richtext,
.smt-section .centered-copy,
.smt-section .challenges-lede {
  text-align: justify;
  text-justify: inter-ideograph;
  text-align-last: left;
  -webkit-text-justify: inter-ideograph;
}

/* capability-cta 为居中 CTA 带,正文保持居中,不被上一段 justify 覆盖。 */
.smt-section.capability-cta .smt-richtext,
.smt-section.capability-cta .smt-richtext > p {
  text-align: center;
  text-align-last: center;
  text-justify: auto;
  -webkit-text-justify: auto;
}

/* challenges-section 导语与主标题同为居中排版。 */
.smt-section.challenges-section .challenges-lede {
  text-align: center;
  text-align-last: center;
  text-justify: auto;
  -webkit-text-justify: auto;
}

/* faq-intro 区块居中,不被 justify 覆盖。 */
.smt-section.faq-section .faq-intro .smt-richtext,
.smt-section.faq-section .faq-intro .smt-richtext > p {
  text-align: center;
  text-align-last: center;
  text-justify: auto;
  -webkit-text-justify: auto;
}

/* About 首页 / 荣誉页 / 可持续发展页 (page-about*.php)。
 * 覆盖 customer-feedback §5.1 / §5.2 / §5.3 共用描述段。
 * 只对多行正文 opt-in,标题 / 按钮 / swiper-slide 内的 h4 不动。 */
.page-about .partner-section p,
.page-about .about-story p,
.page-about .history-section > p,
.page-about .history-section > div:not(.history-head) p,
.page-about .history-slide-inner p,
.page-about .team-section p,
.page-about .hero-copy p,
.page-about-sustainable .intro-section__text p,
.page-about-sustainable .impact-card p,
.page-about-sustainable .low-carbon-section__text p,
.page-about-sustainable .people-panel p,
.page-about-sustainable .governance-section__text p,
.about-page .banner-box p,
.about-page .swiper-other-wrap p,
.about-page .about-six .text p,
.about-page .about-seven .left p {
  text-align: justify;
  text-justify: inter-ideograph;
  text-align-last: left;
  -webkit-text-justify: inter-ideograph;
}

/* Industries 首页 + 6 个 application 内页 (page-application*.php)。
 * 覆盖 customer-feedback §6.1 / §6.2 / §6.3 共用描述段。
 * page-application-consumer-electronics.php 单独覆盖 .insight-copy p 在 page-application-consumer-electronics.css,
 * 这里只补 page-application.css 公共作用域。 */
/* .application-page .hero-section p, */
.application-page .capability-intro__copy p,
.application-page .capability-intro__lead p,
.application-page .capability-card__body p,
.application-page .application-item__description,
.application-page .application-section p,
.edge-banner__copy p,
.edge-story p,
.insight-copy p:not(.eyebrow) {
  text-align: justify;
  text-justify: inter-ideograph;
  text-align-last: left;
  -webkit-text-justify: inter-ideograph;
}

/* 客户 1009 追加（/industries/ 反馈「没有居中」）：
   上面的 `.application-page .application-section p` 作用域过宽 —— ACF 富文本字段
   app_sectors_heading 输出的是 <h2 class="section-heading"><p>…</p></h2>，
   该 <p> 一并被两端对齐（justify + text-align-last:left），于是首行被拉伸铺满整行、
   看起来完全不像居中（实测 1440 首行墨迹 50..1390 = 满宽；h2 自带的
   text-align:center 只是被 <p> 的直接声明压过）。此处把标题内的段落排除，
   恢复继承 h2 的居中；标题下的描述段落仍按上面的规则两端对齐。
   特异性 (0,3,1) > (0,2,1)，因此在 ≤ 各断点内同样生效。 */
.application-page .application-section .section-heading,
.application-page .application-section .section-heading p {
  text-align: center;
  text-align-last: center;
  text-justify: auto;
}

/* §6.2 第2 条 — application 内页正文容器拉宽到 960px (从 840px);
 * 段落字号从 20px 降到 16px (从 clamp(1.125rem, 1.042vw, 1.25rem))。 */
.insight-copy p:not(.eyebrow),
.insight-copy > div,
.insight-copy p + p {
  max-width: 960px;
  font-size: 16px;
  line-height: 1.6;
}

/* Factory Tour & Process 页 (page-capabilities-factory-tour-process.php)。
 * 覆盖 customer-feedback §7 共用描述段。
 * 导语 / 副标题 / 结语性质元素（.section-kicker / .intro-lead / .testing-subtitle /
 * .closing-copy）不属于"共用描述段"，由 page-capabilities-factory-tour-process.css
 * 在各自容器内显式声明对齐，避免把两层 CSS 嵌套成互相覆盖的屎山。 */
.capabilities-page .intro-section p:not(.section-kicker):not(.testing-subtitle),
.capabilities-page .intro-section .intro-lead,
.capabilities-page .qc-section p,
.capabilities-page .testing-section p:not(.testing-subtitle),
.capabilities-page .compliance-section p,
.capabilities-page .trace-intro-section p,
.capabilities-page .trace-accordion-section p,
.capabilities-page .packaging-section p,
.capabilities-page .qc-card p,
.capabilities-page .trace-panel-body p,
.capabilities-page .tier-card p {
  text-align: justify;
  text-justify: inter-ideograph;
  text-align-last: left;
  -webkit-text-justify: inter-ideograph;
}

/* Quality Assurance & Packaging 页 (page-capabilities-manufacturing-capabilities-pcb/pcba.php)。
 * 覆盖 customer-feedback §8.2 共用描述段。 */
.pcba-page .engineering-notes .note-card p,
.pcba-page .engineering-notes__content p {
  text-align: justify;
  text-justify: inter-ideograph;
  text-align-last: left;
  -webkit-text-justify: inter-ideograph;
}

/* Support 系列 (page-support-pcb-manufacturing.php / pcba.php / faq.php)。
 * 覆盖 customer-feedback §9.1 / §9.2 / §9.3 共用描述段。 */
.oem-intro__copy p,
.capabilities__aside p,
.quality-item p,
.workflow-card p:not(.workflow-card__number),
.support-feature p,
.support-faq-page__faq-answer p,
.support-faq-page__promise-copy p,
.support-faq-page__promise-copy div {
  text-align: justify;
  text-justify: inter-ideograph;
  text-align-last: left;
  -webkit-text-justify: inter-ideograph;
}

/* Contact 页 (page-contact.php)。
 * 覆盖 customer-feedback §10 共用描述段。
 * 注意: .intro-section p 不在此处, 由 SMT 页 (inc/template-assemblies.php)
 * 自己的 .smt-section .lead / .smt-richtext 规则统一处理两端对齐+末行左对齐,
 * 否则会因选择器特异性 (.intro-section p > .smt-section .lead) 错误覆盖。 */
.contact-hero p,
.prompt-container p,
.response-card__body p,
.response-card__body span,
.info-content p {
  text-align: justify;
  text-justify: inter-ideograph;
  text-align-last: left;
  -webkit-text-justify: inter-ideograph;
}

/* 664f4d5（2026-08-27）用注释排除 .value-card p / .value-statement 时，
 * 把本选择器组的声明块一起注释掉了，导致 Contact 段落退化成继承值
 * （浏览器 CSS 解析器实测：与 §4 标题护栏合并成一条 `text-align: inherit`）。
 * 这里恢复本组自身声明，同时保持 .value-card p / .value-statement 停用。
 * 注意：下面两行注释不得再吞掉上面的 `{ ... }`。 */
/* .value-card p, */
/* .value-statement {
  text-align: justify;
  text-justify: inter-ideograph;
  text-align-last: center;
  -webkit-text-justify: inter-ideograph;
} */

/* 博客文章详情正文 (single.php → .article-copy → the_content())。
 * 客户反馈 §1.1「正文段落两端对齐」同样覆盖博客正文；.article-subtitle 属单行说明，显式排除。
 * 段落由 wpautop 从纯文本生成；运营粘贴的自带 <style> 包装（.sunhope-pcba-article）
 * 只声明字号/间距、不声明对齐，故本组 (0,2,1) 生效且与之不冲突。
 *
 * ⚠ `:not([style*="text-align"])` 守卫（2026-10-10 事故复盘，勿删）：
 *   text-align-last 作用于"最后一行"，单行段落的那一行就是最后一行。运营在编辑器里
 *   给段落选居中/右对齐后，inline 的 text-align 会生效，但主题的 text-align-last: left
 *   会把这一行拉回左边（实测：短段落居中后 computed=center，行墨迹仍 0..232 贴左）。
 *   因此显式对齐过的段落完全交给运营的 inline 样式，主题只负责"默认段落"的两端对齐。 */
.news-detail-page .article-copy p:not(.article-subtitle):not([style*="text-align"]) {
  text-align: justify;
  text-justify: inter-ideograph;
  text-align-last: left;
  -webkit-text-justify: inter-ideograph;
  hyphens: auto;
  -webkit-hyphens: auto;
  word-spacing: -0.05em;
  overflow-wrap: break-word;
  word-wrap: break-word;
  hyphenate-limit-chars: 6 3 3;
}

/* 运营显式点过"两端对齐"的段落：只补"末行不拉伸"，其余交给 inline 样式。
 * inline 写法兼容有无空格两种（TinyMCE 输出 "text-align: justify;"）。 */
.news-detail-page .article-copy p[style*="text-align: justify"],
.news-detail-page .article-copy p[style*="text-align:justify"] {
  text-justify: inter-ideograph;
  text-align-last: left;
  -webkit-text-justify: inter-ideograph;
}

/* 副标题：默认左对齐，且不声明 text-align-last（单行元素声明 last 会吃掉运营的显式对齐）。 */
.news-detail-page .article-copy .article-subtitle:not([style*="text-align"]) {
  text-align: left;
  text-justify: auto;
  word-spacing: normal;
}

/* ----- 4. 安全护栏 ----------------------------------------------------- */
/* 标题、按钮、数字、单行永远不 justify;在 .prose 内也保护。            */

.prose h1, .prose h2, .prose h3, .prose h4, .prose h5, .prose h6,
.copy-block h1, .copy-block h2, .copy-block h3, .copy-block h4, .copy-block h5, .copy-block h6 {
  text-align: inherit;
}

.prose button, .copy-block button,
.prose .button, .copy-block .button,
.prose [class*="btn-"], .copy-block [class*="btn-"],
.prose [class*="-btn"], .copy-block [class*="-btn"],
/* .prose .product-action, .copy-block .product-action,
.prose .product-action--solid, .copy-block .product-action--solid,
.prose .product-action--outline, .copy-block .product-action--outline,
.prose .product-action--chat, .copy-block .product-action--chat, */
.prose .faq-question, .copy-block .faq-question,
.prose .stat, .copy-block .stat,
.prose .stat-number, .copy-block .stat-number,
.prose .counter, .copy-block .counter,
.prose .metric, .copy-block .metric,
.no-justify {
  text-align: left !important;
  text-align: start !important;
}

/* ----- 5. 响应式 ------------------------------------------------------- */

@media (max-width: 768px) {
  /* 移动端窄列下不再 justify,避免中文间距过宽 */
  .prose,
  .copy-block,
  .stack-copy p,
  .advantage-card p,
  .product-copy p,
  .about-text,
  .news-head p,
  .featured-news p,
  .blog-page .box-item .right p,
  .product-dfm__description,
  .dfm-list p,
  .solution-item__body p,
  .quality-copy p,
  .quality-note,
  .cert-copy p,
  .applications-hero p,
  .faq-item p,
  .section-lead,
  .product-hero__copy,
  .smt-section .lead,
  .smt-section .smt-richtext,
  .smt-section .centered-copy,
  .smt-section .challenges-lede,
  .page-about .partner-section p,
  .page-about .about-story p,
  .page-about .history-section p,
  .page-about .history-slide-inner p,
  .page-about .team-section p,
  .page-about .hero-copy p,
  .page-about-sustainable .intro-section__text p,
  .page-about-sustainable .impact-card p,
  .page-about-sustainable .low-carbon-section__text p,
  .page-about-sustainable .people-panel p,
  .page-about-sustainable .governance-section__text p,
  .about-page .banner-box p,
  .about-page .honors-wall-hero p,
  .about-page .swiper-other-wrap p,
  .about-page .about-six .text p,
  .about-page .about-seven .left p,
  /* .application-page .hero-section p, */
  .application-page .capability-intro__copy p,
  .application-page .capability-intro__lead p,
  .application-page .capability-card__body p,
  .application-page .application-item__description,
  .application-page .application-section p,
  .edge-banner__copy p,
  .edge-story p,
  .insight-copy p:not(.eyebrow),
  .insight-copy > div,
  .insight-copy p + p,
  .capabilities-page .intro-section p:not(.section-kicker):not(.testing-subtitle),
  .capabilities-page .intro-section .intro-lead,
  .capabilities-page .qc-section p,
  .capabilities-page .testing-section p:not(.testing-subtitle),
  .capabilities-page .compliance-section p,
  .capabilities-page .trace-intro-section p,
  .capabilities-page .trace-accordion-section p,
  .capabilities-page .packaging-section p,
  .capabilities-page .qc-card p,
  .capabilities-page .trace-panel-body p,
  .capabilities-page .tier-card p,
  .pcba-page .engineering-notes .note-card p,
  .pcba-page .engineering-notes__content p,
  .oem-intro__copy p,
  .capabilities__aside p,
  .quality-item p,
  .workflow-card p:not(.workflow-card__number),
  .support-feature p,
  .support-faq-page__faq-answer p,
  .support-faq-page__promise-copy p,
  .support-faq-page__promise-copy div,
  .contact-hero p,
  .prompt-container p,
  .response-card__body p,
  .response-card__body span,
  .info-content p,
  .news-detail-page .article-copy p:not(.article-subtitle):not([style*="text-align"]) {
    text-align: left;
    text-justify: auto;
  }

  /* 同上（桌面段）：.value-card p / .value-statement 保持停用，
   * 但注释不得再吞掉上面这组「移动端取消 justify」的声明块。 */
  /* .value-card p, */
  /* .value-statement {
    text-align: left;
    text-justify: auto;
  } */

  .smt-section.capability-cta .smt-richtext,
  .smt-section.capability-cta .smt-richtext > p {
    text-align: center;
    text-align-last: center;
  }

  .smt-section.challenges-section .challenges-lede {
    text-align: center;
    text-align-last: center;
  }

  .smt-section.faq-section .faq-intro .smt-richtext,
  .smt-section.faq-section .faq-intro .smt-richtext > p {
    text-align: center;
    text-align-last: center;
  }
}

/* ----- 6. 减少动效 ----------------------------------------------------- */

@media (prefers-reduced-motion: reduce) {
  .prose,
  .copy-block {
    transition: none;
  }
}