Skill: yhlorra/yh-minimax-docx (version 1.0.0)

--- name: minimax-docx license: MIT metadata: version: "1.0.0" category: document-processing author: MiniMaxAI sources: - "ECMA-376 Office Open XML File Formats" - "GB/T 9704-2012 Layout Standard for Official Documents" - "IEEE / ACM / APA / MLA / Chicago / Turabian Style Guides" - "Springer LNCS / Nature / HBR Document Templates" description: > Professional DOCX document creation, editing, and formatting using OpenXML SDK (.NET). Three pipelines: (A) create new documents from scratch, (B) fill/edit content in existing documents, (C) apply template formatting with XSD validation gate-check. MUST use this skill whenever the user wants to produce, modify, or format a Word document — including when they say "write a report", "draft a proposal", "make a contract", "fill in this form", "reformat to match this template", or any task whose final output is a .docx file. Even if the user doesn't mention "docx" explicitly, if the task implies a printable/formal document, use this skill. triggers: - Word - docx - document - 文档 - Word文档 - 报告 - 合同 - 公文 - 排版 - 套模板 --- # minimax-docx Create, edit, and format DOCX documents via CLI tools or direct C# scripts built on OpenXML SDK (.NET). ## Setup **First time:** `bash scripts/setup.sh` (or `powershell scripts/setup.ps1` on Windows, `--minimal` to skip optional deps). **First operation in session:** `scripts/env_check.sh` — do not proceed if `NOT READY`. (Skip on subsequent operations within the same session.) ## Quick Start: Direct C# Path When the task requires structural document manipulation (custom styles, complex tables, multi-section layouts, headers/footers, TOC, images), write C# directly instead of wrestling with CLI limitations. Use this scaffold: ```csharp // File: scripts/dotnet/task.csx (or a new .cs in a Console project) // dotnet run --project scripts/dotnet/MiniMaxAIDocx.Cli -- run-script task.csx #r "nuget: DocumentFormat.OpenXml, 3.2.0" using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing; using var doc = WordprocessingDocument.Create("output.docx", WordprocessingDocumentType.Document); var mainPart = doc.AddMainDocumentPart(); mainPart.Document = new Document(new Body()); // --- Your logic here --- // Read the relevant Samples/*.cs file FIRST for tested patterns. // See Samples/ table in References section below. ``` **Before writing any C#, read the relevant `Samples/*.cs` file** — they contain compilable, SDK-version-verified patterns. The Samples table in the References section below maps topics to files. ## CLI shorthand All CLI commands below use `$CLI` as shorthand for: ```bash dotnet run --project scripts/dotnet/MiniMaxAIDocx.Cli -- ``` ## Pipeline routing Route by checking: does the user have an input .docx file? ``` User task ├─ No input file → Pipeline A: CREATE │ signals: "write", "create", "draft", "generate", "new", "make a report/proposal/memo" │ → Read references/scenario_a_create.md │ └─ Has input .docx ├─ Replace/fill/modify content → Pipeline B: FILL-EDIT │ signals: "fill in", "replace", "update", "change text", "add section", "edit" │ → Read references/scenario_b_edit_content.md │ └─ Reformat/apply style/template → Pipeline C: FORMAT-APPLY signals: "reformat", "apply template", "restyle", "match this format", "套模板", "排版" ├─ Template is pure style (no content) → C-1: OVERLAY (apply styles to source) └─ Template has structure (cover/TOC/example sections) → C-2: BASE-REPLACE (use template as base, replace example content with user content) → Read references/scenario_c_apply_template.md ``` If the request spans multiple pipelines, run them sequentially (e.g., Create then Format-Apply). ## Pre-processing Convert `.doc` → `.docx` if needed: `scripts/doc_to_docx.sh input.doc output_dir/` Preview before editing (avoids reading raw XML): `scripts/docx_preview.sh document.docx` Analyze structure for editing scenarios: `$CLI analyze --input document.docx` ## Scenario A: Create Read `references/scenario_a_create.md`, `references/typography_guide.md`, and `references/design_principles.md` first. Pick an aesthetic recipe from `Samples/AestheticRecipeSamples.cs` that matches the document type — do not invent formatting values. For CJK, also read `references/cjk_typography.md`. **Choose your path:** - **Simple** (plain text, minimal formatting): use CLI — `$CLI create --type report --output out.docx --config content.json` - **Structural** (custom styles, multi-section, TOC, images, complex tables): write C# directly. Read the relevant `Samples/*.cs` first. CLI options: `--type` (report|letter|memo|academic), `--title`, `--author`, `--page-size` (letter|a4|legal|a3), `--margins` (standard|narrow|wide), `--header`, `--footer`, `--page-numbers`, `--toc`, `--content-json`. Then run the **validation pipeline** (below). ## Scenario B: Edit / Fill Read `references/scenario_b_edit_content.md` first. Preview → analyze → edit → validate. **Choose your path:** - **Simple** (text replacement, placeholder fill): use CLI subcommands. - **Structural** (add/reorganize sections, modify styles, manipulate tables, insert images): write C# directly. Read `references/openxml_element_order.md` and the relevant `Samples/*.cs`. Available CLI edit subcommands: - `replace-text --find "X" --replace "Y"` - `fill-placeholders --data '{"key":"value"}'` - `fill-table --data table.json` - `insert-section`, `remove-section`, `update-header-footer` ```bash $CLI edit replace-text --input in.docx --output out.docx --find "OLD" --replace "NEW" $CLI edit fill-placeholders --input in.docx --output out.docx --data '{"name":"John"}' ``` Then run the **validation pipeline**. Also run diff to verify minimal changes: ```bash $CLI diff --before in.docx --after out.docx ``` ## Scenario C: Apply Template Read `references/scenario_c_apply_template.md` first. Preview and analyze both source and template. ```bash $CLI apply-template --input source.docx --template template.docx --output out.docx ``` For complex template operations (multi-template merge, per-section headers/footers, style merging), write C# directly — see Critical Rules below for required patterns. Run the **validation pipeline**, then the **hard gate-check**: ```bash $CLI validate --input out.docx --gate-check assets/xsd/business-rules.xsd ``` Gate-check is a **hard requirement**. Do NOT deliver until it passes. If it fails: diagnose, fix, re-run. Also diff to verify content preservation: `$CLI diff --before source.docx --after out.docx` ## Validation pipeline Run after every write operation. For Scenario C the full pipeline is **mandatory**; for A/B it is **recommended** (skip only if the operation was trivially simple). ```bash $CLI merge-runs --input doc.docx # 1. consolidate runs $CLI validate --input doc.docx --xsd assets/xsd/wml-subset.xsd # 2. XSD structure $CLI validate --input doc.docx --business # 3. business rules ``` If XSD fails, auto-repair and retry: ```bash $CLI fix-order --input doc.docx $CLI validate --input doc.docx --xsd assets/xsd/wml-subset.xsd ``` If XSD still fails, fall back to business rules + preview: ```bash $CLI validate --input doc.docx --business scripts/docx_preview.sh doc.docx # Verify: font contamination=0, table count correct, drawing count correct, sectPr count correct ``` Final preview: `scripts/docx_preview.sh doc.docx` ## Critical rules These prevent file corruption — OpenXML is strict about element ordering. **Element order** (properties always first): | Parent | Order | |--------|-------| | `w:p` | `pPr` → runs | | `w:r` | `rPr` → `t`/`br`/`tab` | | `w:tbl`| `tblPr` → `tblGrid` → `tr` | | `w:tr` | `trPr` → `tc` | | `w:tc` | `tcPr` → `p` (min 1 `<w:p/>`) | | `w:body` | block content → `sectPr` (LAST child) | **Direct format contamination:** When copying content from a source document, inline `rPr` (fonts, color) and `pPr` (borders, shading, spacing) override template styles. Always strip direct formatting — keep only `pStyle` reference and `t` text. Clean tables too (including `pPr/rPr` inside cells). **Track changes:** `<w:del>` uses `<w:delText>`, never `<w:t>`. `<w:ins>` uses `<w:t>`, never `<w:delText>`. **Font size:** `w:sz` = points × 2 (12pt → `sz="24"`). Margins/spacing in DXA (1 inch = 1440, 1cm ≈ 567). **Heading styles MUST have OutlineLevel:** When defining heading styles (Heading1, ThesisH1, etc.), always include `new OutlineLevel { Val = N }` in `StyleParagraphProperties` (H1→0, H2→1, H3→2). Without this, Word sees them as plain styled text — TOC and navigation pane won't work. **Multi-template merge:** When given multiple template files (font, heading, breaks), read `references/scenario_c_apply_template.md` section "Multi-Template Merge" FIRST. Key rules: - Merge styles from all templates into one styles.xml. Structure (sections/breaks) comes from the breaks template. - Each content paragraph must appear exactly ONCE — never duplicate when inserting section breaks. - NEVER insert empty/blank paragraphs as padding or section separators. Output paragraph count must equal input. Use section break properties (`w:sectPr` inside `w:pPr`) and style spacing (`w:spacing` before/after) for visual separation. - Insert oddPage section breaks before EVERY chapter heading, not just the first. Even if a chapter has dual-column content, it MUST start with oddPage; use a second continuous break after the heading for column switching. - Dual-column chapters need THREE section breaks: (1) oddPage in preceding para's pPr, (2) continuous+cols=2 in the chapter HEADING's pPr, (3) continuous+cols=1 in the last body para's pPr to revert. - Copy `titlePg` settings from the breaks template for EACH section. Abstract and TOC sections typically need `titlePg=true`. **Multi-section headers/footers:** Templates with 10+ sections (e.g., Chinese thesis) have DIFFERENT headers/footers per section (Roman vs Arabic page numbers, different header text per zone). Rules: - Use C-2 Base-Replace: copy the TEMPLATE as output base, then replace body content. This preserves all sections, headers, footers, and titlePg settings automatically. - NEVER recreate headers/footers from scratch — copy template header/footer XML byte-for-byte. - NEVER add formatting (borders, alignment, font size) not present in the template header XML. - Non-cover sections MUST have header/footer XML files (at least empty header + page number footer). - See `references/scenario_c_apply_template.md` section "Multi-Section Header/Footer Transfer". ## References Load as needed — don't load all at once. Pick the most relevant files for the task. **The C# samples and design references below are the project's knowledge base ("encyclopedia").** When writing OpenXML code, ALWAYS read the relevant sample file first — it contains compilable, SDK-version-verified patterns that prevent common errors. When making aesthetic decisions, read the design principles and recipe files — they encode tested, harmonious parameter sets from authoritative sources (IEEE, ACM, APA, Nature, etc.), not guesses. ### Scenario guides (read first for each pipeline) | File | When | |------|------| | `references/scenario_a_create.md` | Pipeline A: creating from scratch | | `references/scenario_b_edit_content.md` | Pipeline B: editing existing content | | `references/scenario_c_apply_template.md` | Pipeline C: applying template formatting | ### C# code samples (compilable, heavily commented — read when writing code) | File | Topic | |------|-------| | `Samples/DocumentCreationSamples.cs` | Document lifecycle: create, open, save, streams, doc defaults, settings, properties, page setup, multi-section | | `Samples/StyleSystemSamples.cs` | Styles: Normal/Heading chain, character/table/list styles, DocDefaults, latentStyles, CJK 公文, APA 7th, import, resolve inheritance | | `Samples/CharacterFormattingSamples.cs` | RunProperties: fonts, size, bold/italic, all underlines, color, highlight, strike, sub/super, caps, spacing, shading, border, emphasis marks | | `Samples/ParagraphFormattingSamples.cs` | ParagraphProperties: justification, indentation, line/paragraph spacing, keep/widow, outline level, borders, tabs, numbering, bidi, frame | | `Samples/TableSamples.cs` | Tables: borders, grid, cell props, margins, row height, header repeat, merge (H+V), nested, floating, three-line 三线表, zebra striping | | `Samples/HeaderFooterSamples.cs` | Headers/footers: page numbers, "Page X of Y", first/even/odd, logo image, table layout, 公文 "-X-", per-section | | `Samples/ImageSamples.cs` | Images: inline, floating, text wrapping, border, alt text, in header/table, replace, SVG fallback, dimension calc | | `Samples/ListAndNumberingSamples.cs` | Numbering: bullets, multi-level decimal, custom symbols, outline→headings, legal, Chinese 一/（一）/1./(1), restart/continue | | `Samples/FieldAndTocSamples.cs` | Fields: TOC, SimpleField vs complex field, DATE/PAGE/REF/SEQ/MERGEFIELD/IF/STYLEREF, TOC styles | | `Samples/FootnoteAndCommentSamples.cs` | Footnotes, endnotes, comments (4-file system), bookmarks, hyperlinks (internal + external) | | `Samples/TrackChangesSamples.cs` | Revisions: insertions (w:t), deletions (w:delText!), formatting changes, accept/reject all, move tracking | | `Samples/AestheticRecipeSamples.cs` | 13 aesthetic recipes from authoritative sources: ModernCorporate, AcademicThesis, ExecutiveBrief, ChineseGovernment (GB/T 9704), MinimalModern, IEEE Conference, ACM sigconf, APA 7th, MLA 9th, Chicago/Turabian, Springer LNCS, Nature, HBR — each with exact values from official style guides | Note: `Samples/` path is relative to `scripts/dotnet/MiniMaxAIDocx.Core/`. ### Markdown references (read when you need specifications or design rules) | File | When | |------|------| | `references/openxml_element_order.md` | XML element ordering rules (prevents corruption) | | `references/openxml_units.md` | Unit conversion: DXA, EMU, half-points, eighth-points | | `references/openxml_encyclopedia_part1.md` | Detailed C# encyclopedia: document creation, styles, character & paragraph formatting | | `references/openxml_encyclopedia_part2.md` | Detailed C# encyclopedia: page setup, tables, headers/footers, sections, doc properties | | `references/openxml_encyclopedia_part3.md` | Detailed C# encyclopedia: TOC, footnotes, fields, track changes, comments, images, math, numbering, protection | | `references/typography_guide.md` | Font pairing, sizes, spacing, page layout, table design, color schemes | | `references/cjk_typography.md` | CJK fonts, 字号 sizes, RunFonts mapping, GB/T 9704 公文 standard | | `references/cjk_university_template_guide.md` | Chinese university thesis templates: numeric styleIds (1/2/3 vs Heading1), document zone structure (cover→abstract→TOC→body→references), font expectations, common mistakes | | `references/design_principles.md` | **Aesthetic foundations**: 6 design principles (white space, contrast/scale, proximity, alignment, repetition, hierarchy) — teaches WHY, not just WHAT | | `references/design_good_bad_examples.md` | **Good vs Bad comparisons**: 10 categories of typography mistakes with OpenXML values, ASCII mockups, and fixes | | `references/track_changes_guide.md` | Revision marks deep dive | | `references/troubleshooting.md` | **Symptom-driven fixes**: 13 common problems indexed by what you SEE (headings wrong, images missing, TOC broken, etc.) — search by symptom, find the fix |

