[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-openai-template":3,"mdc--2efpta-key":36,"related-repo-openai-template":2406,"related-org-openai-template":2527},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":31,"sourceUrl":34,"mdContent":35},"template","implement page chrome and design contracts","Canonical rules and HTML\u002FCSS contract for the page chrome (head boilerplate, cover, table of contents, section block, sources-section wrapper, footer, outlook-badge, design tokens) shared across Moody's Agentic Solutions HTML report skills (earnings-call-summary, peer-analysis, public-information-book, sector-analysis, etc.). Sibling of `skills\u002Fshared\u002Fcitations\u002F` using the same inlining pattern. Parent skills must read BOTH this `SKILL.md` (authoring rules: shared-layer classes, allowed per-skill overrides, outlook-badge usage) AND `assets\u002Ftemplate.html` (canonical CSS + literal HTML snippets) before emitting any report. The asset is the source of truth for markup; this file is the source of truth for rules. Triggers on questions about the template, page chrome, cover, table of contents, footer, layout, design tokens, color palette, fonts, outlook badges, or any visual scaffolding of an HTML report skill.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"openai","OpenAI","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fopenai.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"HTML","html","tag",{"name":17,"slug":18,"type":15},"CSS","css",{"name":20,"slug":21,"type":15},"Templates","templates",{"name":23,"slug":24,"type":15},"Design","design",3992,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins","2026-06-30T19:00:57.102",null,465,[],{"repoUrl":26,"stars":25,"forks":29,"topics":32,"description":33},[],"OpenAI Plugins","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins\u002Ftree\u002FHEAD\u002Fplugins\u002Fmoody-s\u002Fskills\u002Fshared\u002Ftemplate","---\nname: template\ndescription: >\n  Canonical rules and HTML\u002FCSS contract for the page chrome (head boilerplate, cover, table of\n  contents, section block, sources-section wrapper, footer, outlook-badge, design tokens) shared\n  across Moody's Agentic Solutions HTML report skills (earnings-call-summary, peer-analysis,\n  public-information-book, sector-analysis, etc.). Sibling of `skills\u002Fshared\u002Fcitations\u002F` using the same\n  inlining pattern. Parent skills must read BOTH this `SKILL.md` (authoring rules: shared-layer\n  classes, allowed per-skill overrides, outlook-badge usage) AND `assets\u002Ftemplate.html` (canonical\n  CSS + literal HTML snippets) before emitting any report. The asset is the source of truth for\n  markup; this file is the source of truth for rules. Triggers on questions about the template,\n  page chrome, cover, table of contents, footer, layout, design tokens, color palette, fonts,\n  outlook badges, or any visual scaffolding of an HTML report skill.\n---\n\n# Template Skill (shared)\n\nThis is the **single source of truth** for the visual chrome of every HTML report produced by\nthe parent skills `earnings-call-summary`, `peer-analysis`, `public-information-book`, and\n`sector-analysis` and others. It owns:\n\n- Design tokens (`--navy`, `--accent`, `--gray-*` \u002F `--g*`, `--text`, `--positive`, `--negative`,\n  `--neutral`).\n- The CSS reset.\n- Body and page base styling. The canonical defaults are `body { font-size: 13px }` and\n  `.page { max-width: 900px }`; ECS \u002F SA inherit them as-is, PA overrides `max-width` to\n  `1050px`, and PIB overrides both (`font-size: 12.5px`, `max-width: 920px`).\n- Both cover variants (`cover-simple` for PIB \u002F SA; `cover-multi` for ECS \u002F PA).\n- TOC styling (`.toc-page`, `.toc-heading`, `.toc-list`, `.toc-num`, `.toc-label`, `.toc-dots`).\n- Section styling (`.section`, `.section-heading`, `.section-content` and its descendants).\n- The canonical pastel `.outlook-badge` (`stable` \u002F `positive` \u002F `negative` \u002F `review` \u002F `na`).\n- Anchor base styling.\n- Footer styling (`.report-footer`, `.footer-logo`).\n- Print rules.\n- The HTML scaffolds for the document head, both covers, the TOC block, the section block, the\n  sources-section wrapper, the footer, and the outlook-badge.\n\nThe canonical CSS and the literal HTML markup contracts live in\n[`assets\u002Ftemplate.html`](.\u002Fassets\u002Ftemplate.html). This `SKILL.md` describes the rules; the asset\nfile ships the verbatim implementation. **Parent skills must read both files before emitting.**\n\n## When to read this skill\n\nRead this skill from a parent skill **before** emitting any HTML report. Parent skills must\ncontain a directive near the top of their `SKILL.md` instructing the agent to read **both**\nthis file and `assets\u002Ftemplate.html`. The pairing is identical to the `skills\u002Fshared\u002Fcitations\u002F`\ncontract — every HTML report touches both shared skills.\n\n## Lookup-order rule (non-negotiable)\n\nWhenever the agent is about to author CSS, an HTML scaffold, a class name, a design token, or\nany visual chrome that the parent skill does not itself define, it must consult this shared\ntemplate skill **first** and only fall back to inventing markup if the shared layer also does\nnot cover the need. Do not silently restyle anything the shared skill owns; do not invent CSS or\nHTML scaffolding for elements the shared skill already provides.\n\n## Output contract (single global rules)\n\n1. Every emitted HTML report inlines the contents of `\u003Cstyle id=\"shared-template-css\">` from\n   `assets\u002Ftemplate.html` between the `\u002F* BEGIN shared-template-css ... *\u002F` and\n   `\u002F* END shared-template-css *\u002F` CSS-comment markers in the parent template's `\u003Cstyle>`\n   block. Parent templates ship only the marker comments; they never duplicate the rules.\n2. Every emitted HTML report uses the literal markup from the matching `\u003Ctemplate>` snippet for\n   the document head, cover (one of `cover-simple` \u002F `cover-multi`), TOC, section block,\n   sources-section wrapper, and footer. Class names and attribute order are invariant.\n3. Each parent skill picks **exactly one** cover variant. Variants do not mix within a single\n   report.\n4. Per-skill CSS overrides (see \"Per-skill overrides\" below) live **above** the marker region\n   in the parent template's `\u003Cstyle>` block — never inside it, and never as duplicated copies\n   of shared rules.\n\n## 1. Document head (snippet `document-head`)\n\nThe shared `document-head` snippet is the literal contract for the top of the parent template:\n`\u003C!DOCTYPE html>`, the `\u003Chtml>` \u002F `\u003Chead>` \u002F `\u003Cmeta>` \u002F `\u003Ctitle>` boilerplate, and the\n`\u003Cstyle>` block that contains:\n\n1. Skill-specific overrides (see below).\n2. The `\u002F* BEGIN shared-template-css ... *\u002F` marker region.\n3. The `\u002F* BEGIN shared-citations-css ... *\u002F` marker region.\n\nThen `\u003Cbody>` opens with `\u003Cdiv class=\"page\">`, which wraps the cover, TOC, report body, and\nfooter. Substitute `{report_title}`.\n\n## 2. Cover (snippets `cover-simple` and `cover-multi`)\n\nTwo variants. Each parent skill uses exactly one:\n\n| variant       | used by                                  | shape                                            |\n|---------------|------------------------------------------|--------------------------------------------------|\n| `cover-simple`| `public-information-book`, `sector-analysis` | 1-column navy cover, top \"logo + title\" \u002F bottom `.cover-meta`. |\n| `cover-multi` | `earnings-call-summary`, `peer-analysis` | 2-region grid: `.cover-top` with navy `.cover-left` + optional `.cover-strip` image + `.cover-bar-top`; `.cover-bottom` is an optional landscape band. |\n\nCover-multi rules:\n\n- Add the `has-cover-image` class to `.cover-top` and\u002For `.cover-bottom` **only when an `\u003Cimg>`\n  is populated** in `.cover-strip` \u002F `.cover-landscape`. Without the class, the strip and bar\n  are hidden by the canonical CSS.\n- `.cover-companies` lists per-skill chips. PA marks the target entity with\n  `class=\"company-chip target\"`; ECS lists the issuer first.\n- The `.cover-companies-label` text is per-skill (e.g. `PEERS`, `COMPANIES`).\n- Cover-image content (the `\u003Cimg>` URLs) is per-skill data; the wrapper classes are shared.\n\nCover-simple rules:\n\n- One `.cover-meta` row at the bottom; populate as many `\u003Cspan>\u003Cstrong>Label:\u003C\u002Fstrong> value\u003C\u002Fspan>`\n  pairs as the parent skill needs. PIB always emits `Type: Public Information Book`.\n\n## 3. Table of contents (snippet `toc-block`)\n\nThe TOC scaffold is identical across all four skills. Each parent fills the `\u003Cul class=\"toc-list\">`\nwith one `\u003Cli>` per section it emits, in document order, using the `.toc-num` \u002F `.toc-label` \u002F\n`.toc-dots` pattern. The trailing TOC entry always points to the Citations block\n(`#{prefix}-sources-anchor`, label `Citations`).\n\n## 4. Section block (snippet `section-block`)\n\nEvery titled section in the report body uses the `\u003Cdiv class=\"section\" id=\"{prefix}-section-{slug}\">`\n> `\u003Cdiv class=\"section-heading\">` + `\u003Cdiv class=\"section-content\">` shape. The body of\n`.section-content` is skill-specific (paragraphs, tables, lists, charts).\n\nThe `\u003Cdiv id=\"{prefix}-cite-{slot}\">\u003C\u002Fdiv>` placeholder inside `.section-content` is **opt-in**\nand only relevant to skills that consume the per-section citation recap from\n`skills\u002Fshared\u002Fcitations\u002F`. Skills that do not opt in omit the placeholder.\n\n## 5. Sources-section wrapper (snippet `sources-section-block`)\n\nThis is the same wrapper that `skills\u002Fshared\u002Fcitations\u002F` defines as `\u003Ctemplate id=\"sources-section\">`,\nre-shipped here so the document scaffold stays self-contained. The wrapper anchors the TOC link\ntarget via `id=\"{prefix}-sources-anchor\"` and contains `#{prefix}-sources` for the rows. The\n**rows themselves** (`.source-item`) are owned by `skills\u002Fshared\u002Fcitations\u002F`, not by this skill.\n\n## 6. Report footer (snippet `report-footer`)\n\nThe footer is identical across all four skills: navy `.report-footer` band with the Moody's\nAgentic Solutions logo on the left and the report date on the right. Substitute `{YYYY-MM-DD}`.\n\n## 7. Outlook badge (snippet `outlook-badge`)\n\nThe canonical visual treatment is **pastel background + colored text**. Five variants ship in\nthe canonical CSS:\n\n| class    | when to use                                                                |\n|----------|----------------------------------------------------------------------------|\n| `stable` | issuer-level outlook is `STA`\u002F`Stable`.                                    |\n| `positive`| outlook is `POS`\u002F`Positive`.                                              |\n| `negative`| outlook is `NEG`\u002F`Negative`.                                              |\n| `review` | outlook is `RUR`\u002F`On Review` (also catches \"Watch\" semantics).             |\n| `na`     | outlook unknown \u002F not applicable; renders muted gray.                      |\n\nThe label text is uppercased by CSS so the inner text can be mixed-case (e.g. `Stable`).\n\nPIB previously shipped a solid-fill variant (`background: var(--positive); color: #fff`) for\nits outlook badges. That carve-out is **removed** — PIB now inherits the canonical pastel\nvariant from this shared skill, and parent templates must not re-define `.outlook-badge` rules.\n\n## 8. Per-skill overrides\n\nThese rules are intentionally NOT in the canonical CSS. Each parent template keeps them above\nthe marker region (and only those — anything else inside the canonical block is shared):\n\n| skill                       | allowed local overrides                                                |\n|-----------------------------|------------------------------------------------------------------------|\n| `earnings-call-summary`     | none. Cover variant: `cover-multi`.                                    |\n| `peer-analysis`             | `.page { max-width: 1050px }`. Cover variant: `cover-multi`.           |\n| `public-information-book`   | `body { font-size: 12.5px }`, `.page { max-width: 920px }`. Cover variant: `cover-simple`. |\n| `sector-analysis`           | none. Cover variant: `cover-simple`.                                   |\n| `rating-analysis`           | Skill-managed template (Python builder `scripts\u002Fbuild_html.py`). Does not inline shared-template-css or shared-citations-css. Chart.js loaded from CDN. Cover variant: n\u002Fa.|\n\n\nSkill-specific CSS that the shared layer does not own (and which therefore stays in each\nparent template indefinitely):\n\n- All table classes (`.yoy-table`, `.ratings-table`, `.pa-table`, `.credit-drivers-table`,\n  `.ki-table`, `.sc-table`, `.fin-table`, `.data-table`, `.row-label`, etc.).\n- ECS `.credit-badge`, `.ratings-factors`.\n- ECS \u002F PA cover-image accent classes that are only meaningful inside `cover-multi` and that\n  use skill-specific spacing (most are already shared; anything with skill-specific tweaks\n  stays local).\n- PA `.sub-heading`, `.chart-container`, `.chart-title`, `.chart-legend`.\n- PIB chart helpers, ratings-grid helpers.\n- SA sector-card \u002F theme-card helpers.\n\n## 9. Canonical CSS\n\nThe canonical CSS lives **only** in `assets\u002Ftemplate.html` inside the\n`\u003Cstyle id=\"shared-template-css\">…\u003C\u002Fstyle>` block. Parent templates do **not** carry a\nduplicate copy of these rules. Each parent template instead reserves a marker region inside\nits own `\u003Cstyle>` tag bracketed by **CSS comments** (not HTML comments — the markers sit\ninside `\u003Cstyle>`, where `\u003C!-- … -->` would produce CSS parse errors):\n\n```css\n\u002F* BEGIN shared-template-css (inlined at emit time from skills\u002Fshared\u002Ftemplate\u002Fassets\u002Ftemplate.html) *\u002F\n\u002F* END shared-template-css *\u002F\n```\n\nAt emit time, the agent copies the **contents** (not the `\u003Cstyle>` wrapper) of\n`\u003Cstyle id=\"shared-template-css\">…\u003C\u002Fstyle>` from the shared asset and inserts them between\nthose two marker comments in the final emitted HTML. Treat the canonical CSS as a single\nblock — do not edit values per-skill. If a parent skill needs to restyle shared chrome, change\n`assets\u002Ftemplate.html` and the next emit picks it up automatically.\n\n### CSS variable contract\n\nThe block defines the following CSS custom properties on `:root`. They are available to every\npiece of skill-specific CSS that lives above the marker region:\n\n- `--navy`, `--accent` — primary palette.\n- `--gray-100`, `--gray-200`, `--gray-300`, `--gray-400`, `--gray-700` — neutral grays.\n- `--g100`, `--g200`, `--g300`, `--g400`, `--g700` — short aliases for the same grays. Both\n  naming schemes resolve. Skill-specific CSS may use either family interchangeably.\n- `--text` — body text color.\n- `--positive`, `--negative`, `--neutral` — semantic colors used by `.outlook-badge` and\n  by skill-specific tables (e.g. positive \u002F negative deltas).\n\n## 10. Quick checklist (use before submitting a report)\n\n- [ ] The contents of `\u003Cstyle id=\"shared-template-css\">` from `assets\u002Ftemplate.html` have been\n      inlined between the `\u002F* BEGIN shared-template-css *\u002F` \u002F `\u002F* END shared-template-css *\u002F`\n      markers in the emitted HTML.\n- [ ] The contents of `\u003Cstyle id=\"shared-citations-css\">` from\n      `skills\u002Fshared\u002Fcitations\u002Fassets\u002Ftemplate.html` have been inlined between the parallel\n      citations markers.\n- [ ] The parent template's `\u003Cstyle>` block contains **no duplicated copy** of any rule that\n      lives in either canonical block.\n- [ ] The cover uses exactly one variant (`cover-simple` or `cover-multi`) and matches the\n      parent skill's declared variant.\n- [ ] `.cover-multi`'s `.cover-top` \u002F `.cover-bottom` only carries `has-cover-image` when an\n      `\u003Cimg>` is populated.\n- [ ] All `.outlook-badge` instances use the canonical pastel variants (`stable`, `positive`,\n      `negative`, `review`, `na`). No solid-fill \u002F inline-color overrides anywhere.\n- [ ] The TOC's last row points to `#{prefix}-sources-anchor` with label `Citations`.\n- [ ] The emitted footer uses `.report-footer` + `.footer-logo` markup verbatim.\n- [ ] Per-skill overrides above the marker region are limited to the rows in section 8.\n",{"data":37,"body":38},{"name":4,"description":6},{"type":39,"children":40},"root",[41,50,96,398,429,436,477,483,495,501,605,619,675,706,735,754,759,899,904,1020,1025,1055,1068,1124,1137,1148,1178,1211,1224,1281,1294,1313,1326,1338,1496,1507,1534,1540,1545,1697,1702,1848,1854,1916,1947,1980,1987,2000,2136,2142,2400],{"type":42,"tag":43,"props":44,"children":46},"element","h1",{"id":45},"template-skill-shared",[47],{"type":48,"value":49},"text","Template Skill (shared)",{"type":42,"tag":51,"props":52,"children":53},"p",{},[54,56,62,64,71,73,79,80,86,88,94],{"type":48,"value":55},"This is the ",{"type":42,"tag":57,"props":58,"children":59},"strong",{},[60],{"type":48,"value":61},"single source of truth",{"type":48,"value":63}," for the visual chrome of every HTML report produced by\nthe parent skills ",{"type":42,"tag":65,"props":66,"children":68},"code",{"className":67},[],[69],{"type":48,"value":70},"earnings-call-summary",{"type":48,"value":72},", ",{"type":42,"tag":65,"props":74,"children":76},{"className":75},[],[77],{"type":48,"value":78},"peer-analysis",{"type":48,"value":72},{"type":42,"tag":65,"props":81,"children":83},{"className":82},[],[84],{"type":48,"value":85},"public-information-book",{"type":48,"value":87},", and\n",{"type":42,"tag":65,"props":89,"children":91},{"className":90},[],[92],{"type":48,"value":93},"sector-analysis",{"type":48,"value":95}," and others. It owns:",{"type":42,"tag":97,"props":98,"children":99},"ul",{},[100,165,170,221,242,289,316,364,369,388,393],{"type":42,"tag":101,"props":102,"children":103},"li",{},[104,106,112,113,119,120,126,128,134,135,141,142,148,149,155,157,163],{"type":48,"value":105},"Design tokens (",{"type":42,"tag":65,"props":107,"children":109},{"className":108},[],[110],{"type":48,"value":111},"--navy",{"type":48,"value":72},{"type":42,"tag":65,"props":114,"children":116},{"className":115},[],[117],{"type":48,"value":118},"--accent",{"type":48,"value":72},{"type":42,"tag":65,"props":121,"children":123},{"className":122},[],[124],{"type":48,"value":125},"--gray-*",{"type":48,"value":127}," \u002F ",{"type":42,"tag":65,"props":129,"children":131},{"className":130},[],[132],{"type":48,"value":133},"--g*",{"type":48,"value":72},{"type":42,"tag":65,"props":136,"children":138},{"className":137},[],[139],{"type":48,"value":140},"--text",{"type":48,"value":72},{"type":42,"tag":65,"props":143,"children":145},{"className":144},[],[146],{"type":48,"value":147},"--positive",{"type":48,"value":72},{"type":42,"tag":65,"props":150,"children":152},{"className":151},[],[153],{"type":48,"value":154},"--negative",{"type":48,"value":156},",\n",{"type":42,"tag":65,"props":158,"children":160},{"className":159},[],[161],{"type":48,"value":162},"--neutral",{"type":48,"value":164},").",{"type":42,"tag":101,"props":166,"children":167},{},[168],{"type":48,"value":169},"The CSS reset.",{"type":42,"tag":101,"props":171,"children":172},{},[173,175,181,183,189,191,197,199,205,207,213,214,220],{"type":48,"value":174},"Body and page base styling. The canonical defaults are ",{"type":42,"tag":65,"props":176,"children":178},{"className":177},[],[179],{"type":48,"value":180},"body { font-size: 13px }",{"type":48,"value":182}," and\n",{"type":42,"tag":65,"props":184,"children":186},{"className":185},[],[187],{"type":48,"value":188},".page { max-width: 900px }",{"type":48,"value":190},"; ECS \u002F SA inherit them as-is, PA overrides ",{"type":42,"tag":65,"props":192,"children":194},{"className":193},[],[195],{"type":48,"value":196},"max-width",{"type":48,"value":198}," to\n",{"type":42,"tag":65,"props":200,"children":202},{"className":201},[],[203],{"type":48,"value":204},"1050px",{"type":48,"value":206},", and PIB overrides both (",{"type":42,"tag":65,"props":208,"children":210},{"className":209},[],[211],{"type":48,"value":212},"font-size: 12.5px",{"type":48,"value":72},{"type":42,"tag":65,"props":215,"children":217},{"className":216},[],[218],{"type":48,"value":219},"max-width: 920px",{"type":48,"value":164},{"type":42,"tag":101,"props":222,"children":223},{},[224,226,232,234,240],{"type":48,"value":225},"Both cover variants (",{"type":42,"tag":65,"props":227,"children":229},{"className":228},[],[230],{"type":48,"value":231},"cover-simple",{"type":48,"value":233}," for PIB \u002F SA; ",{"type":42,"tag":65,"props":235,"children":237},{"className":236},[],[238],{"type":48,"value":239},"cover-multi",{"type":48,"value":241}," for ECS \u002F PA).",{"type":42,"tag":101,"props":243,"children":244},{},[245,247,253,254,260,261,267,268,274,275,281,282,288],{"type":48,"value":246},"TOC styling (",{"type":42,"tag":65,"props":248,"children":250},{"className":249},[],[251],{"type":48,"value":252},".toc-page",{"type":48,"value":72},{"type":42,"tag":65,"props":255,"children":257},{"className":256},[],[258],{"type":48,"value":259},".toc-heading",{"type":48,"value":72},{"type":42,"tag":65,"props":262,"children":264},{"className":263},[],[265],{"type":48,"value":266},".toc-list",{"type":48,"value":72},{"type":42,"tag":65,"props":269,"children":271},{"className":270},[],[272],{"type":48,"value":273},".toc-num",{"type":48,"value":72},{"type":42,"tag":65,"props":276,"children":278},{"className":277},[],[279],{"type":48,"value":280},".toc-label",{"type":48,"value":72},{"type":42,"tag":65,"props":283,"children":285},{"className":284},[],[286],{"type":48,"value":287},".toc-dots",{"type":48,"value":164},{"type":42,"tag":101,"props":290,"children":291},{},[292,294,300,301,307,308,314],{"type":48,"value":293},"Section styling (",{"type":42,"tag":65,"props":295,"children":297},{"className":296},[],[298],{"type":48,"value":299},".section",{"type":48,"value":72},{"type":42,"tag":65,"props":302,"children":304},{"className":303},[],[305],{"type":48,"value":306},".section-heading",{"type":48,"value":72},{"type":42,"tag":65,"props":309,"children":311},{"className":310},[],[312],{"type":48,"value":313},".section-content",{"type":48,"value":315}," and its descendants).",{"type":42,"tag":101,"props":317,"children":318},{},[319,321,327,329,335,336,342,343,349,350,356,357,363],{"type":48,"value":320},"The canonical pastel ",{"type":42,"tag":65,"props":322,"children":324},{"className":323},[],[325],{"type":48,"value":326},".outlook-badge",{"type":48,"value":328}," (",{"type":42,"tag":65,"props":330,"children":332},{"className":331},[],[333],{"type":48,"value":334},"stable",{"type":48,"value":127},{"type":42,"tag":65,"props":337,"children":339},{"className":338},[],[340],{"type":48,"value":341},"positive",{"type":48,"value":127},{"type":42,"tag":65,"props":344,"children":346},{"className":345},[],[347],{"type":48,"value":348},"negative",{"type":48,"value":127},{"type":42,"tag":65,"props":351,"children":353},{"className":352},[],[354],{"type":48,"value":355},"review",{"type":48,"value":127},{"type":42,"tag":65,"props":358,"children":360},{"className":359},[],[361],{"type":48,"value":362},"na",{"type":48,"value":164},{"type":42,"tag":101,"props":365,"children":366},{},[367],{"type":48,"value":368},"Anchor base styling.",{"type":42,"tag":101,"props":370,"children":371},{},[372,374,380,381,387],{"type":48,"value":373},"Footer styling (",{"type":42,"tag":65,"props":375,"children":377},{"className":376},[],[378],{"type":48,"value":379},".report-footer",{"type":48,"value":72},{"type":42,"tag":65,"props":382,"children":384},{"className":383},[],[385],{"type":48,"value":386},".footer-logo",{"type":48,"value":164},{"type":42,"tag":101,"props":389,"children":390},{},[391],{"type":48,"value":392},"Print rules.",{"type":42,"tag":101,"props":394,"children":395},{},[396],{"type":48,"value":397},"The HTML scaffolds for the document head, both covers, the TOC block, the section block, the\nsources-section wrapper, the footer, and the outlook-badge.",{"type":42,"tag":51,"props":399,"children":400},{},[401,403,414,416,422,424],{"type":48,"value":402},"The canonical CSS and the literal HTML markup contracts live in\n",{"type":42,"tag":404,"props":405,"children":407},"a",{"href":406},".\u002Fassets\u002Ftemplate.html",[408],{"type":42,"tag":65,"props":409,"children":411},{"className":410},[],[412],{"type":48,"value":413},"assets\u002Ftemplate.html",{"type":48,"value":415},". This ",{"type":42,"tag":65,"props":417,"children":419},{"className":418},[],[420],{"type":48,"value":421},"SKILL.md",{"type":48,"value":423}," describes the rules; the asset\nfile ships the verbatim implementation. ",{"type":42,"tag":57,"props":425,"children":426},{},[427],{"type":48,"value":428},"Parent skills must read both files before emitting.",{"type":42,"tag":430,"props":431,"children":433},"h2",{"id":432},"when-to-read-this-skill",[434],{"type":48,"value":435},"When to read this skill",{"type":42,"tag":51,"props":437,"children":438},{},[439,441,446,448,453,455,460,462,467,469,475],{"type":48,"value":440},"Read this skill from a parent skill ",{"type":42,"tag":57,"props":442,"children":443},{},[444],{"type":48,"value":445},"before",{"type":48,"value":447}," emitting any HTML report. Parent skills must\ncontain a directive near the top of their ",{"type":42,"tag":65,"props":449,"children":451},{"className":450},[],[452],{"type":48,"value":421},{"type":48,"value":454}," instructing the agent to read ",{"type":42,"tag":57,"props":456,"children":457},{},[458],{"type":48,"value":459},"both",{"type":48,"value":461},"\nthis file and ",{"type":42,"tag":65,"props":463,"children":465},{"className":464},[],[466],{"type":48,"value":413},{"type":48,"value":468},". The pairing is identical to the ",{"type":42,"tag":65,"props":470,"children":472},{"className":471},[],[473],{"type":48,"value":474},"skills\u002Fshared\u002Fcitations\u002F",{"type":48,"value":476},"\ncontract — every HTML report touches both shared skills.",{"type":42,"tag":430,"props":478,"children":480},{"id":479},"lookup-order-rule-non-negotiable",[481],{"type":48,"value":482},"Lookup-order rule (non-negotiable)",{"type":42,"tag":51,"props":484,"children":485},{},[486,488,493],{"type":48,"value":487},"Whenever the agent is about to author CSS, an HTML scaffold, a class name, a design token, or\nany visual chrome that the parent skill does not itself define, it must consult this shared\ntemplate skill ",{"type":42,"tag":57,"props":489,"children":490},{},[491],{"type":48,"value":492},"first",{"type":48,"value":494}," and only fall back to inventing markup if the shared layer also does\nnot cover the need. Do not silently restyle anything the shared skill owns; do not invent CSS or\nHTML scaffolding for elements the shared skill already provides.",{"type":42,"tag":430,"props":496,"children":498},{"id":497},"output-contract-single-global-rules",[499],{"type":48,"value":500},"Output contract (single global rules)",{"type":42,"tag":502,"props":503,"children":504},"ol",{},[505,548,574,586],{"type":42,"tag":101,"props":506,"children":507},{},[508,510,516,518,523,525,531,532,538,540,546],{"type":48,"value":509},"Every emitted HTML report inlines the contents of ",{"type":42,"tag":65,"props":511,"children":513},{"className":512},[],[514],{"type":48,"value":515},"\u003Cstyle id=\"shared-template-css\">",{"type":48,"value":517}," from\n",{"type":42,"tag":65,"props":519,"children":521},{"className":520},[],[522],{"type":48,"value":413},{"type":48,"value":524}," between the ",{"type":42,"tag":65,"props":526,"children":528},{"className":527},[],[529],{"type":48,"value":530},"\u002F* BEGIN shared-template-css ... *\u002F",{"type":48,"value":182},{"type":42,"tag":65,"props":533,"children":535},{"className":534},[],[536],{"type":48,"value":537},"\u002F* END shared-template-css *\u002F",{"type":48,"value":539}," CSS-comment markers in the parent template's ",{"type":42,"tag":65,"props":541,"children":543},{"className":542},[],[544],{"type":48,"value":545},"\u003Cstyle>",{"type":48,"value":547},"\nblock. Parent templates ship only the marker comments; they never duplicate the rules.",{"type":42,"tag":101,"props":549,"children":550},{},[551,553,559,561,566,567,572],{"type":48,"value":552},"Every emitted HTML report uses the literal markup from the matching ",{"type":42,"tag":65,"props":554,"children":556},{"className":555},[],[557],{"type":48,"value":558},"\u003Ctemplate>",{"type":48,"value":560}," snippet for\nthe document head, cover (one of ",{"type":42,"tag":65,"props":562,"children":564},{"className":563},[],[565],{"type":48,"value":231},{"type":48,"value":127},{"type":42,"tag":65,"props":568,"children":570},{"className":569},[],[571],{"type":48,"value":239},{"type":48,"value":573},"), TOC, section block,\nsources-section wrapper, and footer. Class names and attribute order are invariant.",{"type":42,"tag":101,"props":575,"children":576},{},[577,579,584],{"type":48,"value":578},"Each parent skill picks ",{"type":42,"tag":57,"props":580,"children":581},{},[582],{"type":48,"value":583},"exactly one",{"type":48,"value":585}," cover variant. Variants do not mix within a single\nreport.",{"type":42,"tag":101,"props":587,"children":588},{},[589,591,596,598,603],{"type":48,"value":590},"Per-skill CSS overrides (see \"Per-skill overrides\" below) live ",{"type":42,"tag":57,"props":592,"children":593},{},[594],{"type":48,"value":595},"above",{"type":48,"value":597}," the marker region\nin the parent template's ",{"type":42,"tag":65,"props":599,"children":601},{"className":600},[],[602],{"type":48,"value":545},{"type":48,"value":604}," block — never inside it, and never as duplicated copies\nof shared rules.",{"type":42,"tag":430,"props":606,"children":608},{"id":607},"_1-document-head-snippet-document-head",[609,611,617],{"type":48,"value":610},"1. Document head (snippet ",{"type":42,"tag":65,"props":612,"children":614},{"className":613},[],[615],{"type":48,"value":616},"document-head",{"type":48,"value":618},")",{"type":42,"tag":51,"props":620,"children":621},{},[622,624,629,631,637,639,645,646,652,653,659,660,666,668,673],{"type":48,"value":623},"The shared ",{"type":42,"tag":65,"props":625,"children":627},{"className":626},[],[628],{"type":48,"value":616},{"type":48,"value":630}," snippet is the literal contract for the top of the parent template:\n",{"type":42,"tag":65,"props":632,"children":634},{"className":633},[],[635],{"type":48,"value":636},"\u003C!DOCTYPE html>",{"type":48,"value":638},", the ",{"type":42,"tag":65,"props":640,"children":642},{"className":641},[],[643],{"type":48,"value":644},"\u003Chtml>",{"type":48,"value":127},{"type":42,"tag":65,"props":647,"children":649},{"className":648},[],[650],{"type":48,"value":651},"\u003Chead>",{"type":48,"value":127},{"type":42,"tag":65,"props":654,"children":656},{"className":655},[],[657],{"type":48,"value":658},"\u003Cmeta>",{"type":48,"value":127},{"type":42,"tag":65,"props":661,"children":663},{"className":662},[],[664],{"type":48,"value":665},"\u003Ctitle>",{"type":48,"value":667}," boilerplate, and the\n",{"type":42,"tag":65,"props":669,"children":671},{"className":670},[],[672],{"type":48,"value":545},{"type":48,"value":674}," block that contains:",{"type":42,"tag":502,"props":676,"children":677},{},[678,683,695],{"type":42,"tag":101,"props":679,"children":680},{},[681],{"type":48,"value":682},"Skill-specific overrides (see below).",{"type":42,"tag":101,"props":684,"children":685},{},[686,688,693],{"type":48,"value":687},"The ",{"type":42,"tag":65,"props":689,"children":691},{"className":690},[],[692],{"type":48,"value":530},{"type":48,"value":694}," marker region.",{"type":42,"tag":101,"props":696,"children":697},{},[698,699,705],{"type":48,"value":687},{"type":42,"tag":65,"props":700,"children":702},{"className":701},[],[703],{"type":48,"value":704},"\u002F* BEGIN shared-citations-css ... *\u002F",{"type":48,"value":694},{"type":42,"tag":51,"props":707,"children":708},{},[709,711,717,719,725,727,733],{"type":48,"value":710},"Then ",{"type":42,"tag":65,"props":712,"children":714},{"className":713},[],[715],{"type":48,"value":716},"\u003Cbody>",{"type":48,"value":718}," opens with ",{"type":42,"tag":65,"props":720,"children":722},{"className":721},[],[723],{"type":48,"value":724},"\u003Cdiv class=\"page\">",{"type":48,"value":726},", which wraps the cover, TOC, report body, and\nfooter. Substitute ",{"type":42,"tag":65,"props":728,"children":730},{"className":729},[],[731],{"type":48,"value":732},"{report_title}",{"type":48,"value":734},".",{"type":42,"tag":430,"props":736,"children":738},{"id":737},"_2-cover-snippets-cover-simple-and-cover-multi",[739,741,746,748,753],{"type":48,"value":740},"2. Cover (snippets ",{"type":42,"tag":65,"props":742,"children":744},{"className":743},[],[745],{"type":48,"value":231},{"type":48,"value":747}," and ",{"type":42,"tag":65,"props":749,"children":751},{"className":750},[],[752],{"type":48,"value":239},{"type":48,"value":618},{"type":42,"tag":51,"props":755,"children":756},{},[757],{"type":48,"value":758},"Two variants. Each parent skill uses exactly one:",{"type":42,"tag":760,"props":761,"children":762},"table",{},[763,787],{"type":42,"tag":764,"props":765,"children":766},"thead",{},[767],{"type":42,"tag":768,"props":769,"children":770},"tr",{},[771,777,782],{"type":42,"tag":772,"props":773,"children":774},"th",{},[775],{"type":48,"value":776},"variant",{"type":42,"tag":772,"props":778,"children":779},{},[780],{"type":48,"value":781},"used by",{"type":42,"tag":772,"props":783,"children":784},{},[785],{"type":48,"value":786},"shape",{"type":42,"tag":788,"props":789,"children":790},"tbody",{},[791,829],{"type":42,"tag":768,"props":792,"children":793},{},[794,803,817],{"type":42,"tag":795,"props":796,"children":797},"td",{},[798],{"type":42,"tag":65,"props":799,"children":801},{"className":800},[],[802],{"type":48,"value":231},{"type":42,"tag":795,"props":804,"children":805},{},[806,811,812],{"type":42,"tag":65,"props":807,"children":809},{"className":808},[],[810],{"type":48,"value":85},{"type":48,"value":72},{"type":42,"tag":65,"props":813,"children":815},{"className":814},[],[816],{"type":48,"value":93},{"type":42,"tag":795,"props":818,"children":819},{},[820,822,828],{"type":48,"value":821},"1-column navy cover, top \"logo + title\" \u002F bottom ",{"type":42,"tag":65,"props":823,"children":825},{"className":824},[],[826],{"type":48,"value":827},".cover-meta",{"type":48,"value":734},{"type":42,"tag":768,"props":830,"children":831},{},[832,840,854],{"type":42,"tag":795,"props":833,"children":834},{},[835],{"type":42,"tag":65,"props":836,"children":838},{"className":837},[],[839],{"type":48,"value":239},{"type":42,"tag":795,"props":841,"children":842},{},[843,848,849],{"type":42,"tag":65,"props":844,"children":846},{"className":845},[],[847],{"type":48,"value":70},{"type":48,"value":72},{"type":42,"tag":65,"props":850,"children":852},{"className":851},[],[853],{"type":48,"value":78},{"type":42,"tag":795,"props":855,"children":856},{},[857,859,865,867,873,875,881,883,889,891,897],{"type":48,"value":858},"2-region grid: ",{"type":42,"tag":65,"props":860,"children":862},{"className":861},[],[863],{"type":48,"value":864},".cover-top",{"type":48,"value":866}," with navy ",{"type":42,"tag":65,"props":868,"children":870},{"className":869},[],[871],{"type":48,"value":872},".cover-left",{"type":48,"value":874}," + optional ",{"type":42,"tag":65,"props":876,"children":878},{"className":877},[],[879],{"type":48,"value":880},".cover-strip",{"type":48,"value":882}," image + ",{"type":42,"tag":65,"props":884,"children":886},{"className":885},[],[887],{"type":48,"value":888},".cover-bar-top",{"type":48,"value":890},"; ",{"type":42,"tag":65,"props":892,"children":894},{"className":893},[],[895],{"type":48,"value":896},".cover-bottom",{"type":48,"value":898}," is an optional landscape band.",{"type":42,"tag":51,"props":900,"children":901},{},[902],{"type":48,"value":903},"Cover-multi rules:",{"type":42,"tag":97,"props":905,"children":906},{},[907,963,982,1008],{"type":42,"tag":101,"props":908,"children":909},{},[910,912,918,920,925,927,932,934,947,949,954,955,961],{"type":48,"value":911},"Add the ",{"type":42,"tag":65,"props":913,"children":915},{"className":914},[],[916],{"type":48,"value":917},"has-cover-image",{"type":48,"value":919}," class to ",{"type":42,"tag":65,"props":921,"children":923},{"className":922},[],[924],{"type":48,"value":864},{"type":48,"value":926}," and\u002For ",{"type":42,"tag":65,"props":928,"children":930},{"className":929},[],[931],{"type":48,"value":896},{"type":48,"value":933}," ",{"type":42,"tag":57,"props":935,"children":936},{},[937,939,945],{"type":48,"value":938},"only when an ",{"type":42,"tag":65,"props":940,"children":942},{"className":941},[],[943],{"type":48,"value":944},"\u003Cimg>",{"type":48,"value":946},"\nis populated",{"type":48,"value":948}," in ",{"type":42,"tag":65,"props":950,"children":952},{"className":951},[],[953],{"type":48,"value":880},{"type":48,"value":127},{"type":42,"tag":65,"props":956,"children":958},{"className":957},[],[959],{"type":48,"value":960},".cover-landscape",{"type":48,"value":962},". Without the class, the strip and bar\nare hidden by the canonical CSS.",{"type":42,"tag":101,"props":964,"children":965},{},[966,972,974,980],{"type":42,"tag":65,"props":967,"children":969},{"className":968},[],[970],{"type":48,"value":971},".cover-companies",{"type":48,"value":973}," lists per-skill chips. PA marks the target entity with\n",{"type":42,"tag":65,"props":975,"children":977},{"className":976},[],[978],{"type":48,"value":979},"class=\"company-chip target\"",{"type":48,"value":981},"; ECS lists the issuer first.",{"type":42,"tag":101,"props":983,"children":984},{},[985,986,992,994,1000,1001,1007],{"type":48,"value":687},{"type":42,"tag":65,"props":987,"children":989},{"className":988},[],[990],{"type":48,"value":991},".cover-companies-label",{"type":48,"value":993}," text is per-skill (e.g. ",{"type":42,"tag":65,"props":995,"children":997},{"className":996},[],[998],{"type":48,"value":999},"PEERS",{"type":48,"value":72},{"type":42,"tag":65,"props":1002,"children":1004},{"className":1003},[],[1005],{"type":48,"value":1006},"COMPANIES",{"type":48,"value":164},{"type":42,"tag":101,"props":1009,"children":1010},{},[1011,1013,1018],{"type":48,"value":1012},"Cover-image content (the ",{"type":42,"tag":65,"props":1014,"children":1016},{"className":1015},[],[1017],{"type":48,"value":944},{"type":48,"value":1019}," URLs) is per-skill data; the wrapper classes are shared.",{"type":42,"tag":51,"props":1021,"children":1022},{},[1023],{"type":48,"value":1024},"Cover-simple rules:",{"type":42,"tag":97,"props":1026,"children":1027},{},[1028],{"type":42,"tag":101,"props":1029,"children":1030},{},[1031,1033,1038,1040,1046,1048,1054],{"type":48,"value":1032},"One ",{"type":42,"tag":65,"props":1034,"children":1036},{"className":1035},[],[1037],{"type":48,"value":827},{"type":48,"value":1039}," row at the bottom; populate as many ",{"type":42,"tag":65,"props":1041,"children":1043},{"className":1042},[],[1044],{"type":48,"value":1045},"\u003Cspan>\u003Cstrong>Label:\u003C\u002Fstrong> value\u003C\u002Fspan>",{"type":48,"value":1047},"\npairs as the parent skill needs. PIB always emits ",{"type":42,"tag":65,"props":1049,"children":1051},{"className":1050},[],[1052],{"type":48,"value":1053},"Type: Public Information Book",{"type":48,"value":734},{"type":42,"tag":430,"props":1056,"children":1058},{"id":1057},"_3-table-of-contents-snippet-toc-block",[1059,1061,1067],{"type":48,"value":1060},"3. Table of contents (snippet ",{"type":42,"tag":65,"props":1062,"children":1064},{"className":1063},[],[1065],{"type":48,"value":1066},"toc-block",{"type":48,"value":618},{"type":42,"tag":51,"props":1069,"children":1070},{},[1071,1073,1079,1081,1087,1089,1094,1095,1100,1102,1107,1109,1115,1117,1123],{"type":48,"value":1072},"The TOC scaffold is identical across all four skills. Each parent fills the ",{"type":42,"tag":65,"props":1074,"children":1076},{"className":1075},[],[1077],{"type":48,"value":1078},"\u003Cul class=\"toc-list\">",{"type":48,"value":1080},"\nwith one ",{"type":42,"tag":65,"props":1082,"children":1084},{"className":1083},[],[1085],{"type":48,"value":1086},"\u003Cli>",{"type":48,"value":1088}," per section it emits, in document order, using the ",{"type":42,"tag":65,"props":1090,"children":1092},{"className":1091},[],[1093],{"type":48,"value":273},{"type":48,"value":127},{"type":42,"tag":65,"props":1096,"children":1098},{"className":1097},[],[1099],{"type":48,"value":280},{"type":48,"value":1101}," \u002F\n",{"type":42,"tag":65,"props":1103,"children":1105},{"className":1104},[],[1106],{"type":48,"value":287},{"type":48,"value":1108}," pattern. The trailing TOC entry always points to the Citations block\n(",{"type":42,"tag":65,"props":1110,"children":1112},{"className":1111},[],[1113],{"type":48,"value":1114},"#{prefix}-sources-anchor",{"type":48,"value":1116},", label ",{"type":42,"tag":65,"props":1118,"children":1120},{"className":1119},[],[1121],{"type":48,"value":1122},"Citations",{"type":48,"value":164},{"type":42,"tag":430,"props":1125,"children":1127},{"id":1126},"_4-section-block-snippet-section-block",[1128,1130,1136],{"type":48,"value":1129},"4. Section block (snippet ",{"type":42,"tag":65,"props":1131,"children":1133},{"className":1132},[],[1134],{"type":48,"value":1135},"section-block",{"type":48,"value":618},{"type":42,"tag":51,"props":1138,"children":1139},{},[1140,1142],{"type":48,"value":1141},"Every titled section in the report body uses the ",{"type":42,"tag":65,"props":1143,"children":1145},{"className":1144},[],[1146],{"type":48,"value":1147},"\u003Cdiv class=\"section\" id=\"{prefix}-section-{slug}\">",{"type":42,"tag":1149,"props":1150,"children":1151},"blockquote",{},[1152],{"type":42,"tag":51,"props":1153,"children":1154},{},[1155,1161,1163,1169,1171,1176],{"type":42,"tag":65,"props":1156,"children":1158},{"className":1157},[],[1159],{"type":48,"value":1160},"\u003Cdiv class=\"section-heading\">",{"type":48,"value":1162}," + ",{"type":42,"tag":65,"props":1164,"children":1166},{"className":1165},[],[1167],{"type":48,"value":1168},"\u003Cdiv class=\"section-content\">",{"type":48,"value":1170}," shape. The body of\n",{"type":42,"tag":65,"props":1172,"children":1174},{"className":1173},[],[1175],{"type":48,"value":313},{"type":48,"value":1177}," is skill-specific (paragraphs, tables, lists, charts).",{"type":42,"tag":51,"props":1179,"children":1180},{},[1181,1182,1188,1190,1195,1197,1202,1204,1209],{"type":48,"value":687},{"type":42,"tag":65,"props":1183,"children":1185},{"className":1184},[],[1186],{"type":48,"value":1187},"\u003Cdiv id=\"{prefix}-cite-{slot}\">\u003C\u002Fdiv>",{"type":48,"value":1189}," placeholder inside ",{"type":42,"tag":65,"props":1191,"children":1193},{"className":1192},[],[1194],{"type":48,"value":313},{"type":48,"value":1196}," is ",{"type":42,"tag":57,"props":1198,"children":1199},{},[1200],{"type":48,"value":1201},"opt-in",{"type":48,"value":1203},"\nand only relevant to skills that consume the per-section citation recap from\n",{"type":42,"tag":65,"props":1205,"children":1207},{"className":1206},[],[1208],{"type":48,"value":474},{"type":48,"value":1210},". Skills that do not opt in omit the placeholder.",{"type":42,"tag":430,"props":1212,"children":1214},{"id":1213},"_5-sources-section-wrapper-snippet-sources-section-block",[1215,1217,1223],{"type":48,"value":1216},"5. Sources-section wrapper (snippet ",{"type":42,"tag":65,"props":1218,"children":1220},{"className":1219},[],[1221],{"type":48,"value":1222},"sources-section-block",{"type":48,"value":618},{"type":42,"tag":51,"props":1225,"children":1226},{},[1227,1229,1234,1236,1242,1244,1250,1252,1258,1260,1265,1266,1272,1274,1279],{"type":48,"value":1228},"This is the same wrapper that ",{"type":42,"tag":65,"props":1230,"children":1232},{"className":1231},[],[1233],{"type":48,"value":474},{"type":48,"value":1235}," defines as ",{"type":42,"tag":65,"props":1237,"children":1239},{"className":1238},[],[1240],{"type":48,"value":1241},"\u003Ctemplate id=\"sources-section\">",{"type":48,"value":1243},",\nre-shipped here so the document scaffold stays self-contained. The wrapper anchors the TOC link\ntarget via ",{"type":42,"tag":65,"props":1245,"children":1247},{"className":1246},[],[1248],{"type":48,"value":1249},"id=\"{prefix}-sources-anchor\"",{"type":48,"value":1251}," and contains ",{"type":42,"tag":65,"props":1253,"children":1255},{"className":1254},[],[1256],{"type":48,"value":1257},"#{prefix}-sources",{"type":48,"value":1259}," for the rows. The\n",{"type":42,"tag":57,"props":1261,"children":1262},{},[1263],{"type":48,"value":1264},"rows themselves",{"type":48,"value":328},{"type":42,"tag":65,"props":1267,"children":1269},{"className":1268},[],[1270],{"type":48,"value":1271},".source-item",{"type":48,"value":1273},") are owned by ",{"type":42,"tag":65,"props":1275,"children":1277},{"className":1276},[],[1278],{"type":48,"value":474},{"type":48,"value":1280},", not by this skill.",{"type":42,"tag":430,"props":1282,"children":1284},{"id":1283},"_6-report-footer-snippet-report-footer",[1285,1287,1293],{"type":48,"value":1286},"6. Report footer (snippet ",{"type":42,"tag":65,"props":1288,"children":1290},{"className":1289},[],[1291],{"type":48,"value":1292},"report-footer",{"type":48,"value":618},{"type":42,"tag":51,"props":1295,"children":1296},{},[1297,1299,1304,1306,1312],{"type":48,"value":1298},"The footer is identical across all four skills: navy ",{"type":42,"tag":65,"props":1300,"children":1302},{"className":1301},[],[1303],{"type":48,"value":379},{"type":48,"value":1305}," band with the Moody's\nAgentic Solutions logo on the left and the report date on the right. Substitute ",{"type":42,"tag":65,"props":1307,"children":1309},{"className":1308},[],[1310],{"type":48,"value":1311},"{YYYY-MM-DD}",{"type":48,"value":734},{"type":42,"tag":430,"props":1314,"children":1316},{"id":1315},"_7-outlook-badge-snippet-outlook-badge",[1317,1319,1325],{"type":48,"value":1318},"7. Outlook badge (snippet ",{"type":42,"tag":65,"props":1320,"children":1322},{"className":1321},[],[1323],{"type":48,"value":1324},"outlook-badge",{"type":48,"value":618},{"type":42,"tag":51,"props":1327,"children":1328},{},[1329,1331,1336],{"type":48,"value":1330},"The canonical visual treatment is ",{"type":42,"tag":57,"props":1332,"children":1333},{},[1334],{"type":48,"value":1335},"pastel background + colored text",{"type":48,"value":1337},". Five variants ship in\nthe canonical CSS:",{"type":42,"tag":760,"props":1339,"children":1340},{},[1341,1357],{"type":42,"tag":764,"props":1342,"children":1343},{},[1344],{"type":42,"tag":768,"props":1345,"children":1346},{},[1347,1352],{"type":42,"tag":772,"props":1348,"children":1349},{},[1350],{"type":48,"value":1351},"class",{"type":42,"tag":772,"props":1353,"children":1354},{},[1355],{"type":48,"value":1356},"when to use",{"type":42,"tag":788,"props":1358,"children":1359},{},[1360,1391,1421,1450,1480],{"type":42,"tag":768,"props":1361,"children":1362},{},[1363,1371],{"type":42,"tag":795,"props":1364,"children":1365},{},[1366],{"type":42,"tag":65,"props":1367,"children":1369},{"className":1368},[],[1370],{"type":48,"value":334},{"type":42,"tag":795,"props":1372,"children":1373},{},[1374,1376,1382,1384,1390],{"type":48,"value":1375},"issuer-level outlook is ",{"type":42,"tag":65,"props":1377,"children":1379},{"className":1378},[],[1380],{"type":48,"value":1381},"STA",{"type":48,"value":1383},"\u002F",{"type":42,"tag":65,"props":1385,"children":1387},{"className":1386},[],[1388],{"type":48,"value":1389},"Stable",{"type":48,"value":734},{"type":42,"tag":768,"props":1392,"children":1393},{},[1394,1402],{"type":42,"tag":795,"props":1395,"children":1396},{},[1397],{"type":42,"tag":65,"props":1398,"children":1400},{"className":1399},[],[1401],{"type":48,"value":341},{"type":42,"tag":795,"props":1403,"children":1404},{},[1405,1407,1413,1414,1420],{"type":48,"value":1406},"outlook is ",{"type":42,"tag":65,"props":1408,"children":1410},{"className":1409},[],[1411],{"type":48,"value":1412},"POS",{"type":48,"value":1383},{"type":42,"tag":65,"props":1415,"children":1417},{"className":1416},[],[1418],{"type":48,"value":1419},"Positive",{"type":48,"value":734},{"type":42,"tag":768,"props":1422,"children":1423},{},[1424,1432],{"type":42,"tag":795,"props":1425,"children":1426},{},[1427],{"type":42,"tag":65,"props":1428,"children":1430},{"className":1429},[],[1431],{"type":48,"value":348},{"type":42,"tag":795,"props":1433,"children":1434},{},[1435,1436,1442,1443,1449],{"type":48,"value":1406},{"type":42,"tag":65,"props":1437,"children":1439},{"className":1438},[],[1440],{"type":48,"value":1441},"NEG",{"type":48,"value":1383},{"type":42,"tag":65,"props":1444,"children":1446},{"className":1445},[],[1447],{"type":48,"value":1448},"Negative",{"type":48,"value":734},{"type":42,"tag":768,"props":1451,"children":1452},{},[1453,1461],{"type":42,"tag":795,"props":1454,"children":1455},{},[1456],{"type":42,"tag":65,"props":1457,"children":1459},{"className":1458},[],[1460],{"type":48,"value":355},{"type":42,"tag":795,"props":1462,"children":1463},{},[1464,1465,1471,1472,1478],{"type":48,"value":1406},{"type":42,"tag":65,"props":1466,"children":1468},{"className":1467},[],[1469],{"type":48,"value":1470},"RUR",{"type":48,"value":1383},{"type":42,"tag":65,"props":1473,"children":1475},{"className":1474},[],[1476],{"type":48,"value":1477},"On Review",{"type":48,"value":1479}," (also catches \"Watch\" semantics).",{"type":42,"tag":768,"props":1481,"children":1482},{},[1483,1491],{"type":42,"tag":795,"props":1484,"children":1485},{},[1486],{"type":42,"tag":65,"props":1487,"children":1489},{"className":1488},[],[1490],{"type":48,"value":362},{"type":42,"tag":795,"props":1492,"children":1493},{},[1494],{"type":48,"value":1495},"outlook unknown \u002F not applicable; renders muted gray.",{"type":42,"tag":51,"props":1497,"children":1498},{},[1499,1501,1506],{"type":48,"value":1500},"The label text is uppercased by CSS so the inner text can be mixed-case (e.g. ",{"type":42,"tag":65,"props":1502,"children":1504},{"className":1503},[],[1505],{"type":48,"value":1389},{"type":48,"value":164},{"type":42,"tag":51,"props":1508,"children":1509},{},[1510,1512,1518,1520,1525,1527,1532],{"type":48,"value":1511},"PIB previously shipped a solid-fill variant (",{"type":42,"tag":65,"props":1513,"children":1515},{"className":1514},[],[1516],{"type":48,"value":1517},"background: var(--positive); color: #fff",{"type":48,"value":1519},") for\nits outlook badges. That carve-out is ",{"type":42,"tag":57,"props":1521,"children":1522},{},[1523],{"type":48,"value":1524},"removed",{"type":48,"value":1526}," — PIB now inherits the canonical pastel\nvariant from this shared skill, and parent templates must not re-define ",{"type":42,"tag":65,"props":1528,"children":1530},{"className":1529},[],[1531],{"type":48,"value":326},{"type":48,"value":1533}," rules.",{"type":42,"tag":430,"props":1535,"children":1537},{"id":1536},"_8-per-skill-overrides",[1538],{"type":48,"value":1539},"8. Per-skill overrides",{"type":42,"tag":51,"props":1541,"children":1542},{},[1543],{"type":48,"value":1544},"These rules are intentionally NOT in the canonical CSS. Each parent template keeps them above\nthe marker region (and only those — anything else inside the canonical block is shared):",{"type":42,"tag":760,"props":1546,"children":1547},{},[1548,1564],{"type":42,"tag":764,"props":1549,"children":1550},{},[1551],{"type":42,"tag":768,"props":1552,"children":1553},{},[1554,1559],{"type":42,"tag":772,"props":1555,"children":1556},{},[1557],{"type":48,"value":1558},"skill",{"type":42,"tag":772,"props":1560,"children":1561},{},[1562],{"type":48,"value":1563},"allowed local overrides",{"type":42,"tag":788,"props":1565,"children":1566},{},[1567,1589,1617,1651,1672],{"type":42,"tag":768,"props":1568,"children":1569},{},[1570,1578],{"type":42,"tag":795,"props":1571,"children":1572},{},[1573],{"type":42,"tag":65,"props":1574,"children":1576},{"className":1575},[],[1577],{"type":48,"value":70},{"type":42,"tag":795,"props":1579,"children":1580},{},[1581,1583,1588],{"type":48,"value":1582},"none. Cover variant: ",{"type":42,"tag":65,"props":1584,"children":1586},{"className":1585},[],[1587],{"type":48,"value":239},{"type":48,"value":734},{"type":42,"tag":768,"props":1590,"children":1591},{},[1592,1600],{"type":42,"tag":795,"props":1593,"children":1594},{},[1595],{"type":42,"tag":65,"props":1596,"children":1598},{"className":1597},[],[1599],{"type":48,"value":78},{"type":42,"tag":795,"props":1601,"children":1602},{},[1603,1609,1611,1616],{"type":42,"tag":65,"props":1604,"children":1606},{"className":1605},[],[1607],{"type":48,"value":1608},".page { max-width: 1050px }",{"type":48,"value":1610},". Cover variant: ",{"type":42,"tag":65,"props":1612,"children":1614},{"className":1613},[],[1615],{"type":48,"value":239},{"type":48,"value":734},{"type":42,"tag":768,"props":1618,"children":1619},{},[1620,1628],{"type":42,"tag":795,"props":1621,"children":1622},{},[1623],{"type":42,"tag":65,"props":1624,"children":1626},{"className":1625},[],[1627],{"type":48,"value":85},{"type":42,"tag":795,"props":1629,"children":1630},{},[1631,1637,1638,1644,1645,1650],{"type":42,"tag":65,"props":1632,"children":1634},{"className":1633},[],[1635],{"type":48,"value":1636},"body { font-size: 12.5px }",{"type":48,"value":72},{"type":42,"tag":65,"props":1639,"children":1641},{"className":1640},[],[1642],{"type":48,"value":1643},".page { max-width: 920px }",{"type":48,"value":1610},{"type":42,"tag":65,"props":1646,"children":1648},{"className":1647},[],[1649],{"type":48,"value":231},{"type":48,"value":734},{"type":42,"tag":768,"props":1652,"children":1653},{},[1654,1662],{"type":42,"tag":795,"props":1655,"children":1656},{},[1657],{"type":42,"tag":65,"props":1658,"children":1660},{"className":1659},[],[1661],{"type":48,"value":93},{"type":42,"tag":795,"props":1663,"children":1664},{},[1665,1666,1671],{"type":48,"value":1582},{"type":42,"tag":65,"props":1667,"children":1669},{"className":1668},[],[1670],{"type":48,"value":231},{"type":48,"value":734},{"type":42,"tag":768,"props":1673,"children":1674},{},[1675,1684],{"type":42,"tag":795,"props":1676,"children":1677},{},[1678],{"type":42,"tag":65,"props":1679,"children":1681},{"className":1680},[],[1682],{"type":48,"value":1683},"rating-analysis",{"type":42,"tag":795,"props":1685,"children":1686},{},[1687,1689,1695],{"type":48,"value":1688},"Skill-managed template (Python builder ",{"type":42,"tag":65,"props":1690,"children":1692},{"className":1691},[],[1693],{"type":48,"value":1694},"scripts\u002Fbuild_html.py",{"type":48,"value":1696},"). Does not inline shared-template-css or shared-citations-css. Chart.js loaded from CDN. Cover variant: n\u002Fa.",{"type":42,"tag":51,"props":1698,"children":1699},{},[1700],{"type":48,"value":1701},"Skill-specific CSS that the shared layer does not own (and which therefore stays in each\nparent template indefinitely):",{"type":42,"tag":97,"props":1703,"children":1704},{},[1705,1774,1793,1805,1838,1843],{"type":42,"tag":101,"props":1706,"children":1707},{},[1708,1710,1716,1717,1723,1724,1730,1731,1737,1738,1744,1745,1751,1752,1758,1759,1765,1766,1772],{"type":48,"value":1709},"All table classes (",{"type":42,"tag":65,"props":1711,"children":1713},{"className":1712},[],[1714],{"type":48,"value":1715},".yoy-table",{"type":48,"value":72},{"type":42,"tag":65,"props":1718,"children":1720},{"className":1719},[],[1721],{"type":48,"value":1722},".ratings-table",{"type":48,"value":72},{"type":42,"tag":65,"props":1725,"children":1727},{"className":1726},[],[1728],{"type":48,"value":1729},".pa-table",{"type":48,"value":72},{"type":42,"tag":65,"props":1732,"children":1734},{"className":1733},[],[1735],{"type":48,"value":1736},".credit-drivers-table",{"type":48,"value":156},{"type":42,"tag":65,"props":1739,"children":1741},{"className":1740},[],[1742],{"type":48,"value":1743},".ki-table",{"type":48,"value":72},{"type":42,"tag":65,"props":1746,"children":1748},{"className":1747},[],[1749],{"type":48,"value":1750},".sc-table",{"type":48,"value":72},{"type":42,"tag":65,"props":1753,"children":1755},{"className":1754},[],[1756],{"type":48,"value":1757},".fin-table",{"type":48,"value":72},{"type":42,"tag":65,"props":1760,"children":1762},{"className":1761},[],[1763],{"type":48,"value":1764},".data-table",{"type":48,"value":72},{"type":42,"tag":65,"props":1767,"children":1769},{"className":1768},[],[1770],{"type":48,"value":1771},".row-label",{"type":48,"value":1773},", etc.).",{"type":42,"tag":101,"props":1775,"children":1776},{},[1777,1779,1785,1786,1792],{"type":48,"value":1778},"ECS ",{"type":42,"tag":65,"props":1780,"children":1782},{"className":1781},[],[1783],{"type":48,"value":1784},".credit-badge",{"type":48,"value":72},{"type":42,"tag":65,"props":1787,"children":1789},{"className":1788},[],[1790],{"type":48,"value":1791},".ratings-factors",{"type":48,"value":734},{"type":42,"tag":101,"props":1794,"children":1795},{},[1796,1798,1803],{"type":48,"value":1797},"ECS \u002F PA cover-image accent classes that are only meaningful inside ",{"type":42,"tag":65,"props":1799,"children":1801},{"className":1800},[],[1802],{"type":48,"value":239},{"type":48,"value":1804}," and that\nuse skill-specific spacing (most are already shared; anything with skill-specific tweaks\nstays local).",{"type":42,"tag":101,"props":1806,"children":1807},{},[1808,1810,1816,1817,1823,1824,1830,1831,1837],{"type":48,"value":1809},"PA ",{"type":42,"tag":65,"props":1811,"children":1813},{"className":1812},[],[1814],{"type":48,"value":1815},".sub-heading",{"type":48,"value":72},{"type":42,"tag":65,"props":1818,"children":1820},{"className":1819},[],[1821],{"type":48,"value":1822},".chart-container",{"type":48,"value":72},{"type":42,"tag":65,"props":1825,"children":1827},{"className":1826},[],[1828],{"type":48,"value":1829},".chart-title",{"type":48,"value":72},{"type":42,"tag":65,"props":1832,"children":1834},{"className":1833},[],[1835],{"type":48,"value":1836},".chart-legend",{"type":48,"value":734},{"type":42,"tag":101,"props":1839,"children":1840},{},[1841],{"type":48,"value":1842},"PIB chart helpers, ratings-grid helpers.",{"type":42,"tag":101,"props":1844,"children":1845},{},[1846],{"type":48,"value":1847},"SA sector-card \u002F theme-card helpers.",{"type":42,"tag":430,"props":1849,"children":1851},{"id":1850},"_9-canonical-css",[1852],{"type":48,"value":1853},"9. Canonical CSS",{"type":42,"tag":51,"props":1855,"children":1856},{},[1857,1859,1864,1865,1870,1872,1878,1880,1885,1887,1892,1894,1899,1901,1906,1908,1914],{"type":48,"value":1858},"The canonical CSS lives ",{"type":42,"tag":57,"props":1860,"children":1861},{},[1862],{"type":48,"value":1863},"only",{"type":48,"value":948},{"type":42,"tag":65,"props":1866,"children":1868},{"className":1867},[],[1869],{"type":48,"value":413},{"type":48,"value":1871}," inside the\n",{"type":42,"tag":65,"props":1873,"children":1875},{"className":1874},[],[1876],{"type":48,"value":1877},"\u003Cstyle id=\"shared-template-css\">…\u003C\u002Fstyle>",{"type":48,"value":1879}," block. Parent templates do ",{"type":42,"tag":57,"props":1881,"children":1882},{},[1883],{"type":48,"value":1884},"not",{"type":48,"value":1886}," carry a\nduplicate copy of these rules. Each parent template instead reserves a marker region inside\nits own ",{"type":42,"tag":65,"props":1888,"children":1890},{"className":1889},[],[1891],{"type":48,"value":545},{"type":48,"value":1893}," tag bracketed by ",{"type":42,"tag":57,"props":1895,"children":1896},{},[1897],{"type":48,"value":1898},"CSS comments",{"type":48,"value":1900}," (not HTML comments — the markers sit\ninside ",{"type":42,"tag":65,"props":1902,"children":1904},{"className":1903},[],[1905],{"type":48,"value":545},{"type":48,"value":1907},", where ",{"type":42,"tag":65,"props":1909,"children":1911},{"className":1910},[],[1912],{"type":48,"value":1913},"\u003C!-- … -->",{"type":48,"value":1915}," would produce CSS parse errors):",{"type":42,"tag":1917,"props":1918,"children":1922},"pre",{"className":1919,"code":1920,"language":18,"meta":1921,"style":1921},"language-css shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F* BEGIN shared-template-css (inlined at emit time from skills\u002Fshared\u002Ftemplate\u002Fassets\u002Ftemplate.html) *\u002F\n\u002F* END shared-template-css *\u002F\n","",[1923],{"type":42,"tag":65,"props":1924,"children":1925},{"__ignoreMap":1921},[1926,1938],{"type":42,"tag":1927,"props":1928,"children":1931},"span",{"class":1929,"line":1930},"line",1,[1932],{"type":42,"tag":1927,"props":1933,"children":1935},{"style":1934},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1936],{"type":48,"value":1937},"\u002F* BEGIN shared-template-css (inlined at emit time from skills\u002Fshared\u002Ftemplate\u002Fassets\u002Ftemplate.html) *\u002F\n",{"type":42,"tag":1927,"props":1939,"children":1941},{"class":1929,"line":1940},2,[1942],{"type":42,"tag":1927,"props":1943,"children":1944},{"style":1934},[1945],{"type":48,"value":1946},"\u002F* END shared-template-css *\u002F\n",{"type":42,"tag":51,"props":1948,"children":1949},{},[1950,1952,1957,1959,1964,1966,1971,1973,1978],{"type":48,"value":1951},"At emit time, the agent copies the ",{"type":42,"tag":57,"props":1953,"children":1954},{},[1955],{"type":48,"value":1956},"contents",{"type":48,"value":1958}," (not the ",{"type":42,"tag":65,"props":1960,"children":1962},{"className":1961},[],[1963],{"type":48,"value":545},{"type":48,"value":1965}," wrapper) of\n",{"type":42,"tag":65,"props":1967,"children":1969},{"className":1968},[],[1970],{"type":48,"value":1877},{"type":48,"value":1972}," from the shared asset and inserts them between\nthose two marker comments in the final emitted HTML. Treat the canonical CSS as a single\nblock — do not edit values per-skill. If a parent skill needs to restyle shared chrome, change\n",{"type":42,"tag":65,"props":1974,"children":1976},{"className":1975},[],[1977],{"type":48,"value":413},{"type":48,"value":1979}," and the next emit picks it up automatically.",{"type":42,"tag":1981,"props":1982,"children":1984},"h3",{"id":1983},"css-variable-contract",[1985],{"type":48,"value":1986},"CSS variable contract",{"type":42,"tag":51,"props":1988,"children":1989},{},[1990,1992,1998],{"type":48,"value":1991},"The block defines the following CSS custom properties on ",{"type":42,"tag":65,"props":1993,"children":1995},{"className":1994},[],[1996],{"type":48,"value":1997},":root",{"type":48,"value":1999},". They are available to every\npiece of skill-specific CSS that lives above the marker region:",{"type":42,"tag":97,"props":2001,"children":2002},{},[2003,2019,2058,2097,2107],{"type":42,"tag":101,"props":2004,"children":2005},{},[2006,2011,2012,2017],{"type":42,"tag":65,"props":2007,"children":2009},{"className":2008},[],[2010],{"type":48,"value":111},{"type":48,"value":72},{"type":42,"tag":65,"props":2013,"children":2015},{"className":2014},[],[2016],{"type":48,"value":118},{"type":48,"value":2018}," — primary palette.",{"type":42,"tag":101,"props":2020,"children":2021},{},[2022,2028,2029,2035,2036,2042,2043,2049,2050,2056],{"type":42,"tag":65,"props":2023,"children":2025},{"className":2024},[],[2026],{"type":48,"value":2027},"--gray-100",{"type":48,"value":72},{"type":42,"tag":65,"props":2030,"children":2032},{"className":2031},[],[2033],{"type":48,"value":2034},"--gray-200",{"type":48,"value":72},{"type":42,"tag":65,"props":2037,"children":2039},{"className":2038},[],[2040],{"type":48,"value":2041},"--gray-300",{"type":48,"value":72},{"type":42,"tag":65,"props":2044,"children":2046},{"className":2045},[],[2047],{"type":48,"value":2048},"--gray-400",{"type":48,"value":72},{"type":42,"tag":65,"props":2051,"children":2053},{"className":2052},[],[2054],{"type":48,"value":2055},"--gray-700",{"type":48,"value":2057}," — neutral grays.",{"type":42,"tag":101,"props":2059,"children":2060},{},[2061,2067,2068,2074,2075,2081,2082,2088,2089,2095],{"type":42,"tag":65,"props":2062,"children":2064},{"className":2063},[],[2065],{"type":48,"value":2066},"--g100",{"type":48,"value":72},{"type":42,"tag":65,"props":2069,"children":2071},{"className":2070},[],[2072],{"type":48,"value":2073},"--g200",{"type":48,"value":72},{"type":42,"tag":65,"props":2076,"children":2078},{"className":2077},[],[2079],{"type":48,"value":2080},"--g300",{"type":48,"value":72},{"type":42,"tag":65,"props":2083,"children":2085},{"className":2084},[],[2086],{"type":48,"value":2087},"--g400",{"type":48,"value":72},{"type":42,"tag":65,"props":2090,"children":2092},{"className":2091},[],[2093],{"type":48,"value":2094},"--g700",{"type":48,"value":2096}," — short aliases for the same grays. Both\nnaming schemes resolve. Skill-specific CSS may use either family interchangeably.",{"type":42,"tag":101,"props":2098,"children":2099},{},[2100,2105],{"type":42,"tag":65,"props":2101,"children":2103},{"className":2102},[],[2104],{"type":48,"value":140},{"type":48,"value":2106}," — body text color.",{"type":42,"tag":101,"props":2108,"children":2109},{},[2110,2115,2116,2121,2122,2127,2129,2134],{"type":42,"tag":65,"props":2111,"children":2113},{"className":2112},[],[2114],{"type":48,"value":147},{"type":48,"value":72},{"type":42,"tag":65,"props":2117,"children":2119},{"className":2118},[],[2120],{"type":48,"value":154},{"type":48,"value":72},{"type":42,"tag":65,"props":2123,"children":2125},{"className":2124},[],[2126],{"type":48,"value":162},{"type":48,"value":2128}," — semantic colors used by ",{"type":42,"tag":65,"props":2130,"children":2132},{"className":2131},[],[2133],{"type":48,"value":326},{"type":48,"value":2135}," and\nby skill-specific tables (e.g. positive \u002F negative deltas).",{"type":42,"tag":430,"props":2137,"children":2139},{"id":2138},"_10-quick-checklist-use-before-submitting-a-report",[2140],{"type":48,"value":2141},"10. Quick checklist (use before submitting a report)",{"type":42,"tag":97,"props":2143,"children":2146},{"className":2144},[2145],"contains-task-list",[2147,2188,2211,2234,2257,2300,2347,2369,2391],{"type":42,"tag":101,"props":2148,"children":2151},{"className":2149},[2150],"task-list-item",[2152,2158,2160,2165,2167,2172,2174,2180,2181,2186],{"type":42,"tag":2153,"props":2154,"children":2157},"input",{"disabled":2155,"type":2156},true,"checkbox",[],{"type":48,"value":2159}," The contents of ",{"type":42,"tag":65,"props":2161,"children":2163},{"className":2162},[],[2164],{"type":48,"value":515},{"type":48,"value":2166}," from ",{"type":42,"tag":65,"props":2168,"children":2170},{"className":2169},[],[2171],{"type":48,"value":413},{"type":48,"value":2173}," have been\ninlined between the ",{"type":42,"tag":65,"props":2175,"children":2177},{"className":2176},[],[2178],{"type":48,"value":2179},"\u002F* BEGIN shared-template-css *\u002F",{"type":48,"value":127},{"type":42,"tag":65,"props":2182,"children":2184},{"className":2183},[],[2185],{"type":48,"value":537},{"type":48,"value":2187},"\nmarkers in the emitted HTML.",{"type":42,"tag":101,"props":2189,"children":2191},{"className":2190},[2150],[2192,2195,2196,2202,2203,2209],{"type":42,"tag":2153,"props":2193,"children":2194},{"disabled":2155,"type":2156},[],{"type":48,"value":2159},{"type":42,"tag":65,"props":2197,"children":2199},{"className":2198},[],[2200],{"type":48,"value":2201},"\u003Cstyle id=\"shared-citations-css\">",{"type":48,"value":517},{"type":42,"tag":65,"props":2204,"children":2206},{"className":2205},[],[2207],{"type":48,"value":2208},"skills\u002Fshared\u002Fcitations\u002Fassets\u002Ftemplate.html",{"type":48,"value":2210}," have been inlined between the parallel\ncitations markers.",{"type":42,"tag":101,"props":2212,"children":2214},{"className":2213},[2150],[2215,2218,2220,2225,2227,2232],{"type":42,"tag":2153,"props":2216,"children":2217},{"disabled":2155,"type":2156},[],{"type":48,"value":2219}," The parent template's ",{"type":42,"tag":65,"props":2221,"children":2223},{"className":2222},[],[2224],{"type":48,"value":545},{"type":48,"value":2226}," block contains ",{"type":42,"tag":57,"props":2228,"children":2229},{},[2230],{"type":48,"value":2231},"no duplicated copy",{"type":48,"value":2233}," of any rule that\nlives in either canonical block.",{"type":42,"tag":101,"props":2235,"children":2237},{"className":2236},[2150],[2238,2241,2243,2248,2250,2255],{"type":42,"tag":2153,"props":2239,"children":2240},{"disabled":2155,"type":2156},[],{"type":48,"value":2242}," The cover uses exactly one variant (",{"type":42,"tag":65,"props":2244,"children":2246},{"className":2245},[],[2247],{"type":48,"value":231},{"type":48,"value":2249}," or ",{"type":42,"tag":65,"props":2251,"children":2253},{"className":2252},[],[2254],{"type":48,"value":239},{"type":48,"value":2256},") and matches the\nparent skill's declared variant.",{"type":42,"tag":101,"props":2258,"children":2260},{"className":2259},[2150],[2261,2264,2265,2271,2273,2278,2279,2284,2286,2291,2293,2298],{"type":42,"tag":2153,"props":2262,"children":2263},{"disabled":2155,"type":2156},[],{"type":48,"value":933},{"type":42,"tag":65,"props":2266,"children":2268},{"className":2267},[],[2269],{"type":48,"value":2270},".cover-multi",{"type":48,"value":2272},"'s ",{"type":42,"tag":65,"props":2274,"children":2276},{"className":2275},[],[2277],{"type":48,"value":864},{"type":48,"value":127},{"type":42,"tag":65,"props":2280,"children":2282},{"className":2281},[],[2283],{"type":48,"value":896},{"type":48,"value":2285}," only carries ",{"type":42,"tag":65,"props":2287,"children":2289},{"className":2288},[],[2290],{"type":48,"value":917},{"type":48,"value":2292}," when an\n",{"type":42,"tag":65,"props":2294,"children":2296},{"className":2295},[],[2297],{"type":48,"value":944},{"type":48,"value":2299}," is populated.",{"type":42,"tag":101,"props":2301,"children":2303},{"className":2302},[2150],[2304,2307,2309,2314,2316,2321,2322,2327,2328,2333,2334,2339,2340,2345],{"type":42,"tag":2153,"props":2305,"children":2306},{"disabled":2155,"type":2156},[],{"type":48,"value":2308}," All ",{"type":42,"tag":65,"props":2310,"children":2312},{"className":2311},[],[2313],{"type":48,"value":326},{"type":48,"value":2315}," instances use the canonical pastel variants (",{"type":42,"tag":65,"props":2317,"children":2319},{"className":2318},[],[2320],{"type":48,"value":334},{"type":48,"value":72},{"type":42,"tag":65,"props":2323,"children":2325},{"className":2324},[],[2326],{"type":48,"value":341},{"type":48,"value":156},{"type":42,"tag":65,"props":2329,"children":2331},{"className":2330},[],[2332],{"type":48,"value":348},{"type":48,"value":72},{"type":42,"tag":65,"props":2335,"children":2337},{"className":2336},[],[2338],{"type":48,"value":355},{"type":48,"value":72},{"type":42,"tag":65,"props":2341,"children":2343},{"className":2342},[],[2344],{"type":48,"value":362},{"type":48,"value":2346},"). No solid-fill \u002F inline-color overrides anywhere.",{"type":42,"tag":101,"props":2348,"children":2350},{"className":2349},[2150],[2351,2354,2356,2361,2363,2368],{"type":42,"tag":2153,"props":2352,"children":2353},{"disabled":2155,"type":2156},[],{"type":48,"value":2355}," The TOC's last row points to ",{"type":42,"tag":65,"props":2357,"children":2359},{"className":2358},[],[2360],{"type":48,"value":1114},{"type":48,"value":2362}," with label ",{"type":42,"tag":65,"props":2364,"children":2366},{"className":2365},[],[2367],{"type":48,"value":1122},{"type":48,"value":734},{"type":42,"tag":101,"props":2370,"children":2372},{"className":2371},[2150],[2373,2376,2378,2383,2384,2389],{"type":42,"tag":2153,"props":2374,"children":2375},{"disabled":2155,"type":2156},[],{"type":48,"value":2377}," The emitted footer uses ",{"type":42,"tag":65,"props":2379,"children":2381},{"className":2380},[],[2382],{"type":48,"value":379},{"type":48,"value":1162},{"type":42,"tag":65,"props":2385,"children":2387},{"className":2386},[],[2388],{"type":48,"value":386},{"type":48,"value":2390}," markup verbatim.",{"type":42,"tag":101,"props":2392,"children":2394},{"className":2393},[2150],[2395,2398],{"type":42,"tag":2153,"props":2396,"children":2397},{"disabled":2155,"type":2156},[],{"type":48,"value":2399}," Per-skill overrides above the marker region are limited to the rows in section 8.",{"type":42,"tag":2401,"props":2402,"children":2403},"style",{},[2404],{"type":48,"value":2405},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2407,"total":2526},[2408,2424,2440,2452,2472,2494,2514],{"slug":2409,"name":2409,"fn":2410,"description":2411,"org":2412,"tags":2413,"stars":25,"repoUrl":26,"updatedAt":27},"accessibility-and-inclusive-visualization","make data visualizations accessible","Make data visualizations accessible and inclusive. Use when the user needs chart or diagram accessibility guidance, text alternatives for complex visuals, color and contrast review, keyboard support, reduced-motion behavior for animation or parallax, or an accessibility QA workflow for exported figures, UML-like diagrams, and dashboards.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2414,2417,2420,2423],{"name":2415,"slug":2416,"type":15},"Accessibility","accessibility",{"name":2418,"slug":2419,"type":15},"Charts","charts",{"name":2421,"slug":2422,"type":15},"Data Visualization","data-visualization",{"name":23,"slug":24,"type":15},{"slug":2425,"name":2425,"fn":2426,"description":2427,"org":2428,"tags":2429,"stars":25,"repoUrl":26,"updatedAt":2439},"agent-browser","automate browser interactions for agents","Browser automation CLI for AI agents. Use when the user needs to interact with websites, verify dev server output, test web apps, navigate pages, fill forms, click buttons, take screenshots, extract data, or automate any browser task. Also triggers when a dev server starts so you can verify it visually.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2430,2433,2436],{"name":2431,"slug":2432,"type":15},"Agents","agents",{"name":2434,"slug":2435,"type":15},"Browser Automation","browser-automation",{"name":2437,"slug":2438,"type":15},"Testing","testing","2026-04-06T18:41:03.44016",{"slug":2441,"name":2441,"fn":2442,"description":2443,"org":2444,"tags":2445,"stars":25,"repoUrl":26,"updatedAt":2451},"agent-browser-verify","verify dev server output with automated browser","Automated browser verification for dev servers. Triggers when a dev server starts to run a visual gut-check with agent-browser — verifies the page loads, checks for console errors, validates key UI elements, and reports pass\u002Ffail before continuing.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2446,2447,2450],{"name":2434,"slug":2435,"type":15},{"name":2448,"slug":2449,"type":15},"Local Development","local-development",{"name":2437,"slug":2438,"type":15},"2026-04-06T18:41:17.526867",{"slug":2453,"name":2453,"fn":2454,"description":2455,"org":2456,"tags":2457,"stars":25,"repoUrl":26,"updatedAt":2471},"agents-sdk","build AI agents on Cloudflare Workers","Build AI agents on Cloudflare Workers using the Agents SDK. Load when creating stateful agents, durable workflows, real-time WebSocket apps, scheduled tasks, MCP servers, or chat applications. Covers Agent class, state management, callable RPC, Workflows integration, and React hooks. Biases towards retrieval from Cloudflare docs over pre-trained knowledge.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2458,2459,2462,2465,2468],{"name":2431,"slug":2432,"type":15},{"name":2460,"slug":2461,"type":15},"Cloudflare Workers","cloudflare-workers",{"name":2463,"slug":2464,"type":15},"SDK","sdk",{"name":2466,"slug":2467,"type":15},"Serverless","serverless",{"name":2469,"slug":2470,"type":15},"WebSockets","websockets","2026-04-06T18:39:51.717063",{"slug":2473,"name":2473,"fn":2474,"description":2475,"org":2476,"tags":2477,"stars":25,"repoUrl":26,"updatedAt":2493},"ai-elements","build chat UIs with AI Elements","AI Elements component library guidance — pre-built React components for AI interfaces built on shadcn\u002Fui. Use when building chat UIs, message displays, tool call rendering, streaming responses, reasoning panels, or any AI-native interface with the AI SDK.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2478,2481,2484,2487,2490],{"name":2479,"slug":2480,"type":15},"Frontend","frontend",{"name":2482,"slug":2483,"type":15},"React","react",{"name":2485,"slug":2486,"type":15},"shadcn\u002Fui","shadcn-ui",{"name":2488,"slug":2489,"type":15},"UI Components","ui-components",{"name":2491,"slug":2492,"type":15},"Vercel","vercel","2026-04-06T18:40:59.619419",{"slug":2495,"name":2495,"fn":2496,"description":2497,"org":2498,"tags":2499,"stars":25,"repoUrl":26,"updatedAt":2513},"ai-gateway","configure Vercel AI Gateway","Vercel AI Gateway expert guidance. Use when configuring model routing, provider failover, cost tracking, or managing multiple AI providers through a unified API.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2500,2503,2506,2509,2512],{"name":2501,"slug":2502,"type":15},"AI Infrastructure","ai-infrastructure",{"name":2504,"slug":2505,"type":15},"Cost Optimization","cost-optimization",{"name":2507,"slug":2508,"type":15},"LLM","llm",{"name":2510,"slug":2511,"type":15},"Performance","performance",{"name":2491,"slug":2492,"type":15},"2026-04-06T18:40:44.377464",{"slug":2515,"name":2515,"fn":2516,"description":2517,"org":2518,"tags":2519,"stars":25,"repoUrl":26,"updatedAt":2525},"ai-generation-persistence","implement persistence patterns for AI generations","AI generation persistence patterns — unique IDs, addressable URLs, database storage, and cost tracking for every LLM generation",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2520,2521,2524],{"name":2504,"slug":2505,"type":15},{"name":2522,"slug":2523,"type":15},"Database","database",{"name":2507,"slug":2508,"type":15},"2026-04-06T18:41:08.513425",600,{"items":2528,"total":2725},[2529,2550,2573,2590,2606,2623,2642,2654,2668,2682,2694,2709],{"slug":2530,"name":2530,"fn":2531,"description":2532,"org":2533,"tags":2534,"stars":2547,"repoUrl":2548,"updatedAt":2549},"prior-auth-packet-builder","build healthcare prior authorization packets","Build a concise prior authorization packet from local case files and payer policy docs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2535,2538,2541,2544],{"name":2536,"slug":2537,"type":15},"Documents","documents",{"name":2539,"slug":2540,"type":15},"Healthcare","healthcare",{"name":2542,"slug":2543,"type":15},"Insurance","insurance",{"name":2545,"slug":2546,"type":15},"Regulatory Compliance","regulatory-compliance",28169,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python","2026-04-16T05:11:39.180399",{"slug":2551,"name":2551,"fn":2552,"description":2553,"org":2554,"tags":2555,"stars":2570,"repoUrl":2571,"updatedAt":2572},"aspnet-core","build ASP.NET Core web applications","Build, review, refactor, or architect ASP.NET Core web applications using current official guidance for .NET web development. Use when working on Blazor Web Apps, Razor Pages, MVC, Minimal APIs, controller-based Web APIs, SignalR, gRPC, middleware, dependency injection, configuration, authentication, authorization, testing, performance, deployment, or ASP.NET Core upgrades.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2556,2559,2561,2564,2567],{"name":2557,"slug":2558,"type":15},".NET","dotnet",{"name":2560,"slug":2551,"type":15},"ASP.NET Core",{"name":2562,"slug":2563,"type":15},"Blazor","blazor",{"name":2565,"slug":2566,"type":15},"C#","csharp",{"name":2568,"slug":2569,"type":15},"Web Development","web-development",23787,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fskills","2026-04-12T05:07:02.819491",{"slug":2574,"name":2574,"fn":2575,"description":2576,"org":2577,"tags":2578,"stars":2570,"repoUrl":2571,"updatedAt":2589},"chatgpt-apps","build ChatGPT Apps SDK applications","Build, scaffold, refactor, and troubleshoot ChatGPT Apps SDK applications that combine an MCP server and widget UI. Use when Codex needs to design tools, register UI resources, wire the MCP Apps bridge or ChatGPT compatibility APIs, apply Apps SDK metadata or CSP or domain settings, or produce a docs-aligned project scaffold. Prefer a docs-first workflow by invoking the openai-docs skill or OpenAI developer docs MCP tools before generating code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2579,2582,2585,2588],{"name":2580,"slug":2581,"type":15},"Apps SDK","apps-sdk",{"name":2583,"slug":2584,"type":15},"ChatGPT","chatgpt",{"name":2586,"slug":2587,"type":15},"MCP","mcp",{"name":9,"slug":8,"type":15},"2026-04-12T05:07:05.468097",{"slug":2591,"name":2591,"fn":2592,"description":2593,"org":2594,"tags":2595,"stars":2570,"repoUrl":2571,"updatedAt":2605},"cli-creator","build CLIs from API docs","Build a composable CLI for Codex from API docs, an OpenAPI spec, existing curl examples, an SDK, a web app, an admin tool, or a local script. Use when the user wants Codex to create a command-line tool that can run from any repo, expose composable read\u002Fwrite commands, return stable JSON, manage auth, and pair with a companion skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2596,2599,2602],{"name":2597,"slug":2598,"type":15},"API Development","api-development",{"name":2600,"slug":2601,"type":15},"CLI","cli",{"name":2603,"slug":2604,"type":15},"Codex","codex","2026-04-12T05:07:04.132762",{"slug":2607,"name":2607,"fn":2608,"description":2609,"org":2610,"tags":2611,"stars":2570,"repoUrl":2571,"updatedAt":2622},"cloudflare-deploy","deploy projects to Cloudflare","Deploy applications and infrastructure to Cloudflare using Workers, Pages, and related platform services. Use when the user asks to deploy, host, publish, or set up a project on Cloudflare.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2612,2615,2618,2619],{"name":2613,"slug":2614,"type":15},"Cloudflare","cloudflare",{"name":2616,"slug":2617,"type":15},"Cloudflare Pages","cloudflare-pages",{"name":2460,"slug":2461,"type":15},{"name":2620,"slug":2621,"type":15},"Deployment","deployment","2026-04-12T05:07:14.275118",{"slug":2624,"name":2624,"fn":2625,"description":2626,"org":2627,"tags":2628,"stars":2570,"repoUrl":2571,"updatedAt":2641},"define-goal","define and set measurable project goals","Help the user define a concrete, measurable goal before starting work, especially when they ask to use the goal tool, create a goal, set an objective, clarify success criteria, or turn a fuzzy intention into a quantitative outcome. Use this skill for goal creation and goal refinement only; it does not manage durable snapshots, decision logs, or long-running execution artifacts.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2629,2632,2635,2638],{"name":2630,"slug":2631,"type":15},"Productivity","productivity",{"name":2633,"slug":2634,"type":15},"Project Management","project-management",{"name":2636,"slug":2637,"type":15},"Strategy","strategy",{"name":2639,"slug":2640,"type":15},"Task Management","task-management","2026-05-23T06:17:16.870838",{"slug":2643,"name":2643,"fn":2644,"description":2645,"org":2646,"tags":2647,"stars":2570,"repoUrl":2571,"updatedAt":2653},"figma","translate Figma designs into code","Use the Figma MCP server to fetch design context, screenshots, variables, and assets from Figma, and to translate Figma nodes into production code. Trigger when a task involves Figma URLs, node IDs, design-to-code implementation, or Figma MCP setup and troubleshooting.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2648,2649,2651,2652],{"name":23,"slug":24,"type":15},{"name":2650,"slug":2643,"type":15},"Figma",{"name":2479,"slug":2480,"type":15},{"name":2586,"slug":2587,"type":15},"2026-04-12T05:06:47.939943",{"slug":2655,"name":2655,"fn":2656,"description":2657,"org":2658,"tags":2659,"stars":2570,"repoUrl":2571,"updatedAt":2667},"figma-code-connect-components","connect Figma designs to code components","Connects Figma design components to code components using Code Connect mapping tools. Use when user says \"code connect\", \"connect this component to code\", \"map this component\", \"link component to code\", \"create code connect mapping\", or wants to establish mappings between Figma designs and code implementations. For canvas writes via `use_figma`, use `figma-use`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2660,2661,2664,2665,2666],{"name":23,"slug":24,"type":15},{"name":2662,"slug":2663,"type":15},"Design System","design-system",{"name":2650,"slug":2643,"type":15},{"name":2479,"slug":2480,"type":15},{"name":2488,"slug":2489,"type":15},"2026-05-10T05:59:52.971881",{"slug":2669,"name":2669,"fn":2670,"description":2671,"org":2672,"tags":2673,"stars":2570,"repoUrl":2571,"updatedAt":2681},"figma-create-design-system-rules","generate design system rules from Figma","Generates custom design system rules for the user's codebase. Use when user says \"create design system rules\", \"generate rules for my project\", \"set up design rules\", \"customize design system guidelines\", or wants to establish project-specific conventions for Figma-to-code workflows. Requires Figma MCP server connection.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2674,2675,2676,2679,2680],{"name":23,"slug":24,"type":15},{"name":2662,"slug":2663,"type":15},{"name":2677,"slug":2678,"type":15},"Documentation","documentation",{"name":2650,"slug":2643,"type":15},{"name":2479,"slug":2480,"type":15},"2026-05-16T06:07:47.821474",{"slug":2683,"name":2683,"fn":2684,"description":2685,"org":2686,"tags":2687,"stars":2570,"repoUrl":2571,"updatedAt":2693},"figma-implement-design","translate Figma designs into application code","Translates Figma designs into production-ready application code with 1:1 visual fidelity. Use when implementing UI code from Figma files, when user mentions \"implement design\", \"generate code\", \"implement component\", provides Figma URLs, or asks to build components matching Figma specs. For Figma canvas writes via `use_figma`, use `figma-use`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2688,2689,2690,2691,2692],{"name":23,"slug":24,"type":15},{"name":2650,"slug":2643,"type":15},{"name":2479,"slug":2480,"type":15},{"name":2488,"slug":2489,"type":15},{"name":2568,"slug":2569,"type":15},"2026-05-16T06:07:40.583615",{"slug":2695,"name":2695,"fn":2696,"description":2697,"org":2698,"tags":2699,"stars":2570,"repoUrl":2571,"updatedAt":2708},"hatch-pet","create animated pets for Codex","Create, repair, validate, visually QA, and package Codex-compatible animated pets and pet spritesheets from character art, generated images, company or prospect brand cues, or visual references. Use when a user wants a lightweight-worker Codex pet workflow, a non-pixel custom pet style, a prospect or company mascot pet, or a full 8x9 animated pet atlas with transparent unused cells, QA contact sheets, and pet.json packaging. This skill composes the installed $imagegen system skill for visual generation and uses bundled scripts for deterministic spritesheet assembly.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2700,2703,2704,2707],{"name":2701,"slug":2702,"type":15},"Animation","animation",{"name":2603,"slug":2604,"type":15},{"name":2705,"slug":2706,"type":15},"Creative","creative",{"name":23,"slug":24,"type":15},"2026-05-02T05:31:48.48485",{"slug":2710,"name":2710,"fn":2711,"description":2712,"org":2713,"tags":2714,"stars":2570,"repoUrl":2571,"updatedAt":2724},"imagegen","generate and edit raster images","Generate or edit raster images when the task benefits from AI-created bitmap visuals such as photos, illustrations, textures, sprites, mockups, or transparent-background cutouts. Use when Codex should create a brand-new image, transform an existing image, or derive visual variants from references, and the output should be a bitmap asset rather than repo-native code or vector. Do not use when the task is better handled by editing existing SVG\u002Fvector\u002Fcode-native assets, extending an established icon or logo system, or building the visual directly in HTML\u002FCSS\u002Fcanvas.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2715,2716,2717,2720,2723],{"name":2705,"slug":2706,"type":15},{"name":23,"slug":24,"type":15},{"name":2718,"slug":2719,"type":15},"Image Generation","image-generation",{"name":2721,"slug":2722,"type":15},"Images","images",{"name":9,"slug":8,"type":15},"2026-05-15T06:23:24.312127",675]