[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71G8FNE5SQSCY5E4RG4QH2H":3,"skill-same:01M71G8FNE5SQSCY5E4RG4QH2H":75},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":30,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":54,"commitSha":55,"skillDirectory":56,"forksCount":57,"repositoryHtmlUrl":58,"repositoryHomepageUrl":6,"ownerHtmlUrl":59,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":60,"install":61,"resources":74},"01M71G8FNE5SQSCY5E4RG4QH2H","html_comparison_chart",null,"Offline Chart.js HTML bar\u002Fline\u002Fpie charts for pre-known comparison data","maThiaslI152\u002FOwlynnV2","maThiaslI152","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F194800114?v=4","01M71G7XM62JBZ1M6KBTKEDKMQ","01M71G7XMVFW6YM2ZFHECBP4S1",1,"MIT","https:\u002F\u002Fgithub.com\u002FmaThiaslI152\u002FOwlynnV2\u002Fblob\u002Fmain\u002Fskills\u002Fhtml_comparison_chart\u002FSKILL.md",[17,22,25],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000013","分析与可视化",{"categoryNo":26,"categoryName":27,"taxonomyType":28,"taxonomyTypeDesc":29},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[31,32,33,34,35,36,37,38,39,40,41,42,43],"html","chart","comparison","html comparison chart","offline","data","Charts","js","line","price","bar chart","for","bar","2026-11-10 10:12:30",false,"---\nname: html_comparison_chart\ncategory: data\ndescription: Offline Chart.js HTML bar\u002Fline\u002Fpie charts for pre-known comparison data\ntriggers: [html_comparison_chart, comparison chart, bar chart html, price comparison chart]\nversion: '1.0'\n---\n# HTML Comparison Chart (Offline Chart.js)\n\nUse this skill when the user provides numbers to compare (prices, benchmarks, scores) and wants a polished chart without Python or matplotlib.\n\n**Script URL:** `\u002Fvendor\u002Fchart.umd.min.js` — Owlynn-bundled Chart.js 4.4.1, works offline. **Never use a CDN.**\n\n## A. Offline Chart.js template (default)\n\nSave via `write_workspace_file` as a `.html` file:\n\n```html\n\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\u003Chead>\n\u003Cmeta charset=\"utf-8\">\n\u003Ctitle>{{TITLE}}\u003C\u002Ftitle>\n\u003Cscript src=\"\u002Fvendor\u002Fchart.umd.min.js\">\u003C\u002Fscript>\n\u003Cstyle>\n  body { font-family: system-ui, sans-serif; margin: 1rem; background: #0f1117; color: #e8eaed; }\n  .wrap { max-width: 640px; }\n  .css-fallback { display: none; }\n\u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003Cdiv class=\"wrap\">\u003Ccanvas id=\"chart\">\u003C\u002Fcanvas>\u003C\u002Fdiv>\n\u003Cscript>\nnew Chart(document.getElementById('chart'), {\n  type: 'bar',\n  data: {\n    labels: {{LABELS_JSON}},\n    datasets: [{ label: '{{METRIC}}', data: {{VALUES_JSON}},\n      backgroundColor: ['#4a90d9','#f5a623','#d0021b','#7ed321','#bd10e0','#50e3c2'] }]\n  },\n  options: { indexAxis: 'y', responsive: true,\n    plugins: { legend: { display: false } } }\n});\n\u003C\u002Fscript>\n\u003C\u002Fbody>\u003C\u002Fhtml>\n```\n\nReplace `{{TITLE}}`, `{{METRIC}}`, `{{LABELS_JSON}}` (e.g. `[\"A\",\"B\",\"C\"]`), and `{{VALUES_JSON}}` (e.g. `[1.0, 1.15, 1.30]`) with the user's data.\n\nEmbed in your reply: `[{{TITLE}}](\u002Fapi\u002Ffiles\u002F{{FILENAME}}.html?project_id=default)`\n\n## B. Pure CSS fallback (last resort)\n\nUse only if Chart.js cannot load. No external dependencies:\n\n```html\n\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\u003Chead>\n\u003Cmeta charset=\"utf-8\">\n\u003Ctitle>{{TITLE}}\u003C\u002Ftitle>\n\u003Cstyle>\n  body { font-family: system-ui, sans-serif; margin: 1rem; background: #0f1117; color: #e8eaed; }\n  .bar-row { display: flex; align-items: center; margin: 0.5rem 0; gap: 0.75rem; }\n  .bar-label { width: 8rem; text-align: right; font-size: 0.875rem; }\n  .bar-track { flex: 1; background: #2a2d35; border-radius: 4px; height: 1.5rem; }\n  .bar-fill { height: 100%; border-radius: 4px; background: #4a90d9; }\n  .bar-value { width: 3rem; font-size: 0.875rem; }\n\u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003Ch2>{{TITLE}}\u003C\u002Fh2>\n\u003C!-- Repeat .bar-row per category; width % = value \u002F max * 100 -->\n\u003Cdiv class=\"bar-row\">\n  \u003Cspan class=\"bar-label\">Category\u003C\u002Fspan>\n  \u003Cdiv class=\"bar-track\">\u003Cdiv class=\"bar-fill\" style=\"width:75%\">\u003C\u002Fdiv>\u003C\u002Fdiv>\n  \u003Cspan class=\"bar-value\">1.0x\u003C\u002Fspan>\n\u003C\u002Fdiv>\n\u003C\u002Fbody>\u003C\u002Fhtml>\n```\n\n## Rules\n\n- One `write_workspace_file` call — do not use `notebook_run` unless the user explicitly asks for matplotlib\u002FPNG\u002FPython.\n- Plot user-provided numbers directly; do not calculate unless asked.\n- Horizontal bar: Chart.js `type: 'bar'` with `indexAxis: 'y'`.\n","# HTML Comparison Chart (Offline Chart.js)\n\nUse this skill when the user provides numbers to compare (prices, benchmarks, scores) and wants a polished chart without Python or matplotlib.\n\n**Script URL:** `\u002Fvendor\u002Fchart.umd.min.js` — Owlynn-bundled Chart.js 4.4.1, works offline. **Never use a CDN.**\n\n## A. Offline Chart.js template (default)\n\nSave via `write_workspace_file` as a `.html` file:\n\n```html\n\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\u003Chead>\n\u003Cmeta charset=\"utf-8\">\n\u003Ctitle>{{TITLE}}\u003C\u002Ftitle>\n\u003Cscript src=\"\u002Fvendor\u002Fchart.umd.min.js\">\u003C\u002Fscript>\n\u003Cstyle>\n  body { font-family: system-ui, sans-serif; margin: 1rem; background: #0f1117; color: #e8eaed; }\n  .wrap { max-width: 640px; }\n  .css-fallback { display: none; }\n\u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003Cdiv class=\"wrap\">\u003Ccanvas id=\"chart\">\u003C\u002Fcanvas>\u003C\u002Fdiv>\n\u003Cscript>\nnew Chart(document.getElementById('chart'), {\n  type: 'bar',\n  data: {\n    labels: {{LABELS_JSON}},\n    datasets: [{ label: '{{METRIC}}', data: {{VALUES_JSON}},\n      backgroundColor: ['#4a90d9','#f5a623','#d0021b','#7ed321','#bd10e0','#50e3c2'] }]\n  },\n  options: { indexAxis: 'y', responsive: true,\n    plugins: { legend: { display: false } } }\n});\n\u003C\u002Fscript>\n\u003C\u002Fbody>\u003C\u002Fhtml>\n```\n\nReplace `{{TITLE}}`, `{{METRIC}}`, `{{LABELS_JSON}}` (e.g. `[\"A\",\"B\",\"C\"]`), and `{{VALUES_JSON}}` (e.g. `[1.0, 1.15, 1.30]`) with the user's data.\n\nEmbed in your reply: `[{{TITLE}}](\u002Fapi\u002Ffiles\u002F{{FILENAME}}.html?project_id=default)`\n\n## B. Pure CSS fallback (last resort)\n\nUse only if Chart.js cannot load. No external dependencies:\n\n```html\n\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\u003Chead>\n\u003Cmeta charset=\"utf-8\">\n\u003Ctitle>{{TITLE}}\u003C\u002Ftitle>\n\u003Cstyle>\n  body { font-family: system-ui, sans-serif; margin: 1rem; background: #0f1117; color: #e8eaed; }\n  .bar-row { display: flex; align-items: center; margin: 0.5rem 0; gap: 0.75rem; }\n  .bar-label { width: 8rem; text-align: right; font-size: 0.875rem; }\n  .bar-track { flex: 1; background: #2a2d35; border-radius: 4px; height: 1.5rem; }\n  .bar-fill { height: 100%; border-radius: 4px; background: #4a90d9; }\n  .bar-value { width: 3rem; font-size: 0.875rem; }\n\u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003Ch2>{{TITLE}}\u003C\u002Fh2>\n\u003C!-- Repeat .bar-row per category; width % = value \u002F max * 100 -->\n\u003Cdiv class=\"bar-row\">\n  \u003Cspan class=\"bar-label\">Category\u003C\u002Fspan>\n  \u003Cdiv class=\"bar-track\">\u003Cdiv class=\"bar-fill\" style=\"width:75%\">\u003C\u002Fdiv>\u003C\u002Fdiv>\n  \u003Cspan class=\"bar-value\">1.0x\u003C\u002Fspan>\n\u003C\u002Fdiv>\n\u003C\u002Fbody>\u003C\u002Fhtml>\n```\n\n## Rules\n\n- One `write_workspace_file` call — do not use `notebook_run` unless the user explicitly asks for matplotlib\u002FPNG\u002FPython.\n- Plot user-provided numbers directly; do not calculate unless asked.\n- Horizontal bar: Chart.js `type: 'bar'` with `indexAxis: 'y'`.\n",{"name":5,"version":49,"category":36,"triggers":50,"description":7},"1.0",[5,51,52,53],"comparison chart","bar chart html","price comparison chart","main","b66b26cd1c7581bf8af8f0781b92bd072318b1c9","skills\u002Fhtml_comparison_chart",0,"https:\u002F\u002Fgithub.com\u002FmaThiaslI152\u002FOwlynnV2","https:\u002F\u002Fgithub.com\u002FmaThiaslI152","2026-09-08 12:27:42",{"source":8,"skillName":5,"commands":62,"prompt":72,"zipAvailable":73},[63,66,69],{"tool":64,"command":65},"npx","npx skills add maThiaslI152\u002FOwlynnV2 --skill html_comparison_chart",{"tool":67,"command":68},"bunx","bunx skills add maThiaslI152\u002FOwlynnV2 --skill html_comparison_chart",{"tool":70,"command":71},"pnpm","pnpm dlx skills add maThiaslI152\u002FOwlynnV2 --skill html_comparison_chart","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FmaThiaslI152\u002FOwlynnV2\u002Fblob\u002Fmain\u002Fskills\u002Fhtml_comparison_chart\u002FSKILL.md",true,[],[76,90,100,114,122,132],{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":82,"publishedAt":44},"01M71G8QVFENJMT5Q4EHR7Y6G4","weather_lookup","Procedural skill synthesized from user workflow","https:\u002F\u002Fgithub.com\u002FmaThiaslI152\u002FOwlynnV2\u002Fblob\u002Fmain\u002Fskills\u002Fweather_lookup\u002FSKILL.md",[],[83,84,85,86,87,88,89],"weather lookup","weather","lookup","user","general","procedural","workflow",{"skillNo":91,"name":92,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":44},"01M71G8P5WSK13A308EPFPYV8K","reprompt_on_no_tools","https:\u002F\u002Fgithub.com\u002FmaThiaslI152\u002FOwlynnV2\u002Fblob\u002Fmain\u002Fskills\u002Freprompt_on_no_tools\u002FSKILL.md",[],[96,97,98,99,88,89,86],"Tools","no tools","reprompt on no tools","productivity",{"skillNo":101,"name":102,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":108,"publishedAt":44},"01M71G8M5FQQ8PVXYNVJDWP1A5","prioritize_official_gov_sources_over_aggregators","https:\u002F\u002Fgithub.com\u002FmaThiaslI152\u002FOwlynnV2\u002Fblob\u002Fmain\u002Fskills\u002Fprioritize_official_gov_sources_over_aggregators\u002FSKILL.md",[105],{"categoryNo":106,"categoryName":107,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000021","资料检索与研究",[109,110,111,112,86,89,88,113],"sources","prioritize","prioritize official gov sources over aggregators","official","research",{"skillNo":115,"name":116,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":44},"01M71G8JTC4NPQ5Q67QS243M5Y","matplotlib_horizontal_bar","https:\u002F\u002Fgithub.com\u002FmaThiaslI152\u002FOwlynnV2\u002Fblob\u002Fmain\u002Fskills\u002Fmatplotlib_horizontal_bar\u002FSKILL.md",[],[120,43,121,86,89,88,36],"matplotlib","matplotlib horizontal bar",{"skillNo":123,"name":124,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":128,"publishedAt":44},"01M71G8H910CPXZQ4ACKV8M0Y3","live-data-lookup","https:\u002F\u002Fgithub.com\u002FmaThiaslI152\u002FOwlynnV2\u002Fblob\u002Fmain\u002Fskills\u002Flive-data-lookup\u002FSKILL.md",[127],{"categoryNo":26,"categoryName":27,"taxonomyType":28,"taxonomyTypeDesc":29},[129,130,85,131,36,86,89,88,113],"live data lookup","data lookup","live",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":138,"publishedAt":44},"01M71G8E0ER0EME1VMMVTCHM6X","handle_cloud_unavailable_errors","Auto-created skill package","https:\u002F\u002Fgithub.com\u002FmaThiaslI152\u002FOwlynnV2\u002Fblob\u002Fmain\u002Fskills\u002Fhandle_cloud_unavailable_errors\u002FSKILL.md",[],[139,140,141,142,143,144,87],"errors","handle cloud unavailable errors","cloud","skill package","package","auto"]