path: assets/styles/academic_styles.xml
content: <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:styles xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
          xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
          xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">

  <!-- Document Defaults -->
  <w:docDefaults>
    <w:rPrDefault>
      <w:rPr>
        <w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:eastAsia="SimSun" w:cs="Times New Roman" />
        <w:sz w:val="24" />
        <w:szCs w:val="24" />
        <w:lang w:val="en-US" w:eastAsia="zh-CN" w:bidi="ar-SA" />
      </w:rPr>
    </w:rPrDefault>
    <w:pPrDefault>
      <w:pPr>
        <w:spacing w:after="0" w:line="480" w:lineRule="auto" />
      </w:pPr>
    </w:pPrDefault>
  </w:docDefaults>

  <w:latentStyles w:defLockedState="0" w:defUIPriority="99" w:defSemiHidden="0" w:defUnhideWhenUsed="0" w:defQFormat="0" w:count="376" />

  <!-- Normal — Times New Roman 12pt, double spaced, first line indent -->
  <w:style w:type="paragraph" w:default="1" w:styleId="Normal">
    <w:name w:val="Normal" />
    <w:qFormat />
    <w:pPr>
      <w:spacing w:after="0" w:line="480" w:lineRule="auto" />
      <w:ind w:firstLine="720" />
    </w:pPr>
    <w:rPr>
      <w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" />
      <w:sz w:val="24" />
      <w:szCs w:val="24" />
    </w:rPr>
  </w:style>

  <!-- Default Paragraph Font -->
  <w:style w:type="character" w:default="1" w:styleId="DefaultParagraphFont">
    <w:name w:val="Default Paragraph Font" />
    <w:uiPriority w:val="1" />
    <w:semiHidden />
    <w:unhideWhenUsed />
  </w:style>

  <!-- Heading 1 — Bold, 14pt, no color, no indent -->
  <w:style w:type="paragraph" w:styleId="Heading1">
    <w:name w:val="heading 1" />
    <w:basedOn w:val="Normal" />
    <w:next w:val="Normal" />
    <w:qFormat />
    <w:uiPriority w:val="9" />
    <w:pPr>
      <w:keepNext />
      <w:keepLines />
      <w:spacing w:before="480" w:after="240" w:line="480" w:lineRule="auto" />
      <w:ind w:firstLine="0" />
      <w:jc w:val="center" />
      <w:outlineLvl w:val="0" />
    </w:pPr>
    <w:rPr>
      <w:b />
      <w:sz w:val="28" />
      <w:szCs w:val="28" />
    </w:rPr>
  </w:style>

  <!-- Heading 2 — Bold, 13pt -->
  <w:style w:type="paragraph" w:styleId="Heading2">
    <w:name w:val="heading 2" />
    <w:basedOn w:val="Normal" />
    <w:next w:val="Normal" />
    <w:qFormat />
    <w:uiPriority w:val="9" />
    <w:pPr>
      <w:keepNext />
      <w:keepLines />
      <w:spacing w:before="360" w:after="120" w:line="480" w:lineRule="auto" />
      <w:ind w:firstLine="0" />
      <w:outlineLvl w:val="1" />
    </w:pPr>
    <w:rPr>
      <w:b />
      <w:sz w:val="26" />
      <w:szCs w:val="26" />
    </w:rPr>
  </w:style>

  <!-- Heading 3 — Bold, 12pt -->
  <w:style w:type="paragraph" w:styleId="Heading3">
    <w:name w:val="heading 3" />
    <w:basedOn w:val="Normal" />
    <w:next w:val="Normal" />
    <w:qFormat />
    <w:uiPriority w:val="9" />
    <w:pPr>
      <w:keepNext />
      <w:keepLines />
      <w:spacing w:before="240" w:after="80" w:line="480" w:lineRule="auto" />
      <w:ind w:firstLine="0" />
      <w:outlineLvl w:val="2" />
    </w:pPr>
    <w:rPr>
      <w:b />
      <w:sz w:val="24" />
      <w:szCs w:val="24" />
    </w:rPr>
  </w:style>

  <!-- Title — Centered, bold, 14pt (academic title page) -->
  <w:style w:type="paragraph" w:styleId="Title">
    <w:name w:val="Title" />
    <w:basedOn w:val="Normal" />
    <w:next w:val="Normal" />
    <w:qFormat />
    <w:uiPriority w:val="10" />
    <w:pPr>
      <w:spacing w:after="480" w:line="480" w:lineRule="auto" />
      <w:ind w:firstLine="0" />
      <w:jc w:val="center" />
    </w:pPr>
    <w:rPr>
      <w:b />
      <w:sz w:val="28" />
      <w:szCs w:val="28" />
    </w:rPr>
  </w:style>

  <!-- Subtitle -->
  <w:style w:type="paragraph" w:styleId="Subtitle">
    <w:name w:val="Subtitle" />
    <w:basedOn w:val="Normal" />
    <w:next w:val="Normal" />
    <w:qFormat />
    <w:uiPriority w:val="11" />
    <w:pPr>
      <w:spacing w:after="240" w:line="480" w:lineRule="auto" />
      <w:ind w:firstLine="0" />
      <w:jc w:val="center" />
    </w:pPr>
    <w:rPr>
      <w:sz w:val="24" />
      <w:szCs w:val="24" />
    </w:rPr>
  </w:style>

  <!-- Quote — Block quote, indented 0.5 inch on both sides -->
  <w:style w:type="paragraph" w:styleId="Quote">
    <w:name w:val="Quote" />
    <w:basedOn w:val="Normal" />
    <w:next w:val="Normal" />
    <w:qFormat />
    <w:uiPriority w:val="29" />
    <w:pPr>
      <w:spacing w:before="240" w:after="240" w:line="480" w:lineRule="auto" />
      <w:ind w:left="720" w:right="720" w:firstLine="0" />
    </w:pPr>
  </w:style>

  <!-- Table Normal -->
  <w:style w:type="table" w:default="1" w:styleId="TableNormal">
    <w:name w:val="Normal Table" />
    <w:uiPriority w:val="99" />
    <w:semiHidden />
    <w:unhideWhenUsed />
    <w:tblPr>
      <w:tblInd w:w="0" w:type="dxa" />
      <w:tblCellMar>
        <w:top w:w="0" w:type="dxa" />
        <w:left w:w="108" w:type="dxa" />
        <w:bottom w:w="0" w:type="dxa" />
        <w:right w:w="108" w:type="dxa" />
      </w:tblCellMar>
    </w:tblPr>
  </w:style>

  <!-- Table Grid — Simple borders, no color -->
  <w:style w:type="table" w:styleId="TableGrid">
    <w:name w:val="Table Grid" />
    <w:basedOn w:val="TableNormal" />
    <w:uiPriority w:val="39" />
    <w:tblPr>
      <w:tblBorders>
        <w:top w:val="single" w:sz="4" w:space="0" w:color="auto" />
        <w:left w:val="single" w:sz="4" w:space="0" w:color="auto" />
        <w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto" />
        <w:right w:val="single" w:sz="4" w:space="0" w:color="auto" />
        <w:insideH w:val="single" w:sz="4" w:space="0" w:color="auto" />
        <w:insideV w:val="single" w:sz="4" w:space="0" w:color="auto" />
      </w:tblBorders>
    </w:tblPr>
  </w:style>

  <!-- Header -->
  <w:style w:type="paragraph" w:styleId="Header">
    <w:name w:val="header" />
    <w:basedOn w:val="Normal" />
    <w:uiPriority w:val="99" />
    <w:semiHidden />
    <w:unhideWhenUsed />
    <w:pPr>
      <w:tabs>
        <w:tab w:val="center" w:pos="4680" />
        <w:tab w:val="right" w:pos="9360" />
      </w:tabs>
      <w:spacing w:after="0" w:line="240" w:lineRule="auto" />
      <w:ind w:firstLine="0" />
    </w:pPr>
    <w:rPr>
      <w:sz w:val="24" />
      <w:szCs w:val="24" />
    </w:rPr>
  </w:style>

  <!-- Footer -->
  <w:style w:type="paragraph" w:styleId="Footer">
    <w:name w:val="footer" />
    <w:basedOn w:val="Normal" />
    <w:uiPriority w:val="99" />
    <w:semiHidden />
    <w:unhideWhenUsed />
    <w:pPr>
      <w:tabs>
        <w:tab w:val="center" w:pos="4680" />
        <w:tab w:val="right" w:pos="9360" />
      </w:tabs>
      <w:spacing w:after="0" w:line="240" w:lineRule="auto" />
      <w:ind w:firstLine="0" />
      <w:jc w:val="center" />
    </w:pPr>
    <w:rPr>
      <w:sz w:val="24" />
      <w:szCs w:val="24" />
    </w:rPr>
  </w:style>

  <!-- Hyperlink -->
  <w:style w:type="character" w:styleId="Hyperlink">
    <w:name w:val="Hyperlink" />
    <w:uiPriority w:val="99" />
    <w:unhideWhenUsed />
    <w:rPr>
      <w:color w:val="0563C1" />
      <w:u w:val="single" />
    </w:rPr>
  </w:style>

