/*
 * CJK 排版精修 —— 参照 ~/Library/CloudStorage/Dropbox/工具设置/Claude/Base/
 * templates/html/CJK-TYPOGRAPHY.md
 *
 * 仅在 <html lang="zh-*" | "ja" | "ko"> 时激活。:where(:lang(...)) 保持零
 * 特异性,组件层可直接覆盖,无需 !important。i18n.ts 已经把 locale 切到
 * documentElement.lang,这套规则自动跟随。
 *
 * 字重策略(项目约定,偏离上游 spec):
 *   - Body Sans(Orbit Gothic CJK)保持 font-weight 400 —— Sans 在 400 不存在
 *     过细问题。上游 spec 把 body 提到 500 是针对 Noto Serif CJK 屏幕显示偏细
 *     的特定问题,本项目 body 走 Sans,不适用。
 *   - .serif opt-in 类显式拉到 500 —— Noto Serif CJK 在 400 屏幕上确实偏细,
 *     这是 Serif 路径独有的修正,留给将来 hero / marketing 长段落使用。
 *   - mono / code 锁 400,且 opt-out 所有 CJK 处理(autospace / trim / justify
 *     都关掉),保 byte 对齐与 URL / token 可读性。
 */

/* ===== CJK lang root:挂行 / 换行 =====
   中西间隙、标点挤压、原生 text-autospace 关闭均由聚珍（juzhen.css 的 .juzhen
   normalize + JS pass）接管，此处不再设 text-spacing-trim / text-autospace，
   以免与聚珍托管挤压双重作用。仅保留两条段落级、与聚珍原子透明兼容的规则。 */
:where(:lang(zh), :lang(ja), :lang(ko))
{
    /* 闭合标点在行尾溢出挂起,首字符开口标点挂在左边界,改善光学齐边 */
    hanging-punctuation: first allow-end;

    /* JIS X 4051 / clreq §3.1.2 禁则浏览器原生兜底（聚珍 jinze 为主） */
    line-break:          strict;
}

/* ===== 长英文段断词 ===== 聚珍（Juzhen）longWord pass 把 [A-Za-z]{6,} 包进
   <span lang="en">,这里给浏览器一个原生英文断词字典 + 渲染连字符。
   连字符仅由 CSS 渲染、不在 DOM,选取 / 复制返回原文无污染。原先 CJK
   lang root 的 overflow-wrap: anywhere 已被本规则替代:不再硬斩单词,
   也保留连字符提示。hyphenate-character 显式 ASCII "-" 避免 serif 字
   型把 U+2010 画成全角(本项目 body 走 Sans 暂不踩此坑,但与上游模板
   规范一致)。 */
[lang|="en"]
{
    -webkit-hyphens:       auto;
    hyphens:               auto;
    hyphenate-character:   "-";
    hyphenate-limit-chars: 6 3 3;   /* 词长 / 断点前 / 断点后最少字符 */
}

/* ===== 默认两端对齐:多行块容器(段落 / 列表项 / 引用 / 单元格 / 说明)
   ===== text-align-last: left 让段末与单行不被拉伸,只有真正的中间行受益。 */
:where(:lang(zh), :lang(ja), :lang(ko))
    :is(p, li, blockquote, td, dd, summary, figcaption, caption,
        .justify, .justify *)
{
    text-align:      justify;
    text-align-last: left;
}

/* ===== 显式 opt-out:容器及其子树都不走 justify ===== */
:where(:lang(zh), :lang(ja), :lang(ko)) :is(.no-justify, .no-justify *)
{
    text-align:      start;
    text-justify:    auto;
    text-align-last: auto;
}

/* ===== 显式对齐工具类 =====
   .text-left / .text-center / .text-right 覆盖默认 justify + 传播到后代;
   主要用例:<th> / <td> / <caption> 的数值列右对齐 / 居中。
   规格 (0,1,0) 自身 + (0,1,0) 后代,压过默认规则 (0,0,1);
   text-justify / text-align-last 显式 auto,清掉残留 inter-character 拉伸。 */
.text-left,   .text-left   * { text-align: left;   text-justify: auto; text-align-last: auto; }
.text-center, .text-center * { text-align: center; text-justify: auto; text-align-last: auto; }
.text-right,  .text-right  * { text-align: right;  text-justify: auto; text-align-last: auto; }

/* ===== Mono opt-out:byte 对齐,关掉所有 CJK 处理 ===== */
code, kbd, pre, samp,
.mono, .mono *
{
    font-weight:       400;
    text-autospace:    no-autospace;
    text-spacing-trim: space-all;
    text-align:        start;
    text-justify:      auto;
    text-align-last:   auto;
}

/* ===== Serif opt-in:Noto Serif CJK 在 400 屏幕偏细,锁定 500(Medium) ===== */
.serif
{
    font-family: var(--font-serif);
    font-weight: 500;
}
