[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-openai-visualize-data":3,"mdc--4eh1lt-key":36,"related-repo-openai-visualize-data":1609,"related-org-openai-visualize-data":1720},{"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},"visualize-data","design and implement quantitative visuals","Design, build, revise, or QA quantitative charts and figures. Use when an analytical answer needs visual judgment, whether for an inline answer, report, dashboard, notebook, or artifact.",{"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},"Data Visualization","data-visualization","tag",{"name":17,"slug":18,"type":15},"Charts","charts",{"name":20,"slug":21,"type":15},"Analytics","analytics",{"name":23,"slug":24,"type":15},"Design","design",427,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Frole-specific-plugins","2026-07-01T07:54:54.600552",null,65,[],{"repoUrl":26,"stars":25,"forks":29,"topics":32,"description":33},[],"Role-specific Codex plugin templates","https:\u002F\u002Fgithub.com\u002Fopenai\u002Frole-specific-plugins\u002Ftree\u002FHEAD\u002Fplugins\u002Fdata-analytics\u002Fskills\u002Fvisualize-data","---\nname: visualize-data\ndescription: \"Design, build, revise, or QA quantitative charts and figures. Use when an analytical answer needs visual judgment, whether for an inline answer, report, dashboard, notebook, or artifact.\"\n---\n\n## Related Skills\n\nUse $metric-diagnostics when the visual needs an explanation of a metric movement.\n\nUse $build-report when the visual is part of a durable analytical report.\n\n# Data Visualization\n\nCreate quantitative visuals that are analytically sound, immediately readable, and polished enough to ship in a report, memo, slide, dashboard, notebook, widget, or HTML artifact. Treat charts as evidence for a takeaway. Redesign charts that are visually attractive but analytically weak, and revise charts that are technically correct but hard to interpret.\n\n## Runtime Delivery Routing\n\nIf `surface = chatgpt_web` and `mode = work_mode` are both positively identified, do not render with Data Analytics MCP chart or table widgets, do not call `render_chart` or `render_table` for inline delivery, and do not select an MCP artifact as the visual surface. This branch applies only after another workflow has already selected inline delivery; it does not choose inline over a report, dashboard, HTML, notebook, or other surface. For an already-selected inline visual, prefer native Work Mode rendering and read [native-inline-visualizations.md](references\u002Fnative-inline-visualizations.md) to choose and invoke `charts_widget_v2` or `app_block`. For one supported `bar`, `line`, `pie`, or `scatter` chart, treat `charts_widget_v2` as directly surfaced in this runtime and emit its live `genui` content reference before considering fallback; do not self-declare it unavailable or search for it. The complete outer shape is `genui{\"charts_widget_v2\":{\"content\":{...}}}`: replace `{...}` with the real chart spec and emit the reference without Markdown backticks. The inner chart spec alone is not a response; do not print bare JSON, plain HTML, or a code fence. Keep `app_block` conditional on the host surfacing it. If the Visualize plugin is installed, also consult and follow its current visualization guidance for native chart or app-block authoring, while keeping this skill's delivery gate and fallback order authoritative. If an emitted native visual is rejected or fails to render, use a reproducible static\u002FMatplotlib chart that fits a non-MCP surface; use a compact table only if no visual renderer can be delivered. Use static or Matplotlib charting for this native-render failure fallback or when the user explicitly asks for Python, a static image\u002Ffile, notebook-oriented output, or export. A successful Data Analytics MCP tool result is not delivery confirmation in web Work Mode, so do not say a visual was plotted or rendered above unless the selected native or non-MCP surface actually rendered. MCP servers and other callable tools remain valid data sources.\n\nWhenever the selected report or dashboard delivery surface is HTML, read [recharts-html.md](references\u002Frecharts-html.md) and use its packaged Recharts-in-HTML path with same-data static fallbacks. This includes Codex explicit HTML, ChatGPT web Work Mode, and HTML used for PDF, Google Docs, or Google Slides conversion.\n\nOutside positively identified web Work Mode, keep the existing surface selection rules unchanged.\n\n## Chart Selection\n\nCommon surface forms should be named in the chart contract when the final surface is a report, dashboard, slide, notebook, widget, or HTML artifact.\n\n| Data relationship | Best chart | Use it well |\n|---|---|---|\n| Trend over time or ordered axis | `line` | Show enough points to reveal shape; use `area` only when filled magnitude helps, and `sparkline` only in dense KPI cards |\n| Composition over time | `stackedArea` | Use when parts should read as one total; switch to `line` when comparing component trajectories matters more |\n| Comparison across categories | `bar` | Sort when order is not semantic; use horizontal bars for long labels; avoid redundant legends |\n| Ranking or top-N | `leaderboard` | Keep it compact and single-measure; switch to ranked `bar` when comparison needs more chart context |\n| Part-to-whole composition | stacked `bar` | Keep the denominator explicit; use `pie` only for a rough read with few slices |\n| Distribution or spread | `histogram` | Use numeric bins that reveal shape; switch to `boxPlot` when comparing groups is the point |\n| Distribution across groups | `boxPlot` | Use when median and spread matter more than full shape; switch to `histogram` when shape needs space |\n| Relationship between two numeric variables | `scatter` | Use numeric x and y at a meaningful observation grain with enough distinct points to show a pattern; retain point labels, sample\u002Fvolume fields, and one useful grouping candidate when safe |\n| Dense two-dimensional pattern or cohort matrix | `heatmap` | Use for matrix shape or intensity; switch to `scatter` when point-level variation matters |\n| Additive bridge from start to end | `waterfall` | Use only when drivers sum cleanly to the end value; otherwise use ranked `bar` |\n| Ordered stage progression or drop-off | `funnel` | Use only for ordered single-series stages; prefer stage `bar` when funnel geometry distorts comparison |\n\n## Workflow\n\n1. Define the analytical question and one-sentence takeaway before choosing a chart. Identify the final surface, the intended comparison, and the context needed to make the visual honest.\n2. Choose the simplest defensible family and variant from `Chart Selection`. Coordinate with `$build-dashboard` or `$build-report` when the visual belongs to those artifacts, and use `$validate-data` when the supporting analysis needs validation.\n3. Write a compact chart contract before plot code, dashboard configuration, or renderer-specific implementation work. Include:\n   - analytical question and takeaway\n   - canonical family and concrete variant\n   - data sufficiency for the chosen visual: expected row count, temporal point count for trend views, scatter observation count and grain, requested date range and grain, and fallback if the first query is too sparse\n   - surface-native chart type, Recharts HTML chart type, or explicit static renderer when a concrete renderer has been selected\n   - delivery-specific constraints only after the delivery surface is chosen; for MCP widgets or app artifacts, use the shared MCP specification\n   - palette policy, approved palette roots, and non-color distinction plan\n   - output footprint, final container, export paths or delivery target, and the final QA surface\n4. Select the delivery path that matches the final surface.\n   - In positively identified web Work Mode, only after the active workflow has already selected inline or chat-visible delivery, read `references\u002Fnative-inline-visualizations.md` and prefer native Work Mode rendering; do not call `render_chart` or `render_table` for inline delivery. For one supported `bar`, `line`, `pie`, or `scatter` chart, emit the directly surfaced `charts_widget_v2` live content reference before fallback. Use a reproducible static\u002FMatplotlib chart only after that emitted reference is rejected or fails to render, or when no suitable native renderer exists for the requested chart family; use a compact table only if no visual renderer can be delivered, and do not describe a Data Analytics MCP tool result as rendered above. Use static or Matplotlib charting for this native-render failure fallback or for an explicit Python, static image\u002Ffile, notebook, or export request.\n   - Outside web Work Mode, default to Data Analytics MCP chart widgets for ad hoc, inline, chat-visible, or otherwise unspecified chart requests. Treat \"make\u002Fshow\u002Frender this chart\" as an MCP widget request unless the user explicitly asks for Python, a static image\u002Ffile, notebook code, HTML, BI\u002Fdashboard editing, slides\u002Fdocs export, or no rendered artifact.\n   - Use the selected report, dashboard, BI, notebook, slide, or static HTML surface's native chart primitives only when the user explicitly selected that surface or the active report\u002Fdashboard workflow selected it before chart rendering.\n   - Whenever the selected report or dashboard surface is HTML, read `references\u002Frecharts-html.md` and use its packaged Recharts runtime plus same-data static fallback.\n   - Outside the web Work Mode native-render failure fallback, use static Python charting only when the user explicitly asks for Python, a standalone static image\u002Ffile, or notebook-oriented output. Choose a reproducible local renderer, export the requested format, and inspect the output. Do not use that path as the default for HTML reports or dashboards.\n- Use governed BI or dashboard-native widgets when that surface owns rendering; this skill should supply the visual spec and QA bar.\n- Implement local HTML\u002FCSS\u002FSVG\u002Fcanvas\u002FJavaScript visuals only when the final surface truly requires local rendering, custom interaction, offline portability, or a larger artifact than a widget can carry.\n5. Build in this order: format, structure, color, then QA. Choose the family, variant, and delivery surface first; decide labels, annotations, benchmarks, and retained information second; choose palette policy and explicit colors last.\n6. Render or export the chart in its real context. For HTML reports and dashboards, inspect both the live Recharts mount and its same-data static fallback. For explicit standalone static output, save and inspect the image format the user requested.\n7. Inspect the visual in the final report, slide, dashboard, notebook, widget, or HTML layout. Revise before delivery when the chart, labels, color system, or container fails final-context QA.\n8. For shipped reports or dashboards with multiple visuals, maintain a compact chart map in notes or source material. Name the section, analytical question, selected family and chart type, fields, supported takeaway, palette policy, and delivery artifact, image path, or provenance source.\n\n## Standards\n\n### Selection Rules\n\nStart from the analytical question and comparison the reader needs to make, not from a favorite chart type. Keep the top-level set small:\n\n- `Tables & Scorecards`\n- `Trend`\n- `Comparison & Ranking`\n- `Composition`\n- `Distribution`\n- `Relationship`\n- `Uncertainty & Benchmark`\n- `Matrix & Cohort`\n- `Decomposition & Progression`\n\nConcrete forms such as `highlighted multi-series line`, `Likert`, `pie`, `Pareto`, `waterfall`, `faceted dot & interval`, and `cohort heatmap` are variants inside these families, not peer families.\n\n- Use charts for shape and comparison; use tables for exact lookup. If a table would show 3-8 comparable entities with one dominant numeric measure, prefer a bar, dot, lollipop, leaderboard, or other chart unless exact row lookup is the point.\n- When reviewed evidence contains many comparable values, rows, categories, segments, or time points, default to rendering a simple chart on the selected delivery surface when that surface is available and safe. Skip rendering only when exact row lookup is the main task, the data is too sparse for an honest chart, the user asked for table\u002Fprose only, or the selected surface cannot support a useful visual.\n- Do not choose `line` merely because the prompt says \"trend\" or \"trending\". Decide first whether the reader needs current status, movement, variance to plan, mix, concentration, drivers, progression, or distribution.\n- Do not ship underpowered trend charts. For line, area, sparkline, indexed-trend, or other time-series views, first try to expose either a finer time grain or a longer date range so the displayed series has enough observed points to show shape. As a default, aim for at least 8-12 temporal points for a trend visual; if the available evidence has only a few anchor periods, query daily or weekly rows, extend the lookback, or add a meaningful segment\u002Fcomparator before rendering. Use a KPI strip, grouped bar, slope chart, table, or narrative callout instead when the question is really a small set of discrete period comparisons.\n- Do not ship underpowered scatter charts. A useful scatter needs enough comparable observations to reveal shape, clustering, outliers, or exceptions; as a default, aim for at least 12-20 meaningful points and treat fewer than 8 points as a likely table, bar, dot\u002Flollipop, or narrative comparison unless each point is intentionally important and labeled. If the first result only has a few segment aggregates, make one targeted attempt to query a finer analytical grain such as account, workspace, user cohort, customer, model, endpoint, route, geography, or segment-by-period. Keep all plotted rows at the same grain, and do not mix totals, averages, and detail rows in one scatter.\n- For scatter charts, choose x and y measures that can plausibly vary independently and share the same denominator, time window, population, and filters. Include the denominator, sample size, or volume metric used to judge reliability, and use a size encoding only when that third metric materially changes interpretation. Add a point-label field for small or executive-facing scatters, and retain a meaningful categorical field such as segment, plan, route, product line, model family, or region for optional color or filtering. Avoid coloring by a unique row id; use labels or the table for exact identity instead.\n- Use horizontal bars for long labels and sorted bars when order has no semantic meaning.\n- Use compact leaderboard-style ranked bars only for top-N previews with one numeric value and 3-8 visible rows. Default to 5-6 rows in compact dashboard cards. Use a paginated table for long-tail browsing or exact lookup, Pareto for cumulative concentration, and waterfall for additive start-to-end driver bridges.\n- Do not use leaderboards to rank KPI definitions or time-window definitions against each other, such as latest DAU versus WAU versus MAU. Use KPI cards or a compact table for latest values; use trends, indexed trends, share trends, or ratio charts for movement or relationship questions.\n- When a bar chart compares one measure across categories, use one categorical axis and one quantitative axis. Do not set a `color`, `series`, or grouped-bar encoding to the same category field just to color each bar; that creates a redundant legend and implies an extra grouping dimension. Use a palette\u002Fstyle option or direct labels if the surface supports per-category color without a legend; otherwise use a single mark color.\n- When a bar chart compares same-unit movement across distinct KPI categories, such as latest week-over-week percent change by metric, categorical bar colors can help scanning, but they should be styling, not a visible grouping\u002Flegend, unless a second categorical dimension is present.\n- When a bar chart compares unrelated business entities or components, such as products, model families, segments, or seat-support areas, do not encode every row with one fixed color when category identity matters. Prefer categorical styling and direct labels; reserve a single color for one measure repeated across a single semantic entity. Avoid adding a color legend when the axis labels already name the categories.\n- For active-user dashboards, use KPI cards for latest DAU, WAU, MAU, Plus DAU, and Plus WAU values; trend or indexed-trend charts for movement over time; share or stickiness views when the question is mix or ratios; and categorical horizontal bars for unrelated week-over-week metric movements.\n- Prefer variant escalation inside a family before inventing a new chart type: line to small multiples, bar to dot\u002Flollipop, scatter to density, stacked bar to pie only when the circular read is explicitly useful.\n- Keep pie, Pareto, waterfall, and Likert as variants, not defaults.\n- Avoid bubble charts unless the third variable materially changes the interpretation.\n- Include volume, denominator, sample size, or cohort context when omission could mislead.\n- In multi-area executive reports, repeated line charts are a smell. Use line charts only where the main question is continuous movement over time. Consider dot\u002Flollipop or bar with reference for plan variance, stacked area or 100% stacked bar for mix, ranked bars or leaderboards for category comparisons, waterfall for additive drivers, heatmaps for cohort or matrix structure, and stage bars for ordered progression.\n- For one-slide-per-area executive reports, do a chart-family pass before writing the visual plan. Audit repeated families and require a rationale when multiple sections use the same family despite asking different questions.\n- If every visual in a report uses the same family, document the reason in the chart map and verify that no section is actually asking for status, mix, variance, or drivers.\n- Four or more all-line visuals fail the multi-chart report contract unless the report is redesigned with data-compatible alternatives or fewer visuals.\n\n### Surface And Implementation\n\n- For data visualization requests outside web Work Mode where the user has not chosen a file, notebook, BI\u002Fdashboard, report, slide, docs, HTML, or no-render output surface, render with Data Analytics MCP chart widgets by default when the MCP widget tools are available. In web Work Mode, only after inline delivery has already been selected, read `references\u002Fnative-inline-visualizations.md` and prefer native Work Mode rendering; for one supported `bar`, `line`, `pie`, or `scatter` chart, emit the directly surfaced `charts_widget_v2` live content reference before fallback. Use a reproducible static\u002FMatplotlib chart before a compact table fallback only after that emitted reference is rejected or fails to render, or when no suitable native renderer exists for the requested chart family. Do not call `render_chart` or `render_table` for web Work Mode delivery, do not treat an `ok:true` Data Analytics MCP tool result as proof that the browser rendered the visual, and use static or Matplotlib charting only for that native-render failure fallback or when the user explicitly asks for Python, a static image\u002Ffile, notebook-oriented output, or export. When the user explicitly chooses another surface, keep this skill's output to chart selection, data planning, implementation guidance, and QA for that surface.\n- When the selected delivery surface is an MCP Apps widget or Data Analytics MCP report\u002Fdashboard artifact, read `..\u002F..\u002Fsrc\u002Fanalytics-app-core.md` after selecting the chart family. Do not let an MCP-supported type list drive general chart selection for non-MCP surfaces.\n- When rendering an MCP inline chart from reviewed query results, call `render_chart` with source metadata, an exploration-ready table, chart encodings, and display settings. Do not create an intermediate Python chart image for the same result unless the user explicitly asked for Python\u002Fstatic output or the widget renderer is unavailable.\n- Any table that powers a chart must be richer than the minimum fields needed to draw that chart. Do not ship source-data tables containing only `x`, `y`, and optional series\u002Fcolor fields when the reviewed result can safely include contextual dimensions, numerator\u002Fdenominator fields, date or cohort fields, ranks, benchmarks, comparison-period values, or adjacent measures. If privacy, query cost, source limits, or metric definitions prevent a richer table, state that limitation in the chart\u002Freport notes.\n- Before rendering or exporting, inspect the reviewed result table for information density. If the chart would render fewer than 8 temporal points, fewer than 4 meaningful categories, fewer than 8 scatter observations, or a nearly straight two\u002Fthree-point path, make one targeted attempt to improve the supporting data by querying a finer grain, extending the time range, or adding a relevant breakdown that supports the same claim. If that is blocked by source limits, query cost, privacy, or metric definition, record the limitation and switch to a more honest form such as KPI cards, grouped bars for discrete periods, a table, or prose with exact values.\n- Include more than one meaningful quantitative field when the user may reasonably compare measures, swap axes, inspect target versus actual, or choose a relationship view. Do not fabricate auxiliary measures or ship raw detail rows merely to make extra chart types appear possible.\n- Shape chart-ready data for realistic alternatives, not arbitrary ones. A trend chart should usually retain its temporal field, value field, and meaningful segment\u002Fcomparator fields; a category comparison should retain the category, value, useful grouping candidates, and rank\u002Fsort context; composition charts should retain the denominator or share context when available. A scatter chart should retain a stable point identity or label, numeric x and y measures, any denominator or sample-size fields, a useful volume\u002Fsize candidate, and one or two interpretable grouping or filter fields. Do not promote a retained grouping candidate into a color\u002Fseries encoding unless it adds information not already carried by the axis, facet, or table labels.\n- Treat custom local visual implementations as report-complete only after they match the selected delivery mode and pass final-context QA.\n- Use the selected surface's native chart block when one is available. Do not add an extra decorative outline shell around charts.\n- For every HTML report or dashboard, use `references\u002Frecharts-html.md`: embed the packaged Recharts runtime, keep static same-data fallbacks, and do not install dependencies or rely on remote scripts.\n- For explicit standalone static\u002FPython output, use a reproducible local renderer and inspect the exported result. Do not let a static-image path replace the packaged Recharts HTML default.\n- Assume local environments can be minimal or offline. Do not assume network installs will succeed.\n\n### Visual Design\n\n- Match chart titles to the surface. Report and dashboard visual headers should stay neutral and descriptive, with takeaways in adjacent narrative text. Standalone static charts may use takeaway-led titles when there is no surrounding narrative block.\n- Put metric details, units, denominator, date range, cohort, filters, sample size, or volume in the subtitle when needed. Notes can add caveats, but do not replace the subtitle.\n- Use a single font family across charts and surrounding output when possible. Prefer white or near-white backgrounds, quiet grey grid lines, deep charcoal text, and restrained approved palette roots centered on blue, gold, orange, olive, and pink.\n- Do not rely on color alone. Use tone, open fill, marker fill, line style, direct labels, ordering, or faceting when series or states need separation.\n- Only set color or series encodings for meaningful grouping dimensions such as `segment`, `product_line`, or `series` when they are not already the sole axis category. Omit color for single-series charts and do not manufacture or duplicate a grouping field just to produce a legend.\n- Choose one palette policy before plotting:\n  - `single-root preferred`: one non-neutral root plus shades, open fills, and neutral references for simple trends, ranks, distributions, relationships, matrices, and repeated panels.\n  - `hard two-root cap`: at most two non-neutral roots plus neutrals for binary, signed, focal-vs-context, benchmark, comparator, waterfall, Pareto, diverging, highlighted trend, and ordered line-dot charts.\n  - `relaxed multi-category`: up to five approved roots when category identity is the point, such as pie, stacked bars, stacked area, grouped bars, and stage bars. If more are needed, group to top-N plus Other or change forms.\n- Use each selected root's `base` tone as the default non-neutral mark color. Reserve `mid` for deliberate higher-contrast exceptions, use `dark` for keylines, outlines, labels, or reference strokes, and use `light`, `xlight`, or `open` for supporting fills.\n- Generate explicit palette maps from declared colors. Do not let plotting library categorical defaults choose shipped chart colors.\n- For signed values, avoid green\u002Fred by default. Use dark versus open\u002Flight fills, direct signed labels, and clear zero-line context unless documented domain semantics require an exception.\n- For waterfall charts, use matched neutral start and end anchors plus exactly two non-neutral delta colors: one positive and one negative. Do not introduce extra hues or darker\u002Flighter non-neutral keylines for individual drivers.\n- For waterfall, bridge, variance, and other delta-focused charts where the takeaway is movement against a large base, do not force the value axis to zero when zero would materially compress the intended movement. Use a focused value-axis domain around the cumulative path or delta range with padding; preserve honesty with exact start\u002Fend\u002Fchange labels, visible units, and an explicit focused-scale cue in the subtitle, caption, or axis when needed. Keep zero in view when values cross zero or the question is absolute magnitude.\n- Keep one stroke-width system for marks, keylines, guides, and reference lines. Use dark-neutral styling for benchmark, calibration, or ideal lines.\n- Keep left and bottom axis anchors visible when labels depend on them. Remove ticks, guides, or connectors that do not improve the intended comparison.\n- Prefer direct labels when they reduce legend lookups; use a compact top legend when direct labels create clutter.\n- Reserve explicit left and right space for horizontal or diverging bars with long labels or negative values. Do not shrink typography to force a narrow card.\n- Do not use gradients inside chart marks, arbitrary colored chart backgrounds, inconsistent or ad hoc corner radii, or thickness as an emphasis channel.\n- For HTML artifacts, keep standalone charts on real grid footprints: `8 columns` by default, `6` minimum, `10` or `12` for complex charts, stacked vertically on mobile. Align multi-chart rows from the left\u002Fstart edge.\n- Match HTML chart containers, legends, KPI strips, and notes to the same Data Viz System tokens as the surrounding report or dashboard. Remove unused multi-hue CSS variables when they are not rendered.\n- Use dark chart variants only when the containing artifact is dark. Inspect both light and dark variants for shipped branded web outputs.\n- For research charts, lock the blossom to the header's top-right corner. Omit it for third-party, partnership, and non-research charts.\n\n### Quality Bar\n\n- Chart choice should follow `Chart Selection`.\n- Choose and honor an explicit delivery surface. Use MCP widgets only when that surface is available, safe, useful, and not contrary to the user's requested output mode.\n- Keep chart contracts, omitted-chart explanations, validator notes, and QA rationale out of visible executive report bodies unless the user asks for methodology or the detail changes the reader-facing takeaway.\n- Explicit standalone static\u002FPython plotting code should be reproducible and visibly adapted to the requested chart contract. Generic ad hoc snippets are acceptable only for exploratory charts.\n- The form must match the analytical comparison, and scales must stay honest and consistent across comparable charts.\n- Standard bar charts that compare absolute magnitude should start at zero. Delta-focused waterfalls, bridges, variance bars, and small-multiple movement charts may use non-zero or narrowed domains only when the zero baseline would materially hide the intended change and the chart carries exact labels plus a clear scale cue.\n- Data grain, filters, date range, denominator, and units must match the claim the chart supports.\n- Every shipped chart must have a visible title appropriate to its surface and a subtitle that carries needed units, time\u002Fcohort context, denominator, sample size, or volume.\n- Labels, ticks, titles, legends, callouts, benchmark labels, and annotations must not collide, clip, or detach from the evidence in the exported chart or final container.\n- Long labels, negative values, outside-end labels, zero-line context, and direct value labels need explicit layout space.\n- Multi-series filled marks need distinct tones, open fills, keylines, marker fills, line styles, direct labels, or faceting. Visually identical adjacent or overlapping fills fail QA.\n- Line styles, marker fills, open fills, keylines, ordering, faceting, and direct labels should remain legible in grayscale when they carry distinction.\n- Positive and negative states should use tone, open fill, zero-line context, and signed labels rather than default green\u002Fred semantics unless the exception is documented.\n- Exported SVG or HTML colors should match declared palette roots plus neutrals; remove unused multi-hue tokens unless documenting an intentional exception.\n- Chart scaffolding should stay quiet: no arbitrary colored backgrounds, gradients, decorative guides, inconsistent stroke widths, or decorative mark fills. Filled marks should keep keylines, and benchmark, calibration, and reference lines should use dark-neutral styling.\n- Titles, legends, and primary labels should use dark ink and share a clear header anchor. Numeric ticks and direct value labels should use mono styling where the template system calls for it.\n- Research charts should use the locked top-right blossom placement; third-party, partnership, and non-research charts should omit it.\n- Before handoff, inspect the visual in the artifact readers will open and verify that it answers the stated analytical question, signs and scales are honest, labels fit at laptop and mobile widths, the color and non-color encoding is understandable, and the caption states metric, time window, and source when those are part of the visual.\n- Inspect the final report, slide, dashboard, notebook, widget, or HTML layout before handoff. Revise before delivery when any requirement above fails.\n",{"data":37,"body":38},{"name":4,"description":6},{"type":39,"children":40},"root",[41,50,56,61,66,71,77,208,221,226,232,237,580,586,767,780,804,810,817,822,906,960,1090,1096,1255,1261,1498,1504],{"type":42,"tag":43,"props":44,"children":46},"element","h2",{"id":45},"related-skills",[47],{"type":48,"value":49},"text","Related Skills",{"type":42,"tag":51,"props":52,"children":53},"p",{},[54],{"type":48,"value":55},"Use $metric-diagnostics when the visual needs an explanation of a metric movement.",{"type":42,"tag":51,"props":57,"children":58},{},[59],{"type":48,"value":60},"Use $build-report when the visual is part of a durable analytical report.",{"type":42,"tag":62,"props":63,"children":64},"h1",{"id":14},[65],{"type":48,"value":13},{"type":42,"tag":51,"props":67,"children":68},{},[69],{"type":48,"value":70},"Create quantitative visuals that are analytically sound, immediately readable, and polished enough to ship in a report, memo, slide, dashboard, notebook, widget, or HTML artifact. Treat charts as evidence for a takeaway. Redesign charts that are visually attractive but analytically weak, and revise charts that are technically correct but hard to interpret.",{"type":42,"tag":43,"props":72,"children":74},{"id":73},"runtime-delivery-routing",[75],{"type":48,"value":76},"Runtime Delivery Routing",{"type":42,"tag":51,"props":78,"children":79},{},[80,82,89,91,97,99,105,107,113,115,122,124,130,131,137,139,145,147,153,154,160,162,168,170,175,177,183,185,191,193,199,201,206],{"type":48,"value":81},"If ",{"type":42,"tag":83,"props":84,"children":86},"code",{"className":85},[],[87],{"type":48,"value":88},"surface = chatgpt_web",{"type":48,"value":90}," and ",{"type":42,"tag":83,"props":92,"children":94},{"className":93},[],[95],{"type":48,"value":96},"mode = work_mode",{"type":48,"value":98}," are both positively identified, do not render with Data Analytics MCP chart or table widgets, do not call ",{"type":42,"tag":83,"props":100,"children":102},{"className":101},[],[103],{"type":48,"value":104},"render_chart",{"type":48,"value":106}," or ",{"type":42,"tag":83,"props":108,"children":110},{"className":109},[],[111],{"type":48,"value":112},"render_table",{"type":48,"value":114}," for inline delivery, and do not select an MCP artifact as the visual surface. This branch applies only after another workflow has already selected inline delivery; it does not choose inline over a report, dashboard, HTML, notebook, or other surface. For an already-selected inline visual, prefer native Work Mode rendering and read ",{"type":42,"tag":116,"props":117,"children":119},"a",{"href":118},"references\u002Fnative-inline-visualizations.md",[120],{"type":48,"value":121},"native-inline-visualizations.md",{"type":48,"value":123}," to choose and invoke ",{"type":42,"tag":83,"props":125,"children":127},{"className":126},[],[128],{"type":48,"value":129},"charts_widget_v2",{"type":48,"value":106},{"type":42,"tag":83,"props":132,"children":134},{"className":133},[],[135],{"type":48,"value":136},"app_block",{"type":48,"value":138},". For one supported ",{"type":42,"tag":83,"props":140,"children":142},{"className":141},[],[143],{"type":48,"value":144},"bar",{"type":48,"value":146},", ",{"type":42,"tag":83,"props":148,"children":150},{"className":149},[],[151],{"type":48,"value":152},"line",{"type":48,"value":146},{"type":42,"tag":83,"props":155,"children":157},{"className":156},[],[158],{"type":48,"value":159},"pie",{"type":48,"value":161},", or ",{"type":42,"tag":83,"props":163,"children":165},{"className":164},[],[166],{"type":48,"value":167},"scatter",{"type":48,"value":169}," chart, treat ",{"type":42,"tag":83,"props":171,"children":173},{"className":172},[],[174],{"type":48,"value":129},{"type":48,"value":176}," as directly surfaced in this runtime and emit its live ",{"type":42,"tag":83,"props":178,"children":180},{"className":179},[],[181],{"type":48,"value":182},"genui",{"type":48,"value":184}," content reference before considering fallback; do not self-declare it unavailable or search for it. The complete outer shape is ",{"type":42,"tag":83,"props":186,"children":188},{"className":187},[],[189],{"type":48,"value":190},"genui{\"charts_widget_v2\":{\"content\":{...}}}",{"type":48,"value":192},": replace ",{"type":42,"tag":83,"props":194,"children":196},{"className":195},[],[197],{"type":48,"value":198},"{...}",{"type":48,"value":200}," with the real chart spec and emit the reference without Markdown backticks. The inner chart spec alone is not a response; do not print bare JSON, plain HTML, or a code fence. Keep ",{"type":42,"tag":83,"props":202,"children":204},{"className":203},[],[205],{"type":48,"value":136},{"type":48,"value":207}," conditional on the host surfacing it. If the Visualize plugin is installed, also consult and follow its current visualization guidance for native chart or app-block authoring, while keeping this skill's delivery gate and fallback order authoritative. If an emitted native visual is rejected or fails to render, use a reproducible static\u002FMatplotlib chart that fits a non-MCP surface; use a compact table only if no visual renderer can be delivered. Use static or Matplotlib charting for this native-render failure fallback or when the user explicitly asks for Python, a static image\u002Ffile, notebook-oriented output, or export. A successful Data Analytics MCP tool result is not delivery confirmation in web Work Mode, so do not say a visual was plotted or rendered above unless the selected native or non-MCP surface actually rendered. MCP servers and other callable tools remain valid data sources.",{"type":42,"tag":51,"props":209,"children":210},{},[211,213,219],{"type":48,"value":212},"Whenever the selected report or dashboard delivery surface is HTML, read ",{"type":42,"tag":116,"props":214,"children":216},{"href":215},"references\u002Frecharts-html.md",[217],{"type":48,"value":218},"recharts-html.md",{"type":48,"value":220}," and use its packaged Recharts-in-HTML path with same-data static fallbacks. This includes Codex explicit HTML, ChatGPT web Work Mode, and HTML used for PDF, Google Docs, or Google Slides conversion.",{"type":42,"tag":51,"props":222,"children":223},{},[224],{"type":48,"value":225},"Outside positively identified web Work Mode, keep the existing surface selection rules unchanged.",{"type":42,"tag":43,"props":227,"children":229},{"id":228},"chart-selection",[230],{"type":48,"value":231},"Chart Selection",{"type":42,"tag":51,"props":233,"children":234},{},[235],{"type":48,"value":236},"Common surface forms should be named in the chart contract when the final surface is a report, dashboard, slide, notebook, widget, or HTML artifact.",{"type":42,"tag":238,"props":239,"children":240},"table",{},[241,265],{"type":42,"tag":242,"props":243,"children":244},"thead",{},[245],{"type":42,"tag":246,"props":247,"children":248},"tr",{},[249,255,260],{"type":42,"tag":250,"props":251,"children":252},"th",{},[253],{"type":48,"value":254},"Data relationship",{"type":42,"tag":250,"props":256,"children":257},{},[258],{"type":48,"value":259},"Best chart",{"type":42,"tag":250,"props":261,"children":262},{},[263],{"type":48,"value":264},"Use it well",{"type":42,"tag":266,"props":267,"children":268},"tbody",{},[269,307,336,357,386,416,446,474,495,524,551],{"type":42,"tag":246,"props":270,"children":271},{},[272,278,286],{"type":42,"tag":273,"props":274,"children":275},"td",{},[276],{"type":48,"value":277},"Trend over time or ordered axis",{"type":42,"tag":273,"props":279,"children":280},{},[281],{"type":42,"tag":83,"props":282,"children":284},{"className":283},[],[285],{"type":48,"value":152},{"type":42,"tag":273,"props":287,"children":288},{},[289,291,297,299,305],{"type":48,"value":290},"Show enough points to reveal shape; use ",{"type":42,"tag":83,"props":292,"children":294},{"className":293},[],[295],{"type":48,"value":296},"area",{"type":48,"value":298}," only when filled magnitude helps, and ",{"type":42,"tag":83,"props":300,"children":302},{"className":301},[],[303],{"type":48,"value":304},"sparkline",{"type":48,"value":306}," only in dense KPI cards",{"type":42,"tag":246,"props":308,"children":309},{},[310,315,324],{"type":42,"tag":273,"props":311,"children":312},{},[313],{"type":48,"value":314},"Composition over time",{"type":42,"tag":273,"props":316,"children":317},{},[318],{"type":42,"tag":83,"props":319,"children":321},{"className":320},[],[322],{"type":48,"value":323},"stackedArea",{"type":42,"tag":273,"props":325,"children":326},{},[327,329,334],{"type":48,"value":328},"Use when parts should read as one total; switch to ",{"type":42,"tag":83,"props":330,"children":332},{"className":331},[],[333],{"type":48,"value":152},{"type":48,"value":335}," when comparing component trajectories matters more",{"type":42,"tag":246,"props":337,"children":338},{},[339,344,352],{"type":42,"tag":273,"props":340,"children":341},{},[342],{"type":48,"value":343},"Comparison across categories",{"type":42,"tag":273,"props":345,"children":346},{},[347],{"type":42,"tag":83,"props":348,"children":350},{"className":349},[],[351],{"type":48,"value":144},{"type":42,"tag":273,"props":353,"children":354},{},[355],{"type":48,"value":356},"Sort when order is not semantic; use horizontal bars for long labels; avoid redundant legends",{"type":42,"tag":246,"props":358,"children":359},{},[360,365,374],{"type":42,"tag":273,"props":361,"children":362},{},[363],{"type":48,"value":364},"Ranking or top-N",{"type":42,"tag":273,"props":366,"children":367},{},[368],{"type":42,"tag":83,"props":369,"children":371},{"className":370},[],[372],{"type":48,"value":373},"leaderboard",{"type":42,"tag":273,"props":375,"children":376},{},[377,379,384],{"type":48,"value":378},"Keep it compact and single-measure; switch to ranked ",{"type":42,"tag":83,"props":380,"children":382},{"className":381},[],[383],{"type":48,"value":144},{"type":48,"value":385}," when comparison needs more chart context",{"type":42,"tag":246,"props":387,"children":388},{},[389,394,404],{"type":42,"tag":273,"props":390,"children":391},{},[392],{"type":48,"value":393},"Part-to-whole composition",{"type":42,"tag":273,"props":395,"children":396},{},[397,399],{"type":48,"value":398},"stacked ",{"type":42,"tag":83,"props":400,"children":402},{"className":401},[],[403],{"type":48,"value":144},{"type":42,"tag":273,"props":405,"children":406},{},[407,409,414],{"type":48,"value":408},"Keep the denominator explicit; use ",{"type":42,"tag":83,"props":410,"children":412},{"className":411},[],[413],{"type":48,"value":159},{"type":48,"value":415}," only for a rough read with few slices",{"type":42,"tag":246,"props":417,"children":418},{},[419,424,433],{"type":42,"tag":273,"props":420,"children":421},{},[422],{"type":48,"value":423},"Distribution or spread",{"type":42,"tag":273,"props":425,"children":426},{},[427],{"type":42,"tag":83,"props":428,"children":430},{"className":429},[],[431],{"type":48,"value":432},"histogram",{"type":42,"tag":273,"props":434,"children":435},{},[436,438,444],{"type":48,"value":437},"Use numeric bins that reveal shape; switch to ",{"type":42,"tag":83,"props":439,"children":441},{"className":440},[],[442],{"type":48,"value":443},"boxPlot",{"type":48,"value":445}," when comparing groups is the point",{"type":42,"tag":246,"props":447,"children":448},{},[449,454,462],{"type":42,"tag":273,"props":450,"children":451},{},[452],{"type":48,"value":453},"Distribution across groups",{"type":42,"tag":273,"props":455,"children":456},{},[457],{"type":42,"tag":83,"props":458,"children":460},{"className":459},[],[461],{"type":48,"value":443},{"type":42,"tag":273,"props":463,"children":464},{},[465,467,472],{"type":48,"value":466},"Use when median and spread matter more than full shape; switch to ",{"type":42,"tag":83,"props":468,"children":470},{"className":469},[],[471],{"type":48,"value":432},{"type":48,"value":473}," when shape needs space",{"type":42,"tag":246,"props":475,"children":476},{},[477,482,490],{"type":42,"tag":273,"props":478,"children":479},{},[480],{"type":48,"value":481},"Relationship between two numeric variables",{"type":42,"tag":273,"props":483,"children":484},{},[485],{"type":42,"tag":83,"props":486,"children":488},{"className":487},[],[489],{"type":48,"value":167},{"type":42,"tag":273,"props":491,"children":492},{},[493],{"type":48,"value":494},"Use numeric x and y at a meaningful observation grain with enough distinct points to show a pattern; retain point labels, sample\u002Fvolume fields, and one useful grouping candidate when safe",{"type":42,"tag":246,"props":496,"children":497},{},[498,503,512],{"type":42,"tag":273,"props":499,"children":500},{},[501],{"type":48,"value":502},"Dense two-dimensional pattern or cohort matrix",{"type":42,"tag":273,"props":504,"children":505},{},[506],{"type":42,"tag":83,"props":507,"children":509},{"className":508},[],[510],{"type":48,"value":511},"heatmap",{"type":42,"tag":273,"props":513,"children":514},{},[515,517,522],{"type":48,"value":516},"Use for matrix shape or intensity; switch to ",{"type":42,"tag":83,"props":518,"children":520},{"className":519},[],[521],{"type":48,"value":167},{"type":48,"value":523}," when point-level variation matters",{"type":42,"tag":246,"props":525,"children":526},{},[527,532,541],{"type":42,"tag":273,"props":528,"children":529},{},[530],{"type":48,"value":531},"Additive bridge from start to end",{"type":42,"tag":273,"props":533,"children":534},{},[535],{"type":42,"tag":83,"props":536,"children":538},{"className":537},[],[539],{"type":48,"value":540},"waterfall",{"type":42,"tag":273,"props":542,"children":543},{},[544,546],{"type":48,"value":545},"Use only when drivers sum cleanly to the end value; otherwise use ranked ",{"type":42,"tag":83,"props":547,"children":549},{"className":548},[],[550],{"type":48,"value":144},{"type":42,"tag":246,"props":552,"children":553},{},[554,559,568],{"type":42,"tag":273,"props":555,"children":556},{},[557],{"type":48,"value":558},"Ordered stage progression or drop-off",{"type":42,"tag":273,"props":560,"children":561},{},[562],{"type":42,"tag":83,"props":563,"children":565},{"className":564},[],[566],{"type":48,"value":567},"funnel",{"type":42,"tag":273,"props":569,"children":570},{},[571,573,578],{"type":48,"value":572},"Use only for ordered single-series stages; prefer stage ",{"type":42,"tag":83,"props":574,"children":576},{"className":575},[],[577],{"type":48,"value":144},{"type":48,"value":579}," when funnel geometry distorts comparison",{"type":42,"tag":43,"props":581,"children":583},{"id":582},"workflow",[584],{"type":48,"value":585},"Workflow",{"type":42,"tag":587,"props":588,"children":589},"ol",{},[590,596,631,675],{"type":42,"tag":591,"props":592,"children":593},"li",{},[594],{"type":48,"value":595},"Define the analytical question and one-sentence takeaway before choosing a chart. Identify the final surface, the intended comparison, and the context needed to make the visual honest.",{"type":42,"tag":591,"props":597,"children":598},{},[599,601,606,608,614,615,621,623,629],{"type":48,"value":600},"Choose the simplest defensible family and variant from ",{"type":42,"tag":83,"props":602,"children":604},{"className":603},[],[605],{"type":48,"value":231},{"type":48,"value":607},". Coordinate with ",{"type":42,"tag":83,"props":609,"children":611},{"className":610},[],[612],{"type":48,"value":613},"$build-dashboard",{"type":48,"value":106},{"type":42,"tag":83,"props":616,"children":618},{"className":617},[],[619],{"type":48,"value":620},"$build-report",{"type":48,"value":622}," when the visual belongs to those artifacts, and use ",{"type":42,"tag":83,"props":624,"children":626},{"className":625},[],[627],{"type":48,"value":628},"$validate-data",{"type":48,"value":630}," when the supporting analysis needs validation.",{"type":42,"tag":591,"props":632,"children":633},{},[634,636],{"type":48,"value":635},"Write a compact chart contract before plot code, dashboard configuration, or renderer-specific implementation work. Include:\n",{"type":42,"tag":637,"props":638,"children":639},"ul",{},[640,645,650,655,660,665,670],{"type":42,"tag":591,"props":641,"children":642},{},[643],{"type":48,"value":644},"analytical question and takeaway",{"type":42,"tag":591,"props":646,"children":647},{},[648],{"type":48,"value":649},"canonical family and concrete variant",{"type":42,"tag":591,"props":651,"children":652},{},[653],{"type":48,"value":654},"data sufficiency for the chosen visual: expected row count, temporal point count for trend views, scatter observation count and grain, requested date range and grain, and fallback if the first query is too sparse",{"type":42,"tag":591,"props":656,"children":657},{},[658],{"type":48,"value":659},"surface-native chart type, Recharts HTML chart type, or explicit static renderer when a concrete renderer has been selected",{"type":42,"tag":591,"props":661,"children":662},{},[663],{"type":48,"value":664},"delivery-specific constraints only after the delivery surface is chosen; for MCP widgets or app artifacts, use the shared MCP specification",{"type":42,"tag":591,"props":666,"children":667},{},[668],{"type":48,"value":669},"palette policy, approved palette roots, and non-color distinction plan",{"type":42,"tag":591,"props":671,"children":672},{},[673],{"type":48,"value":674},"output footprint, final container, export paths or delivery target, and the final QA surface",{"type":42,"tag":591,"props":676,"children":677},{},[678,680],{"type":48,"value":679},"Select the delivery path that matches the final surface.\n",{"type":42,"tag":637,"props":681,"children":682},{},[683,740,745,750,762],{"type":42,"tag":591,"props":684,"children":685},{},[686,688,693,695,700,701,706,708,713,714,719,720,725,726,731,733,738],{"type":48,"value":687},"In positively identified web Work Mode, only after the active workflow has already selected inline or chat-visible delivery, read ",{"type":42,"tag":83,"props":689,"children":691},{"className":690},[],[692],{"type":48,"value":118},{"type":48,"value":694}," and prefer native Work Mode rendering; do not call ",{"type":42,"tag":83,"props":696,"children":698},{"className":697},[],[699],{"type":48,"value":104},{"type":48,"value":106},{"type":42,"tag":83,"props":702,"children":704},{"className":703},[],[705],{"type":48,"value":112},{"type":48,"value":707}," for inline delivery. For one supported ",{"type":42,"tag":83,"props":709,"children":711},{"className":710},[],[712],{"type":48,"value":144},{"type":48,"value":146},{"type":42,"tag":83,"props":715,"children":717},{"className":716},[],[718],{"type":48,"value":152},{"type":48,"value":146},{"type":42,"tag":83,"props":721,"children":723},{"className":722},[],[724],{"type":48,"value":159},{"type":48,"value":161},{"type":42,"tag":83,"props":727,"children":729},{"className":728},[],[730],{"type":48,"value":167},{"type":48,"value":732}," chart, emit the directly surfaced ",{"type":42,"tag":83,"props":734,"children":736},{"className":735},[],[737],{"type":48,"value":129},{"type":48,"value":739}," live content reference before fallback. Use a reproducible static\u002FMatplotlib chart only after that emitted reference is rejected or fails to render, or when no suitable native renderer exists for the requested chart family; use a compact table only if no visual renderer can be delivered, and do not describe a Data Analytics MCP tool result as rendered above. Use static or Matplotlib charting for this native-render failure fallback or for an explicit Python, static image\u002Ffile, notebook, or export request.",{"type":42,"tag":591,"props":741,"children":742},{},[743],{"type":48,"value":744},"Outside web Work Mode, default to Data Analytics MCP chart widgets for ad hoc, inline, chat-visible, or otherwise unspecified chart requests. Treat \"make\u002Fshow\u002Frender this chart\" as an MCP widget request unless the user explicitly asks for Python, a static image\u002Ffile, notebook code, HTML, BI\u002Fdashboard editing, slides\u002Fdocs export, or no rendered artifact.",{"type":42,"tag":591,"props":746,"children":747},{},[748],{"type":48,"value":749},"Use the selected report, dashboard, BI, notebook, slide, or static HTML surface's native chart primitives only when the user explicitly selected that surface or the active report\u002Fdashboard workflow selected it before chart rendering.",{"type":42,"tag":591,"props":751,"children":752},{},[753,755,760],{"type":48,"value":754},"Whenever the selected report or dashboard surface is HTML, read ",{"type":42,"tag":83,"props":756,"children":758},{"className":757},[],[759],{"type":48,"value":215},{"type":48,"value":761}," and use its packaged Recharts runtime plus same-data static fallback.",{"type":42,"tag":591,"props":763,"children":764},{},[765],{"type":48,"value":766},"Outside the web Work Mode native-render failure fallback, use static Python charting only when the user explicitly asks for Python, a standalone static image\u002Ffile, or notebook-oriented output. Choose a reproducible local renderer, export the requested format, and inspect the output. Do not use that path as the default for HTML reports or dashboards.",{"type":42,"tag":637,"props":768,"children":769},{},[770,775],{"type":42,"tag":591,"props":771,"children":772},{},[773],{"type":48,"value":774},"Use governed BI or dashboard-native widgets when that surface owns rendering; this skill should supply the visual spec and QA bar.",{"type":42,"tag":591,"props":776,"children":777},{},[778],{"type":48,"value":779},"Implement local HTML\u002FCSS\u002FSVG\u002Fcanvas\u002FJavaScript visuals only when the final surface truly requires local rendering, custom interaction, offline portability, or a larger artifact than a widget can carry.",{"type":42,"tag":587,"props":781,"children":783},{"start":782},5,[784,789,794,799],{"type":42,"tag":591,"props":785,"children":786},{},[787],{"type":48,"value":788},"Build in this order: format, structure, color, then QA. Choose the family, variant, and delivery surface first; decide labels, annotations, benchmarks, and retained information second; choose palette policy and explicit colors last.",{"type":42,"tag":591,"props":790,"children":791},{},[792],{"type":48,"value":793},"Render or export the chart in its real context. For HTML reports and dashboards, inspect both the live Recharts mount and its same-data static fallback. For explicit standalone static output, save and inspect the image format the user requested.",{"type":42,"tag":591,"props":795,"children":796},{},[797],{"type":48,"value":798},"Inspect the visual in the final report, slide, dashboard, notebook, widget, or HTML layout. Revise before delivery when the chart, labels, color system, or container fails final-context QA.",{"type":42,"tag":591,"props":800,"children":801},{},[802],{"type":48,"value":803},"For shipped reports or dashboards with multiple visuals, maintain a compact chart map in notes or source material. Name the section, analytical question, selected family and chart type, fields, supported takeaway, palette policy, and delivery artifact, image path, or provenance source.",{"type":42,"tag":43,"props":805,"children":807},{"id":806},"standards",[808],{"type":48,"value":809},"Standards",{"type":42,"tag":811,"props":812,"children":814},"h3",{"id":813},"selection-rules",[815],{"type":48,"value":816},"Selection Rules",{"type":42,"tag":51,"props":818,"children":819},{},[820],{"type":48,"value":821},"Start from the analytical question and comparison the reader needs to make, not from a favorite chart type. Keep the top-level set small:",{"type":42,"tag":637,"props":823,"children":824},{},[825,834,843,852,861,870,879,888,897],{"type":42,"tag":591,"props":826,"children":827},{},[828],{"type":42,"tag":83,"props":829,"children":831},{"className":830},[],[832],{"type":48,"value":833},"Tables & Scorecards",{"type":42,"tag":591,"props":835,"children":836},{},[837],{"type":42,"tag":83,"props":838,"children":840},{"className":839},[],[841],{"type":48,"value":842},"Trend",{"type":42,"tag":591,"props":844,"children":845},{},[846],{"type":42,"tag":83,"props":847,"children":849},{"className":848},[],[850],{"type":48,"value":851},"Comparison & Ranking",{"type":42,"tag":591,"props":853,"children":854},{},[855],{"type":42,"tag":83,"props":856,"children":858},{"className":857},[],[859],{"type":48,"value":860},"Composition",{"type":42,"tag":591,"props":862,"children":863},{},[864],{"type":42,"tag":83,"props":865,"children":867},{"className":866},[],[868],{"type":48,"value":869},"Distribution",{"type":42,"tag":591,"props":871,"children":872},{},[873],{"type":42,"tag":83,"props":874,"children":876},{"className":875},[],[877],{"type":48,"value":878},"Relationship",{"type":42,"tag":591,"props":880,"children":881},{},[882],{"type":42,"tag":83,"props":883,"children":885},{"className":884},[],[886],{"type":48,"value":887},"Uncertainty & Benchmark",{"type":42,"tag":591,"props":889,"children":890},{},[891],{"type":42,"tag":83,"props":892,"children":894},{"className":893},[],[895],{"type":48,"value":896},"Matrix & Cohort",{"type":42,"tag":591,"props":898,"children":899},{},[900],{"type":42,"tag":83,"props":901,"children":903},{"className":902},[],[904],{"type":48,"value":905},"Decomposition & Progression",{"type":42,"tag":51,"props":907,"children":908},{},[909,911,917,918,924,925,930,931,937,938,943,944,950,952,958],{"type":48,"value":910},"Concrete forms such as ",{"type":42,"tag":83,"props":912,"children":914},{"className":913},[],[915],{"type":48,"value":916},"highlighted multi-series line",{"type":48,"value":146},{"type":42,"tag":83,"props":919,"children":921},{"className":920},[],[922],{"type":48,"value":923},"Likert",{"type":48,"value":146},{"type":42,"tag":83,"props":926,"children":928},{"className":927},[],[929],{"type":48,"value":159},{"type":48,"value":146},{"type":42,"tag":83,"props":932,"children":934},{"className":933},[],[935],{"type":48,"value":936},"Pareto",{"type":48,"value":146},{"type":42,"tag":83,"props":939,"children":941},{"className":940},[],[942],{"type":48,"value":540},{"type":48,"value":146},{"type":42,"tag":83,"props":945,"children":947},{"className":946},[],[948],{"type":48,"value":949},"faceted dot & interval",{"type":48,"value":951},", and ",{"type":42,"tag":83,"props":953,"children":955},{"className":954},[],[956],{"type":48,"value":957},"cohort heatmap",{"type":48,"value":959}," are variants inside these families, not peer families.",{"type":42,"tag":637,"props":961,"children":962},{},[963,968,973,985,990,995,1000,1005,1010,1015,1035,1040,1045,1050,1055,1060,1065,1070,1075,1080,1085],{"type":42,"tag":591,"props":964,"children":965},{},[966],{"type":48,"value":967},"Use charts for shape and comparison; use tables for exact lookup. If a table would show 3-8 comparable entities with one dominant numeric measure, prefer a bar, dot, lollipop, leaderboard, or other chart unless exact row lookup is the point.",{"type":42,"tag":591,"props":969,"children":970},{},[971],{"type":48,"value":972},"When reviewed evidence contains many comparable values, rows, categories, segments, or time points, default to rendering a simple chart on the selected delivery surface when that surface is available and safe. Skip rendering only when exact row lookup is the main task, the data is too sparse for an honest chart, the user asked for table\u002Fprose only, or the selected surface cannot support a useful visual.",{"type":42,"tag":591,"props":974,"children":975},{},[976,978,983],{"type":48,"value":977},"Do not choose ",{"type":42,"tag":83,"props":979,"children":981},{"className":980},[],[982],{"type":48,"value":152},{"type":48,"value":984}," merely because the prompt says \"trend\" or \"trending\". Decide first whether the reader needs current status, movement, variance to plan, mix, concentration, drivers, progression, or distribution.",{"type":42,"tag":591,"props":986,"children":987},{},[988],{"type":48,"value":989},"Do not ship underpowered trend charts. For line, area, sparkline, indexed-trend, or other time-series views, first try to expose either a finer time grain or a longer date range so the displayed series has enough observed points to show shape. As a default, aim for at least 8-12 temporal points for a trend visual; if the available evidence has only a few anchor periods, query daily or weekly rows, extend the lookback, or add a meaningful segment\u002Fcomparator before rendering. Use a KPI strip, grouped bar, slope chart, table, or narrative callout instead when the question is really a small set of discrete period comparisons.",{"type":42,"tag":591,"props":991,"children":992},{},[993],{"type":48,"value":994},"Do not ship underpowered scatter charts. A useful scatter needs enough comparable observations to reveal shape, clustering, outliers, or exceptions; as a default, aim for at least 12-20 meaningful points and treat fewer than 8 points as a likely table, bar, dot\u002Flollipop, or narrative comparison unless each point is intentionally important and labeled. If the first result only has a few segment aggregates, make one targeted attempt to query a finer analytical grain such as account, workspace, user cohort, customer, model, endpoint, route, geography, or segment-by-period. Keep all plotted rows at the same grain, and do not mix totals, averages, and detail rows in one scatter.",{"type":42,"tag":591,"props":996,"children":997},{},[998],{"type":48,"value":999},"For scatter charts, choose x and y measures that can plausibly vary independently and share the same denominator, time window, population, and filters. Include the denominator, sample size, or volume metric used to judge reliability, and use a size encoding only when that third metric materially changes interpretation. Add a point-label field for small or executive-facing scatters, and retain a meaningful categorical field such as segment, plan, route, product line, model family, or region for optional color or filtering. Avoid coloring by a unique row id; use labels or the table for exact identity instead.",{"type":42,"tag":591,"props":1001,"children":1002},{},[1003],{"type":48,"value":1004},"Use horizontal bars for long labels and sorted bars when order has no semantic meaning.",{"type":42,"tag":591,"props":1006,"children":1007},{},[1008],{"type":48,"value":1009},"Use compact leaderboard-style ranked bars only for top-N previews with one numeric value and 3-8 visible rows. Default to 5-6 rows in compact dashboard cards. Use a paginated table for long-tail browsing or exact lookup, Pareto for cumulative concentration, and waterfall for additive start-to-end driver bridges.",{"type":42,"tag":591,"props":1011,"children":1012},{},[1013],{"type":48,"value":1014},"Do not use leaderboards to rank KPI definitions or time-window definitions against each other, such as latest DAU versus WAU versus MAU. Use KPI cards or a compact table for latest values; use trends, indexed trends, share trends, or ratio charts for movement or relationship questions.",{"type":42,"tag":591,"props":1016,"children":1017},{},[1018,1020,1026,1027,1033],{"type":48,"value":1019},"When a bar chart compares one measure across categories, use one categorical axis and one quantitative axis. Do not set a ",{"type":42,"tag":83,"props":1021,"children":1023},{"className":1022},[],[1024],{"type":48,"value":1025},"color",{"type":48,"value":146},{"type":42,"tag":83,"props":1028,"children":1030},{"className":1029},[],[1031],{"type":48,"value":1032},"series",{"type":48,"value":1034},", or grouped-bar encoding to the same category field just to color each bar; that creates a redundant legend and implies an extra grouping dimension. Use a palette\u002Fstyle option or direct labels if the surface supports per-category color without a legend; otherwise use a single mark color.",{"type":42,"tag":591,"props":1036,"children":1037},{},[1038],{"type":48,"value":1039},"When a bar chart compares same-unit movement across distinct KPI categories, such as latest week-over-week percent change by metric, categorical bar colors can help scanning, but they should be styling, not a visible grouping\u002Flegend, unless a second categorical dimension is present.",{"type":42,"tag":591,"props":1041,"children":1042},{},[1043],{"type":48,"value":1044},"When a bar chart compares unrelated business entities or components, such as products, model families, segments, or seat-support areas, do not encode every row with one fixed color when category identity matters. Prefer categorical styling and direct labels; reserve a single color for one measure repeated across a single semantic entity. Avoid adding a color legend when the axis labels already name the categories.",{"type":42,"tag":591,"props":1046,"children":1047},{},[1048],{"type":48,"value":1049},"For active-user dashboards, use KPI cards for latest DAU, WAU, MAU, Plus DAU, and Plus WAU values; trend or indexed-trend charts for movement over time; share or stickiness views when the question is mix or ratios; and categorical horizontal bars for unrelated week-over-week metric movements.",{"type":42,"tag":591,"props":1051,"children":1052},{},[1053],{"type":48,"value":1054},"Prefer variant escalation inside a family before inventing a new chart type: line to small multiples, bar to dot\u002Flollipop, scatter to density, stacked bar to pie only when the circular read is explicitly useful.",{"type":42,"tag":591,"props":1056,"children":1057},{},[1058],{"type":48,"value":1059},"Keep pie, Pareto, waterfall, and Likert as variants, not defaults.",{"type":42,"tag":591,"props":1061,"children":1062},{},[1063],{"type":48,"value":1064},"Avoid bubble charts unless the third variable materially changes the interpretation.",{"type":42,"tag":591,"props":1066,"children":1067},{},[1068],{"type":48,"value":1069},"Include volume, denominator, sample size, or cohort context when omission could mislead.",{"type":42,"tag":591,"props":1071,"children":1072},{},[1073],{"type":48,"value":1074},"In multi-area executive reports, repeated line charts are a smell. Use line charts only where the main question is continuous movement over time. Consider dot\u002Flollipop or bar with reference for plan variance, stacked area or 100% stacked bar for mix, ranked bars or leaderboards for category comparisons, waterfall for additive drivers, heatmaps for cohort or matrix structure, and stage bars for ordered progression.",{"type":42,"tag":591,"props":1076,"children":1077},{},[1078],{"type":48,"value":1079},"For one-slide-per-area executive reports, do a chart-family pass before writing the visual plan. Audit repeated families and require a rationale when multiple sections use the same family despite asking different questions.",{"type":42,"tag":591,"props":1081,"children":1082},{},[1083],{"type":48,"value":1084},"If every visual in a report uses the same family, document the reason in the chart map and verify that no section is actually asking for status, mix, variance, or drivers.",{"type":42,"tag":591,"props":1086,"children":1087},{},[1088],{"type":48,"value":1089},"Four or more all-line visuals fail the multi-chart report contract unless the report is redesigned with data-compatible alternatives or fewer visuals.",{"type":42,"tag":811,"props":1091,"children":1093},{"id":1092},"surface-and-implementation",[1094],{"type":48,"value":1095},"Surface And Implementation",{"type":42,"tag":637,"props":1097,"children":1098},{},[1099,1163,1176,1188,1208,1213,1218,1223,1228,1233,1245,1250],{"type":42,"tag":591,"props":1100,"children":1101},{},[1102,1104,1109,1111,1116,1117,1122,1123,1128,1129,1134,1135,1140,1142,1147,1148,1153,1155,1161],{"type":48,"value":1103},"For data visualization requests outside web Work Mode where the user has not chosen a file, notebook, BI\u002Fdashboard, report, slide, docs, HTML, or no-render output surface, render with Data Analytics MCP chart widgets by default when the MCP widget tools are available. In web Work Mode, only after inline delivery has already been selected, read ",{"type":42,"tag":83,"props":1105,"children":1107},{"className":1106},[],[1108],{"type":48,"value":118},{"type":48,"value":1110}," and prefer native Work Mode rendering; for one supported ",{"type":42,"tag":83,"props":1112,"children":1114},{"className":1113},[],[1115],{"type":48,"value":144},{"type":48,"value":146},{"type":42,"tag":83,"props":1118,"children":1120},{"className":1119},[],[1121],{"type":48,"value":152},{"type":48,"value":146},{"type":42,"tag":83,"props":1124,"children":1126},{"className":1125},[],[1127],{"type":48,"value":159},{"type":48,"value":161},{"type":42,"tag":83,"props":1130,"children":1132},{"className":1131},[],[1133],{"type":48,"value":167},{"type":48,"value":732},{"type":42,"tag":83,"props":1136,"children":1138},{"className":1137},[],[1139],{"type":48,"value":129},{"type":48,"value":1141}," live content reference before fallback. Use a reproducible static\u002FMatplotlib chart before a compact table fallback only after that emitted reference is rejected or fails to render, or when no suitable native renderer exists for the requested chart family. Do not call ",{"type":42,"tag":83,"props":1143,"children":1145},{"className":1144},[],[1146],{"type":48,"value":104},{"type":48,"value":106},{"type":42,"tag":83,"props":1149,"children":1151},{"className":1150},[],[1152],{"type":48,"value":112},{"type":48,"value":1154}," for web Work Mode delivery, do not treat an ",{"type":42,"tag":83,"props":1156,"children":1158},{"className":1157},[],[1159],{"type":48,"value":1160},"ok:true",{"type":48,"value":1162}," Data Analytics MCP tool result as proof that the browser rendered the visual, and use static or Matplotlib charting only for that native-render failure fallback or when the user explicitly asks for Python, a static image\u002Ffile, notebook-oriented output, or export. When the user explicitly chooses another surface, keep this skill's output to chart selection, data planning, implementation guidance, and QA for that surface.",{"type":42,"tag":591,"props":1164,"children":1165},{},[1166,1168,1174],{"type":48,"value":1167},"When the selected delivery surface is an MCP Apps widget or Data Analytics MCP report\u002Fdashboard artifact, read ",{"type":42,"tag":83,"props":1169,"children":1171},{"className":1170},[],[1172],{"type":48,"value":1173},"..\u002F..\u002Fsrc\u002Fanalytics-app-core.md",{"type":48,"value":1175}," after selecting the chart family. Do not let an MCP-supported type list drive general chart selection for non-MCP surfaces.",{"type":42,"tag":591,"props":1177,"children":1178},{},[1179,1181,1186],{"type":48,"value":1180},"When rendering an MCP inline chart from reviewed query results, call ",{"type":42,"tag":83,"props":1182,"children":1184},{"className":1183},[],[1185],{"type":48,"value":104},{"type":48,"value":1187}," with source metadata, an exploration-ready table, chart encodings, and display settings. Do not create an intermediate Python chart image for the same result unless the user explicitly asked for Python\u002Fstatic output or the widget renderer is unavailable.",{"type":42,"tag":591,"props":1189,"children":1190},{},[1191,1193,1199,1200,1206],{"type":48,"value":1192},"Any table that powers a chart must be richer than the minimum fields needed to draw that chart. Do not ship source-data tables containing only ",{"type":42,"tag":83,"props":1194,"children":1196},{"className":1195},[],[1197],{"type":48,"value":1198},"x",{"type":48,"value":146},{"type":42,"tag":83,"props":1201,"children":1203},{"className":1202},[],[1204],{"type":48,"value":1205},"y",{"type":48,"value":1207},", and optional series\u002Fcolor fields when the reviewed result can safely include contextual dimensions, numerator\u002Fdenominator fields, date or cohort fields, ranks, benchmarks, comparison-period values, or adjacent measures. If privacy, query cost, source limits, or metric definitions prevent a richer table, state that limitation in the chart\u002Freport notes.",{"type":42,"tag":591,"props":1209,"children":1210},{},[1211],{"type":48,"value":1212},"Before rendering or exporting, inspect the reviewed result table for information density. If the chart would render fewer than 8 temporal points, fewer than 4 meaningful categories, fewer than 8 scatter observations, or a nearly straight two\u002Fthree-point path, make one targeted attempt to improve the supporting data by querying a finer grain, extending the time range, or adding a relevant breakdown that supports the same claim. If that is blocked by source limits, query cost, privacy, or metric definition, record the limitation and switch to a more honest form such as KPI cards, grouped bars for discrete periods, a table, or prose with exact values.",{"type":42,"tag":591,"props":1214,"children":1215},{},[1216],{"type":48,"value":1217},"Include more than one meaningful quantitative field when the user may reasonably compare measures, swap axes, inspect target versus actual, or choose a relationship view. Do not fabricate auxiliary measures or ship raw detail rows merely to make extra chart types appear possible.",{"type":42,"tag":591,"props":1219,"children":1220},{},[1221],{"type":48,"value":1222},"Shape chart-ready data for realistic alternatives, not arbitrary ones. A trend chart should usually retain its temporal field, value field, and meaningful segment\u002Fcomparator fields; a category comparison should retain the category, value, useful grouping candidates, and rank\u002Fsort context; composition charts should retain the denominator or share context when available. A scatter chart should retain a stable point identity or label, numeric x and y measures, any denominator or sample-size fields, a useful volume\u002Fsize candidate, and one or two interpretable grouping or filter fields. Do not promote a retained grouping candidate into a color\u002Fseries encoding unless it adds information not already carried by the axis, facet, or table labels.",{"type":42,"tag":591,"props":1224,"children":1225},{},[1226],{"type":48,"value":1227},"Treat custom local visual implementations as report-complete only after they match the selected delivery mode and pass final-context QA.",{"type":42,"tag":591,"props":1229,"children":1230},{},[1231],{"type":48,"value":1232},"Use the selected surface's native chart block when one is available. Do not add an extra decorative outline shell around charts.",{"type":42,"tag":591,"props":1234,"children":1235},{},[1236,1238,1243],{"type":48,"value":1237},"For every HTML report or dashboard, use ",{"type":42,"tag":83,"props":1239,"children":1241},{"className":1240},[],[1242],{"type":48,"value":215},{"type":48,"value":1244},": embed the packaged Recharts runtime, keep static same-data fallbacks, and do not install dependencies or rely on remote scripts.",{"type":42,"tag":591,"props":1246,"children":1247},{},[1248],{"type":48,"value":1249},"For explicit standalone static\u002FPython output, use a reproducible local renderer and inspect the exported result. Do not let a static-image path replace the packaged Recharts HTML default.",{"type":42,"tag":591,"props":1251,"children":1252},{},[1253],{"type":48,"value":1254},"Assume local environments can be minimal or offline. Do not assume network installs will succeed.",{"type":42,"tag":811,"props":1256,"children":1258},{"id":1257},"visual-design",[1259],{"type":48,"value":1260},"Visual Design",{"type":42,"tag":637,"props":1262,"children":1263},{},[1264,1269,1274,1279,1284,1310,1351,1402,1407,1412,1417,1422,1427,1432,1437,1442,1447,1483,1488,1493],{"type":42,"tag":591,"props":1265,"children":1266},{},[1267],{"type":48,"value":1268},"Match chart titles to the surface. Report and dashboard visual headers should stay neutral and descriptive, with takeaways in adjacent narrative text. Standalone static charts may use takeaway-led titles when there is no surrounding narrative block.",{"type":42,"tag":591,"props":1270,"children":1271},{},[1272],{"type":48,"value":1273},"Put metric details, units, denominator, date range, cohort, filters, sample size, or volume in the subtitle when needed. Notes can add caveats, but do not replace the subtitle.",{"type":42,"tag":591,"props":1275,"children":1276},{},[1277],{"type":48,"value":1278},"Use a single font family across charts and surrounding output when possible. Prefer white or near-white backgrounds, quiet grey grid lines, deep charcoal text, and restrained approved palette roots centered on blue, gold, orange, olive, and pink.",{"type":42,"tag":591,"props":1280,"children":1281},{},[1282],{"type":48,"value":1283},"Do not rely on color alone. Use tone, open fill, marker fill, line style, direct labels, ordering, or faceting when series or states need separation.",{"type":42,"tag":591,"props":1285,"children":1286},{},[1287,1289,1295,1296,1302,1303,1308],{"type":48,"value":1288},"Only set color or series encodings for meaningful grouping dimensions such as ",{"type":42,"tag":83,"props":1290,"children":1292},{"className":1291},[],[1293],{"type":48,"value":1294},"segment",{"type":48,"value":146},{"type":42,"tag":83,"props":1297,"children":1299},{"className":1298},[],[1300],{"type":48,"value":1301},"product_line",{"type":48,"value":161},{"type":42,"tag":83,"props":1304,"children":1306},{"className":1305},[],[1307],{"type":48,"value":1032},{"type":48,"value":1309}," when they are not already the sole axis category. Omit color for single-series charts and do not manufacture or duplicate a grouping field just to produce a legend.",{"type":42,"tag":591,"props":1311,"children":1312},{},[1313,1315],{"type":48,"value":1314},"Choose one palette policy before plotting:\n",{"type":42,"tag":637,"props":1316,"children":1317},{},[1318,1329,1340],{"type":42,"tag":591,"props":1319,"children":1320},{},[1321,1327],{"type":42,"tag":83,"props":1322,"children":1324},{"className":1323},[],[1325],{"type":48,"value":1326},"single-root preferred",{"type":48,"value":1328},": one non-neutral root plus shades, open fills, and neutral references for simple trends, ranks, distributions, relationships, matrices, and repeated panels.",{"type":42,"tag":591,"props":1330,"children":1331},{},[1332,1338],{"type":42,"tag":83,"props":1333,"children":1335},{"className":1334},[],[1336],{"type":48,"value":1337},"hard two-root cap",{"type":48,"value":1339},": at most two non-neutral roots plus neutrals for binary, signed, focal-vs-context, benchmark, comparator, waterfall, Pareto, diverging, highlighted trend, and ordered line-dot charts.",{"type":42,"tag":591,"props":1341,"children":1342},{},[1343,1349],{"type":42,"tag":83,"props":1344,"children":1346},{"className":1345},[],[1347],{"type":48,"value":1348},"relaxed multi-category",{"type":48,"value":1350},": up to five approved roots when category identity is the point, such as pie, stacked bars, stacked area, grouped bars, and stage bars. If more are needed, group to top-N plus Other or change forms.",{"type":42,"tag":591,"props":1352,"children":1353},{},[1354,1356,1362,1364,1370,1372,1378,1380,1386,1387,1393,1394,1400],{"type":48,"value":1355},"Use each selected root's ",{"type":42,"tag":83,"props":1357,"children":1359},{"className":1358},[],[1360],{"type":48,"value":1361},"base",{"type":48,"value":1363}," tone as the default non-neutral mark color. Reserve ",{"type":42,"tag":83,"props":1365,"children":1367},{"className":1366},[],[1368],{"type":48,"value":1369},"mid",{"type":48,"value":1371}," for deliberate higher-contrast exceptions, use ",{"type":42,"tag":83,"props":1373,"children":1375},{"className":1374},[],[1376],{"type":48,"value":1377},"dark",{"type":48,"value":1379}," for keylines, outlines, labels, or reference strokes, and use ",{"type":42,"tag":83,"props":1381,"children":1383},{"className":1382},[],[1384],{"type":48,"value":1385},"light",{"type":48,"value":146},{"type":42,"tag":83,"props":1388,"children":1390},{"className":1389},[],[1391],{"type":48,"value":1392},"xlight",{"type":48,"value":161},{"type":42,"tag":83,"props":1395,"children":1397},{"className":1396},[],[1398],{"type":48,"value":1399},"open",{"type":48,"value":1401}," for supporting fills.",{"type":42,"tag":591,"props":1403,"children":1404},{},[1405],{"type":48,"value":1406},"Generate explicit palette maps from declared colors. Do not let plotting library categorical defaults choose shipped chart colors.",{"type":42,"tag":591,"props":1408,"children":1409},{},[1410],{"type":48,"value":1411},"For signed values, avoid green\u002Fred by default. Use dark versus open\u002Flight fills, direct signed labels, and clear zero-line context unless documented domain semantics require an exception.",{"type":42,"tag":591,"props":1413,"children":1414},{},[1415],{"type":48,"value":1416},"For waterfall charts, use matched neutral start and end anchors plus exactly two non-neutral delta colors: one positive and one negative. Do not introduce extra hues or darker\u002Flighter non-neutral keylines for individual drivers.",{"type":42,"tag":591,"props":1418,"children":1419},{},[1420],{"type":48,"value":1421},"For waterfall, bridge, variance, and other delta-focused charts where the takeaway is movement against a large base, do not force the value axis to zero when zero would materially compress the intended movement. Use a focused value-axis domain around the cumulative path or delta range with padding; preserve honesty with exact start\u002Fend\u002Fchange labels, visible units, and an explicit focused-scale cue in the subtitle, caption, or axis when needed. Keep zero in view when values cross zero or the question is absolute magnitude.",{"type":42,"tag":591,"props":1423,"children":1424},{},[1425],{"type":48,"value":1426},"Keep one stroke-width system for marks, keylines, guides, and reference lines. Use dark-neutral styling for benchmark, calibration, or ideal lines.",{"type":42,"tag":591,"props":1428,"children":1429},{},[1430],{"type":48,"value":1431},"Keep left and bottom axis anchors visible when labels depend on them. Remove ticks, guides, or connectors that do not improve the intended comparison.",{"type":42,"tag":591,"props":1433,"children":1434},{},[1435],{"type":48,"value":1436},"Prefer direct labels when they reduce legend lookups; use a compact top legend when direct labels create clutter.",{"type":42,"tag":591,"props":1438,"children":1439},{},[1440],{"type":48,"value":1441},"Reserve explicit left and right space for horizontal or diverging bars with long labels or negative values. Do not shrink typography to force a narrow card.",{"type":42,"tag":591,"props":1443,"children":1444},{},[1445],{"type":48,"value":1446},"Do not use gradients inside chart marks, arbitrary colored chart backgrounds, inconsistent or ad hoc corner radii, or thickness as an emphasis channel.",{"type":42,"tag":591,"props":1448,"children":1449},{},[1450,1452,1458,1460,1466,1468,1474,1475,1481],{"type":48,"value":1451},"For HTML artifacts, keep standalone charts on real grid footprints: ",{"type":42,"tag":83,"props":1453,"children":1455},{"className":1454},[],[1456],{"type":48,"value":1457},"8 columns",{"type":48,"value":1459}," by default, ",{"type":42,"tag":83,"props":1461,"children":1463},{"className":1462},[],[1464],{"type":48,"value":1465},"6",{"type":48,"value":1467}," minimum, ",{"type":42,"tag":83,"props":1469,"children":1471},{"className":1470},[],[1472],{"type":48,"value":1473},"10",{"type":48,"value":106},{"type":42,"tag":83,"props":1476,"children":1478},{"className":1477},[],[1479],{"type":48,"value":1480},"12",{"type":48,"value":1482}," for complex charts, stacked vertically on mobile. Align multi-chart rows from the left\u002Fstart edge.",{"type":42,"tag":591,"props":1484,"children":1485},{},[1486],{"type":48,"value":1487},"Match HTML chart containers, legends, KPI strips, and notes to the same Data Viz System tokens as the surrounding report or dashboard. Remove unused multi-hue CSS variables when they are not rendered.",{"type":42,"tag":591,"props":1489,"children":1490},{},[1491],{"type":48,"value":1492},"Use dark chart variants only when the containing artifact is dark. Inspect both light and dark variants for shipped branded web outputs.",{"type":42,"tag":591,"props":1494,"children":1495},{},[1496],{"type":48,"value":1497},"For research charts, lock the blossom to the header's top-right corner. Omit it for third-party, partnership, and non-research charts.",{"type":42,"tag":811,"props":1499,"children":1501},{"id":1500},"quality-bar",[1502],{"type":48,"value":1503},"Quality Bar",{"type":42,"tag":637,"props":1505,"children":1506},{},[1507,1519,1524,1529,1534,1539,1544,1549,1554,1559,1564,1569,1574,1579,1584,1589,1594,1599,1604],{"type":42,"tag":591,"props":1508,"children":1509},{},[1510,1512,1517],{"type":48,"value":1511},"Chart choice should follow ",{"type":42,"tag":83,"props":1513,"children":1515},{"className":1514},[],[1516],{"type":48,"value":231},{"type":48,"value":1518},".",{"type":42,"tag":591,"props":1520,"children":1521},{},[1522],{"type":48,"value":1523},"Choose and honor an explicit delivery surface. Use MCP widgets only when that surface is available, safe, useful, and not contrary to the user's requested output mode.",{"type":42,"tag":591,"props":1525,"children":1526},{},[1527],{"type":48,"value":1528},"Keep chart contracts, omitted-chart explanations, validator notes, and QA rationale out of visible executive report bodies unless the user asks for methodology or the detail changes the reader-facing takeaway.",{"type":42,"tag":591,"props":1530,"children":1531},{},[1532],{"type":48,"value":1533},"Explicit standalone static\u002FPython plotting code should be reproducible and visibly adapted to the requested chart contract. Generic ad hoc snippets are acceptable only for exploratory charts.",{"type":42,"tag":591,"props":1535,"children":1536},{},[1537],{"type":48,"value":1538},"The form must match the analytical comparison, and scales must stay honest and consistent across comparable charts.",{"type":42,"tag":591,"props":1540,"children":1541},{},[1542],{"type":48,"value":1543},"Standard bar charts that compare absolute magnitude should start at zero. Delta-focused waterfalls, bridges, variance bars, and small-multiple movement charts may use non-zero or narrowed domains only when the zero baseline would materially hide the intended change and the chart carries exact labels plus a clear scale cue.",{"type":42,"tag":591,"props":1545,"children":1546},{},[1547],{"type":48,"value":1548},"Data grain, filters, date range, denominator, and units must match the claim the chart supports.",{"type":42,"tag":591,"props":1550,"children":1551},{},[1552],{"type":48,"value":1553},"Every shipped chart must have a visible title appropriate to its surface and a subtitle that carries needed units, time\u002Fcohort context, denominator, sample size, or volume.",{"type":42,"tag":591,"props":1555,"children":1556},{},[1557],{"type":48,"value":1558},"Labels, ticks, titles, legends, callouts, benchmark labels, and annotations must not collide, clip, or detach from the evidence in the exported chart or final container.",{"type":42,"tag":591,"props":1560,"children":1561},{},[1562],{"type":48,"value":1563},"Long labels, negative values, outside-end labels, zero-line context, and direct value labels need explicit layout space.",{"type":42,"tag":591,"props":1565,"children":1566},{},[1567],{"type":48,"value":1568},"Multi-series filled marks need distinct tones, open fills, keylines, marker fills, line styles, direct labels, or faceting. Visually identical adjacent or overlapping fills fail QA.",{"type":42,"tag":591,"props":1570,"children":1571},{},[1572],{"type":48,"value":1573},"Line styles, marker fills, open fills, keylines, ordering, faceting, and direct labels should remain legible in grayscale when they carry distinction.",{"type":42,"tag":591,"props":1575,"children":1576},{},[1577],{"type":48,"value":1578},"Positive and negative states should use tone, open fill, zero-line context, and signed labels rather than default green\u002Fred semantics unless the exception is documented.",{"type":42,"tag":591,"props":1580,"children":1581},{},[1582],{"type":48,"value":1583},"Exported SVG or HTML colors should match declared palette roots plus neutrals; remove unused multi-hue tokens unless documenting an intentional exception.",{"type":42,"tag":591,"props":1585,"children":1586},{},[1587],{"type":48,"value":1588},"Chart scaffolding should stay quiet: no arbitrary colored backgrounds, gradients, decorative guides, inconsistent stroke widths, or decorative mark fills. Filled marks should keep keylines, and benchmark, calibration, and reference lines should use dark-neutral styling.",{"type":42,"tag":591,"props":1590,"children":1591},{},[1592],{"type":48,"value":1593},"Titles, legends, and primary labels should use dark ink and share a clear header anchor. Numeric ticks and direct value labels should use mono styling where the template system calls for it.",{"type":42,"tag":591,"props":1595,"children":1596},{},[1597],{"type":48,"value":1598},"Research charts should use the locked top-right blossom placement; third-party, partnership, and non-research charts should omit it.",{"type":42,"tag":591,"props":1600,"children":1601},{},[1602],{"type":48,"value":1603},"Before handoff, inspect the visual in the artifact readers will open and verify that it answers the stated analytical question, signs and scales are honest, labels fit at laptop and mobile widths, the color and non-color encoding is understandable, and the caption states metric, time window, and source when those are part of the visual.",{"type":42,"tag":591,"props":1605,"children":1606},{},[1607],{"type":48,"value":1608},"Inspect the final report, slide, dashboard, notebook, widget, or HTML layout before handoff. Revise before delivery when any requirement above fails.",{"items":1610,"total":1719},[1611,1628,1644,1657,1673,1687,1704],{"slug":1612,"name":1612,"fn":1613,"description":1614,"org":1615,"tags":1616,"stars":25,"repoUrl":26,"updatedAt":1627},"analyze-account-signals","analyze account signals for sales intelligence","Use when the user wants to know what changed with one account, monitor an owner portfolio or watchlist, or rank accounts needing attention from recent evidence. Produce an evidence-backed account brief or bounded watchlist summary with recommended actions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1617,1618,1621,1624],{"name":20,"slug":21,"type":15},{"name":1619,"slug":1620,"type":15},"CRM","crm",{"name":1622,"slug":1623,"type":15},"Research","research",{"name":1625,"slug":1626,"type":15},"Sales","sales","2026-07-01T07:54:11.79288",{"slug":1629,"name":1629,"fn":1630,"description":1631,"org":1632,"tags":1633,"stars":25,"repoUrl":26,"updatedAt":1643},"analyze-data-quality","assess data quality for analysis","Assess whether structured data, query results, dashboards, or analytical evidence are trustworthy enough to use. Use when the task is to check data quality, reconcile conflicting sources or metric definitions, or decide whether evidence is safe to cite.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1634,1637,1640],{"name":1635,"slug":1636,"type":15},"Audit","audit",{"name":1638,"slug":1639,"type":15},"Data Engineering","data-engineering",{"name":1641,"slug":1642,"type":15},"Data Quality","data-quality","2026-07-01T07:55:01.146961",{"slug":1645,"name":1645,"fn":1646,"description":1647,"org":1648,"tags":1649,"stars":25,"repoUrl":26,"updatedAt":1656},"answers-ask-user-input","request missing context from users","Use when a small amount of missing context would materially improve the answer and tappable options plus a free-text answer can gather it efficiently.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1650,1653],{"name":1651,"slug":1652,"type":15},"Communications","communications",{"name":1654,"slug":1655,"type":15},"Productivity","productivity","2026-07-14T05:43:36.096323",{"slug":1658,"name":1658,"fn":1659,"description":1660,"org":1661,"tags":1662,"stars":25,"repoUrl":26,"updatedAt":1672},"apollo","prospect and enrich leads with Apollo","Use only when a focused Sales workflow has selected a present and connected Apollo connector, or the user explicitly asks for Apollo prospecting, enrichment, Company Details, records, sequences, or outbound planning. Apply Apollo v2-specific behavior only after verifying app version 2.0.0 or later.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1663,1665,1668,1671],{"name":1664,"slug":1658,"type":15},"Apollo",{"name":1666,"slug":1667,"type":15},"Lead Enrichment","lead-enrichment",{"name":1669,"slug":1670,"type":15},"Prospecting","prospecting",{"name":1625,"slug":1626,"type":15},"2026-07-14T05:43:34.800076",{"slug":1636,"name":1636,"fn":1674,"description":1675,"org":1676,"tags":1677,"stars":25,"repoUrl":26,"updatedAt":1686},"audit product flows and user journeys","Audit or critique a product flow, journey, workflow, funnel, onboarding path, checkout path, settings path, screen, or multi-step product experience by capturing screenshots first, then reporting UX, design, and accessibility findings inline from that evidence. Use Figma only when the user explicitly asks for a board. Use when the user asks to audit, review, critique, inspect, assess, analyze, evaluate, or give feedback on a product experience.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1678,1679,1680,1683],{"name":1635,"slug":1636,"type":15},{"name":23,"slug":24,"type":15},{"name":1681,"slug":1682,"type":15},"Product Management","product-management",{"name":1684,"slug":1685,"type":15},"UX Design","ux-design","2026-07-01T07:54:30.613428",{"slug":1688,"name":1688,"fn":1689,"description":1690,"org":1691,"tags":1692,"stars":25,"repoUrl":26,"updatedAt":1703},"build-business-case","build customer-led business cases and ROI","Review commercial proposals and build customer-led business cases, ROI or value models, pricing or investment rationales, executive summaries, and customer-ready value stories tied to a customer, workflow, initiative, or decision.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1693,1696,1699,1702],{"name":1694,"slug":1695,"type":15},"Content Creation","content-creation",{"name":1697,"slug":1698,"type":15},"Finance","finance",{"name":1700,"slug":1701,"type":15},"Financial Modeling","financial-modeling",{"name":1625,"slug":1626,"type":15},"2026-07-01T07:54:02.779003",{"slug":1705,"name":1705,"fn":1706,"description":1707,"org":1708,"tags":1709,"stars":25,"repoUrl":26,"updatedAt":1718},"build-competitive-brief","build competitive briefs and battlecards","Use when the user wants a competitor or vendor comparison, market-landscape analysis, battlecard, objection package, positioning brief, or account-specific competitive view. Produce an evidence-backed comparison, guidance, and brief, using supplied materials, connected research, and public evidence when appropriate.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1710,1713,1716,1717],{"name":1711,"slug":1712,"type":15},"Competitive Intelligence","competitive-intelligence",{"name":1714,"slug":1715,"type":15},"Marketing","marketing",{"name":1622,"slug":1623,"type":15},{"name":1625,"slug":1626,"type":15},"2026-07-01T07:54:13.073252",43,{"items":1721,"total":1922},[1722,1743,1766,1783,1799,1818,1835,1849,1865,1879,1891,1906],{"slug":1723,"name":1723,"fn":1724,"description":1725,"org":1726,"tags":1727,"stars":1740,"repoUrl":1741,"updatedAt":1742},"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},[1728,1731,1734,1737],{"name":1729,"slug":1730,"type":15},"Documents","documents",{"name":1732,"slug":1733,"type":15},"Healthcare","healthcare",{"name":1735,"slug":1736,"type":15},"Insurance","insurance",{"name":1738,"slug":1739,"type":15},"Regulatory Compliance","regulatory-compliance",28169,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python","2026-04-16T05:11:39.180399",{"slug":1744,"name":1744,"fn":1745,"description":1746,"org":1747,"tags":1748,"stars":1763,"repoUrl":1764,"updatedAt":1765},"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},[1749,1752,1754,1757,1760],{"name":1750,"slug":1751,"type":15},".NET","dotnet",{"name":1753,"slug":1744,"type":15},"ASP.NET Core",{"name":1755,"slug":1756,"type":15},"Blazor","blazor",{"name":1758,"slug":1759,"type":15},"C#","csharp",{"name":1761,"slug":1762,"type":15},"Web Development","web-development",23787,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fskills","2026-04-12T05:07:02.819491",{"slug":1767,"name":1767,"fn":1768,"description":1769,"org":1770,"tags":1771,"stars":1763,"repoUrl":1764,"updatedAt":1782},"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},[1772,1775,1778,1781],{"name":1773,"slug":1774,"type":15},"Apps SDK","apps-sdk",{"name":1776,"slug":1777,"type":15},"ChatGPT","chatgpt",{"name":1779,"slug":1780,"type":15},"MCP","mcp",{"name":9,"slug":8,"type":15},"2026-04-12T05:07:05.468097",{"slug":1784,"name":1784,"fn":1785,"description":1786,"org":1787,"tags":1788,"stars":1763,"repoUrl":1764,"updatedAt":1798},"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},[1789,1792,1795],{"name":1790,"slug":1791,"type":15},"API Development","api-development",{"name":1793,"slug":1794,"type":15},"CLI","cli",{"name":1796,"slug":1797,"type":15},"Codex","codex","2026-04-12T05:07:04.132762",{"slug":1800,"name":1800,"fn":1801,"description":1802,"org":1803,"tags":1804,"stars":1763,"repoUrl":1764,"updatedAt":1817},"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},[1805,1808,1811,1814],{"name":1806,"slug":1807,"type":15},"Cloudflare","cloudflare",{"name":1809,"slug":1810,"type":15},"Cloudflare Pages","cloudflare-pages",{"name":1812,"slug":1813,"type":15},"Cloudflare Workers","cloudflare-workers",{"name":1815,"slug":1816,"type":15},"Deployment","deployment","2026-04-12T05:07:14.275118",{"slug":1819,"name":1819,"fn":1820,"description":1821,"org":1822,"tags":1823,"stars":1763,"repoUrl":1764,"updatedAt":1834},"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},[1824,1825,1828,1831],{"name":1654,"slug":1655,"type":15},{"name":1826,"slug":1827,"type":15},"Project Management","project-management",{"name":1829,"slug":1830,"type":15},"Strategy","strategy",{"name":1832,"slug":1833,"type":15},"Task Management","task-management","2026-05-23T06:17:16.870838",{"slug":1836,"name":1836,"fn":1837,"description":1838,"org":1839,"tags":1840,"stars":1763,"repoUrl":1764,"updatedAt":1848},"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},[1841,1842,1844,1847],{"name":23,"slug":24,"type":15},{"name":1843,"slug":1836,"type":15},"Figma",{"name":1845,"slug":1846,"type":15},"Frontend","frontend",{"name":1779,"slug":1780,"type":15},"2026-04-12T05:06:47.939943",{"slug":1850,"name":1850,"fn":1851,"description":1852,"org":1853,"tags":1854,"stars":1763,"repoUrl":1764,"updatedAt":1864},"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},[1855,1856,1859,1860,1861],{"name":23,"slug":24,"type":15},{"name":1857,"slug":1858,"type":15},"Design System","design-system",{"name":1843,"slug":1836,"type":15},{"name":1845,"slug":1846,"type":15},{"name":1862,"slug":1863,"type":15},"UI Components","ui-components","2026-05-10T05:59:52.971881",{"slug":1866,"name":1866,"fn":1867,"description":1868,"org":1869,"tags":1870,"stars":1763,"repoUrl":1764,"updatedAt":1878},"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},[1871,1872,1873,1876,1877],{"name":23,"slug":24,"type":15},{"name":1857,"slug":1858,"type":15},{"name":1874,"slug":1875,"type":15},"Documentation","documentation",{"name":1843,"slug":1836,"type":15},{"name":1845,"slug":1846,"type":15},"2026-05-16T06:07:47.821474",{"slug":1880,"name":1880,"fn":1881,"description":1882,"org":1883,"tags":1884,"stars":1763,"repoUrl":1764,"updatedAt":1890},"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},[1885,1886,1887,1888,1889],{"name":23,"slug":24,"type":15},{"name":1843,"slug":1836,"type":15},{"name":1845,"slug":1846,"type":15},{"name":1862,"slug":1863,"type":15},{"name":1761,"slug":1762,"type":15},"2026-05-16T06:07:40.583615",{"slug":1892,"name":1892,"fn":1893,"description":1894,"org":1895,"tags":1896,"stars":1763,"repoUrl":1764,"updatedAt":1905},"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},[1897,1900,1901,1904],{"name":1898,"slug":1899,"type":15},"Animation","animation",{"name":1796,"slug":1797,"type":15},{"name":1902,"slug":1903,"type":15},"Creative","creative",{"name":23,"slug":24,"type":15},"2026-05-02T05:31:48.48485",{"slug":1907,"name":1907,"fn":1908,"description":1909,"org":1910,"tags":1911,"stars":1763,"repoUrl":1764,"updatedAt":1921},"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},[1912,1913,1914,1917,1920],{"name":1902,"slug":1903,"type":15},{"name":23,"slug":24,"type":15},{"name":1915,"slug":1916,"type":15},"Image Generation","image-generation",{"name":1918,"slug":1919,"type":15},"Images","images",{"name":9,"slug":8,"type":15},"2026-05-15T06:23:24.312127",675]