</w:styles>


path: assets/styles/corporate_styles.xml
content: <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:styles xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
          xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
          xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">

  <!-- Document Defaults -->
  <w:docDefaults>
    <w:rPrDefault>
      <w:rPr>
        <w:rFonts w:ascii="Calibri" w:hAnsi="Calibri" w:eastAsia="Microsoft YaHei" w:cs="Arial" />
        <w:color w:val="333333" />
        <w:sz w:val="22" />
        <w:szCs w:val="22" />
        <w:lang w:val="en-US" w:eastAsia="zh-CN" w:bidi="ar-SA" />
      </w:rPr>
    </w:rPrDefault>
    <w:pPrDefault>
      <w:pPr>
        <w:spacing w:after="160" w:line="259" w:lineRule="auto" />
      </w:pPr>
    </w:pPrDefault>
  </w:docDefaults>

  <w:latentStyles w:defLockedState="0" w:defUIPriority="99" w:defSemiHidden="0" w:defUnhideWhenUsed="0" w:defQFormat="0" w:count="376" />

  <!-- Normal -->
  <w:style w:type="paragraph" w:default="1" w:styleId="Normal">
    <w:name w:val="Normal" />
    <w:qFormat />
    <w:pPr>
      <w:spacing w:after="160" w:line="240" w:lineRule="auto" />
    </w:pPr>
    <w:rPr>
      <w:rFonts w:ascii="Calibri" w:hAnsi="Calibri" />
      <w:color w:val="333333" />
      <w:sz w:val="22" />
      <w:szCs w:val="22" />
    </w:rPr>
  </w:style>

  <!-- Default Paragraph Font -->
  <w:style w:type="character" w:default="1" w:styleId="DefaultParagraphFont">
    <w:name w:val="Default Paragraph Font" />
    <w:uiPriority w:val="1" />
    <w:semiHidden />
    <w:unhideWhenUsed />
  </w:style>

  <!-- Heading 1 — Dark Blue -->
  <w:style w:type="paragraph" w:styleId="Heading1">
    <w:name w:val="heading 1" />
    <w:basedOn w:val="Normal" />
    <w:next w:val="Normal" />
    <w:qFormat />
    <w:uiPriority w:val="9" />
    <w:pPr>
      <w:keepNext />
      <w:keepLines />
      <w:spacing w:before="480" w:after="240" w:line="240" w:lineRule="auto" />
      <w:outlineLvl w:val="0" />
    </w:pPr>
    <w:rPr>
      <w:rFonts w:ascii="Calibri Light" w:hAnsi="Calibri Light" />
      <w:b />
      <w:color w:val="1F3864" />
      <w:sz w:val="56" />
      <w:szCs w:val="56" />
    </w:rPr>
  </w:style>

  <!-- Heading 2 -->
  <w:style w:type="paragraph" w:styleId="Heading2">
    <w:name w:val="heading 2" />
    <w:basedOn w:val="Normal" />
    <w:next w:val="Normal" />
    <w:qFormat />
    <w:uiPriority w:val="9" />
    <w:pPr>
      <w:keepNext />
      <w:keepLines />
      <w:spacing w:before="360" w:after="120" w:line="240" w:lineRule="auto" />
      <w:outlineLvl w:val="1" />
    </w:pPr>
    <w:rPr>
      <w:rFonts w:ascii="Calibri Light" w:hAnsi="Calibri Light" />
      <w:b />
      <w:color w:val="1F3864" />
      <w:sz w:val="48" />
      <w:szCs w:val="48" />
    </w:rPr>
  </w:style>

  <!-- Heading 3 -->
  <w:style w:type="paragraph" w:styleId="Heading3">
    <w:name w:val="heading 3" />
    <w:basedOn w:val="Normal" />
    <w:next w:val="Normal" />
    <w:qFormat />
    <w:uiPriority w:val="9" />
    <w:pPr>
      <w:keepNext />
      <w:keepLines />
      <w:spacing w:before="240" w:after="80" w:line="240" w:lineRule="auto" />
      <w:outlineLvl w:val="2" />
    </w:pPr>
    <w:rPr>
      <w:rFonts w:ascii="Calibri Light" w:hAnsi="Calibri Light" />
      <w:b />
      <w:color w:val="1F3864" />
      <w:sz w:val="36" />
      <w:szCs w:val="36" />
    </w:rPr>
  </w:style>

  <!-- Heading 4 -->
  <w:style w:type="paragraph" w:styleId="Heading4">
    <w:name w:val="heading 4" />
    <w:basedOn w:val="Normal" />
    <w:next w:val="Normal" />
    <w:qFormat />
    <w:uiPriority w:val="9" />
    <w:pPr>
      <w:keepNext />
      <w:keepLines />
      <w:spacing w:before="160" w:after="80" w:line="240" w:lineRule="auto" />
      <w:outlineLvl w:val="3" />
    </w:pPr>
    <w:rPr>
      <w:rFonts w:ascii="Calibri Light" w:hAnsi="Calibri Light" />
      <w:b />
      <w:i />
      <w:color w:val="1F3864" />
      <w:sz w:val="28" />
      <w:szCs w:val="28" />
    </w:rPr>
  </w:style>

  <!-- Title -->
  <w:style w:type="paragraph" w:styleId="Title">
    <w:name w:val="Title" />
    <w:basedOn w:val="Normal" />
    <w:next w:val="Normal" />
    <w:qFormat />
    <w:uiPriority w:val="10" />
    <w:pPr>
      <w:spacing w:after="240" w:line="240" w:lineRule="auto" />
      <w:jc w:val="center" />
    </w:pPr>
    <w:rPr>
      <w:rFonts w:ascii="Calibri Light" w:hAnsi="Calibri Light" />
      <w:color w:val="1F3864" />
      <w:sz w:val="72" />
      <w:szCs w:val="72" />
    </w:rPr>
  </w:style>

  <!-- Subtitle -->
  <w:style w:type="paragraph" w:styleId="Subtitle">
    <w:name w:val="Subtitle" />
    <w:basedOn w:val="Normal" />
    <w:next w:val="Normal" />
    <w:qFormat />
    <w:uiPriority w:val="11" />
    <w:pPr>
      <w:spacing w:after="360" w:line="240" w:lineRule="auto" />
      <w:jc w:val="center" />
    </w:pPr>
    <w:rPr>
      <w:i />
      <w:color w:val="595959" />
      <w:sz w:val="32" />
      <w:szCs w:val="32" />
    </w:rPr>
  </w:style>

  <!-- Table Grid — Corporate with blue header -->
  <w:style w:type="table" w:default="1" w:styleId="TableNormal">
    <w:name w:val="Normal Table" />
    <w:uiPriority w:val="99" />
    <w:semiHidden />
    <w:unhideWhenUsed />
    <w:tblPr>
      <w:tblInd w:w="0" w:type="dxa" />
      <w:tblCellMar>
        <w:top w:w="0" w:type="dxa" />
        <w:left w:w="108" w:type="dxa" />
        <w:bottom w:w="0" w:type="dxa" />
        <w:right w:w="108" w:type="dxa" />
      </w:tblCellMar>
    </w:tblPr>
  </w:style>

  <w:style w:type="table" w:styleId="TableGrid">
    <w:name w:val="Table Grid" />
    <w:basedOn w:val="TableNormal" />
    <w:uiPriority w:val="39" />
    <w:tblPr>
      <w:tblBorders>
        <w:top w:val="single" w:sz="4" w:space="0" w:color="BFBFBF" />
        <w:left w:val="single" w:sz="4" w:space="0" w:color="BFBFBF" />
        <w:bottom w:val="single" w:sz="4" w:space="0" w:color="BFBFBF" />
        <w:right w:val="single" w:sz="4" w:space="0" w:color="BFBFBF" />
        <w:insideH w:val="single" w:sz="4" w:space="0" w:color="BFBFBF" />
        <w:insideV w:val="single" w:sz="4" w:space="0" w:color="BFBFBF" />
      </w:tblBorders>
    </w:tblPr>
    <w:tblStylePr w:type="firstRow">
      <w:rPr>
        <w:b />
        <w:color w:val="FFFFFF" />
      </w:rPr>
      <w:tcPr>
        <w:shd w:val="clear" w:color="auto" w:fill="2F5496" />
        <w:tcBorders>
          <w:top w:val="single" w:sz="4" w:space="0" w:color="2F5496" />
          <w:left w:val="single" w:sz="4" w:space="0" w:color="2F5496" />
          <w:bottom w:val="single" w:sz="4" w:space="0" w:color="2F5496" />
          <w:right w:val="single" w:sz="4" w:space="0" w:color="2F5496" />
          <w:insideH w:val="single" w:sz="4" w:space="0" w:color="3A6BC5" />
          <w:insideV w:val="single" w:sz="4" w:space="0" w:color="3A6BC5" />
        </w:tcBorders>
      </w:tcPr>
    </w:tblStylePr>
    <w:tblStylePr w:type="band1Horz">
      <w:tcPr>
        <w:shd w:val="clear" w:color="auto" w:fill="D9E2F3" />
      </w:tcPr>
    </w:tblStylePr>
  </w:style>

  <!-- Header -->
  <w:style w:type="paragraph" w:styleId="Header">
    <w:name w:val="header" />
    <w:basedOn w:val="Normal" />
    <w:uiPriority w:val="99" />
    <w:semiHidden />
    <w:unhideWhenUsed />
    <w:pPr>
      <w:tabs>
        <w:tab w:val="center" w:pos="4680" />
        <w:tab w:val="right" w:pos="9360" />
      </w:tabs>
      <w:spacing w:after="0" w:line="240" w:lineRule="auto" />
    </w:pPr>
    <w:rPr>
      <w:sz w:val="18" />
      <w:szCs w:val="18" />
      <w:color w:val="808080" />
    </w:rPr>
  </w:style>

  <!-- Footer -->
  <w:style w:type="paragraph" w:styleId="Footer">
    <w:name w:val="footer" />
    <w:basedOn w:val="Normal" />
    <w:uiPriority w:val="99" />
    <w:semiHidden />
    <w:unhideWhenUsed />
    <w:pPr>
      <w:tabs>
        <w:tab w:val="center" w:pos="4680" />
        <w:tab w:val="right" w:pos="9360" />
      </w:tabs>
      <w:spacing w:after="0" w:line="240" w:lineRule="auto" />
    </w:pPr>
    <w:rPr>
      <w:sz w:val="18" />
      <w:szCs w:val="18" />
      <w:color w:val="808080" />
    </w:rPr>
  </w:style>

  <!-- Hyperlink -->
  <w:style w:type="character" w:styleId="Hyperlink">
    <w:name w:val="Hyperlink" />
    <w:uiPriority w:val="99" />
    <w:unhideWhenUsed />
    <w:rPr>
      <w:color w:val="0563C1" />
      <w:u w:val="single" />
    </w:rPr>
  </w:style>

</w:styles>


path: assets/styles/default_styles.xml
content: <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:styles xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
          xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
          xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">

  <!-- Document Defaults -->
  <w:docDefaults>
    <w:rPrDefault>
      <w:rPr>
        <w:rFonts w:ascii="Calibri" w:hAnsi="Calibri" w:eastAsia="SimSun" w:cs="Arial" />
        <w:sz w:val="22" />
        <w:szCs w:val="22" />
        <w:lang w:val="en-US" w:eastAsia="zh-CN" w:bidi="ar-SA" />
      </w:rPr>
    </w:rPrDefault>
    <w:pPrDefault>
      <w:pPr>
        <w:spacing w:after="160" w:line="259" w:lineRule="auto" />
      </w:pPr>
    </w:pPrDefault>
  </w:docDefaults>

  <!-- Latent Styles -->
  <w:latentStyles w:defLockedState="0" w:defUIPriority="99" w:defSemiHidden="0" w:defUnhideWhenUsed="0" w:defQFormat="0" w:count="376" />

  <!-- Normal (Default Paragraph Style) -->
  <w:style w:type="paragraph" w:default="1" w:styleId="Normal">
    <w:name w:val="Normal" />
    <w:qFormat />
    <w:pPr>
      <w:spacing w:after="160" w:line="240" w:lineRule="auto" />
    </w:pPr>
    <w:rPr>
      <w:rFonts w:ascii="Calibri" w:hAnsi="Calibri" />
      <w:sz w:val="22" />
      <w:szCs w:val="22" />
    </w:rPr>
  </w:style>

  <!-- Default Paragraph Font -->
  <w:style w:type="character" w:default="1" w:styleId="DefaultParagraphFont">
    <w:name w:val="Default Paragraph Font" />
    <w:uiPriority w:val="1" />
    <w:semiHidden />
    <w:unhideWhenUsed />
  </w:style>

  <!-- Heading 1 -->
  <w:style w:type="paragraph" w:styleId="Heading1">
    <w:name w:val="heading 1" />
    <w:basedOn w:val="Normal" />
    <w:next w:val="Normal" />
    <w:qFormat />
    <w:uiPriority w:val="9" />
    <w:pPr>
      <w:keepNext />
      <w:keepLines />
      <w:spacing w:before="480" w:after="240" w:line="240" w:lineRule="auto" />
      <w:outlineLvl w:val="0" />
    </w:pPr>
    <w:rPr>
      <w:rFonts w:ascii="Calibri Light" w:hAnsi="Calibri Light" />
      <w:b />
      <w:color w:val="2F5496" />
      <w:sz w:val="56" />
      <w:szCs w:val="56" />
    </w:rPr>
  </w:style>

  <!-- Heading 2 -->
  <w:style w:type="paragraph" w:styleId="Heading2">
    <w:name w:val="heading 2" />
    <w:basedOn w:val="Normal" />
    <w:next w:val="Normal" />
    <w:qFormat />
    <w:uiPriority w:val="9" />
    <w:pPr>
      <w:keepNext />
      <w:keepLines />
      <w:spacing w:before="360" w:after="120" w:line="240" w:lineRule="auto" />
      <w:outlineLvl w:val="1" />
    </w:pPr>
    <w:rPr>
      <w:rFonts w:ascii="Calibri Light" w:hAnsi="Calibri Light" />
      <w:b />
      <w:color w:val="2F5496" />
      <w:sz w:val="48" />
      <w:szCs w:val="48" />
    </w:rPr>
  </w:style>

  <!-- Heading 3 -->
  <w:style w:type="paragraph" w:styleId="Heading3">
    <w:name w:val="heading 3" />
    <w:basedOn w:val="Normal" />
    <w:next w:val="Normal" />
    <w:qFormat />
    <w:uiPriority w:val="9" />
    <w:pPr>
      <w:keepNext />
      <w:keepLines />
      <w:spacing w:before="240" w:after="80" w:line="240" w:lineRule="auto" />
      <w:outlineLvl w:val="2" />
    </w:pPr>
    <w:rPr>
      <w:rFonts w:ascii="Calibri Light" w:hAnsi="Calibri Light" />
      <w:b />
      <w:color w:val="2F5496" />
      <w:sz w:val="36" />
      <w:szCs w:val="36" />
    </w:rPr>
  </w:style>

  <!-- Heading 4 -->
  <w:style w:type="paragraph" w:styleId="Heading4">
    <w:name w:val="heading 4" />
    <w:basedOn w:val="Normal" />
    <w:next w:val="Normal" />
    <w:qFormat />
    <w:uiPriority w:val="9" />
    <w:pPr>
      <w:keepNext />
      <w:keepLines />
      <w:spacing w:before="160" w:after="80" w:line="240" w:lineRule="auto" />
      <w:outlineLvl w:val="3" />
    </w:pPr>
    <w:rPr>
      <w:rFonts w:ascii="Calibri Light" w:hAnsi="Calibri Light" />
      <w:b />
      <w:i />
      <w:color w:val="2F5496" />
      <w:sz w:val="28" />
      <w:szCs w:val="28" />
    </w:rPr>
  </w:style>

  <!-- Heading 5 -->
  <w:style w:type="paragraph" w:styleId="Heading5">
    <w:name w:val="heading 5" />
    <w:basedOn w:val="Normal" />
    <w:next w:val="Normal" />
    <w:qFormat />
    <w:uiPriority w:val="9" />
    <w:pPr>
      <w:keepNext />
      <w:keepLines />
      <w:spacing w:before="160" w:after="80" w:line="240" w:lineRule="auto" />
      <w:outlineLvl w:val="4" />
    </w:pPr>
    <w:rPr>
      <w:rFonts w:ascii="Calibri Light" w:hAnsi="Calibri Light" />
      <w:b />
      <w:color w:val="2F5496" />
      <w:sz w:val="24" />
      <w:szCs w:val="24" />
    </w:rPr>
  </w:style>

  <!-- Heading 6 -->
  <w:style w:type="paragraph" w:styleId="Heading6">
    <w:name w:val="heading 6" />
    <w:basedOn w:val="Normal" />
    <w:next w:val="Normal" />
    <w:qFormat />
    <w:uiPriority w:val="9" />
    <w:pPr>
      <w:keepNext />
      <w:keepLines />
      <w:spacing w:before="160" w:after="80" w:line="240" w:lineRule="auto" />
      <w:outlineLvl w:val="5" />
    </w:pPr>
    <w:rPr>
      <w:rFonts w:ascii="Calibri Light" w:hAnsi="Calibri Light" />
      <w:b />
      <w:i />
      <w:color w:val="2F5496" />
      <w:sz w:val="22" />
      <w:szCs w:val="22" />
    </w:rPr>
  </w:style>

  <!-- Title -->
  <w:style w:type="paragraph" w:styleId="Title">
    <w:name w:val="Title" />
    <w:basedOn w:val="Normal" />
    <w:next w:val="Normal" />
    <w:qFormat />
    <w:uiPriority w:val="10" />
    <w:pPr>
      <w:spacing w:after="240" w:line="240" w:lineRule="auto" />
      <w:jc w:val="center" />
    </w:pPr>
    <w:rPr>
      <w:rFonts w:ascii="Calibri Light" w:hAnsi="Calibri Light" />
      <w:color w:val="2F5496" />
      <w:sz w:val="72" />
      <w:szCs w:val="72" />
    </w:rPr>
  </w:style>

  <!-- Subtitle -->
  <w:style w:type="paragraph" w:styleId="Subtitle">
    <w:name w:val="Subtitle" />
    <w:basedOn w:val="Normal" />
    <w:next w:val="Normal" />
    <w:qFormat />
    <w:uiPriority w:val="11" />
    <w:pPr>
      <w:spacing w:after="360" w:line="240" w:lineRule="auto" />
      <w:jc w:val="center" />
    </w:pPr>
    <w:rPr>
      <w:i />
      <w:color w:val="595959" />
      <w:sz w:val="32" />
      <w:szCs w:val="32" />
    </w:rPr>
  </w:style>

  <!-- Quote -->
  <w:style w:type="paragraph" w:styleId="Quote">
    <w:name w:val="Quote" />
    <w:basedOn w:val="Normal" />
    <w:next w:val="Normal" />
    <w:qFormat />
    <w:uiPriority w:val="29" />
    <w:pPr>
      <w:spacing w:before="240" w:after="240" />
      <w:ind w:left="720" w:right="720" />
    </w:pPr>
    <w:rPr>
      <w:i />
      <w:color w:val="404040" />
    </w:rPr>
  </w:style>

  <!-- Intense Quote -->
  <w:style w:type="paragraph" w:styleId="IntenseQuote">
    <w:name w:val="Intense Quote" />
    <w:basedOn w:val="Normal" />
    <w:next w:val="Normal" />
    <w:qFormat />
    <w:uiPriority w:val="30" />
    <w:pPr>
      <w:spacing w:before="240" w:after="240" />
      <w:ind w:left="720" w:right="720" />
      <w:pBdr>
        <w:left w:val="single" w:sz="18" w:space="12" w:color="2F5496" />
      </w:pBdr>
    </w:pPr>
    <w:rPr>
      <w:b />
      <w:i />
      <w:color w:val="2F5496" />
    </w:rPr>
  </w:style>

  <!-- TOC Heading -->
  <w:style w:type="paragraph" w:styleId="TOCHeading">
    <w:name w:val="TOC Heading" />
    <w:basedOn w:val="Heading1" />
    <w:next w:val="Normal" />
    <w:uiPriority w:val="39" />
    <w:semiHidden />
    <w:unhideWhenUsed />
    <w:pPr>
      <w:outlineLvl w:val="9" />
    </w:pPr>
  </w:style>

  <!-- TOC 1 -->
  <w:style w:type="paragraph" w:styleId="TOC1">
    <w:name w:val="toc 1" />
    <w:basedOn w:val="Normal" />
    <w:uiPriority w:val="39" />
    <w:semiHidden />
    <w:unhideWhenUsed />
    <w:pPr>
      <w:spacing w:before="120" w:after="0" />
    </w:pPr>
    <w:rPr>
      <w:b />
    </w:rPr>
  </w:style>

  <!-- TOC 2 -->
  <w:style w:type="paragraph" w:styleId="TOC2">
    <w:name w:val="toc 2" />
    <w:basedOn w:val="Normal" />
    <w:uiPriority w:val="39" />
    <w:semiHidden />
    <w:unhideWhenUsed />
    <w:pPr>
      <w:spacing w:after="0" />
      <w:ind w:left="240" />
    </w:pPr>
  </w:style>

  <!-- TOC 3 -->
  <w:style w:type="paragraph" w:styleId="TOC3">
    <w:name w:val="toc 3" />
    <w:basedOn w:val="Normal" />
    <w:uiPriority w:val="39" />
    <w:semiHidden />
    <w:unhideWhenUsed />
    <w:pPr>
      <w:spacing w:after="0" />
      <w:ind w:left="480" />
    </w:pPr>
  </w:style>

  <!-- List Bullet -->
  <w:style w:type="paragraph" w:styleId="ListBullet">
    <w:name w:val="List Bullet" />
    <w:basedOn w:val="Normal" />
    <w:uiPriority w:val="36" />
    <w:pPr>
      <w:spacing w:after="0" />
      <w:ind w:left="720" w:hanging="360" />
      <w:contextualSpacing />
    </w:pPr>
  </w:style>

  <!-- List Number -->
  <w:style w:type="paragraph" w:styleId="ListNumber">
    <w:name w:val="List Number" />
    <w:basedOn w:val="Normal" />
    <w:uiPriority w:val="36" />
    <w:pPr>
      <w:spacing w:after="0" />
      <w:ind w:left="720" w:hanging="360" />
      <w:contextualSpacing />
    </w:pPr>
  </w:style>

  <!-- Table Normal -->
  <w:style w:type="table" w:default="1" w:styleId="TableNormal">
    <w:name w:val="Normal Table" />
    <w:uiPriority w:val="99" />
    <w:semiHidden />
    <w:unhideWhenUsed />
    <w:tblPr>
      <w:tblInd w:w="0" w:type="dxa" />
      <w:tblCellMar>
        <w:top w:w="0" w:type="dxa" />
        <w:left w:w="108" w:type="dxa" />
        <w:bottom w:w="0" w:type="dxa" />
        <w:right w:w="108" w:type="dxa" />
      </w:tblCellMar>
    </w:tblPr>
  </w:style>

  <!-- Table Grid -->
  <w:style w:type="table" w:styleId="TableGrid">
    <w:name w:val="Table Grid" />
    <w:basedOn w:val="TableNormal" />
    <w:uiPriority w:val="39" />
    <w:tblPr>
      <w:tblBorders>
        <w:top w:val="single" w:sz="4" w:space="0" w:color="auto" />
        <w:left w:val="single" w:sz="4" w:space="0" w:color="auto" />
        <w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto" />
        <w:right w:val="single" w:sz="4" w:space="0" w:color="auto" />
        <w:insideH w:val="single" w:sz="4" w:space="0" w:color="auto" />
        <w:insideV w:val="single" w:sz="4" w:space="0" w:color="auto" />
      </w:tblBorders>
    </w:tblPr>
  </w:style>

  <!-- Header -->
  <w:style w:type="paragraph" w:styleId="Header">
    <w:name w:val="header" />
    <w:basedOn w:val="Normal" />
    <w:uiPriority w:val="99" />
    <w:semiHidden />
    <w:unhideWhenUsed />
    <w:pPr>
      <w:tabs>
        <w:tab w:val="center" w:pos="4680" />
        <w:tab w:val="right" w:pos="9360" />
      </w:tabs>
      <w:spacing w:after="0" w:line="240" w:lineRule="auto" />
    </w:pPr>
    <w:rPr>
      <w:sz w:val="18" />
      <w:szCs w:val="18" />
      <w:color w:val="808080" />
    </w:rPr>
  </w:style>

  <!-- Footer -->
  <w:style w:type="paragraph" w:styleId="Footer">
    <w:name w:val="footer" />
    <w:basedOn w:val="Normal" />
    <w:uiPriority w:val="99" />
    <w:semiHidden />
    <w:unhideWhenUsed />
    <w:pPr>
      <w:tabs>
        <w:tab w:val="center" w:pos="4680" />
        <w:tab w:val="right" w:pos="9360" />
      </w:tabs>
      <w:spacing w:after="0" w:line="240" w:lineRule="auto" />
    </w:pPr>
    <w:rPr>
      <w:sz w:val="18" />
      <w:szCs w:val="18" />
      <w:color w:val="808080" />
    </w:rPr>
  </w:style>

  <!-- Hyperlink -->
  <w:style w:type="character" w:styleId="Hyperlink">
    <w:name w:val="Hyperlink" />
    <w:uiPriority w:val="99" />
    <w:unhideWhenUsed />
    <w:rPr>
      <w:color w:val="0563C1" />
      <w:u w:val="single" />
    </w:rPr>
  </w:style>

  <!-- Comment Text -->
  <w:style w:type="paragraph" w:styleId="CommentText">
    <w:name w:val="annotation text" />
    <w:basedOn w:val="Normal" />
    <w:semiHidden />
    <w:unhideWhenUsed />
    <w:pPr>
      <w:spacing w:line="240" w:lineRule="auto" />
    </w:pPr>
    <w:rPr>
      <w:sz w:val="20" />
      <w:szCs w:val="20" />
    </w:rPr>
  </w:style>

  <!-- Comment Reference -->
  <w:style w:type="character" w:styleId="CommentReference">
    <w:name w:val="annotation reference" />
    <w:semiHidden />
    <w:unhideWhenUsed />
    <w:rPr>
      <w:sz w:val="16" />
      <w:szCs w:val="16" />
    </w:rPr>
  </w:style>

</w:styles>


path: references/cjk_typography.md
content: # CJK Typography & Mixed-Script Guide

Rules for Chinese, Japanese, and Korean text in DOCX documents.

## Table of Contents

1. [Font Selection](#font-selection)
2. [Font Size Names (CJK)](#font-size-names)
3. [RunFonts Mapping](#runfonts-mapping)
4. [Punctuation & Line Breaking](#punctuation--line-breaking)
5. [Paragraph Indentation](#paragraph-indentation)
6. [Line Spacing for CJK](#line-spacing)
7. [Chinese Government Standard (GB/T 9704)](#gbt-9704)
8. [Mixed CJK + Latin Best Practices](#mixed-script)
9. [OpenXML Quick Reference](#openxml-quick-reference)

---

## Font Selection

### Recommended CJK Fonts

| Language | Serif (正文) | Sans (标题) | Notes |
|----------|-------------|-------------|-------|
| **Simplified Chinese** | 宋体 (SimSun) | 微软雅黑 (Microsoft YaHei) | YaHei for screen, SimSun for print |
| **Simplified Chinese** | 仿宋 (FangSong) | 黑体 (SimHei) | Government documents |
| **Traditional Chinese** | 新細明體 (PMingLiU) | 微軟正黑體 (Microsoft JhengHei) | Taiwan standard |
| **Japanese** | MS 明朝 (MS Mincho) | MS ゴシック (MS Gothic) | Classic pairing |
| **Japanese** | 游明朝 (Yu Mincho) | 游ゴシック (Yu Gothic) | Modern, Windows 10+ |
| **Korean** | 바탕 (Batang) | 맑은 고딕 (Malgun Gothic) | Standard pairing |

### Government Document Fonts (公文)

| Element | Font | Size |
|---------|------|------|
| 标题 (title) | 小标宋 (FZXiaoBiaoSong-B05S) | 二号 (22pt) |
| 一级标题 | 黑体 (SimHei) | 三号 (16pt) |
| 二级标题 | 楷体_GB2312 (KaiTi_GB2312) | 三号 (16pt) |
| 三级标题 | 仿宋_GB2312 加粗 | 三号 (16pt) |
| 正文 (body) | 仿宋_GB2312 (FangSong_GB2312) | 三号 (16pt) |
| 附注/页码 | 宋体 (SimSun) | 四号 (14pt) |

---

## Font Size Names

CJK uses named sizes. Map to points and `w:sz` half-point values:

| 字号 | Points | `w:sz` | Common Use |
|------|--------|--------|------------|
| 初号 | 42pt | 84 | Display title |
| 小初 | 36pt | 72 | Large title |
| 一号 | 26pt | 52 | Chapter heading |
| 小一 | 24pt | 48 | Major heading |
| 二号 | 22pt | 44 | Document title (公文) |
| 小二 | 18pt | 36 | Western H1 equivalent |
| 三号 | 16pt | 32 | CJK heading / 公文 body |
| 小三 | 15pt | 30 | Sub-heading |
| 四号 | 14pt | 28 | CJK subheading |
| 小四 | 12pt | 24 | Standard body (CJK) |
| 五号 | 10.5pt | 21 | Compact CJK body |
| 小五 | 9pt | 18 | Footnotes |
| 六号 | 7.5pt | 15 | Fine print |

---

## RunFonts Mapping

OpenXML uses four font slots to handle multilingual text:

```xml
<w:rFonts
  w:ascii="Calibri"        <!-- Latin characters (U+0000–U+007F) -->
  w:hAnsi="Calibri"        <!-- Latin extended, Greek, Cyrillic -->
  w:eastAsia="SimSun"      <!-- CJK Unified Ideographs, Kana, Hangul -->
  w:cs="Arial"             <!-- Arabic, Hebrew, Thai, Devanagari -->
/>
```

**Word's character classification logic:**

1. Character is in CJK range → uses `w:eastAsia` font
2. Character is in complex script range → uses `w:cs` font
3. Character is basic Latin (ASCII) → uses `w:ascii` font
4. Everything else → uses `w:hAnsi` font

**Key**: `w:eastAsia` is the **only** way to set CJK fonts. Setting just `w:ascii` will NOT affect CJK characters. Mixed text within a single run auto-switches fonts at the character level — no need for separate runs.

### Document Defaults

```xml
<w:docDefaults>
  <w:rPrDefault>
    <w:rPr>
      <w:rFonts w:ascii="Calibri" w:hAnsi="Calibri" w:eastAsia="SimSun" w:cs="Arial" />
      <w:sz w:val="22" />
      <w:szCs w:val="22" />
      <w:lang w:val="en-US" w:eastAsia="zh-CN" />
    </w:rPr>
  </w:rPrDefault>
</w:docDefaults>
```

`w:lang w:eastAsia` helps Word resolve ambiguous characters (e.g., punctuation shared between CJK and Latin).

---

## Punctuation & Line Breaking

### Full-Width vs Half-Width

CJK text uses full-width punctuation:

| Type | CJK | Latin |
|------|-----|-------|
| Period | 。(U+3002) | . |
| Comma | ，(U+FF0C) 、(U+3001) | , |
| Colon | ：(U+FF1A) | : |
| Semicolon | ；(U+FF1B) | ; |
| Quotes | 「」『』 or ""'' | "" '' |
| Parentheses | （）(U+FF08/09) | () |

In mixed text, use the punctuation style of the **surrounding language context**.

### OpenXML Controls

```xml
<w:pPr>
  <w:adjustRightInd w:val="true" />   <!-- Adjust right indent for CJK punctuation -->
  <w:snapToGrid w:val="true" />        <!-- Align to document grid -->
  <w:kinsoku w:val="true" />           <!-- Enable CJK line breaking rules -->
  <w:overflowPunct w:val="true" />     <!-- Allow punctuation to overflow margins -->
</w:pPr>
```

### Kinsoku Rules (禁則処理)

Prevents certain characters from appearing at the start or end of a line:
- **Cannot start a line**: `）」』】〉》。、，！？；：` and closing brackets
- **Cannot end a line**: `（「『【〈《` and opening brackets

Word applies these automatically when `w:kinsoku` is enabled.

### Line Breaking

- CJK characters can break between **any two characters** (no word boundaries needed)
- Latin words within CJK text still follow word-boundary breaking
- `w:wordWrap w:val="false"` enables CJK-style breaking (break anywhere)

---

## Paragraph Indentation

### Chinese Standard: 2-Character Indent

Chinese body text conventionally uses a 2-character first-line indent:

```xml
<w:ind w:firstLineChars="200" />  <!-- 200 = 2 characters × 100 -->
```

Preferred over `w:firstLine` with fixed DXA because `firstLineChars` scales with font size.

| Indent | Value |
|--------|-------|
| 1 character | `w:firstLineChars="100"` |
| 2 characters | `w:firstLineChars="200"` |
| 3 characters | `w:firstLineChars="300"` |

---

## Line Spacing

- CJK characters are taller than Latin characters at the same point size
- Default `1.0` line spacing may feel cramped with CJK text
- Recommended: `1.15–1.5` for mixed CJK+Latin, `1.0` with fixed 28pt for 公文

### Auto Spacing

```xml
<w:pPr>
  <w:autoSpaceDE w:val="true"/>  <!-- auto space between CJK and Latin -->
  <w:autoSpaceDN w:val="true"/>  <!-- auto space between CJK and numbers -->
</w:pPr>
```

Adds ~¼ em spacing between CJK and non-CJK characters automatically. **Recommended: always enable.**

---

## GB/T 9704

Chinese government document standard (党政机关公文格式). These are **strict requirements**, not suggestions.

### Page Setup

| Parameter | Value | OpenXML |
|-----------|-------|---------|
| Page size | A4 (210×297mm) | Width=11906, Height=16838 |
| Top margin | 37mm | 2098 DXA |
| Bottom margin | 35mm | 1984 DXA |
| Left margin | 28mm | 1588 DXA |
| Right margin | 26mm | 1474 DXA |
| Characters/line | 28 | |
| Lines/page | 22 | |
| Line spacing | Fixed 28pt | `line="560"` lineRule="exact" |

### Document Structure

```
┌─────────────────────────────────┐
│     发文机关标志 (红头)           │  ← 小标宋 or 红色大字
│     ══════════════════ (红线)    │  ← Red #FF0000, 2pt
├─────────────────────────────────┤
│  发文字号: X机发〔2025〕X号      │  ← 仿宋 三号, centered
│                                 │
│  标题 (Title)                   │  ← 小标宋 二号, centered
│                                 │     可分多行，回行居中
│  主送机关:                      │  ← 仿宋 三号
│                                 │
│  正文 (Body)...                 │  ← 仿宋_GB2312 三号
│  一、一级标题                    │  ← 黑体 三号
│  （一）二级标题                  │  ← 楷体 三号
│  1. 三级标题                    │  ← 仿宋 三号 加粗
│  (1) 四级标题                   │  ← 仿宋 三号
│                                 │
│  附件: 1. xxx                   │  ← 仿宋 三号
│                                 │
│  发文机关署名                    │  ← 仿宋 三号
│  成文日期                       │  ← 仿宋 三号, 小写中文数字
├─────────────────────────────────┤
│  ══════════════════ (版记线)     │
│  抄送: xxx                      │  ← 仿宋 四号
│  印发机关及日期                   │  ← 仿宋 四号
└─────────────────────────────────┘
```

### Numbering System

```
一、        ← 黑体 (SimHei), no indentation
（一）      ← 楷体 (KaiTi), indented 2 chars
1.          ← 仿宋加粗 (FangSong Bold), indented 2 chars
(1)         ← 仿宋 (FangSong), indented 2 chars
```

### Colors

| Element | Color | Requirement |
|---------|-------|-------------|
| All body text | Black #000000 | Mandatory |
| 红头 (agency name) | Red #FF0000 | Mandatory |
| 红线 (separator) | Red #FF0000 | Mandatory |
| 公章 (official seal) | Red | Mandatory |

### Page Numbers

- Position: bottom center
- Format: `-X-` (dash-number-dash)
- Font: 宋体 四号 (SimSun 14pt, `sz="28"`)
- No page number on cover page if present

---

## Mixed Script

### Font Size Harmony

CJK characters appear larger than Latin characters at the same point size. Compensation:

- If body is Calibri 11pt, pair with CJK at 11pt (same size — CJK looks slightly larger but acceptable)
- If precise visual match needed, CJK can be set 0.5–1pt smaller
- In practice, same point size is standard — don't over-optimize

### Bold and Italic

- **Chinese/Japanese have no true italic.** Word synthesizes a slant which looks poor
- Use **bold** for emphasis in CJK text
- Use 着重号 (emphasis dots) for traditional emphasis: `<w:em w:val="dot"/>` on RunProperties

---

## OpenXML Quick Reference

### Set EastAsia Font (C#)

```csharp
new Run(
    new RunProperties(
        new RunFonts { EastAsia = "SimSun", Ascii = "Calibri", HighAnsi = "Calibri" },
        new FontSize { Val = "32" }  // 三号 = 16pt = sz 32
    ),
    new Text("这是正文内容")
);
```

### Document Defaults (C#)

```csharp
new DocDefaults(new RunPropertiesDefault(new RunPropertiesBaseStyle(
    new RunFonts {
        Ascii = "Calibri", HighAnsi = "Calibri",
        EastAsia = "Microsoft YaHei"
    },
    new Languages { Val = "en-US", EastAsia = "zh-CN" }
)));
```

### 公文 Style Definitions (C#)

```csharp
// Title style — 小标宋 二号 centered
new Style(
    new StyleName { Val = "GongWen Title" },
    new BasedOn { Val = "Normal" },
    new StyleRunProperties(
        new RunFonts { EastAsia = "FZXiaoBiaoSong-B05S" },
        new FontSize { Val = "44" },  // 二号 = 22pt
        new Bold()
    ),
    new StyleParagraphProperties(
        new Justification { Val = JustificationValues.Center },
        new SpacingBetweenLines { Line = "560", LineRule = LineSpacingRuleValues.Exact }
    )
) { Type = StyleValues.Paragraph, StyleId = "GongWenTitle" };

// Body style — 仿宋_GB2312 三号
new Style(
    new StyleName { Val = "GongWen Body" },
    new StyleRunProperties(
        new RunFonts { EastAsia = "FangSong_GB2312", Ascii = "FangSong_GB2312" },
        new FontSize { Val = "32" }  // 三号 = 16pt
    ),
    new StyleParagraphProperties(
        new SpacingBetweenLines { Line = "560", LineRule = LineSpacingRuleValues.Exact }
    )
) { Type = StyleValues.Paragraph, StyleId = "GongWenBody" };
```

### Emphasis Dots (着重号)

```csharp
new RunProperties(new Emphasis { Val = EmphasisMarkValues.Dot });
```

### East Asian Text Layout

```xml
<!-- Snap to grid (align CJK chars to character grid) -->
<w:snapToGrid w:val="true"/>

<!-- Two-lines-in-one (双行合一) -->
<w:eastAsianLayout w:id="1" w:combine="true"/>

<!-- Vertical text in a cell -->
<w:textDirection w:val="tbRl"/>
```


path: references/cjk_university_template_guide.md
content: # Chinese University Thesis Template Guide (中国高校论文模板指南)

## Why This Guide Exists

Chinese university thesis templates (.docx) have structural patterns that differ significantly
from Western templates. Agents that assume Western conventions (Heading1/Heading2/Normal) will
fail repeatedly. This guide documents the ACTUAL patterns found in Chinese templates.

## Common StyleId Patterns

### Pattern A: Numeric IDs (most common in Chinese Word templates)

| Style Purpose | styleId | w:name | w:basedOn |
|--------------|---------|--------|-----------|
| Normal body | `a` | "Normal" | — |
| Default paragraph font | `a0` | "Default Paragraph Font" | — |
| Heading 1 (章标题) | `1` | "heading 1" | `a` |
| Heading 2 (节标题) | `2` | "heading 2" | `a` |
| Heading 3 (小节标题) | `3` | "heading 3" | `a` |
| TOC 1 | `11` | "toc 1" | `a` |
| TOC 2 | `21` | "toc 2" | `a` |
| TOC 3 | `31` | "toc 3" | `a` |
| Header | `a3` | "header" | `a` |
| Footer | `a4` | "footer" | `a` |
| Table of Contents heading | `10` | "TOC Heading" | `1` |

### Pattern B: English IDs (less common, usually from international templates)
Standard Heading1/Heading2/Heading3/Normal — these follow the Western pattern.

### Pattern C: Mixed (some Chinese, some English)
Some templates define custom styles with Chinese names:
| Style Purpose | styleId | w:name |
|--------------|---------|--------|
| 论文标题 | `lunwenbiaoti` | "论文标题" |
| 章标题 | `zhangbiaoti` | "章标题" |
| 正文 | `zhengwen` | "正文" |

### How to Identify Which Pattern

```bash
# Extract all styleIds from the template
$CLI analyze --input template.docx --styles-only

# Or manually:
# unzip template.docx word/styles.xml
# Search for w:styleId= in the extracted file
```

Look at the first few styleIds. If you see `1`, `2`, `3`, `a`, `a0` → Pattern A.
If you see `Heading1`, `Normal` → Pattern B.

## Standard Thesis Structure

Chinese university theses follow a highly standardized structure:

```
┌─────────────────────────────────────┐
│ 封面 (Cover Page)                    │  ← Usually 1-2 pages
│   - 校名、校徽                       │
│   - 论文题目 (title)                  │
│   - 作者、导师、院系、日期             │
├─────────────────────────────────────┤
│ 学术诚信承诺书 / 独创性声明            │  ← 1 page
│   (Academic Integrity Declaration)   │
├─────────────────────────────────────┤
│ 中文摘要 (Chinese Abstract)          │  ← 1-2 pages
│   - "摘 要" heading                  │
│   - Abstract body                    │
│   - "关键词：" line                  │
├─────────────────────────────────────┤
│ 英文摘要 (English Abstract)          │  ← 1-2 pages
│   - "ABSTRACT" heading              │
│   - Abstract body                    │
│   - "Keywords:" line                 │
├─────────────────────────────────────┤
│ 目录 (Table of Contents)             │  ← 1-3 pages
│   - Often inside SDT block           │
│   - Static example entries           │
│   - TOC field code                   │
├─────────────────────────────────────┤
│ 正文 (Body)                          │  ← Main content
│   第1章 绪论                          │
│   1.1 研究背景                        │
│   1.2 研究目的和意义                   │
│   第2章 文献综述                       │
│   ...                                │
│   第N章 结论与展望                     │
├─────────────────────────────────────┤
│ 参考文献 (References)                │  ← Styled differently
├─────────────────────────────────────┤
│ 致谢 (Acknowledgments)              │  ← Optional
├─────────────────────────────────────┤
│ 附录 (Appendices)                    │  ← Optional
└─────────────────────────────────────┘
```

## Identifying Zone Boundaries in Templates

Templates contain EXAMPLE content that must be replaced. Here's how to find the zones:

### Zone A (Front matter) — KEEP from template
- Starts at: paragraph 0
- Ends at: the paragraph BEFORE the first chapter heading
- Contains: cover, declaration, abstracts, TOC
- How to detect end: search for first paragraph with style `1` (or Heading1) containing "第1章" or "绪论"

### Zone B (Body content) — REPLACE with user content
- Starts at: first chapter heading ("第1章...")
- Ends at: "参考文献" heading (inclusive) or last body paragraph before acknowledgments
- How to detect:
  ```python
  for i, el in enumerate(body_elements):
      text = get_text(el)
      style = get_style(el)
      if style in ('1', 'Heading1') and ('第1章' in text or '绪论' in text):
          zone_b_start = i
      if '参考文献' in text:
          zone_b_end = i
  ```

### Zone C (Back matter) — KEEP from template (or remove)
- Starts after: 参考文献
- Contains: 致谢, 附录, final sectPr

## Font Expectations in Chinese Thesis Templates

| Element | Font | Size (字号) | Size (pt) | w:sz |
|---------|------|------------|-----------|------|
| 论文标题 | 华文中宋 or 黑体 | 二号 or 小二 | 22pt or 18pt | 44 or 36 |
| 章标题 (H1) | 黑体 | 三号 | 16pt | 32 |
| 节标题 (H2) | 黑体 | 四号 | 14pt | 28 |
| 小节标题 (H3) | 黑体 | 小四 | 12pt | 24 |
| 正文 | 宋体 | 小四 | 12pt | 24 |
| 页眉 | 宋体 | 五号 | 10.5pt | 21 |
| 页脚/页码 | 宋体 | 五号 | 10.5pt | 21 |
| 表格内容 | 宋体 | 五号 | 10.5pt | 21 |
| 参考文献条目 | 宋体 | 五号 | 10.5pt | 21 |

## RunFonts for CJK Body Text

```xml
<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman"
          w:eastAsia="宋体" w:cs="Times New Roman"/>
```

For headings:
```xml
<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman"
          w:eastAsia="黑体" w:cs="Times New Roman"/>
```

IMPORTANT: When cleaning direct formatting, ALWAYS preserve w:eastAsia.
Removing it causes Chinese text to fall back to the wrong font.

## Common Mistakes with Chinese Templates

1. **Searching for `Heading1`** — Chinese templates use `1`, not `Heading1`
2. **Clearing all rFonts** — Must keep eastAsia font declarations
3. **Assuming "第1章" is the first paragraph** — It's typically paragraph 100+ after cover/abstract/TOC
4. **Ignoring SDT blocks in TOC** — The TOC is wrapped in an SDT, not just field codes
5. **Wrong line spacing** — Chinese theses typically use fixed 20pt (line="400") or 22pt (line="440"), not the 28pt used in government documents
6. **Missing section breaks** — Each zone (abstract, TOC, body) usually has its own sectPr for different headers/footers

## Style Mapping Quick Reference

When source document uses Western IDs and template uses Chinese numeric IDs:

```json
{
  "Heading1": "1",
  "Heading2": "2",
  "Heading3": "3",
  "Heading4": "3",
  "Normal": "a",
  "BodyText": "a",
  "ListParagraph": "a",
  "Caption": "a",
  "TOC1": "11",
  "TOC2": "21",
  "TOC3": "31"
}
```

When source uses Chinese numeric IDs and template uses Western IDs — reverse the mapping.


path: references/openxml_namespaces.md
content: # OpenXML Namespaces, Relationship Types, and Content Types

## Core Namespaces

| Prefix | URI | Used In |
|--------|-----|---------|
| `w` | `http://schemas.openxmlformats.org/wordprocessingml/2006/main` | document.xml, styles.xml, numbering.xml, headers, footers |
| `r` | `http://schemas.openxmlformats.org/officeDocument/2006/relationships` | Relationship references (r:id) |
| `wp` | `http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing` | Image/drawing placement in document |
| `a` | `http://schemas.openxmlformats.org/drawingml/2006/main` | DrawingML core (shapes, images, themes) |
| `pic` | `http://schemas.openxmlformats.org/drawingml/2006/picture` | Picture element in DrawingML |
| `v` | `urn:schemas-microsoft-com:vml` | VML (legacy shapes, watermarks) |
| `o` | `urn:schemas-microsoft-com:office:office` | Office VML extensions |
| `m` | `http://schemas.openxmlformats.org/officeDocument/2006/math` | Math equations (OMML) |
| `mc` | `http://schemas.openxmlformats.org/markup-compatibility/2006` | Markup compatibility (Ignorable, AlternateContent) |

## Extended Namespaces

| Prefix | URI | Purpose |
|--------|-----|---------|
| `w14` | `http://schemas.microsoft.com/office/word/2010/wordml` | Word 2010 extensions (contentPart, etc.) |
| `w15` | `http://schemas.microsoft.com/office/word/2012/wordml` | Word 2013 extensions (commentEx, etc.) |
| `w16cid` | `http://schemas.microsoft.com/office/word/2016/wordml/cid` | Comment IDs (durable IDs) |
| `w16cex` | `http://schemas.microsoft.com/office/word/2018/wordml/cex` | Comment extensible |
| `w16se` | `http://schemas.microsoft.com/office/word/2015/wordml/symex` | Symbol extensions |
| `wps` | `http://schemas.microsoft.com/office/word/2010/wordprocessingShape` | WordprocessingML shapes |
| `wpc` | `http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas` | Drawing canvas |

## Relationship Types

| Relationship | Type URI |
|-------------|----------|
| Document | `http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument` |
| Styles | `http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles` |
| Numbering | `http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering` |
| Font Table | `http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable` |
| Settings | `http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings` |
| Theme | `http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme` |
| Image | `http://schemas.openxmlformats.org/officeDocument/2006/relationships/image` |
| Hyperlink | `http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink` |
| Header | `http://schemas.openxmlformats.org/officeDocument/2006/relationships/header` |
| Footer | `http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer` |
| Comments | `http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments` |
| CommentsExtended | `http://schemas.microsoft.com/office/2011/relationships/commentsExtended` |
| CommentsIds | `http://schemas.microsoft.com/office/2016/09/relationships/commentsIds` |
| CommentsExtensible | `http://schemas.microsoft.com/office/2018/08/relationships/commentsExtensible` |
| Footnotes | `http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes` |
| Endnotes | `http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes` |
| Glossary | `http://schemas.openxmlformats.org/officeDocument/2006/relationships/glossaryDocument` |
| Web Settings | `http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings` |

## Content Types (`[Content_Types].xml`)

### Default Extensions

```xml
<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" />
<Default Extension="xml" ContentType="application/xml" />
<Default Extension="png" ContentType="image/png" />
<Default Extension="jpeg" ContentType="image/jpeg" />
<Default Extension="gif" ContentType="image/gif" />
<Default Extension="emf" ContentType="image/x-emf" />
```

### Part Overrides

| Part | Content Type |
|------|-------------|
| `/word/document.xml` | `application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml` |
| `/word/styles.xml` | `application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml` |
| `/word/numbering.xml` | `application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml` |
| `/word/settings.xml` | `application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml` |
| `/word/fontTable.xml` | `application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml` |
| `/word/theme/theme1.xml` | `application/vnd.openxmlformats-officedocument.theme+xml` |
| `/word/header1.xml` | `application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml` |
| `/word/footer1.xml` | `application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml` |
| `/word/comments.xml` | `application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml` |
| `/word/commentsExtended.xml` | `application/vnd.ms-word.commentsExtended+xml` |
| `/word/commentsIds.xml` | `application/vnd.ms-word.commentsIds+xml` |
| `/word/commentsExtensible.xml` | `application/vnd.ms-word.commentsExtensible+xml` |
| `/word/footnotes.xml` | `application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml` |
| `/word/endnotes.xml` | `application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml` |


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)