@litfamily/litgrok 1.0.34 → 1.0.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (967) hide show
  1. package/.grok/hooks/lit-status-line.mjs +60 -1
  2. package/.grok/rules/00-litgrok.md +4 -6
  3. package/.grok/skills/browser-drive/scripts/capability-probe.mjs +1 -1
  4. package/.grok/skills/frontend-ui-ux/SKILL.md +55 -39
  5. package/.grok/skills/lit-diagram-drawer/SKILL.md +37 -90
  6. package/.grok/skills/lit-docx/SKILL.md +36 -74
  7. package/.grok/skills/lit-humanizer/scripts/extract.mjs +1 -1
  8. package/.grok/skills/lit-humanizer/scripts/test-fixtures.mjs +1 -1
  9. package/.grok/skills/lit-pptx/SKILL.md +35 -87
  10. package/.grok/skills/lit-schematic/SKILL.md +35 -112
  11. package/.grok/skills/lit-scientific-visualization/SKILL.md +44 -221
  12. package/.grok/skills/lit-typographic-motion/SKILL.md +48 -29
  13. package/.grok/skills/litgrok/SKILL.md +6 -3
  14. package/.grok/skills/litwork/SKILL.md +1 -1
  15. package/.grok/skills/lsp-setup/scripts/lsp-server-table.mjs +1 -1
  16. package/.grok/skills/readme-studio/SKILL.md +48 -24
  17. package/.grok/skills/visual-qa/SKILL.md +41 -28
  18. package/.grok-plugin/plugin.json +1 -1
  19. package/CHANGELOG.md +21 -1
  20. package/CONTRIBUTING.md +0 -1
  21. package/README.md +9 -9
  22. package/README_ko-KR.md +9 -9
  23. package/bin/extensions.mjs +686 -0
  24. package/bin/litgrok.mjs +367 -32
  25. package/docs/assets/readme/README.md +7 -0
  26. package/docs/assets/readme/badge-version.svg +1 -1
  27. package/docs/reference.md +11 -5
  28. package/docs/reference_ko-KR.md +10 -5
  29. package/package.json +4 -6
  30. package/plugin.json +1 -1
  31. package/.grok/skills/frontend-ui-ux/ATTRIBUTION.md +0 -23
  32. package/.grok/skills/frontend-ui-ux/LICENSE +0 -21
  33. package/.grok/skills/frontend-ui-ux/PROVENANCE.json +0 -38
  34. package/.grok/skills/frontend-ui-ux/SOURCE-MANIFEST.json +0 -1060
  35. package/.grok/skills/frontend-ui-ux/THIRD-PARTY-NOTICE.txt +0 -24
  36. package/.grok/skills/frontend-ui-ux/data/design-intelligence.json +0 -1
  37. package/.grok/skills/frontend-ui-ux/examples/phase-3-readme-ab/README.md +0 -9
  38. package/.grok/skills/frontend-ui-ux/examples/phase-3-readme-motion-ab.md +0 -24
  39. package/.grok/skills/frontend-ui-ux/kit/components.css +0 -414
  40. package/.grok/skills/frontend-ui-ux/kit/fonts.json +0 -22
  41. package/.grok/skills/frontend-ui-ux/kit/layouts/landing.html +0 -164
  42. package/.grok/skills/frontend-ui-ux/kit/layouts/settings.html +0 -114
  43. package/.grok/skills/frontend-ui-ux/kit/layouts/workspace.html +0 -115
  44. package/.grok/skills/frontend-ui-ux/kit/styles/computational-brutalism.json +0 -227
  45. package/.grok/skills/frontend-ui-ux/kit/styles/field-notes.json +0 -205
  46. package/.grok/skills/frontend-ui-ux/kit/styles/graphite.json +0 -200
  47. package/.grok/skills/frontend-ui-ux/kit/styles/meadow.json +0 -199
  48. package/.grok/skills/frontend-ui-ux/kit/styles/neo-brutalism.json +0 -222
  49. package/.grok/skills/frontend-ui-ux/kit/ui.js +0 -226
  50. package/.grok/skills/frontend-ui-ux/references/_canonical-corpus/legal/frontend-ATTRIBUTION.md +0 -217
  51. package/.grok/skills/frontend-ui-ux/references/_canonical-corpus/legal/frontend-LICENSE-Apache-2.0.txt +0 -201
  52. package/.grok/skills/frontend-ui-ux/references/_canonical-corpus/legal/root-LICENSE +0 -21
  53. package/.grok/skills/frontend-ui-ux/references/_canonical-corpus/manifest.json +0 -873
  54. package/.grok/skills/frontend-ui-ux/references/adaptive-layout.md +0 -88
  55. package/.grok/skills/frontend-ui-ux/references/brand-and-imagery.md +0 -87
  56. package/.grok/skills/frontend-ui-ux/references/complete-contract.md +0 -572
  57. package/.grok/skills/frontend-ui-ux/references/composition.md +0 -79
  58. package/.grok/skills/frontend-ui-ux/references/craft-floor.md +0 -262
  59. package/.grok/skills/frontend-ui-ux/references/creative-directions.md +0 -74
  60. package/.grok/skills/frontend-ui-ux/references/default-editorial-pixel.json +0 -28
  61. package/.grok/skills/frontend-ui-ux/references/design/README.md +0 -248
  62. package/.grok/skills/frontend-ui-ux/references/design/_INDEX.md +0 -191
  63. package/.grok/skills/frontend-ui-ux/references/design/airbnb.md +0 -393
  64. package/.grok/skills/frontend-ui-ux/references/design/airtable.md +0 -92
  65. package/.grok/skills/frontend-ui-ux/references/design/apple.md +0 -250
  66. package/.grok/skills/frontend-ui-ux/references/design/aside.md +0 -209
  67. package/.grok/skills/frontend-ui-ux/references/design/binance.md +0 -348
  68. package/.grok/skills/frontend-ui-ux/references/design/bmw.md +0 -183
  69. package/.grok/skills/frontend-ui-ux/references/design/brutalist-skill.md +0 -92
  70. package/.grok/skills/frontend-ui-ux/references/design/bugatti.md +0 -271
  71. package/.grok/skills/frontend-ui-ux/references/design/cal.md +0 -262
  72. package/.grok/skills/frontend-ui-ux/references/design/claude.md +0 -315
  73. package/.grok/skills/frontend-ui-ux/references/design/clay.md +0 -307
  74. package/.grok/skills/frontend-ui-ux/references/design/clickhouse.md +0 -284
  75. package/.grok/skills/frontend-ui-ux/references/design/clone-from-url.md +0 -65
  76. package/.grok/skills/frontend-ui-ux/references/design/cohere.md +0 -269
  77. package/.grok/skills/frontend-ui-ux/references/design/coinbase.md +0 -132
  78. package/.grok/skills/frontend-ui-ux/references/design/composio.md +0 -310
  79. package/.grok/skills/frontend-ui-ux/references/design/cursor.md +0 -312
  80. package/.grok/skills/frontend-ui-ux/references/design/design-system-architecture.md +0 -244
  81. package/.grok/skills/frontend-ui-ux/references/design/elevenlabs.md +0 -268
  82. package/.grok/skills/frontend-ui-ux/references/design/expo.md +0 -284
  83. package/.grok/skills/frontend-ui-ux/references/design/ferrari.md +0 -317
  84. package/.grok/skills/frontend-ui-ux/references/design/figma.md +0 -223
  85. package/.grok/skills/frontend-ui-ux/references/design/framer.md +0 -249
  86. package/.grok/skills/frontend-ui-ux/references/design/gpt-tasteskill.md +0 -74
  87. package/.grok/skills/frontend-ui-ux/references/design/hashicorp.md +0 -281
  88. package/.grok/skills/frontend-ui-ux/references/design/ibm.md +0 -335
  89. package/.grok/skills/frontend-ui-ux/references/design/image-to-code-skill.md +0 -1228
  90. package/.grok/skills/frontend-ui-ux/references/design/imagegen-brandkit.md +0 -798
  91. package/.grok/skills/frontend-ui-ux/references/design/imagegen-frontend-mobile.md +0 -1465
  92. package/.grok/skills/frontend-ui-ux/references/design/imagegen-frontend-web.md +0 -987
  93. package/.grok/skills/frontend-ui-ux/references/design/intercom.md +0 -149
  94. package/.grok/skills/frontend-ui-ux/references/design/kraken.md +0 -128
  95. package/.grok/skills/frontend-ui-ux/references/design/lamborghini.md +0 -291
  96. package/.grok/skills/frontend-ui-ux/references/design/layout-skill.md +0 -107
  97. package/.grok/skills/frontend-ui-ux/references/design/lazyweb.md +0 -77
  98. package/.grok/skills/frontend-ui-ux/references/design/linear.app.md +0 -370
  99. package/.grok/skills/frontend-ui-ux/references/design/lovable.md +0 -301
  100. package/.grok/skills/frontend-ui-ux/references/design/mastercard.md +0 -368
  101. package/.grok/skills/frontend-ui-ux/references/design/meta.md +0 -369
  102. package/.grok/skills/frontend-ui-ux/references/design/minimalist-skill.md +0 -85
  103. package/.grok/skills/frontend-ui-ux/references/design/minimax.md +0 -260
  104. package/.grok/skills/frontend-ui-ux/references/design/mintlify.md +0 -329
  105. package/.grok/skills/frontend-ui-ux/references/design/miro.md +0 -111
  106. package/.grok/skills/frontend-ui-ux/references/design/mistral.ai.md +0 -264
  107. package/.grok/skills/frontend-ui-ux/references/design/mongodb.md +0 -269
  108. package/.grok/skills/frontend-ui-ux/references/design/nike.md +0 -366
  109. package/.grok/skills/frontend-ui-ux/references/design/notion.md +0 -312
  110. package/.grok/skills/frontend-ui-ux/references/design/nvidia.md +0 -296
  111. package/.grok/skills/frontend-ui-ux/references/design/ollama.md +0 -270
  112. package/.grok/skills/frontend-ui-ux/references/design/opencode.ai.md +0 -284
  113. package/.grok/skills/frontend-ui-ux/references/design/output-skill.md +0 -49
  114. package/.grok/skills/frontend-ui-ux/references/design/pinterest.md +0 -233
  115. package/.grok/skills/frontend-ui-ux/references/design/playstation.md +0 -367
  116. package/.grok/skills/frontend-ui-ux/references/design/posthog.md +0 -259
  117. package/.grok/skills/frontend-ui-ux/references/design/raycast.md +0 -271
  118. package/.grok/skills/frontend-ui-ux/references/design/react-dev-tooling-skill.md +0 -230
  119. package/.grok/skills/frontend-ui-ux/references/design/redesign-skill.md +0 -178
  120. package/.grok/skills/frontend-ui-ux/references/design/renault.md +0 -314
  121. package/.grok/skills/frontend-ui-ux/references/design/replicate.md +0 -264
  122. package/.grok/skills/frontend-ui-ux/references/design/resend.md +0 -306
  123. package/.grok/skills/frontend-ui-ux/references/design/revolut.md +0 -188
  124. package/.grok/skills/frontend-ui-ux/references/design/runwayml.md +0 -247
  125. package/.grok/skills/frontend-ui-ux/references/design/sanity.md +0 -360
  126. package/.grok/skills/frontend-ui-ux/references/design/sentry.md +0 -265
  127. package/.grok/skills/frontend-ui-ux/references/design/shopify.md +0 -353
  128. package/.grok/skills/frontend-ui-ux/references/design/soft-skill.md +0 -98
  129. package/.grok/skills/frontend-ui-ux/references/design/spacex.md +0 -197
  130. package/.grok/skills/frontend-ui-ux/references/design/spotify.md +0 -249
  131. package/.grok/skills/frontend-ui-ux/references/design/starbucks.md +0 -583
  132. package/.grok/skills/frontend-ui-ux/references/design/stitch-design-example.md +0 -121
  133. package/.grok/skills/frontend-ui-ux/references/design/stitch-skill.md +0 -184
  134. package/.grok/skills/frontend-ui-ux/references/design/stripe.md +0 -325
  135. package/.grok/skills/frontend-ui-ux/references/design/supabase.md +0 -258
  136. package/.grok/skills/frontend-ui-ux/references/design/superhuman.md +0 -255
  137. package/.grok/skills/frontend-ui-ux/references/design/taste-skill.md +0 -1206
  138. package/.grok/skills/frontend-ui-ux/references/design/tesla.md +0 -289
  139. package/.grok/skills/frontend-ui-ux/references/design/theverge.md +0 -342
  140. package/.grok/skills/frontend-ui-ux/references/design/together.ai.md +0 -266
  141. package/.grok/skills/frontend-ui-ux/references/design/uber.md +0 -298
  142. package/.grok/skills/frontend-ui-ux/references/design/vercel.md +0 -313
  143. package/.grok/skills/frontend-ui-ux/references/design/vodafone.md +0 -426
  144. package/.grok/skills/frontend-ui-ux/references/design/voltagent.md +0 -326
  145. package/.grok/skills/frontend-ui-ux/references/design/warp.md +0 -256
  146. package/.grok/skills/frontend-ui-ux/references/design/webflow.md +0 -95
  147. package/.grok/skills/frontend-ui-ux/references/design/wired.md +0 -281
  148. package/.grok/skills/frontend-ui-ux/references/design/wise.md +0 -176
  149. package/.grok/skills/frontend-ui-ux/references/design/x.ai.md +0 -260
  150. package/.grok/skills/frontend-ui-ux/references/design/zapier.md +0 -331
  151. package/.grok/skills/frontend-ui-ux/references/designpowers/EVIDENCE.md +0 -97
  152. package/.grok/skills/frontend-ui-ux/references/designpowers/README.md +0 -48
  153. package/.grok/skills/frontend-ui-ux/references/designpowers/UPSTREAM.md +0 -80
  154. package/.grok/skills/frontend-ui-ux/references/designpowers/lane-a-direction.md +0 -64
  155. package/.grok/skills/frontend-ui-ux/references/designpowers/lane-b-execution.md +0 -65
  156. package/.grok/skills/frontend-ui-ux/references/designpowers/lane-c-review.md +0 -65
  157. package/.grok/skills/frontend-ui-ux/references/designpowers/lane-d-memory.md +0 -83
  158. package/.grok/skills/frontend-ui-ux/references/designpowers/orchestration.md +0 -80
  159. package/.grok/skills/frontend-ui-ux/references/designpowers/routing.md +0 -79
  160. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/LICENSE +0 -21
  161. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/accessibility-reviewer.md +0 -83
  162. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/content-writer.md +0 -132
  163. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-builder.md +0 -109
  164. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-critic.md +0 -89
  165. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-lead.md +0 -113
  166. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-scout.md +0 -78
  167. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-strategist.md +0 -121
  168. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/heuristic-evaluator.md +0 -268
  169. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/inspiration-scout.md +0 -107
  170. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/motion-designer.md +0 -120
  171. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/accessible-content/reference.md +0 -101
  172. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/adaptive-interfaces/reference.md +0 -109
  173. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/cognitive-accessibility/reference.md +0 -107
  174. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-debate/reference.md +0 -199
  175. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-debt-tracker/reference.md +0 -174
  176. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-handoff/reference.md +0 -125
  177. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-md/reference.md +0 -106
  178. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-retrospective/reference.md +0 -266
  179. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-review/reference.md +0 -123
  180. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-system-alignment/reference.md +0 -120
  181. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/designpowers-critique/reference.md +0 -164
  182. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/heuristic-evaluation/reference.md +0 -85
  183. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/inclusive-personas/reference.md +0 -98
  184. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/inspiration-scouting/reference.md +0 -165
  185. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/interaction-design/reference.md +0 -122
  186. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/motion-choreography/reference.md +0 -81
  187. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/research-planning/reference.md +0 -96
  188. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/responsive-patterns/reference.md +0 -77
  189. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/synthetic-user-testing/reference.md +0 -192
  190. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/taste-feedback/reference.md +0 -165
  191. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/taste-report/reference.md +0 -78
  192. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/token-architecture/reference.md +0 -75
  193. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/ui-composition/reference.md +0 -117
  194. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/usability-testing/reference.md +0 -78
  195. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/verification-before-shipping/reference.md +0 -125
  196. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/voice-and-tone/reference.md +0 -79
  197. package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/writing-design-plans/reference.md +0 -119
  198. package/.grok/skills/frontend-ui-ux/references/evidence-review.md +0 -126
  199. package/.grok/skills/frontend-ui-ux/references/house-styles.md +0 -234
  200. package/.grok/skills/frontend-ui-ux/references/implementation-platforms.md +0 -103
  201. package/.grok/skills/frontend-ui-ux/references/inclusive-interface.md +0 -88
  202. package/.grok/skills/frontend-ui-ux/references/interaction-motion.md +0 -47
  203. package/.grok/skills/frontend-ui-ux/references/motion-guide.md +0 -130
  204. package/.grok/skills/frontend-ui-ux/references/operating-lanes.md +0 -92
  205. package/.grok/skills/frontend-ui-ux/references/perfection/README.md +0 -160
  206. package/.grok/skills/frontend-ui-ux/references/perfection/react-perf-tooling.md +0 -127
  207. package/.grok/skills/frontend-ui-ux/references/performance-delivery.md +0 -85
  208. package/.grok/skills/frontend-ui-ux/references/probe-loop.md +0 -27
  209. package/.grok/skills/frontend-ui-ux/references/product-direction.md +0 -80
  210. package/.grok/skills/frontend-ui-ux/references/production-interview.md +0 -17
  211. package/.grok/skills/frontend-ui-ux/references/production.md +0 -27
  212. package/.grok/skills/frontend-ui-ux/references/redesign-playbook.md +0 -91
  213. package/.grok/skills/frontend-ui-ux/references/slop-register.md +0 -150
  214. package/.grok/skills/frontend-ui-ux/references/system-foundations.md +0 -80
  215. package/.grok/skills/frontend-ui-ux/references/taste-direction.md +0 -86
  216. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/README.md +0 -659
  217. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/charts.csv +0 -26
  218. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/colors.csv +0 -162
  219. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/icons.csv +0 -106
  220. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/landing.csv +0 -35
  221. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/products.csv +0 -162
  222. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/react-performance.csv +0 -45
  223. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/astro.csv +0 -54
  224. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/flutter.csv +0 -53
  225. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/html-tailwind.csv +0 -56
  226. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/jetpack-compose.csv +0 -53
  227. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/nextjs.csv +0 -53
  228. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/nuxt-ui.csv +0 -51
  229. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/nuxtjs.csv +0 -59
  230. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/react-native.csv +0 -52
  231. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/react.csv +0 -54
  232. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/shadcn.csv +0 -61
  233. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/svelte.csv +0 -54
  234. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/swiftui.csv +0 -51
  235. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/vue.csv +0 -50
  236. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/styles.csv +0 -85
  237. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/typography.csv +0 -74
  238. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/ui-reasoning.csv +0 -162
  239. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/ux-guidelines.csv +0 -100
  240. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/web-interface.csv +0 -31
  241. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/scripts/core.py +0 -262
  242. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/scripts/design_system.py +0 -1148
  243. package/.grok/skills/frontend-ui-ux/references/ui-ux-db/scripts/search.py +0 -114
  244. package/.grok/skills/frontend-ui-ux/references/visual-language.md +0 -80
  245. package/.grok/skills/frontend-ui-ux/references/visual-reconstruction.md +0 -51
  246. package/.grok/skills/frontend-ui-ux/schemas/design-contract-v1alpha1.schema.json +0 -306
  247. package/.grok/skills/frontend-ui-ux/schemas/design-contract-v1beta1.schema.json +0 -291
  248. package/.grok/skills/frontend-ui-ux/schemas/design-contract-v1beta2.schema.json +0 -311
  249. package/.grok/skills/frontend-ui-ux/scripts/design-contract-format.mjs +0 -286
  250. package/.grok/skills/frontend-ui-ux/scripts/design-contract-inventory-rules.mjs +0 -354
  251. package/.grok/skills/frontend-ui-ux/scripts/design-contract-rules.mjs +0 -361
  252. package/.grok/skills/frontend-ui-ux/scripts/design-contract-surface-rules.mjs +0 -313
  253. package/.grok/skills/frontend-ui-ux/scripts/design-data.mjs +0 -68
  254. package/.grok/skills/frontend-ui-ux/scripts/design-lock.mjs +0 -400
  255. package/.grok/skills/frontend-ui-ux/scripts/errors.mjs +0 -12
  256. package/.grok/skills/frontend-ui-ux/scripts/import-design-intelligence.mjs +0 -124
  257. package/.grok/skills/frontend-ui-ux/scripts/interface-probe-driver.mjs +0 -33
  258. package/.grok/skills/frontend-ui-ux/scripts/interface-probe-lock.mjs +0 -196
  259. package/.grok/skills/frontend-ui-ux/scripts/interface-probe-page.mjs +0 -1555
  260. package/.grok/skills/frontend-ui-ux/scripts/interface-probe-rules.mjs +0 -153
  261. package/.grok/skills/frontend-ui-ux/scripts/interface-probe-server.mjs +0 -57
  262. package/.grok/skills/frontend-ui-ux/scripts/interface-probe-static.mjs +0 -139
  263. package/.grok/skills/frontend-ui-ux/scripts/interface-probe.mjs +0 -363
  264. package/.grok/skills/frontend-ui-ux/scripts/json-boundary.mjs +0 -63
  265. package/.grok/skills/frontend-ui-ux/scripts/pixel-art.mjs +0 -60
  266. package/.grok/skills/frontend-ui-ux/scripts/query-design-intelligence.mjs +0 -106
  267. package/.grok/skills/frontend-ui-ux/scripts/search.mjs +0 -43
  268. package/.grok/skills/frontend-ui-ux/scripts/source-replay.mjs +0 -153
  269. package/.grok/skills/frontend-ui-ux/scripts/strict-json.mjs +0 -143
  270. package/.grok/skills/frontend-ui-ux/scripts/validate-design-contract.mjs +0 -52
  271. package/.grok/skills/frontend-ui-ux/scripts/verify-canonical-corpus.mjs +0 -214
  272. package/.grok/skills/lit-diagram-drawer/NOTICE +0 -33
  273. package/.grok/skills/lit-diagram-drawer/assets/examples/type-architecture-dark.html +0 -1
  274. package/.grok/skills/lit-diagram-drawer/assets/examples/type-architecture-full.html +0 -1
  275. package/.grok/skills/lit-diagram-drawer/assets/examples/type-architecture-light.html +0 -1
  276. package/.grok/skills/lit-diagram-drawer/assets/examples/type-bar-dark.html +0 -1
  277. package/.grok/skills/lit-diagram-drawer/assets/examples/type-bar-full.html +0 -1
  278. package/.grok/skills/lit-diagram-drawer/assets/examples/type-bar-light.html +0 -1
  279. package/.grok/skills/lit-diagram-drawer/assets/examples/type-beeswarm-dark.html +0 -1
  280. package/.grok/skills/lit-diagram-drawer/assets/examples/type-beeswarm-full.html +0 -1
  281. package/.grok/skills/lit-diagram-drawer/assets/examples/type-beeswarm-light.html +0 -1
  282. package/.grok/skills/lit-diagram-drawer/assets/examples/type-bubble-dark.html +0 -1
  283. package/.grok/skills/lit-diagram-drawer/assets/examples/type-bubble-full.html +0 -1
  284. package/.grok/skills/lit-diagram-drawer/assets/examples/type-bubble-light.html +0 -1
  285. package/.grok/skills/lit-diagram-drawer/assets/examples/type-bump-dark.html +0 -1
  286. package/.grok/skills/lit-diagram-drawer/assets/examples/type-bump-full.html +0 -1
  287. package/.grok/skills/lit-diagram-drawer/assets/examples/type-bump-light.html +0 -1
  288. package/.grok/skills/lit-diagram-drawer/assets/examples/type-data-flow-dark.html +0 -1
  289. package/.grok/skills/lit-diagram-drawer/assets/examples/type-data-flow-full.html +0 -1
  290. package/.grok/skills/lit-diagram-drawer/assets/examples/type-data-flow-light.html +0 -1
  291. package/.grok/skills/lit-diagram-drawer/assets/examples/type-datalake-dark.html +0 -1
  292. package/.grok/skills/lit-diagram-drawer/assets/examples/type-datalake-full.html +0 -1
  293. package/.grok/skills/lit-diagram-drawer/assets/examples/type-datalake-light.html +0 -1
  294. package/.grok/skills/lit-diagram-drawer/assets/examples/type-db-schema-dark.html +0 -1
  295. package/.grok/skills/lit-diagram-drawer/assets/examples/type-db-schema-full.html +0 -1
  296. package/.grok/skills/lit-diagram-drawer/assets/examples/type-db-schema-light.html +0 -1
  297. package/.grok/skills/lit-diagram-drawer/assets/examples/type-dependency-dark.html +0 -1
  298. package/.grok/skills/lit-diagram-drawer/assets/examples/type-dependency-full.html +0 -1
  299. package/.grok/skills/lit-diagram-drawer/assets/examples/type-dependency-light.html +0 -1
  300. package/.grok/skills/lit-diagram-drawer/assets/examples/type-deployment-dark.html +0 -1
  301. package/.grok/skills/lit-diagram-drawer/assets/examples/type-deployment-full.html +0 -1
  302. package/.grok/skills/lit-diagram-drawer/assets/examples/type-deployment-light.html +0 -1
  303. package/.grok/skills/lit-diagram-drawer/assets/examples/type-dp-integration-dark.html +0 -1
  304. package/.grok/skills/lit-diagram-drawer/assets/examples/type-dp-integration-full.html +0 -1
  305. package/.grok/skills/lit-diagram-drawer/assets/examples/type-dp-integration-light.html +0 -1
  306. package/.grok/skills/lit-diagram-drawer/assets/examples/type-dp-security-matrix-dark.html +0 -1
  307. package/.grok/skills/lit-diagram-drawer/assets/examples/type-dp-security-matrix-full.html +0 -1
  308. package/.grok/skills/lit-diagram-drawer/assets/examples/type-dp-security-matrix-light.html +0 -1
  309. package/.grok/skills/lit-diagram-drawer/assets/examples/type-er-dark.html +0 -1
  310. package/.grok/skills/lit-diagram-drawer/assets/examples/type-er-full.html +0 -1
  311. package/.grok/skills/lit-diagram-drawer/assets/examples/type-er-light.html +0 -1
  312. package/.grok/skills/lit-diagram-drawer/assets/examples/type-fishbone-dark.html +0 -1
  313. package/.grok/skills/lit-diagram-drawer/assets/examples/type-fishbone-full.html +0 -1
  314. package/.grok/skills/lit-diagram-drawer/assets/examples/type-fishbone-light.html +0 -1
  315. package/.grok/skills/lit-diagram-drawer/assets/examples/type-flowchart-dark.html +0 -1
  316. package/.grok/skills/lit-diagram-drawer/assets/examples/type-flowchart-full.html +0 -1
  317. package/.grok/skills/lit-diagram-drawer/assets/examples/type-flowchart-light.html +0 -1
  318. package/.grok/skills/lit-diagram-drawer/assets/examples/type-gantt-dark.html +0 -1
  319. package/.grok/skills/lit-diagram-drawer/assets/examples/type-gantt-full.html +0 -1
  320. package/.grok/skills/lit-diagram-drawer/assets/examples/type-gantt-light.html +0 -1
  321. package/.grok/skills/lit-diagram-drawer/assets/examples/type-heatmap-dark.html +0 -1
  322. package/.grok/skills/lit-diagram-drawer/assets/examples/type-heatmap-full.html +0 -1
  323. package/.grok/skills/lit-diagram-drawer/assets/examples/type-heatmap-light.html +0 -1
  324. package/.grok/skills/lit-diagram-drawer/assets/examples/type-high-level-dark.html +0 -1
  325. package/.grok/skills/lit-diagram-drawer/assets/examples/type-high-level-full.html +0 -1
  326. package/.grok/skills/lit-diagram-drawer/assets/examples/type-high-level-light.html +0 -1
  327. package/.grok/skills/lit-diagram-drawer/assets/examples/type-high-level-vertical-dark.html +0 -1
  328. package/.grok/skills/lit-diagram-drawer/assets/examples/type-high-level-vertical-full.html +0 -1
  329. package/.grok/skills/lit-diagram-drawer/assets/examples/type-high-level-vertical-light.html +0 -1
  330. package/.grok/skills/lit-diagram-drawer/assets/examples/type-import-drawio-dark.html +0 -1
  331. package/.grok/skills/lit-diagram-drawer/assets/examples/type-import-drawio-full.html +0 -1
  332. package/.grok/skills/lit-diagram-drawer/assets/examples/type-import-drawio-light.html +0 -1
  333. package/.grok/skills/lit-diagram-drawer/assets/examples/type-import-excalidraw-dark.html +0 -1
  334. package/.grok/skills/lit-diagram-drawer/assets/examples/type-import-excalidraw-full.html +0 -1
  335. package/.grok/skills/lit-diagram-drawer/assets/examples/type-import-excalidraw-light.html +0 -1
  336. package/.grok/skills/lit-diagram-drawer/assets/examples/type-import-mermaid-dark.html +0 -1
  337. package/.grok/skills/lit-diagram-drawer/assets/examples/type-import-mermaid-full.html +0 -1
  338. package/.grok/skills/lit-diagram-drawer/assets/examples/type-import-mermaid-light.html +0 -1
  339. package/.grok/skills/lit-diagram-drawer/assets/examples/type-it-state-dark.html +0 -1
  340. package/.grok/skills/lit-diagram-drawer/assets/examples/type-it-state-full.html +0 -1
  341. package/.grok/skills/lit-diagram-drawer/assets/examples/type-it-state-light.html +0 -1
  342. package/.grok/skills/lit-diagram-drawer/assets/examples/type-journey-dark.html +0 -1
  343. package/.grok/skills/lit-diagram-drawer/assets/examples/type-journey-full.html +0 -1
  344. package/.grok/skills/lit-diagram-drawer/assets/examples/type-journey-light.html +0 -1
  345. package/.grok/skills/lit-diagram-drawer/assets/examples/type-kanban-dark.html +0 -1
  346. package/.grok/skills/lit-diagram-drawer/assets/examples/type-kanban-full.html +0 -1
  347. package/.grok/skills/lit-diagram-drawer/assets/examples/type-kanban-light.html +0 -1
  348. package/.grok/skills/lit-diagram-drawer/assets/examples/type-layers-dark.html +0 -1
  349. package/.grok/skills/lit-diagram-drawer/assets/examples/type-layers-full.html +0 -1
  350. package/.grok/skills/lit-diagram-drawer/assets/examples/type-layers-light.html +0 -1
  351. package/.grok/skills/lit-diagram-drawer/assets/examples/type-line-dark.html +0 -1
  352. package/.grok/skills/lit-diagram-drawer/assets/examples/type-line-full.html +0 -1
  353. package/.grok/skills/lit-diagram-drawer/assets/examples/type-line-light.html +0 -1
  354. package/.grok/skills/lit-diagram-drawer/assets/examples/type-loop-dark.html +0 -1
  355. package/.grok/skills/lit-diagram-drawer/assets/examples/type-loop-full.html +0 -1
  356. package/.grok/skills/lit-diagram-drawer/assets/examples/type-loop-light.html +0 -1
  357. package/.grok/skills/lit-diagram-drawer/assets/examples/type-loop-terminal-dark.html +0 -1
  358. package/.grok/skills/lit-diagram-drawer/assets/examples/type-loop-terminal-full.html +0 -1
  359. package/.grok/skills/lit-diagram-drawer/assets/examples/type-loop-terminal-light.html +0 -1
  360. package/.grok/skills/lit-diagram-drawer/assets/examples/type-marimekko-dark.html +0 -1
  361. package/.grok/skills/lit-diagram-drawer/assets/examples/type-marimekko-full.html +0 -1
  362. package/.grok/skills/lit-diagram-drawer/assets/examples/type-marimekko-light.html +0 -1
  363. package/.grok/skills/lit-diagram-drawer/assets/examples/type-medallion-dark.html +0 -1
  364. package/.grok/skills/lit-diagram-drawer/assets/examples/type-medallion-full.html +0 -1
  365. package/.grok/skills/lit-diagram-drawer/assets/examples/type-medallion-light.html +0 -1
  366. package/.grok/skills/lit-diagram-drawer/assets/examples/type-nested-dark.html +0 -1
  367. package/.grok/skills/lit-diagram-drawer/assets/examples/type-nested-full.html +0 -1
  368. package/.grok/skills/lit-diagram-drawer/assets/examples/type-nested-light.html +0 -1
  369. package/.grok/skills/lit-diagram-drawer/assets/examples/type-org-chart-dark.html +0 -1
  370. package/.grok/skills/lit-diagram-drawer/assets/examples/type-org-chart-full.html +0 -1
  371. package/.grok/skills/lit-diagram-drawer/assets/examples/type-org-chart-light.html +0 -1
  372. package/.grok/skills/lit-diagram-drawer/assets/examples/type-paved-road-animated-dark.html +0 -1
  373. package/.grok/skills/lit-diagram-drawer/assets/examples/type-paved-road-animated-full.html +0 -1
  374. package/.grok/skills/lit-diagram-drawer/assets/examples/type-paved-road-animated-light.html +0 -1
  375. package/.grok/skills/lit-diagram-drawer/assets/examples/type-polar-dark.html +0 -1
  376. package/.grok/skills/lit-diagram-drawer/assets/examples/type-polar-full.html +0 -1
  377. package/.grok/skills/lit-diagram-drawer/assets/examples/type-polar-light.html +0 -1
  378. package/.grok/skills/lit-diagram-drawer/assets/examples/type-policy-trace-animated-dark.html +0 -1
  379. package/.grok/skills/lit-diagram-drawer/assets/examples/type-policy-trace-animated-full.html +0 -1
  380. package/.grok/skills/lit-diagram-drawer/assets/examples/type-policy-trace-animated-light.html +0 -1
  381. package/.grok/skills/lit-diagram-drawer/assets/examples/type-process-dark.html +0 -1
  382. package/.grok/skills/lit-diagram-drawer/assets/examples/type-process-full.html +0 -1
  383. package/.grok/skills/lit-diagram-drawer/assets/examples/type-process-light.html +0 -1
  384. package/.grok/skills/lit-diagram-drawer/assets/examples/type-pyramid-dark.html +0 -1
  385. package/.grok/skills/lit-diagram-drawer/assets/examples/type-pyramid-full.html +0 -1
  386. package/.grok/skills/lit-diagram-drawer/assets/examples/type-pyramid-light.html +0 -1
  387. package/.grok/skills/lit-diagram-drawer/assets/examples/type-quadrant-consultant-dark.html +0 -1
  388. package/.grok/skills/lit-diagram-drawer/assets/examples/type-quadrant-consultant-full.html +0 -1
  389. package/.grok/skills/lit-diagram-drawer/assets/examples/type-quadrant-consultant-light.html +0 -1
  390. package/.grok/skills/lit-diagram-drawer/assets/examples/type-quadrant-dark.html +0 -1
  391. package/.grok/skills/lit-diagram-drawer/assets/examples/type-quadrant-full.html +0 -1
  392. package/.grok/skills/lit-diagram-drawer/assets/examples/type-quadrant-light.html +0 -1
  393. package/.grok/skills/lit-diagram-drawer/assets/examples/type-queue-animated-dark.html +0 -1
  394. package/.grok/skills/lit-diagram-drawer/assets/examples/type-queue-animated-full.html +0 -1
  395. package/.grok/skills/lit-diagram-drawer/assets/examples/type-queue-animated-light.html +0 -1
  396. package/.grok/skills/lit-diagram-drawer/assets/examples/type-radar-dark.html +0 -1
  397. package/.grok/skills/lit-diagram-drawer/assets/examples/type-radar-full.html +0 -1
  398. package/.grok/skills/lit-diagram-drawer/assets/examples/type-radar-light.html +0 -1
  399. package/.grok/skills/lit-diagram-drawer/assets/examples/type-ridgeline-dark.html +0 -1
  400. package/.grok/skills/lit-diagram-drawer/assets/examples/type-ridgeline-full.html +0 -1
  401. package/.grok/skills/lit-diagram-drawer/assets/examples/type-ridgeline-light.html +0 -1
  402. package/.grok/skills/lit-diagram-drawer/assets/examples/type-sankey-dark.html +0 -1
  403. package/.grok/skills/lit-diagram-drawer/assets/examples/type-sankey-full.html +0 -1
  404. package/.grok/skills/lit-diagram-drawer/assets/examples/type-sankey-light.html +0 -1
  405. package/.grok/skills/lit-diagram-drawer/assets/examples/type-scatter-dark.html +0 -1
  406. package/.grok/skills/lit-diagram-drawer/assets/examples/type-scatter-full.html +0 -1
  407. package/.grok/skills/lit-diagram-drawer/assets/examples/type-scatter-light.html +0 -1
  408. package/.grok/skills/lit-diagram-drawer/assets/examples/type-sequence-dark.html +0 -1
  409. package/.grok/skills/lit-diagram-drawer/assets/examples/type-sequence-full.html +0 -1
  410. package/.grok/skills/lit-diagram-drawer/assets/examples/type-sequence-light.html +0 -1
  411. package/.grok/skills/lit-diagram-drawer/assets/examples/type-sequence-oauth-dark.html +0 -1
  412. package/.grok/skills/lit-diagram-drawer/assets/examples/type-sequence-oauth-full.html +0 -1
  413. package/.grok/skills/lit-diagram-drawer/assets/examples/type-sequence-oauth-light.html +0 -1
  414. package/.grok/skills/lit-diagram-drawer/assets/examples/type-slopegraph-dark.html +0 -1
  415. package/.grok/skills/lit-diagram-drawer/assets/examples/type-slopegraph-full.html +0 -1
  416. package/.grok/skills/lit-diagram-drawer/assets/examples/type-slopegraph-light.html +0 -1
  417. package/.grok/skills/lit-diagram-drawer/assets/examples/type-state-dark.html +0 -1
  418. package/.grok/skills/lit-diagram-drawer/assets/examples/type-state-full.html +0 -1
  419. package/.grok/skills/lit-diagram-drawer/assets/examples/type-state-lifecycle-dark.html +0 -1
  420. package/.grok/skills/lit-diagram-drawer/assets/examples/type-state-lifecycle-full.html +0 -1
  421. package/.grok/skills/lit-diagram-drawer/assets/examples/type-state-lifecycle-light.html +0 -1
  422. package/.grok/skills/lit-diagram-drawer/assets/examples/type-state-light.html +0 -1
  423. package/.grok/skills/lit-diagram-drawer/assets/examples/type-story-map-dark.html +0 -1
  424. package/.grok/skills/lit-diagram-drawer/assets/examples/type-story-map-full.html +0 -1
  425. package/.grok/skills/lit-diagram-drawer/assets/examples/type-story-map-light.html +0 -1
  426. package/.grok/skills/lit-diagram-drawer/assets/examples/type-streamgraph-dark.html +0 -1
  427. package/.grok/skills/lit-diagram-drawer/assets/examples/type-streamgraph-full.html +0 -1
  428. package/.grok/skills/lit-diagram-drawer/assets/examples/type-streamgraph-light.html +0 -1
  429. package/.grok/skills/lit-diagram-drawer/assets/examples/type-swimlane-dark.html +0 -1
  430. package/.grok/skills/lit-diagram-drawer/assets/examples/type-swimlane-full.html +0 -1
  431. package/.grok/skills/lit-diagram-drawer/assets/examples/type-swimlane-light.html +0 -1
  432. package/.grok/skills/lit-diagram-drawer/assets/examples/type-timeline-dark.html +0 -1
  433. package/.grok/skills/lit-diagram-drawer/assets/examples/type-timeline-full.html +0 -1
  434. package/.grok/skills/lit-diagram-drawer/assets/examples/type-timeline-light.html +0 -1
  435. package/.grok/skills/lit-diagram-drawer/assets/examples/type-tree-block-decomposition-dark.html +0 -1
  436. package/.grok/skills/lit-diagram-drawer/assets/examples/type-tree-block-decomposition-full.html +0 -1
  437. package/.grok/skills/lit-diagram-drawer/assets/examples/type-tree-block-decomposition-light.html +0 -1
  438. package/.grok/skills/lit-diagram-drawer/assets/examples/type-tree-dark.html +0 -1
  439. package/.grok/skills/lit-diagram-drawer/assets/examples/type-tree-full.html +0 -1
  440. package/.grok/skills/lit-diagram-drawer/assets/examples/type-tree-light.html +0 -1
  441. package/.grok/skills/lit-diagram-drawer/assets/examples/type-treemap-dark.html +0 -1
  442. package/.grok/skills/lit-diagram-drawer/assets/examples/type-treemap-full.html +0 -1
  443. package/.grok/skills/lit-diagram-drawer/assets/examples/type-treemap-light.html +0 -1
  444. package/.grok/skills/lit-diagram-drawer/assets/examples/type-uml-class-dark.html +0 -1
  445. package/.grok/skills/lit-diagram-drawer/assets/examples/type-uml-class-full.html +0 -1
  446. package/.grok/skills/lit-diagram-drawer/assets/examples/type-uml-class-light.html +0 -1
  447. package/.grok/skills/lit-diagram-drawer/assets/examples/type-venn-dark.html +0 -1
  448. package/.grok/skills/lit-diagram-drawer/assets/examples/type-venn-full.html +0 -1
  449. package/.grok/skills/lit-diagram-drawer/assets/examples/type-venn-light.html +0 -1
  450. package/.grok/skills/lit-diagram-drawer/assets/examples/type-wardley-dark.html +0 -1
  451. package/.grok/skills/lit-diagram-drawer/assets/examples/type-wardley-full.html +0 -1
  452. package/.grok/skills/lit-diagram-drawer/assets/examples/type-wardley-light.html +0 -1
  453. package/.grok/skills/lit-diagram-drawer/assets/examples/type-waterfall-dark.html +0 -1
  454. package/.grok/skills/lit-diagram-drawer/assets/examples/type-waterfall-full.html +0 -1
  455. package/.grok/skills/lit-diagram-drawer/assets/examples/type-waterfall-light.html +0 -1
  456. package/.grok/skills/lit-diagram-drawer/assets/fonts/OFL.txt +0 -94
  457. package/.grok/skills/lit-diagram-drawer/assets/fonts/PretendardVariable.woff2 +0 -0
  458. package/.grok/skills/lit-diagram-drawer/assets/fonts/provenance.json +0 -22
  459. package/.grok/skills/lit-diagram-drawer/assets/icons.html +0 -231
  460. package/.grok/skills/lit-diagram-drawer/assets/index.html +0 -1
  461. package/.grok/skills/lit-diagram-drawer/assets/licenses/devicon-MIT.txt +0 -20
  462. package/.grok/skills/lit-diagram-drawer/assets/licenses/diagram-design-MIT.txt +0 -21
  463. package/.grok/skills/lit-diagram-drawer/assets/licenses/log-z-MIT.txt +0 -21
  464. package/.grok/skills/lit-diagram-drawer/assets/licenses/simple-icons-CC0.md +0 -30
  465. package/.grok/skills/lit-diagram-drawer/assets/licenses/tabler-MIT.txt +0 -21
  466. package/.grok/skills/lit-diagram-drawer/examples/01-service-architecture/after.html +0 -1
  467. package/.grok/skills/lit-diagram-drawer/examples/01-service-architecture/brief.md +0 -33
  468. package/.grok/skills/lit-diagram-drawer/examples/01-service-architecture/constructed-naive-foil.html +0 -1
  469. package/.grok/skills/lit-diagram-drawer/examples/02-release-decision/after.html +0 -1
  470. package/.grok/skills/lit-diagram-drawer/examples/02-release-decision/brief.md +0 -18
  471. package/.grok/skills/lit-diagram-drawer/examples/02-release-decision/constructed-naive-foil.html +0 -1
  472. package/.grok/skills/lit-diagram-drawer/examples/03-data-retention/after.html +0 -1
  473. package/.grok/skills/lit-diagram-drawer/examples/03-data-retention/brief.md +0 -19
  474. package/.grok/skills/lit-diagram-drawer/examples/03-data-retention/constructed-naive-foil.html +0 -1
  475. package/.grok/skills/lit-diagram-drawer/examples/04-oauth-sequence/after.html +0 -1
  476. package/.grok/skills/lit-diagram-drawer/examples/04-oauth-sequence/brief.md +0 -17
  477. package/.grok/skills/lit-diagram-drawer/examples/04-oauth-sequence/constructed-naive-foil.html +0 -1
  478. package/.grok/skills/lit-diagram-drawer/examples/05-review-lanes/after.html +0 -1
  479. package/.grok/skills/lit-diagram-drawer/examples/05-review-lanes/brief.md +0 -17
  480. package/.grok/skills/lit-diagram-drawer/examples/05-review-lanes/constructed-naive-foil.html +0 -1
  481. package/.grok/skills/lit-diagram-drawer/examples/06-rollout-gates/after.html +0 -1
  482. package/.grok/skills/lit-diagram-drawer/examples/06-rollout-gates/brief.md +0 -17
  483. package/.grok/skills/lit-diagram-drawer/examples/06-rollout-gates/constructed-naive-foil.html +0 -1
  484. package/.grok/skills/lit-diagram-drawer/examples/07-deployment-boundary/after.html +0 -1
  485. package/.grok/skills/lit-diagram-drawer/examples/07-deployment-boundary/brief.md +0 -19
  486. package/.grok/skills/lit-diagram-drawer/examples/07-deployment-boundary/constructed-naive-foil.html +0 -1
  487. package/.grok/skills/lit-diagram-drawer/examples/08-policy-traces/after.html +0 -1
  488. package/.grok/skills/lit-diagram-drawer/examples/08-policy-traces/brief.md +0 -20
  489. package/.grok/skills/lit-diagram-drawer/examples/08-policy-traces/constructed-naive-foil.html +0 -1
  490. package/.grok/skills/lit-diagram-drawer/references/accessibility.md +0 -37
  491. package/.grok/skills/lit-diagram-drawer/references/export.md +0 -29
  492. package/.grok/skills/lit-diagram-drawer/references/import-drawio.md +0 -21
  493. package/.grok/skills/lit-diagram-drawer/references/import-excalidraw.md +0 -14
  494. package/.grok/skills/lit-diagram-drawer/references/import-mermaid.md +0 -18
  495. package/.grok/skills/lit-diagram-drawer/references/import-schema.md +0 -28
  496. package/.grok/skills/lit-diagram-drawer/references/korean-typography.md +0 -34
  497. package/.grok/skills/lit-diagram-drawer/references/motion.md +0 -29
  498. package/.grok/skills/lit-diagram-drawer/references/office-pptx-docx.md +0 -42
  499. package/.grok/skills/lit-diagram-drawer/references/output-spec.md +0 -48
  500. package/.grok/skills/lit-diagram-drawer/references/primitive-annotation.md +0 -12
  501. package/.grok/skills/lit-diagram-drawer/references/primitive-icons.md +0 -21
  502. package/.grok/skills/lit-diagram-drawer/references/primitive-sketchy.md +0 -11
  503. package/.grok/skills/lit-diagram-drawer/references/primitive-terminal.md +0 -11
  504. package/.grok/skills/lit-diagram-drawer/references/profiles.md +0 -24
  505. package/.grok/skills/lit-diagram-drawer/references/semantic-patterns.md +0 -27
  506. package/.grok/skills/lit-diagram-drawer/references/style-guide.md +0 -76
  507. package/.grok/skills/lit-diagram-drawer/references/type-architecture.md +0 -51
  508. package/.grok/skills/lit-diagram-drawer/references/type-bar.md +0 -51
  509. package/.grok/skills/lit-diagram-drawer/references/type-beeswarm.md +0 -49
  510. package/.grok/skills/lit-diagram-drawer/references/type-bubble.md +0 -49
  511. package/.grok/skills/lit-diagram-drawer/references/type-bump.md +0 -49
  512. package/.grok/skills/lit-diagram-drawer/references/type-catalog.json +0 -1433
  513. package/.grok/skills/lit-diagram-drawer/references/type-data-flow.md +0 -51
  514. package/.grok/skills/lit-diagram-drawer/references/type-datalake.md +0 -49
  515. package/.grok/skills/lit-diagram-drawer/references/type-db-schema.md +0 -49
  516. package/.grok/skills/lit-diagram-drawer/references/type-dependency.md +0 -49
  517. package/.grok/skills/lit-diagram-drawer/references/type-deployment.md +0 -49
  518. package/.grok/skills/lit-diagram-drawer/references/type-dp-integration.md +0 -49
  519. package/.grok/skills/lit-diagram-drawer/references/type-dp-security-matrix.md +0 -49
  520. package/.grok/skills/lit-diagram-drawer/references/type-er.md +0 -49
  521. package/.grok/skills/lit-diagram-drawer/references/type-fishbone.md +0 -49
  522. package/.grok/skills/lit-diagram-drawer/references/type-flowchart.md +0 -49
  523. package/.grok/skills/lit-diagram-drawer/references/type-gantt.md +0 -49
  524. package/.grok/skills/lit-diagram-drawer/references/type-heatmap.md +0 -53
  525. package/.grok/skills/lit-diagram-drawer/references/type-high-level-vertical.md +0 -53
  526. package/.grok/skills/lit-diagram-drawer/references/type-high-level.md +0 -53
  527. package/.grok/skills/lit-diagram-drawer/references/type-import-drawio.md +0 -53
  528. package/.grok/skills/lit-diagram-drawer/references/type-import-excalidraw.md +0 -53
  529. package/.grok/skills/lit-diagram-drawer/references/type-import-mermaid.md +0 -53
  530. package/.grok/skills/lit-diagram-drawer/references/type-it-state.md +0 -54
  531. package/.grok/skills/lit-diagram-drawer/references/type-journey.md +0 -54
  532. package/.grok/skills/lit-diagram-drawer/references/type-kanban.md +0 -54
  533. package/.grok/skills/lit-diagram-drawer/references/type-layers.md +0 -54
  534. package/.grok/skills/lit-diagram-drawer/references/type-line.md +0 -54
  535. package/.grok/skills/lit-diagram-drawer/references/type-loop-terminal.md +0 -53
  536. package/.grok/skills/lit-diagram-drawer/references/type-loop.md +0 -54
  537. package/.grok/skills/lit-diagram-drawer/references/type-marimekko.md +0 -54
  538. package/.grok/skills/lit-diagram-drawer/references/type-medallion.md +0 -54
  539. package/.grok/skills/lit-diagram-drawer/references/type-nested.md +0 -59
  540. package/.grok/skills/lit-diagram-drawer/references/type-org-chart.md +0 -58
  541. package/.grok/skills/lit-diagram-drawer/references/type-paved-road-animated.md +0 -72
  542. package/.grok/skills/lit-diagram-drawer/references/type-polar.md +0 -67
  543. package/.grok/skills/lit-diagram-drawer/references/type-policy-trace-animated.md +0 -69
  544. package/.grok/skills/lit-diagram-drawer/references/type-process.md +0 -58
  545. package/.grok/skills/lit-diagram-drawer/references/type-pyramid.md +0 -59
  546. package/.grok/skills/lit-diagram-drawer/references/type-quadrant-consultant.md +0 -60
  547. package/.grok/skills/lit-diagram-drawer/references/type-quadrant.md +0 -57
  548. package/.grok/skills/lit-diagram-drawer/references/type-queue-animated.md +0 -63
  549. package/.grok/skills/lit-diagram-drawer/references/type-radar.md +0 -57
  550. package/.grok/skills/lit-diagram-drawer/references/type-ridgeline.md +0 -63
  551. package/.grok/skills/lit-diagram-drawer/references/type-sankey.md +0 -68
  552. package/.grok/skills/lit-diagram-drawer/references/type-scatter.md +0 -60
  553. package/.grok/skills/lit-diagram-drawer/references/type-sequence-oauth.md +0 -66
  554. package/.grok/skills/lit-diagram-drawer/references/type-sequence.md +0 -63
  555. package/.grok/skills/lit-diagram-drawer/references/type-slopegraph.md +0 -65
  556. package/.grok/skills/lit-diagram-drawer/references/type-state-lifecycle.md +0 -53
  557. package/.grok/skills/lit-diagram-drawer/references/type-state.md +0 -59
  558. package/.grok/skills/lit-diagram-drawer/references/type-story-map.md +0 -52
  559. package/.grok/skills/lit-diagram-drawer/references/type-streamgraph.md +0 -53
  560. package/.grok/skills/lit-diagram-drawer/references/type-swimlane.md +0 -52
  561. package/.grok/skills/lit-diagram-drawer/references/type-timeline.md +0 -52
  562. package/.grok/skills/lit-diagram-drawer/references/type-tree-block-decomposition.md +0 -57
  563. package/.grok/skills/lit-diagram-drawer/references/type-tree.md +0 -54
  564. package/.grok/skills/lit-diagram-drawer/references/type-treemap.md +0 -54
  565. package/.grok/skills/lit-diagram-drawer/references/type-uml-class.md +0 -52
  566. package/.grok/skills/lit-diagram-drawer/references/type-venn.md +0 -51
  567. package/.grok/skills/lit-diagram-drawer/references/type-wardley.md +0 -52
  568. package/.grok/skills/lit-diagram-drawer/references/type-waterfall.md +0 -54
  569. package/.grok/skills/lit-diagram-drawer/references/verifier-guide.md +0 -64
  570. package/.grok/skills/lit-diagram-drawer/scripts/block-registry.mjs +0 -43
  571. package/.grok/skills/lit-diagram-drawer/scripts/brief-contract.mjs +0 -94
  572. package/.grok/skills/lit-diagram-drawer/scripts/check-visible-text.mjs +0 -15
  573. package/.grok/skills/lit-diagram-drawer/scripts/diagram-metrics.mjs +0 -219
  574. package/.grok/skills/lit-diagram-drawer/scripts/doctor.mjs +0 -22
  575. package/.grok/skills/lit-diagram-drawer/scripts/drawio-extract.mjs +0 -359
  576. package/.grok/skills/lit-diagram-drawer/scripts/excalidraw-extract.mjs +0 -196
  577. package/.grok/skills/lit-diagram-drawer/scripts/export.mjs +0 -117
  578. package/.grok/skills/lit-diagram-drawer/scripts/import-common.mjs +0 -68
  579. package/.grok/skills/lit-diagram-drawer/scripts/mermaid-extract.mjs +0 -232
  580. package/.grok/skills/lit-diagram-drawer/scripts/office-safety.mjs +0 -54
  581. package/.grok/skills/lit-diagram-drawer/scripts/renderer-status.mjs +0 -43
  582. package/.grok/skills/lit-diagram-drawer/scripts/verify-all.mjs +0 -73
  583. package/.grok/skills/lit-diagram-drawer/scripts/verify-brief.mjs +0 -16
  584. package/.grok/skills/lit-diagram-drawer/scripts/verify-coverage.mjs +0 -56
  585. package/.grok/skills/lit-diagram-drawer/scripts/verify-diagram.mjs +0 -22
  586. package/.grok/skills/lit-diagram-drawer/scripts/verify-motion.mjs +0 -12
  587. package/.grok/skills/lit-diagram-drawer/scripts/verify-type.mjs +0 -48
  588. package/.grok/skills/lit-diagram-drawer/scripts/visual-quality.mjs +0 -344
  589. package/.grok/skills/lit-docx/LICENSE +0 -21
  590. package/.grok/skills/lit-docx/NOTICE.md +0 -1
  591. package/.grok/skills/lit-docx/examples/01-report-ko.md +0 -137
  592. package/.grok/skills/lit-docx/examples/02-brief-ko.md +0 -82
  593. package/.grok/skills/lit-docx/examples/03-manual-ko.md +0 -118
  594. package/.grok/skills/lit-docx/examples/04-proposal-ko.md +0 -92
  595. package/.grok/skills/lit-docx/examples/05-memo-en.md +0 -42
  596. package/.grok/skills/lit-docx/examples/06-journal-en.md +0 -90
  597. package/.grok/skills/lit-docx/examples/07-report-en.md +0 -103
  598. package/.grok/skills/lit-docx/examples/08-proposal-en.md +0 -90
  599. package/.grok/skills/lit-docx/examples/09-memo-ko.md +0 -41
  600. package/.grok/skills/lit-docx/references/components.md +0 -151
  601. package/.grok/skills/lit-docx/references/direction-step.md +0 -129
  602. package/.grok/skills/lit-docx/references/frontmatter_schema.md +0 -42
  603. package/.grok/skills/lit-docx/references/journal_style_spec.md +0 -17
  604. package/.grok/skills/lit-docx/references/markdown_quality_checklist.md +0 -37
  605. package/.grok/skills/lit-docx/references/page-composition.md +0 -129
  606. package/.grok/skills/lit-docx/references/slop_phrase_list.yaml +0 -58
  607. package/.grok/skills/lit-docx/references/slop_rules.md +0 -35
  608. package/.grok/skills/lit-docx/references/tonalities/brief.md +0 -98
  609. package/.grok/skills/lit-docx/references/tonalities/journal.md +0 -100
  610. package/.grok/skills/lit-docx/references/tonalities/manual.md +0 -107
  611. package/.grok/skills/lit-docx/references/tonalities/memo.md +0 -95
  612. package/.grok/skills/lit-docx/references/tonalities/proposal.md +0 -104
  613. package/.grok/skills/lit-docx/references/tonalities/report.md +0 -114
  614. package/.grok/skills/lit-docx/requirements.lock +0 -12
  615. package/.grok/skills/lit-docx/scripts/clean_markdown.py +0 -95
  616. package/.grok/skills/lit-docx/scripts/convert_md_to_docx.py +0 -1377
  617. package/.grok/skills/lit-docx/scripts/convert_md_to_pdf.py +0 -284
  618. package/.grok/skills/lit-docx/scripts/convert_pdf.py +0 -130
  619. package/.grok/skills/lit-docx/scripts/docx_design.py +0 -2446
  620. package/.grok/skills/lit-docx/scripts/docx_gate.py +0 -206
  621. package/.grok/skills/lit-docx/scripts/docx_layout.py +0 -959
  622. package/.grok/skills/lit-docx/scripts/edit_docx.py +0 -297
  623. package/.grok/skills/lit-docx/scripts/embed_images.py +0 -78
  624. package/.grok/skills/lit-docx/scripts/generate_docx_templates.py +0 -491
  625. package/.grok/skills/lit-docx/scripts/pdf_fonts.py +0 -63
  626. package/.grok/skills/lit-docx/scripts/run.mjs +0 -23
  627. package/.grok/skills/lit-docx/scripts/slop_lint.py +0 -563
  628. package/.grok/skills/lit-docx/scripts/visual_audit.py +0 -41
  629. package/.grok/skills/lit-docx/templates/docx/acs.docx +0 -0
  630. package/.grok/skills/lit-docx/templates/docx/elsevier.docx +0 -0
  631. package/.grok/skills/lit-docx/templates/docx/ieee.docx +0 -0
  632. package/.grok/skills/lit-docx/templates/docx/korean-generic.docx +0 -0
  633. package/.grok/skills/lit-docx/templates/docx/nature.docx +0 -0
  634. package/.grok/skills/lit-docx/templates/latex/acs/README.md +0 -5
  635. package/.grok/skills/lit-docx/templates/latex/acs/template.tex +0 -42
  636. package/.grok/skills/lit-docx/templates/latex/elsevier/README.md +0 -5
  637. package/.grok/skills/lit-docx/templates/latex/elsevier/template.tex +0 -43
  638. package/.grok/skills/lit-docx/templates/latex/ieee/README.md +0 -5
  639. package/.grok/skills/lit-docx/templates/latex/ieee/template.tex +0 -42
  640. package/.grok/skills/lit-docx/templates/latex/korean-generic/README.md +0 -5
  641. package/.grok/skills/lit-docx/templates/latex/korean-generic/template.tex +0 -42
  642. package/.grok/skills/lit-docx/templates/latex/nature/README.md +0 -5
  643. package/.grok/skills/lit-docx/templates/latex/nature/template.tex +0 -42
  644. package/.grok/skills/lit-docx/templates/registry.yaml +0 -1366
  645. package/.grok/skills/lit-docx/templates/tonalities/brief.yaml +0 -28
  646. package/.grok/skills/lit-docx/templates/tonalities/journal.yaml +0 -25
  647. package/.grok/skills/lit-docx/templates/tonalities/manual.yaml +0 -26
  648. package/.grok/skills/lit-docx/templates/tonalities/memo.yaml +0 -26
  649. package/.grok/skills/lit-docx/templates/tonalities/proposal.yaml +0 -26
  650. package/.grok/skills/lit-docx/templates/tonalities/report.yaml +0 -26
  651. package/.grok/skills/lit-pptx/FORBIDDEN_TERMS.json +0 -55
  652. package/.grok/skills/lit-pptx/NOTICE.md +0 -1
  653. package/.grok/skills/lit-pptx/agents/analyst.md +0 -49
  654. package/.grok/skills/lit-pptx/agents/antithesis.md +0 -59
  655. package/.grok/skills/lit-pptx/agents/architect.md +0 -44
  656. package/.grok/skills/lit-pptx/agents/critic.md +0 -42
  657. package/.grok/skills/lit-pptx/agents/synthesizer.md +0 -47
  658. package/.grok/skills/lit-pptx/agents/thesis.md +0 -33
  659. package/.grok/skills/lit-pptx/assets/azure/circle-lg.png +0 -0
  660. package/.grok/skills/lit-pptx/assets/azure/circle-md.png +0 -0
  661. package/.grok/skills/lit-pptx/assets/azure/circle-sm.png +0 -0
  662. package/.grok/skills/lit-pptx/examples/01-pitch-signal-ko.md +0 -175
  663. package/.grok/skills/lit-pptx/examples/02-business-review-ledger-ko.md +0 -199
  664. package/.grok/skills/lit-pptx/examples/03-research-talk-paper-en.md +0 -177
  665. package/.grok/skills/lit-pptx/examples/04-lecture-chalk-ko.md +0 -176
  666. package/.grok/skills/lit-pptx/examples/05-data-review-night-en.md +0 -221
  667. package/.grok/skills/lit-pptx/examples/06-image-led-atlas-en.md +0 -143
  668. package/.grok/skills/lit-pptx/examples/07-briefing-gazette-ko.md +0 -192
  669. package/.grok/skills/lit-pptx/examples/08-status-update-ledger-en.md +0 -168
  670. package/.grok/skills/lit-pptx/examples/09-pitch-studio-en.md +0 -157
  671. package/.grok/skills/lit-pptx/examples/10-image-led-studio-ko.md +0 -175
  672. package/.grok/skills/lit-pptx/examples/11-business-review-night-en.md +0 -181
  673. package/.grok/skills/lit-pptx/examples/12-status-update-gazette-ko.md +0 -199
  674. package/.grok/skills/lit-pptx/examples/13-engineering-review-computational-brutalism-ko.md +0 -173
  675. package/.grok/skills/lit-pptx/examples/14-launch-pitch-neo-brutalism-ko.md +0 -154
  676. package/.grok/skills/lit-pptx/examples/15-design-lecture-bauhaus-ko.md +0 -139
  677. package/.grok/skills/lit-pptx/examples/16-community-programme-riso-ko.md +0 -158
  678. package/.grok/skills/lit-pptx/examples/17-public-data-briefing-newsroom-ko.md +0 -179
  679. package/.grok/skills/lit-pptx/fonts/jetbrains-mono/JetBrainsMono-Bold.ttf +0 -0
  680. package/.grok/skills/lit-pptx/fonts/jetbrains-mono/JetBrainsMono-Regular.ttf +0 -0
  681. package/.grok/skills/lit-pptx/fonts/jetbrains-mono/OFL.txt +0 -93
  682. package/.grok/skills/lit-pptx/fonts/jetbrains-mono/provenance.json +0 -1
  683. package/.grok/skills/lit-pptx/package-lock.json +0 -795
  684. package/.grok/skills/lit-pptx/package.json +0 -13
  685. package/.grok/skills/lit-pptx/pretendard-font/OFL.txt +0 -94
  686. package/.grok/skills/lit-pptx/pretendard-font/public/static/Pretendard-Bold.otf +0 -0
  687. package/.grok/skills/lit-pptx/pretendard-font/public/static/Pretendard-Regular.otf +0 -0
  688. package/.grok/skills/lit-pptx/references/density-and-fill.md +0 -155
  689. package/.grok/skills/lit-pptx/references/direction-step.md +0 -237
  690. package/.grok/skills/lit-pptx/references/layout-families.md +0 -193
  691. package/.grok/skills/lit-pptx/references/title-treatments.md +0 -134
  692. package/.grok/skills/lit-pptx/references/tonalities/atlas.md +0 -121
  693. package/.grok/skills/lit-pptx/references/tonalities/bauhaus.md +0 -140
  694. package/.grok/skills/lit-pptx/references/tonalities/chalk.md +0 -133
  695. package/.grok/skills/lit-pptx/references/tonalities/computational-brutalism.md +0 -150
  696. package/.grok/skills/lit-pptx/references/tonalities/gazette.md +0 -125
  697. package/.grok/skills/lit-pptx/references/tonalities/ledger.md +0 -132
  698. package/.grok/skills/lit-pptx/references/tonalities/neo-brutalism.md +0 -161
  699. package/.grok/skills/lit-pptx/references/tonalities/newsroom.md +0 -144
  700. package/.grok/skills/lit-pptx/references/tonalities/night.md +0 -129
  701. package/.grok/skills/lit-pptx/references/tonalities/paper.md +0 -125
  702. package/.grok/skills/lit-pptx/references/tonalities/riso.md +0 -137
  703. package/.grok/skills/lit-pptx/references/tonalities/signal.md +0 -116
  704. package/.grok/skills/lit-pptx/references/tonalities/studio.md +0 -121
  705. package/.grok/skills/lit-pptx/requirements.lock +0 -12
  706. package/.grok/skills/lit-pptx/scripts/compile-deck.js +0 -451
  707. package/.grok/skills/lit-pptx/scripts/craft_extras.py +0 -307
  708. package/.grok/skills/lit-pptx/scripts/deck_output.py +0 -612
  709. package/.grok/skills/lit-pptx/scripts/deps.cjs +0 -83
  710. package/.grok/skills/lit-pptx/scripts/embed_fonts.py +0 -213
  711. package/.grok/skills/lit-pptx/scripts/inventory.py +0 -74
  712. package/.grok/skills/lit-pptx/scripts/learn_template.py +0 -433
  713. package/.grok/skills/lit-pptx/scripts/lib/derive-palette.js +0 -176
  714. package/.grok/skills/lit-pptx/scripts/lib/directive-parser.js +0 -244
  715. package/.grok/skills/lit-pptx/scripts/lib/font-map.js +0 -79
  716. package/.grok/skills/lit-pptx/scripts/lib/gen-bg.js +0 -85
  717. package/.grok/skills/lit-pptx/scripts/lib/gen-gradient-assets.js +0 -36
  718. package/.grok/skills/lit-pptx/scripts/lib/grid-resolver.js +0 -512
  719. package/.grok/skills/lit-pptx/scripts/lib/layout-resolver.js +0 -1113
  720. package/.grok/skills/lit-pptx/scripts/lib/markdown-loader.js +0 -138
  721. package/.grok/skills/lit-pptx/scripts/lib/render-adapter-html.js +0 -356
  722. package/.grok/skills/lit-pptx/scripts/lib/render-adapter-pptx.js +0 -2236
  723. package/.grok/skills/lit-pptx/scripts/lib/render-pack.js +0 -3365
  724. package/.grok/skills/lit-pptx/scripts/lib/slide-ast.js +0 -565
  725. package/.grok/skills/lit-pptx/scripts/lib/slide-grid.js +0 -104
  726. package/.grok/skills/lit-pptx/scripts/lib/spec-validator.js +0 -94
  727. package/.grok/skills/lit-pptx/scripts/lib/template-registry.js +0 -730
  728. package/.grok/skills/lit-pptx/scripts/ooxml_integrity.py +0 -37
  729. package/.grok/skills/lit-pptx/scripts/qa_deck.py +0 -809
  730. package/.grok/skills/lit-pptx/scripts/run.mjs +0 -25
  731. package/.grok/skills/lit-pptx/scripts/validate_pptx.py +0 -223
  732. package/.grok/skills/lit-pptx/specs/markdown-slide-spec-v1.md +0 -251
  733. package/.grok/skills/lit-pptx/specs/markdown-slide-spec-v2.md +0 -207
  734. package/.grok/skills/lit-pptx/specs/slide-ast-v1.schema.json +0 -229
  735. package/.grok/skills/lit-pptx/specs/slide-ast-v2.schema.json +0 -144
  736. package/.grok/skills/lit-pptx/specs/template-enrollment-contract.md +0 -379
  737. package/.grok/skills/lit-pptx/templates/bauhaus_light.css +0 -4
  738. package/.grok/skills/lit-pptx/templates/boilerplate_professional.css +0 -508
  739. package/.grok/skills/lit-pptx/templates/enrolled/AZURE-A2Z/capabilities.yaml +0 -146
  740. package/.grok/skills/lit-pptx/templates/enrolled/AZURE-A2Z/layout-mapping.yaml +0 -454
  741. package/.grok/skills/lit-pptx/templates/enrolled/AZURE-A2Z/template.yaml +0 -40
  742. package/.grok/skills/lit-pptx/templates/enrolled/AZURE-PRO/capabilities.yaml +0 -154
  743. package/.grok/skills/lit-pptx/templates/enrolled/AZURE-PRO/layout-mapping.yaml +0 -435
  744. package/.grok/skills/lit-pptx/templates/enrolled/AZURE-PRO/template.yaml +0 -40
  745. package/.grok/skills/lit-pptx/templates/enrolled/BOILERPLATE-A2Z/capabilities.yaml +0 -179
  746. package/.grok/skills/lit-pptx/templates/enrolled/BOILERPLATE-A2Z/layout-mapping.yaml +0 -299
  747. package/.grok/skills/lit-pptx/templates/enrolled/BOILERPLATE-A2Z/template.yaml +0 -45
  748. package/.grok/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/capabilities.yaml +0 -181
  749. package/.grok/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/layout-mapping.yaml +0 -299
  750. package/.grok/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/template.yaml +0 -44
  751. package/.grok/skills/lit-pptx/templates/tonalities/atlas/pack.yaml +0 -81
  752. package/.grok/skills/lit-pptx/templates/tonalities/bauhaus/pack.yaml +0 -98
  753. package/.grok/skills/lit-pptx/templates/tonalities/chalk/pack.yaml +0 -87
  754. package/.grok/skills/lit-pptx/templates/tonalities/computational-brutalism/pack.yaml +0 -99
  755. package/.grok/skills/lit-pptx/templates/tonalities/gazette/pack.yaml +0 -81
  756. package/.grok/skills/lit-pptx/templates/tonalities/ledger/pack.yaml +0 -82
  757. package/.grok/skills/lit-pptx/templates/tonalities/neo-brutalism/pack.yaml +0 -107
  758. package/.grok/skills/lit-pptx/templates/tonalities/newsroom/pack.yaml +0 -99
  759. package/.grok/skills/lit-pptx/templates/tonalities/night/pack.yaml +0 -82
  760. package/.grok/skills/lit-pptx/templates/tonalities/paper/pack.yaml +0 -87
  761. package/.grok/skills/lit-pptx/templates/tonalities/riso/pack.yaml +0 -99
  762. package/.grok/skills/lit-pptx/templates/tonalities/signal/pack.yaml +0 -83
  763. package/.grok/skills/lit-pptx/templates/tonalities/studio/pack.yaml +0 -81
  764. package/.grok/skills/lit-schematic/examples/iso-heat-exchanger/build.mjs +0 -38
  765. package/.grok/skills/lit-schematic/examples/iso-heat-exchanger/scene.mjs +0 -133
  766. package/.grok/skills/lit-schematic/examples/journal-adsorption-rig/build.mjs +0 -87
  767. package/.grok/skills/lit-schematic/examples/pid-dosing-skid/build.mjs +0 -85
  768. package/.grok/skills/lit-schematic/references/cutaway-outputs.md +0 -70
  769. package/.grok/skills/lit-schematic/references/isometric-craft.md +0 -101
  770. package/.grok/skills/lit-schematic/references/journal-figures.md +0 -72
  771. package/.grok/skills/lit-schematic/references/kit-api.md +0 -134
  772. package/.grok/skills/lit-schematic/references/pfd-and-layout.md +0 -53
  773. package/.grok/skills/lit-schematic/references/pid-drafting.md +0 -103
  774. package/.grok/skills/lit-schematic/references/pid-symbols.md +0 -163
  775. package/.grok/skills/lit-schematic/references/verification.md +0 -100
  776. package/.grok/skills/lit-schematic/scripts/doctor.mjs +0 -57
  777. package/.grok/skills/lit-schematic/scripts/lib/figure.mjs +0 -81
  778. package/.grok/skills/lit-schematic/scripts/lib/fonts.mjs +0 -27
  779. package/.grok/skills/lit-schematic/scripts/lib/geom.mjs +0 -113
  780. package/.grok/skills/lit-schematic/scripts/lib/interactive.mjs +0 -292
  781. package/.grok/skills/lit-schematic/scripts/lib/isa.mjs +0 -115
  782. package/.grok/skills/lit-schematic/scripts/lib/iso.mjs +0 -719
  783. package/.grok/skills/lit-schematic/scripts/lib/legend-sheet.mjs +0 -162
  784. package/.grok/skills/lit-schematic/scripts/lib/pid.mjs +0 -937
  785. package/.grok/skills/lit-schematic/scripts/lib/png.mjs +0 -132
  786. package/.grok/skills/lit-schematic/scripts/lib/qa-core.mjs +0 -658
  787. package/.grok/skills/lit-schematic/scripts/lib/route.mjs +0 -218
  788. package/.grok/skills/lit-schematic/scripts/lib/sheet.mjs +0 -890
  789. package/.grok/skills/lit-schematic/scripts/lib/svg.mjs +0 -82
  790. package/.grok/skills/lit-schematic/scripts/lib/theme.mjs +0 -115
  791. package/.grok/skills/lit-schematic/scripts/motion.mjs +0 -129
  792. package/.grok/skills/lit-schematic/scripts/qa.mjs +0 -92
  793. package/.grok/skills/lit-schematic/scripts/render.mjs +0 -233
  794. package/.grok/skills/lit-schematic/scripts/scaffold.mjs +0 -60
  795. package/.grok/skills/lit-scientific-visualization/scripts/verify-canonical-corpus.mjs +0 -181
  796. package/.grok/skills/lit-typographic-motion/NOTICE +0 -23
  797. package/.grok/skills/lit-typographic-motion/THIRD_PARTY_NOTICES +0 -56
  798. package/.grok/skills/lit-typographic-motion/fonts/Archivo-OFL.txt +0 -93
  799. package/.grok/skills/lit-typographic-motion/fonts/Archivo-w100-wt400.ttf +0 -0
  800. package/.grok/skills/lit-typographic-motion/fonts/Archivo-w100-wt700.ttf +0 -0
  801. package/.grok/skills/lit-typographic-motion/fonts/Archivo-w100-wt900.ttf +0 -0
  802. package/.grok/skills/lit-typographic-motion/fonts/Archivo-w125-wt400.ttf +0 -0
  803. package/.grok/skills/lit-typographic-motion/fonts/Archivo-w125-wt700.ttf +0 -0
  804. package/.grok/skills/lit-typographic-motion/fonts/Archivo-w125-wt900.ttf +0 -0
  805. package/.grok/skills/lit-typographic-motion/fonts/Archivo-w75-wt400.ttf +0 -0
  806. package/.grok/skills/lit-typographic-motion/fonts/Archivo-w75-wt700.ttf +0 -0
  807. package/.grok/skills/lit-typographic-motion/fonts/Archivo-w75-wt900.ttf +0 -0
  808. package/.grok/skills/lit-typographic-motion/fonts/JetBrainsMono-OFL.txt +0 -93
  809. package/.grok/skills/lit-typographic-motion/fonts/JetBrainsMono-wght-latin.woff2 +0 -0
  810. package/.grok/skills/lit-typographic-motion/fonts/Silkscreen-Bold.ttf +0 -0
  811. package/.grok/skills/lit-typographic-motion/fonts/Silkscreen-OFL.txt +0 -93
  812. package/.grok/skills/lit-typographic-motion/fonts/Silkscreen-Regular.ttf +0 -0
  813. package/.grok/skills/lit-typographic-motion/fonts/VT323-OFL.txt +0 -93
  814. package/.grok/skills/lit-typographic-motion/fonts/VT323-Regular.ttf +0 -0
  815. package/.grok/skills/lit-typographic-motion/fonts/pins.json +0 -386
  816. package/.grok/skills/lit-typographic-motion/fonts/stroke/CREDITS +0 -41
  817. package/.grok/skills/lit-typographic-motion/fonts/stroke/EMSAllure.svg +0 -216
  818. package/.grok/skills/lit-typographic-motion/fonts/stroke/EMSFelix.svg +0 -216
  819. package/.grok/skills/lit-typographic-motion/fonts/stroke/EMSOsmotron.svg +0 -216
  820. package/.grok/skills/lit-typographic-motion/fonts/stroke/EMSReadability.svg +0 -216
  821. package/.grok/skills/lit-typographic-motion/fonts/stroke/EMSTech.svg +0 -217
  822. package/.grok/skills/lit-typographic-motion/fonts/stroke/OFL-1.1.txt +0 -91
  823. package/.grok/skills/lit-typographic-motion/package-lock.json +0 -63
  824. package/.grok/skills/lit-typographic-motion/package.json +0 -10
  825. package/.grok/skills/lit-typographic-motion/recipes/hero-3d/expected.json +0 -62
  826. package/.grok/skills/lit-typographic-motion/recipes/hero-3d/index.html +0 -82
  827. package/.grok/skills/lit-typographic-motion/recipes/negatives/card-scenes/expected.json +0 -16
  828. package/.grok/skills/lit-typographic-motion/recipes/negatives/card-scenes/index.html +0 -36
  829. package/.grok/skills/lit-typographic-motion/recipes/negatives/reset-sweep/expected.json +0 -16
  830. package/.grok/skills/lit-typographic-motion/recipes/negatives/reset-sweep/index.html +0 -24
  831. package/.grok/skills/lit-typographic-motion/recipes/negatives/still-glow/expected.json +0 -17
  832. package/.grok/skills/lit-typographic-motion/recipes/negatives/still-glow/index.html +0 -25
  833. package/.grok/skills/lit-typographic-motion/recipes/negatives/title-slam/expected.json +0 -17
  834. package/.grok/skills/lit-typographic-motion/recipes/negatives/title-slam/index.html +0 -37
  835. package/.grok/skills/lit-typographic-motion/recipes/orbit-loop/expected.json +0 -67
  836. package/.grok/skills/lit-typographic-motion/recipes/orbit-loop/index.html +0 -119
  837. package/.grok/skills/lit-typographic-motion/recipes/painted-light/expected.json +0 -95
  838. package/.grok/skills/lit-typographic-motion/recipes/painted-light/index.html +0 -192
  839. package/.grok/skills/lit-typographic-motion/recipes/weight-tide/expected.json +0 -67
  840. package/.grok/skills/lit-typographic-motion/recipes/weight-tide/index.html +0 -85
  841. package/.grok/skills/lit-typographic-motion/references/choice-first.md +0 -30
  842. package/.grok/skills/lit-typographic-motion/references/complete-contract.md +0 -124
  843. package/.grok/skills/lit-typographic-motion/references/cover.md +0 -389
  844. package/.grok/skills/lit-typographic-motion/references/craft-loop.md +0 -112
  845. package/.grok/skills/lit-typographic-motion/references/depth.md +0 -119
  846. package/.grok/skills/lit-typographic-motion/references/runtime.md +0 -138
  847. package/.grok/skills/lit-typographic-motion/references/scene-contract.md +0 -98
  848. package/.grok/skills/lit-typographic-motion/references/stage.md +0 -194
  849. package/.grok/skills/lit-typographic-motion/references/style-bible.md +0 -102
  850. package/.grok/skills/lit-typographic-motion/references/treatment.md +0 -153
  851. package/.grok/skills/lit-typographic-motion/references/type-craft.md +0 -94
  852. package/.grok/skills/lit-typographic-motion/requirements-audio.txt +0 -794
  853. package/.grok/skills/lit-typographic-motion/scripts/beat_grid.py +0 -29
  854. package/.grok/skills/lit-typographic-motion/scripts/blender/runner.py +0 -218
  855. package/.grok/skills/lit-typographic-motion/scripts/lib/assets.mjs +0 -230
  856. package/.grok/skills/lit-typographic-motion/scripts/lib/blender.mjs +0 -136
  857. package/.grok/skills/lit-typographic-motion/scripts/lib/board.mjs +0 -153
  858. package/.grok/skills/lit-typographic-motion/scripts/lib/bundle.mjs +0 -23
  859. package/.grok/skills/lit-typographic-motion/scripts/lib/cache.mjs +0 -107
  860. package/.grok/skills/lit-typographic-motion/scripts/lib/chrome.mjs +0 -276
  861. package/.grok/skills/lit-typographic-motion/scripts/lib/clips.mjs +0 -119
  862. package/.grok/skills/lit-typographic-motion/scripts/lib/completion.mjs +0 -43
  863. package/.grok/skills/lit-typographic-motion/scripts/lib/constants.mjs +0 -244
  864. package/.grok/skills/lit-typographic-motion/scripts/lib/cover-assets.mjs +0 -88
  865. package/.grok/skills/lit-typographic-motion/scripts/lib/cover-capture.mjs +0 -153
  866. package/.grok/skills/lit-typographic-motion/scripts/lib/cover-gate.mjs +0 -312
  867. package/.grok/skills/lit-typographic-motion/scripts/lib/cover-image.mjs +0 -111
  868. package/.grok/skills/lit-typographic-motion/scripts/lib/cover-pool.mjs +0 -62
  869. package/.grok/skills/lit-typographic-motion/scripts/lib/cover-sheet.mjs +0 -73
  870. package/.grok/skills/lit-typographic-motion/scripts/lib/cover-treatment.mjs +0 -128
  871. package/.grok/skills/lit-typographic-motion/scripts/lib/cover-webp.mjs +0 -134
  872. package/.grok/skills/lit-typographic-motion/scripts/lib/cover.mjs +0 -354
  873. package/.grok/skills/lit-typographic-motion/scripts/lib/encode.mjs +0 -33
  874. package/.grok/skills/lit-typographic-motion/scripts/lib/flash.mjs +0 -170
  875. package/.grok/skills/lit-typographic-motion/scripts/lib/fonts.mjs +0 -150
  876. package/.grok/skills/lit-typographic-motion/scripts/lib/frame-pool.mjs +0 -162
  877. package/.grok/skills/lit-typographic-motion/scripts/lib/gallery.mjs +0 -160
  878. package/.grok/skills/lit-typographic-motion/scripts/lib/gate.mjs +0 -586
  879. package/.grok/skills/lit-typographic-motion/scripts/lib/house.mjs +0 -43
  880. package/.grok/skills/lit-typographic-motion/scripts/lib/look.mjs +0 -289
  881. package/.grok/skills/lit-typographic-motion/scripts/lib/png.mjs +0 -95
  882. package/.grok/skills/lit-typographic-motion/scripts/lib/presets.mjs +0 -161
  883. package/.grok/skills/lit-typographic-motion/scripts/lib/render.mjs +0 -563
  884. package/.grok/skills/lit-typographic-motion/scripts/lib/report.mjs +0 -65
  885. package/.grok/skills/lit-typographic-motion/scripts/lib/scaffold.mjs +0 -174
  886. package/.grok/skills/lit-typographic-motion/scripts/lib/score.mjs +0 -640
  887. package/.grok/skills/lit-typographic-motion/scripts/lib/seed.mjs +0 -31
  888. package/.grok/skills/lit-typographic-motion/scripts/lib/session.mjs +0 -102
  889. package/.grok/skills/lit-typographic-motion/scripts/lib/sound.mjs +0 -517
  890. package/.grok/skills/lit-typographic-motion/scripts/lib/soundtrack.mjs +0 -46
  891. package/.grok/skills/lit-typographic-motion/scripts/lib/stage-gate.mjs +0 -139
  892. package/.grok/skills/lit-typographic-motion/scripts/lib/stage-qa.mjs +0 -400
  893. package/.grok/skills/lit-typographic-motion/scripts/lib/stage-session.mjs +0 -166
  894. package/.grok/skills/lit-typographic-motion/scripts/lib/stage.mjs +0 -504
  895. package/.grok/skills/lit-typographic-motion/scripts/lib/stills.mjs +0 -90
  896. package/.grok/skills/lit-typographic-motion/scripts/lib/styles.mjs +0 -224
  897. package/.grok/skills/lit-typographic-motion/scripts/lib/text.mjs +0 -114
  898. package/.grok/skills/lit-typographic-motion/scripts/lib/timeline.mjs +0 -223
  899. package/.grok/skills/lit-typographic-motion/scripts/lib/treatment.mjs +0 -446
  900. package/.grok/skills/lit-typographic-motion/scripts/lib/vendor/three/LICENSE +0 -21
  901. package/.grok/skills/lit-typographic-motion/scripts/lib/vendor/three/addons/environments/RoomEnvironment.js +0 -144
  902. package/.grok/skills/lit-typographic-motion/scripts/lib/vendor/three/addons/geometries/RoundedBoxGeometry.js +0 -155
  903. package/.grok/skills/lit-typographic-motion/scripts/lib/vendor/three/three.module.js +0 -54571
  904. package/.grok/skills/lit-typographic-motion/scripts/motion.mjs +0 -225
  905. package/.grok/skills/lit-typographic-motion/scripts/page/engine.js +0 -344
  906. package/.grok/skills/lit-typographic-motion/scripts/page/gl.js +0 -365
  907. package/.grok/skills/lit-typographic-motion/scripts/page/passes.js +0 -211
  908. package/.grok/skills/lit-typographic-motion/scripts/page/post.js +0 -127
  909. package/.grok/skills/lit-typographic-motion/scripts/page/scenes.js +0 -359
  910. package/.grok/skills/lit-typographic-motion/scripts/page/stroke.js +0 -154
  911. package/.grok/skills/lit-typographic-motion/scripts/page/type.js +0 -142
  912. package/.grok/skills/lit-typographic-motion/scripts/page/util.js +0 -68
  913. package/.grok/skills/lit-typographic-motion/scripts/prewarm.mjs +0 -216
  914. package/.grok/skills/lit-typographic-motion/scripts/stage/cover-init.js +0 -56
  915. package/.grok/skills/lit-typographic-motion/scripts/stage/host.js +0 -200
  916. package/.grok/skills/lit-typographic-motion/scripts/stage/loop-kit.js +0 -96
  917. package/.grok/skills/lit-typographic-motion/scripts/stage/qa.js +0 -137
  918. package/.grok/skills/lit-typographic-motion/scripts/stage/stage-kit.js +0 -523
  919. package/.grok/skills/lit-typographic-motion/styles/paper.json +0 -1
  920. package/.grok/skills/lit-typographic-motion/styles/swiss-signal.json +0 -1
  921. package/.grok/skills/lit-typographic-motion/styles/terminalcore.json +0 -1
  922. package/.grok/skills/lit-typographic-motion/styles/tidal.json +0 -1
  923. package/.grok/skills/readme-studio/references/choice-first.md +0 -24
  924. package/.grok/skills/readme-studio/references/complete-contract.md +0 -26
  925. package/.grok/skills/readme-studio/references/decoration-patterns.md +0 -29
  926. package/.grok/skills/readme-studio/references/facts.md +0 -15
  927. package/.grok/skills/readme-studio/references/motion.md +0 -42
  928. package/.grok/skills/readme-studio/references/production.md +0 -9
  929. package/.grok/skills/readme-studio/references/typography.md +0 -16
  930. package/.grok/skills/readme-studio/scripts/validate-facts.mjs +0 -52
  931. package/.grok/skills/readme-studio/templates/cover-source.json +0 -27
  932. package/.grok/skills/readme-studio/templates/facts.json +0 -13
  933. package/.grok/skills/readme-studio/templates/hyperframes/index.html +0 -41
  934. package/.grok/skills/readme-studio/templates/hyperframes/index.motion.json +0 -4
  935. package/.grok/skills/readme-studio/templates/hyperframes/package-lock.json +0 -2016
  936. package/.grok/skills/readme-studio/templates/hyperframes/package.json +0 -12
  937. package/.grok/skills/readme-studio/templates/picture.md +0 -61
  938. package/.grok/skills/readme-studio/templates/remotion/package-lock.json +0 -3785
  939. package/.grok/skills/readme-studio/templates/remotion/package.json +0 -19
  940. package/.grok/skills/readme-studio/templates/remotion/src/index.jsx +0 -31
  941. package/.grok/skills/readme-studio/templates/typography/outline.mjs +0 -62
  942. package/.grok/skills/readme-studio/templates/typography/package-lock.json +0 -135
  943. package/.grok/skills/readme-studio/templates/typography/package.json +0 -10
  944. package/.grok/skills/visual-qa/references/capture-playbook.md +0 -47
  945. package/.grok/skills/visual-qa/references/complete-contract.md +0 -721
  946. package/.grok/skills/visual-qa/references/verdict-taxonomy.md +0 -34
  947. package/.grok/skills/visual-qa/scripts/verify-evidence-manifest.mjs +0 -91
  948. package/.grok/vendor/NOTICE.md +0 -16
  949. package/.grok/vendor/licenses/045_scientific-visualization-MIT.txt +0 -21
  950. package/.grok/vendor/provenance/045_scientific-visualization.md +0 -37
  951. package/.grok/vendor/scientific-visualization/assets/color_palettes.py +0 -197
  952. package/.grok/vendor/scientific-visualization/assets/nature.mplstyle +0 -75
  953. package/.grok/vendor/scientific-visualization/assets/presentation.mplstyle +0 -74
  954. package/.grok/vendor/scientific-visualization/assets/publication.mplstyle +0 -78
  955. package/.grok/vendor/scientific-visualization/evals/evals.json +0 -158
  956. package/.grok/vendor/scientific-visualization/references/_canonical-corpus/manifest.json +0 -38
  957. package/.grok/vendor/scientific-visualization/references/color_palettes.md +0 -380
  958. package/.grok/vendor/scientific-visualization/references/journal_requirements.md +0 -359
  959. package/.grok/vendor/scientific-visualization/references/matplotlib_examples.md +0 -608
  960. package/.grok/vendor/scientific-visualization/references/mdanalysis_martini_visualization.md +0 -85
  961. package/.grok/vendor/scientific-visualization/references/publication_guidelines.md +0 -217
  962. package/.grok/vendor/scientific-visualization/references/seaborn_for_publications.md +0 -293
  963. package/.grok/vendor/scientific-visualization/scripts/figure_export.py +0 -238
  964. package/.grok/vendor/scientific-visualization/scripts/style_presets.py +0 -467
  965. package/.grok/vendor/scientific-visualization/tests/test_figure_export.py +0 -51
  966. package/.grok/vendor/scientific-visualization/tests/test_style_presets.py +0 -114
  967. /package/.grok/skills/{lit-pptx → litgrok}/scripts/proc.cjs +0 -0
@@ -1,344 +0,0 @@
1
- import { sourceMetrics } from './diagram-metrics.mjs';
2
-
3
- const MAX_EDGE_LABEL_ANCHOR_DISTANCE=24;
4
- const BOUNDARY_EDGE_PADDING=4;
5
- const BOUNDARY_EDGE_MIN_OVERLAP=12;
6
- const ARROWHEAD_CANVAS_FLOOR=12/1080;
7
- const ARROWHEAD_STROKE_MULTIPLE=5;
8
- const ARROWHEAD_TARGET_TOLERANCE=2;
9
-
10
- const decode=(s)=>s.replaceAll('&amp;','&').replaceAll('&lt;','<').replaceAll('&gt;','>').replaceAll('&quot;','"').replaceAll('&apos;',"'").replaceAll('&#39;',"'");
11
- const attributes=(s)=>Object.fromEntries([...s.matchAll(/([\w:-]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g)].map((m)=>[m[1],decode(m[2]??m[3]??'')]));
12
- const clean=(s)=>decode(s.replace(/<[^>]*>/g,' ').replace(/\s+/g,' ').trim());
13
- const widthOf=(text,size)=>[...text].reduce((n,c)=>n+(/\s/.test(c)?.28:/[\u1100-\u11ff\u3130-\u318f\uac00-\ud7af]/.test(c)?.98:/[ilI.,:;!|]/.test(c)?.32:/[MW@#%]/.test(c)?.82:.56),0)*size;
14
- const contamination=[
15
- /\blitfamily\b/i, /\b(?:generator|generated by|template|prototype)\b/i,
16
- /\bsource\s*:/i, /\bnotes?\s*:/i, /\bstatic\s+first\b/i,
17
- /\baccessible\s+labels\b/i, /\bone\s+accent\b/i, /\bfocal\b/i,
18
- /\b(?:light|dark|full)\s*[·|/]\s*static\b/i, /\bdesign\s+rules?\b/i,
19
- /^\s*show\b/i,
20
- ];
21
-
22
- function visibleSvgText(svg){
23
- return [...svg.matchAll(/<text\b([^>]*)>([\s\S]*?)<\/text>/gi)].map((m)=>{
24
- const a=attributes(m[1]),label=clean(m[2]),size=Number(a['font-size']||16),textAnchor=a['text-anchor']||'start',anchor={x:Number(a.x||0),y:Number(a.y||0)},w=widthOf(label,size),x=anchor.x-(textAnchor==='middle'?w/2:textAnchor==='end'?w:0),y=anchor.y-size*.82;
25
- return {label,size,role:a['data-role']||'',nodeId:a['data-node-id']||'',anchor,edgeFor:a['data-edge-for']||'',boundaryFor:a['data-boundary-for']||a['data-group-for']||'',x,y,w,h:size*1.22};
26
- }).filter((t)=>t.label);
27
- }
28
- function svgContent(source){return [...source.matchAll(/<svg\b[^>]*>[\s\S]*?<\/svg>/gi)].map((m)=>m[0]).join('\n');}
29
- function parseRoutes(svg){
30
- const routes=[];
31
- for(const m of svg.matchAll(/<(line|path)\b([^>]*)>/gi)){
32
- const a=attributes(m[2]); if(!a['data-from']||!a['data-to'])continue;
33
- let segments=[];
34
- if(m[1].toLowerCase()==='line'){
35
- const v=['x1','y1','x2','y2'].map((k)=>Number(a[k])); if(v.every(Number.isFinite))segments=[[v[0],v[1],v[2],v[3]]];
36
- }else if(a.d){
37
- const parts=a.d.match(/[a-zA-Z]|[-+]?(?:\d*\.\d+|\d+\.?\d*)(?:e[-+]?\d+)?/gi)||[];let i=0,cmd='',x=0,y=0,px=0,py=0;
38
- while(i<parts.length){if(/^[a-z]$/i.test(parts[i]))cmd=parts[i++];if(!cmd)break;const rel=cmd===cmd.toLowerCase(),up=cmd.toUpperCase();
39
- if(up==='M'||up==='L'){if(i+1>=parts.length||/^[a-z]$/i.test(parts[i])){cmd='';continue;}const nx=Number(parts[i++])+(rel?x:0),ny=Number(parts[i++])+(rel?y:0);if(up==='L')segments.push([x,y,nx,ny]);x=nx;y=ny;}
40
- else if(up==='H'){if(i>=parts.length||/^[a-z]$/i.test(parts[i])){cmd='';continue;}const nx=Number(parts[i++])+(rel?x:0);segments.push([x,y,nx,y]);x=nx;}
41
- else if(up==='V'){if(i>=parts.length||/^[a-z]$/i.test(parts[i])){cmd='';continue;}const ny=Number(parts[i++])+(rel?y:0);segments.push([x,y,x,ny]);y=ny;}
42
- else if(up==='C'){if(i+5>=parts.length||/^[a-z]$/i.test(parts[i])){cmd='';continue;}const p=(n)=>[Number(parts[n])+(rel?x:0),Number(parts[n+1])+(rel?y:0)],start=[x,y],c1=p(i),c2=p(i+2),end=p(i+4);i+=6;let previous=start;for(let step=1;step<=16;step++){const t=step/16,u=1-t,next=[u*u*u*start[0]+3*u*u*t*c1[0]+3*u*t*t*c2[0]+t*t*t*end[0],u*u*u*start[1]+3*u*u*t*c1[1]+3*u*t*t*c2[1]+t*t*t*end[1]];segments.push([previous[0],previous[1],next[0],next[1]]);previous=next;}x=end[0];y=end[1];}
43
- else {cmd='';while(i<parts.length&&!/^[a-z]$/i.test(parts[i]))i++;}
44
- }
45
- }
46
- if(segments.length)routes.push({from:a['data-from'],to:a['data-to'],label:a['data-label']||'',segments,markerStart:a['marker-start']||'',markerEnd:a['marker-end']||'',strokeWidth:Number(a['stroke-width']||1)});
47
- }
48
- return routes;
49
- }
50
- function rectangles(svg){
51
- const nodes=[];
52
- for(const m of svg.matchAll(/<rect\b([^>]*)\/?\s*>/gi)){
53
- const a=attributes(m[1]);if(!a['data-node-id'])continue;
54
- const box={id:a['data-node-id'],fill:a.fill||'',type:a['data-node-type']||'',outcomes:(a['data-outcomes']||'').split('|').map((value)=>value.trim()).filter(Boolean),x:Number(a.x||0),y:Number(a.y||0),w:Number(a.width||0),h:Number(a.height||0)};
55
- if(box.w>0&&box.h>0)nodes.push(box);
56
- }
57
- return nodes;
58
- }
59
- function segmentHitsBox(s,b,pad=0){
60
- const [x1,y1,x2,y2]=s,loX=Math.min(x1,x2),hiX=Math.max(x1,x2),loY=Math.min(y1,y2),hiY=Math.max(y1,y2),left=b.x-pad,right=b.x+b.w+pad,top=b.y-pad,bottom=b.y+b.h+pad;
61
- if(x1===x2)return x1>=left&&x1<=right&&hiY>=top&&loY<=bottom;
62
- if(y1===y2)return y1>=top&&y1<=bottom&&hiX>=left&&loX<=right;
63
- const steps=24;for(let i=0;i<=steps;i++){const t=i/steps,x=x1+(x2-x1)*t,y=y1+(y2-y1)*t;if(x>=left&&x<=right&&y>=top&&y<=bottom)return true;}return false;
64
- }
65
- function segmentHitsText(s,t,pad=1){
66
- const b={x:t.x-pad,y:t.y-pad,w:t.w+pad*2,h:t.h+pad*2};return segmentHitsBox(s,b,0);
67
- }
68
- function textOverlapsNode(text,node,pad=1){return text.x<node.x+node.w+pad&&text.x+text.w>node.x-pad&&text.y<node.y+node.h+pad&&text.y+text.h>node.y-pad;}
69
- function gap(a,b){const dx=Math.max(0,a.x-(b.x+b.w),b.x-(a.x+a.w)),dy=Math.max(0,a.y-(b.y+b.h),b.y-(a.y+a.h));return Math.hypot(dx,dy);}
70
-
71
- const OFFICE_LIMITS={groupRatio:2,accentFamiliesHigh:6,hueBand:20,latinShare:.8,titleShare:.6,inset:4};
72
- function officeQuality(svg,nodes,texts,outlines){
73
- const issues=[];
74
- if(outlines.length>=2){
75
- const group=(n)=>outlines.find((o)=>n.x+n.w/2>=o.x&&n.x+n.w/2<=o.x+o.w&&n.y+n.h/2>=o.y&&n.y+n.h/2<=o.y+o.h)?.id||'none';
76
- const intra=[],inter=[];
77
- for(let i=0;i<nodes.length;i++)for(let j=i+1;j<nodes.length;j++)(group(nodes[i])===group(nodes[j])?intra:inter).push(gap(nodes[i],nodes[j]));
78
- if(intra.length&&inter.length&&Math.min(...inter)<OFFICE_LIMITS.groupRatio*Math.max(...intra))issues.push('OF-201 CLUSTER_GAP_RATIO inter='+Math.min(...inter).toFixed(1)+' intra='+Math.max(...intra).toFixed(1));
79
- }
80
- const hues=[];
81
- for(const n of nodes){const m=n.fill.match(/^#([\da-f]{6})$/i);if(!m)continue;const rgb=[0,2,4].map((i)=>parseInt(m[1].slice(i,i+2),16)/255),max=Math.max(...rgb),min=Math.min(...rgb),d=max-min,light=(max+min)/2,sat=d===0?0:d/(1-Math.abs(2*light-1));if(sat<.12||light<.12||light>.93)continue;let h=0;if(d){const k=rgb.indexOf(max);h=60*((k===0?(rgb[1]-rgb[2])/d:k===1?(rgb[2]-rgb[0])/d+2:(rgb[0]-rgb[1])/d+4)+6)%360;}if(!hues.some((v)=>Math.min(Math.abs(v-h),360-Math.abs(v-h))<=OFFICE_LIMITS.hueBand))hues.push(h);}
82
- if(hues.length>=OFFICE_LIMITS.accentFamiliesHigh)issues.push('OF-202 ACCENT_COUNT '+hues.length+' HIGH; keep three to five families, each tied to a named role');
83
- for(const t of texts){
84
- const letters=[...t.label].filter((c)=>/[A-Za-z0-9]/.test(c)).length,share=letters/Math.max(1,t.label.length);
85
- if(share>=OFFICE_LIMITS.latinShare&&t.label!==t.label.toUpperCase()){const all=t.label.split(/\s+/),words=all.filter((w)=>/^[A-Za-z]{4,}$/.test(w)),caps=words.filter((w)=>/^[A-Z][a-z]+$/.test(w));if(caps.length>=2&&caps.length/Math.max(1,words.length)>OFFICE_LIMITS.titleShare&&all.some((w)=>/^(Of|And|The|To|For|In)$/.test(w)))issues.push('OF-203 LABEL_CASE '+t.label);}
86
- const box=t.nodeId?nodes.find((n)=>n.id===t.nodeId):t.boundaryFor?outlines.find((o)=>o.id===t.boundaryFor):null;
87
- if(box&&t.w>box.w-2*OFFICE_LIMITS.inset)issues.push('OF-204 LABEL_OVERFLOW '+t.label+' width='+t.w.toFixed(1)+' box='+box.w);
88
- }
89
- return issues;
90
- }
91
-
92
- function boundaryOutlines(svg){
93
- const outlines=[];
94
- const add=(a)=>{
95
- const markers=['data-trust-boundary','data-boundary','data-boundary-name','data-group-boundary','data-group-name','data-group-label','data-group-id'];
96
- const classMarker=/\b(?:boundary|group)(?:[-_][\w-]+)?\b/i.test(a.class||'');
97
- if(!markers.some((key)=>Object.hasOwn(a,key))&&!classMarker)return;
98
- const labels=[a['data-trust-boundary'],a['data-boundary-name'],a['data-group-boundary'],a['data-group-name'],a['data-group-label']].filter((value)=>value&&value!=='true');
99
- const x=Number(a.x||0),y=Number(a.y||0),w=Number(a.width||0),h=Number(a.height||0);
100
- if(w>0&&h>0)outlines.push({id:a['data-group-id']||a.id||labels[0]||'outline',labels,x,y,w,h,strokeWidth:Number(a['stroke-width']||1)});
101
- };
102
- for(const match of svg.matchAll(/<rect\b([^>]*)\/?\s*>/gi))add(attributes(match[1]));
103
- for(const match of svg.matchAll(/<g\b([^>]*)>([\s\S]*?)<\/g>/gi)){
104
- const group=attributes(match[1]);
105
- if(!['data-trust-boundary','data-boundary','data-boundary-name','data-group-boundary','data-group-name','data-group-label','data-group-id'].some((key)=>Object.hasOwn(group,key)))continue;
106
- const rect=match[2].match(/<rect\b([^>]*)\/?\s*>/i);
107
- if(rect)add({...attributes(rect[1]),...group});
108
- }
109
- return outlines;
110
- }
111
-
112
- function pointSegmentDistance(point,segment){
113
- const [x1,y1,x2,y2]=segment,dx=x2-x1,dy=y2-y1,length=dx*dx+dy*dy;
114
- const t=length?Math.max(0,Math.min(1,((point.x-x1)*dx+(point.y-y1)*dy)/length)):0;
115
- return Math.hypot(point.x-(x1+t*dx),point.y-(y1+t*dy));
116
- }
117
- function routeDistance(point,route){return Math.min(...route.segments.map((segment)=>pointSegmentDistance(point,segment)));}
118
- function isBoundaryLabel(text,outlines){return text.role==='boundary'||text.boundaryFor||outlines.some((outline)=>outline.labels.includes(text.label)||outline.id===text.boundaryFor);}
119
- function outlineEdges(outline){return [[outline.x,outline.y,outline.x+outline.w,outline.y],[outline.x+outline.w,outline.y,outline.x+outline.w,outline.y+outline.h],[outline.x+outline.w,outline.y+outline.h,outline.x,outline.y+outline.h],[outline.x,outline.y+outline.h,outline.x,outline.y]];}
120
- function textHitsOutline(text,outline){return outlineEdges(outline).some((edge)=>segmentHitsText(edge,text,outline.strokeWidth/2+.5));}
121
- function segmentAlongOutline(segment,outline){
122
- const [x1,y1,x2,y2]=segment,loX=Math.min(x1,x2),hiX=Math.max(x1,x2),loY=Math.min(y1,y2),hiY=Math.max(y1,y2),right=outline.x+outline.w,bottom=outline.y+outline.h;
123
- if(Math.abs(y1-y2)<=1){const overlap=Math.min(hiX,right)-Math.max(loX,outline.x);return overlap>BOUNDARY_EDGE_MIN_OVERLAP&&(Math.abs(y1-outline.y)<=BOUNDARY_EDGE_PADDING||Math.abs(y1-bottom)<=BOUNDARY_EDGE_PADDING);}
124
- if(Math.abs(x1-x2)<=1){const overlap=Math.min(hiY,bottom)-Math.max(loY,outline.y);return overlap>BOUNDARY_EDGE_MIN_OVERLAP&&(Math.abs(x1-outline.x)<=BOUNDARY_EDGE_PADDING||Math.abs(x1-right)<=BOUNDARY_EDGE_PADDING);}
125
- return false;
126
- }
127
- function markerPathPoints(d){
128
- const parts=d.match(/[a-zA-Z]|[-+]?(?:\d*\.\d+|\d+\.?\d*)(?:e[-+]?\d+)?/gi)||[],points=[];let i=0,cmd='',x=0,y=0;
129
- while(i<parts.length){if(/^[a-z]$/i.test(parts[i]))cmd=parts[i++];if(!cmd)break;const upper=cmd.toUpperCase(),relative=cmd===cmd.toLowerCase();
130
- if(upper==='M'||upper==='L'){if(i+1>=parts.length||/^[a-z]$/i.test(parts[i]))break;let nx=Number(parts[i++]),ny=Number(parts[i++]);if(relative){nx+=x;ny+=y;}x=nx;y=ny;points.push([x,y]);}
131
- else if(upper==='H'){if(i>=parts.length||/^[a-z]$/i.test(parts[i]))break;x=Number(parts[i++])+(relative?x:0);points.push([x,y]);}
132
- else if(upper==='V'){if(i>=parts.length||/^[a-z]$/i.test(parts[i]))break;y=Number(parts[i++])+(relative?y:0);points.push([x,y]);}
133
- else if(upper==='Z')cmd='';
134
- else {while(i<parts.length&&!/^[a-z]$/i.test(parts[i]))i++;cmd='';}
135
- }
136
- return points;
137
- }
138
- function markerDefinitions(svg){
139
- const markers=new Map();
140
- for(const match of svg.matchAll(/<marker\b([^>]*)>([\s\S]*?)<\/marker>/gi)){
141
- const a=attributes(match[1]),id=a.id;if(!id)continue;
142
- const points=[];
143
- for(const shape of match[2].matchAll(/<(path|polygon)\b([^>]*)>/gi)){
144
- const attrsForShape=attributes(shape[2]);
145
- if(shape[1].toLowerCase()==='polygon'){
146
- const values=(attrsForShape.points||'').match(/[-+]?(?:\d*\.\d+|\d+\.?\d*)(?:e[-+]?\d+)?/gi)||[];
147
- for(let i=0;i+1<values.length;i+=2)points.push([Number(values[i]),Number(values[i+1])]);
148
- }else if(attrsForShape.d){
149
- points.push(...markerPathPoints(attrsForShape.d));
150
- }
151
- }
152
- markers.set(id,{refX:Number(a.refX||0),refY:Number(a.refY||0),units:a.markerUnits||'strokeWidth',width:Number(a.markerWidth||0),height:Number(a.markerHeight||0),points,closed:/\bz\b/i.test(match[2])||/<polygon\b/i.test(match[2])});
153
- }
154
- return markers;
155
- }
156
- function markerOverlapsTarget(route,target,markers){
157
- const match=route.markerEnd.match(/url\(\s*["']?#([^\s)'"`]+)["']?\s*\)/i),marker=match&&markers.get(match[1]),segment=route.segments.at(-1);
158
- if(!segment)return false;
159
- const [x1,y1,x2,y2]=segment,length=Math.hypot(x2-x1,y2-y1)||1,ux=(x2-x1)/length,uy=(y2-y1)/length,nx=-uy,ny=ux;
160
- if(!marker?.points.length){const reach=route.strokeWidth;return segmentHitsBox([x2+ux*reach,y2+uy*reach,x2+ux*reach,y2+uy*reach],target,-1);}
161
- const scale=marker.units==='userSpaceOnUse'?1:route.strokeWidth;
162
- const points=marker.points.map(([x,y])=>[x2+ux*(x-marker.refX)*scale+nx*(y-marker.refY)*scale,y2+uy*(x-marker.refX)*scale+ny*(y-marker.refY)*scale]);
163
- if(points.some(([x,y])=>x>target.x+1&&x<target.x+target.w-1&&y>target.y+1&&y<target.y+target.h-1))return true;
164
- const segments=points.slice(1).map((point,index)=>[points[index][0],points[index][1],point[0],point[1]]);
165
- if(marker.closed&&points.length>2)segments.push([points.at(-1)[0],points.at(-1)[1],points[0][0],points[0][1]]);
166
- return segments.some((line)=>segmentHitsBox(line,target,-1));
167
- }
168
- function markerFor(route,edge,markers){
169
- const value=edge==='end'?route.markerEnd:route.markerStart,match=value.match(/url\(\s*["']?#([^\s)'"`]+)["']?\s*\)/i);
170
- return match?markers.get(match[1]):null;
171
- }
172
- function markerScale(marker,route){return marker.units==='userSpaceOnUse'?1:route.strokeWidth;}
173
- function markerHeadLength(marker){
174
- if(!marker?.points.length)return 0;
175
- const xs=marker.points.map(([x])=>x);
176
- return Math.max(...xs)-Math.min(...xs);
177
- }
178
- function markerTip(route,marker,edge){
179
- const segment=edge==='end'?route.segments.at(-1):route.segments[0];
180
- if(!segment)return null;
181
- const [x1,y1,x2,y2]=segment,dx=x2-x1,dy=y2-y1,length=Math.hypot(dx,dy)||1,ux=dx/length,uy=dy/length;
182
- const anchor=edge==='end'?[x2,y2]:[x1,y1],direction=edge==='end'?1:-1;
183
- const forward=marker?.points.length?Math.max(...marker.points.map(([x])=>direction*(x-marker.refX)))*markerScale(marker,route):0;
184
- return [anchor[0]+direction*ux*forward,anchor[1]+direction*uy*forward];
185
- }
186
- function distanceToBoxBoundary(point,box){
187
- const [x,y]=point,candidates=[];
188
- if(y>=box.y-ARROWHEAD_TARGET_TOLERANCE&&y<=box.y+box.h+ARROWHEAD_TARGET_TOLERANCE)candidates.push(Math.abs(x-box.x),Math.abs(x-(box.x+box.w)));
189
- if(x>=box.x-ARROWHEAD_TARGET_TOLERANCE&&x<=box.x+box.w+ARROWHEAD_TARGET_TOLERANCE)candidates.push(Math.abs(y-box.y),Math.abs(y-(box.y+box.h)));
190
- if(candidates.length)return Math.min(...candidates);
191
- return Math.hypot(Math.max(box.x-x,0,x-(box.x+box.w)),Math.max(box.y-y,0,y-(box.y+box.h)));
192
- }
193
- function decisionBranchQuality(nodes,routes){
194
- const issues=[];
195
- for(const node of nodes.filter((item)=>item.type==='decision')){
196
- if(node.outcomes.length<2){issues.push('DECISION_OUTCOMES_MISSING '+node.id+' must name at least two outcomes');continue;}
197
- const labels=new Set(routes.filter((route)=>route.from===node.id).map((route)=>route.label).filter(Boolean));
198
- for(const outcome of node.outcomes)if(!labels.has(outcome))issues.push('DECISION_OUTCOME_MISSING '+node.id+' '+outcome);
199
- for(const label of labels)if(!node.outcomes.includes(label))issues.push('DECISION_OUTCOME_UNDECLARED '+node.id+' '+label);
200
- }
201
- return issues;
202
- }
203
-
204
- function routeLength(route){return route.segments.reduce((sum,[x1,y1,x2,y2])=>sum+Math.hypot(x2-x1,y2-y1),0);}
205
- function routeBends(route){
206
- const directions=route.segments.map(([x1,y1,x2,y2])=>{const dx=x2-x1,dy=y2-y1,length=Math.hypot(dx,dy);return length?{x:dx/length,y:dy/length}:null;}).filter(Boolean);
207
- let bends=0;
208
- for(let i=1;i<directions.length;i++)if(directions[i-1].x*directions[i].x+directions[i-1].y*directions[i].y<Math.SQRT1_2)bends++;
209
- return bends;
210
- }
211
- function routeManhattanDistance(route){
212
- const start=route.segments[0]?.slice(0,2),end=route.segments.at(-1)?.slice(2,4);
213
- return start&&end?Math.abs(start[0]-end[0])+Math.abs(start[1]-end[1])||null:null;
214
- }
215
- function alignedRouteKind(route,nodes){
216
- const from=nodes.find((node)=>node.id===route.from),to=nodes.find((node)=>node.id===route.to);
217
- if(!from||!to)return null;
218
- const sameRow=Math.abs(from.y+from.h/2-(to.y+to.h/2))<=1,sameColumn=Math.abs(from.x+from.w/2-(to.x+to.w/2))<=1;
219
- const horizontal=route.segments.every(([x1,y1,x2,y2])=>Math.abs(y1-y2)<=1),vertical=route.segments.every(([x1,y1,x2,y2])=>Math.abs(x1-x2)<=1);
220
- if(sameRow&&nodes.every((node)=>node===from||node===to||Math.abs(node.y+node.h/2-(from.y+from.h/2))>1||node.x+node.w/2<=Math.min(from.x+from.w/2,to.x+to.w/2)||node.x+node.w/2>=Math.max(from.x+from.w/2,to.x+to.w/2))&&!horizontal)return 'same-row';
221
- if(sameColumn&&nodes.every((node)=>node===from||node===to||Math.abs(node.x+node.w/2-(from.x+from.w/2))>1||node.y+node.h/2<=Math.min(from.y+from.h/2,to.y+to.h/2)||node.y+node.h/2>=Math.max(from.y+from.h/2,to.y+to.h/2))&&!vertical)return 'same-column';
222
- return null;
223
- }
224
- function routeCrossesBoundary(route,outline){
225
- const points=route.segments.flatMap(([x1,y1,x2,y2])=>[[x1,y1],[x2,y2],[(x1+x2)/2,(y1+y2)/2]]);
226
- const inside=points.some(([x,y])=>x>outline.x&&x<outline.x+outline.w&&y>outline.y&&y<outline.y+outline.h);
227
- const outside=points.some(([x,y])=>x<outline.x||x>outline.x+outline.w||y<outline.y||y>outline.y+outline.h);
228
- return inside&&outside;
229
- }
230
- function collinearOverlap(a,b){
231
- for(const [ax1,ay1,ax2,ay2] of a.segments)for(const [bx1,by1,bx2,by2] of b.segments){
232
- if(Math.abs(ay1-ay2)<=.5&&Math.abs(by1-by2)<=.5&&Math.abs(ay1-by1)<12){if(Math.min(Math.max(ax1,ax2),Math.max(bx1,bx2))-Math.max(Math.min(ax1,ax2),Math.min(bx1,bx2))>=12)return true;}
233
- if(Math.abs(ax1-ax2)<=.5&&Math.abs(bx1-bx2)<=.5&&Math.abs(ax1-bx1)<12){if(Math.min(Math.max(ay1,ay2),Math.max(by1,by2))-Math.max(Math.min(ay1,ay2),Math.min(by1,by2))>=12)return true;}
234
- }
235
- return false;
236
- }
237
- function segmentIntersectionPoint(a,b){
238
- const rx=a[2]-a[0],ry=a[3]-a[1],sx=b[2]-b[0],sy=b[3]-b[1],denominator=rx*sy-ry*sx;
239
- if(Math.abs(denominator)<1e-8)return null;
240
- const qx=b[0]-a[0],qy=b[1]-a[1],t=(qx*sy-qy*sx)/denominator,u=(qx*ry-qy*rx)/denominator;
241
- if(t< -1e-8||t>1+1e-8||u< -1e-8||u>1+1e-8)return null;
242
- return [a[0]+t*rx,a[1]+t*ry];
243
- }
244
- function routeEndpoints(route){
245
- return [{id:route.from,point:route.segments[0].slice(0,2)},{id:route.to,point:route.segments.at(-1).slice(2,4)}];
246
- }
247
- function routeCrossingPoints(a,b){
248
- const aEnds=routeEndpoints(a),bEnds=routeEndpoints(b),points=[];
249
- for(const first of a.segments)for(const second of b.segments){
250
- const point=segmentIntersectionPoint(first,second);
251
- if(!point)continue;
252
- const sharedNodeEndpoint=aEnds.some((left)=>bEnds.some((right)=>left.id===right.id&&Math.hypot(left.point[0]-right.point[0],left.point[1]-right.point[1])<=.5&&Math.hypot(left.point[0]-point[0],left.point[1]-point[1])<=.5));
253
- if(sharedNodeEndpoint||points.some((prior)=>Math.hypot(prior[0]-point[0],prior[1]-point[1])<=.5))continue;
254
- points.push(point);
255
- }
256
- return points;
257
- }
258
- function sequenceQuality(source,svg=svgContent(source),nodes=rectangles(svg),routes=parseRoutes(svg)){
259
- if(!/\bdata-type\s*=\s*["']sequence(?:-oauth)?["']/i.test(source)&&!/\bid\s*=\s*["']diagram-sequence(?:-oauth)?-[^"']+["']/i.test(svg))return [];
260
- const lifelines=new Map();
261
- for(const match of svg.matchAll(/<line\b([^>]*)>/gi)){
262
- const a=attributes(match[1]),name=a['data-lifeline-for'];
263
- if(name&&a['stroke-dasharray']&&Number(a.x1)===Number(a.x2)&&Number(a.y2)>Number(a.y1))lifelines.set(name,{x:Number(a.x1),top:Number(a.y1),bottom:Number(a.y2)});
264
- }
265
- const issues=[],messages=routes.map((route)=>({route,start:route.segments[0].slice(0,2),end:route.segments.at(-1).slice(2,4),y:(route.segments[0][1]+route.segments.at(-1)[3])/2}));
266
- const lastMessageY=Math.max(0,...messages.map((message)=>message.y));
267
- for(const node of nodes){
268
- const line=lifelines.get(node.id);
269
- if(!line){issues.push('SEQUENCE_LIFELINE_MISSING '+node.id);continue;}
270
- if(Math.abs(line.x-(node.x+node.w/2))>1||Math.abs(line.top-(node.y+node.h))>1)issues.push('SEQUENCE_LIFELINE_ALIGNMENT '+node.id);
271
- if(line.bottom+1<lastMessageY)issues.push('SEQUENCE_LIFELINE_SHORT '+node.id+' ends before last message');
272
- }
273
- let previousY=-Infinity;
274
- for(const message of messages){
275
- const from=lifelines.get(message.route.from),to=lifelines.get(message.route.to);
276
- if(!from||!to)continue;
277
- if(Math.abs(message.start[0]-from.x)>1||Math.abs(message.end[0]-to.x)>1)issues.push('SEQUENCE_MESSAGE_OFF_LIFELINE '+message.route.from+'->'+message.route.to);
278
- if(message.y<=previousY)issues.push('SEQUENCE_MESSAGE_ORDER '+message.route.from+'->'+message.route.to+' is not top-to-bottom');
279
- previousY=message.y;
280
- }
281
- return issues;
282
- }
283
-
284
- function visualQuality(source,{enforceCanvas=false,scale=null}={}){
285
- const svg=svgContent(source),texts=visibleSvgText(svg),nodes=rectangles(svg),routes=parseRoutes(svg),outlines=boundaryOutlines(svg),markers=markerDefinitions(svg),metrics=sourceMetrics(source),issues=[],sequenceDiagram=/\bdata-type\s*=\s*["']sequence(?:-oauth)?["']/i.test(source);
286
- const contaminated=texts.filter((t)=>contamination.some((rule)=>rule.test(t.label))).map((t)=>t.label);
287
- if(contaminated.length)issues.push('PROCESS_TEXT '+[...new Set(contaminated)].join(' | '));
288
- for(const text of texts.filter((item)=>item.role==='edge'||item.edgeFor)){
289
- const matches=routes.filter((route)=>route.from+'|'+route.to===text.edgeFor&&(!route.label||route.label===text.label));
290
- if(!text.edgeFor||matches.length!==1){issues.push('EDGE_LABEL_UNBOUND '+(text.edgeFor||text.label));continue;}
291
- const own=matches[0],distance=routeDistance(text.anchor,own),nearestOther=Math.min(Infinity,...routes.filter((route)=>route!==own).map((route)=>routeDistance(text.anchor,route)));
292
- if(distance>MAX_EDGE_LABEL_ANCHOR_DISTANCE)issues.push('EDGE_LABEL_TOO_FAR '+text.label+' own='+distance.toFixed(1)+'px max='+MAX_EDGE_LABEL_ANCHOR_DISTANCE+'px');
293
- if(Number.isFinite(nearestOther)&&distance>=nearestOther)issues.push('EDGE_LABEL_NEAREST_PATH '+text.label+' own='+distance.toFixed(1)+'px other='+nearestOther.toFixed(1)+'px');
294
- for(const node of nodes)if(textOverlapsNode(text,node))issues.push('EDGE_LABEL_NODE_COLLISION '+text.label+' overlaps '+node.id);
295
- }
296
- for(const route of routes){
297
- const facing=routeManhattanDistance(route),ratio=facing?routeLength(route)/facing:null,aligned=alignedRouteKind(route,nodes);
298
- if(ratio>1.4)issues.push('ROUTE_DETOUR '+route.from+'->'+route.to+' ratio='+ratio.toFixed(2)+' max=1.40');
299
- if(aligned)issues.push('ROUTE_ALIGNED_PATH '+route.from+'->'+route.to+' '+aligned+' neighbors require one straight segment');
300
- const crossesBoundary=outlines.some((outline)=>routeCrossesBoundary(route,outline)),bendLimit=crossesBoundary?3:2,bends=routeBends(route);
301
- if(bends>bendLimit)issues.push('ROUTE_BENDS '+route.from+'->'+route.to+' bends='+bends+' max='+bendLimit);
302
- if(route.markerStart&&route.markerEnd)issues.push('ROUTE_OPPOSED_HEADS '+route.from+'->'+route.to);
303
- for(const text of texts)for(const segment of route.segments)if(segmentHitsText(segment,text)){issues.push('EDGE_TEXT_COLLISION '+route.from+'->'+route.to+': '+text.label);break;}
304
- for(const node of nodes)if(node.id!==route.from&&node.id!==route.to&&route.segments.some((s)=>segmentHitsBox(s,node,8)))issues.push('ROUTE_THROUGH_NODE '+route.from+'->'+route.to+' via '+node.id);
305
- for(const outline of outlines)if(route.segments.some((segment)=>segmentAlongOutline(segment,outline))){issues.push('ROUTE_ALONG_BOUNDARY '+route.from+'->'+route.to+' along '+outline.id);break;}
306
- const target=nodes.find((node)=>node.id===route.to);
307
- for(const edge of ['start','end'])if(edge==='end'?route.markerEnd:route.markerStart){
308
- const marker=markerFor(route,edge,markers),minimum=Math.max(ARROWHEAD_STROKE_MULTIPLE*route.strokeWidth,ARROWHEAD_CANVAS_FLOOR*(metrics.viewBox?.w||1080));
309
- const length=markerHeadLength(marker)*markerScale(marker||{units:'userSpaceOnUse'},route);
310
- if(!marker)issues.push('ARROWHEAD_GEOMETRY_MISSING '+route.from+'->'+route.to+' '+edge);
311
- else if(length+0.01<minimum)issues.push('ARROWHEAD_SIZE_FLOOR '+route.from+'->'+route.to+' '+edge+'='+length.toFixed(1)+'px min='+minimum.toFixed(1)+'px (12/1080 canvas, 5x stroke)');
312
- }
313
- if(route.markerEnd&&target&&!sequenceDiagram){
314
- const marker=markerFor(route,'end',markers),tip=markerTip(route,marker,'end');
315
- if(tip&&distanceToBoxBoundary(tip,target)>ARROWHEAD_TARGET_TOLERANCE)issues.push('ARROWHEAD_TIP_MISSED_TARGET '+route.from+'->'+route.to+' gap='+distanceToBoxBoundary(tip,target).toFixed(1)+'px max='+ARROWHEAD_TARGET_TOLERANCE+'px');
316
- }
317
- if(route.markerEnd&&target&&markerOverlapsTarget(route,target,markers))issues.push('ARROWHEAD_TARGET_OVERLAP '+route.from+'->'+route.to+' marker intersects target '+target.id);
318
- }
319
- issues.push(...decisionBranchQuality(nodes,routes));
320
- issues.push(...officeQuality(svg,nodes,texts,outlines));
321
- for(let i=0;i<routes.length;i++)for(let j=i+1;j<routes.length;j++){
322
- if(collinearOverlap(routes[i],routes[j]))issues.push('ROUTE_COLLINEAR_OVERLAP '+routes[i].from+'->'+routes[i].to+' / '+routes[j].from+'->'+routes[j].to+' shared within 12px');
323
- for(const point of routeCrossingPoints(routes[i],routes[j]))issues.push('ROUTE_CROSSING '+routes[i].from+'->'+routes[i].to+' / '+routes[j].from+'->'+routes[j].to+' at '+point[0].toFixed(1)+','+point[1].toFixed(1));
324
- }
325
- issues.push(...sequenceQuality(source,svg,nodes,routes));
326
- for(const text of texts)for(const outline of outlines)if(textHitsOutline(text,outline)){issues.push('OUTLINE_TEXT_COLLISION '+text.label+' crosses '+outline.id);break;}
327
- const boundaryTexts=texts.filter((text)=>isBoundaryLabel(text,outlines));
328
- const boundaryContrastFailures=boundaryTexts.filter((text)=>metrics.contrastFailures.some((failure)=>failure.text===text.label));
329
- for(const text of boundaryContrastFailures)issues.push('BOUNDARY_CONTRAST_FLOOR '+text.label+' below 4.5:1');
330
- for(let i=0;i<nodes.length;i++)for(let j=i+1;j<nodes.length;j++)if(gap(nodes[i],nodes[j])<12)issues.push('NODE_GAP '+nodes[i].id+'/'+nodes[j].id+' below 12px');
331
- const fontFailures=[];
332
- if(enforceCanvas){
333
- const ratio=scale??(metrics.viewBox?Math.min(metrics.viewBox.w/1080,metrics.viewBox.h/640):1);
334
- if(!texts.some((t)=>t.role==='title'))issues.push('TITLE_ROLE_MISSING visible title must use data-role="title"');
335
- for(const t of texts){const boundary=isBoundaryLabel(t,outlines),minimum=t.role==='title'?28:t.role==='edge'||boundary?13:t.role==='node'?15:0;if(minimum&&t.size+0.01<minimum*ratio){const failure=(boundary?'boundary':t.role)+':'+t.label+'='+t.size+'px (min '+(minimum*ratio).toFixed(1)+'px)';if(boundary)issues.push('BOUNDARY_FONT_FLOOR '+failure);else fontFailures.push(failure);}}
336
- if(fontFailures.length)issues.push('FONT_FLOOR '+fontFailures.join(' | '));
337
- const points=nodes.flatMap((n)=>[[n.x,n.y],[n.x+n.w,n.y+n.h]]).concat(routes.flatMap((r)=>r.segments.flatMap((s)=>[[s[0],s[1]],[s[2],s[3]]])));
338
- const box=points.reduce((b,p)=>({left:Math.min(b.left,p[0]),top:Math.min(b.top,p[1]),right:Math.max(b.right,p[0]),bottom:Math.max(b.bottom,p[1])}),{left:Infinity,top:Infinity,right:-Infinity,bottom:-Infinity});
339
- if(nodes.length&&metrics.viewBox){const safeWidth=metrics.viewBox.w*.90,safeHeight=metrics.viewBox.h*.74,width=(box.right-box.left)/safeWidth,height=(box.bottom-box.top)/safeHeight;if(width<.75||height<.54)issues.push('CONTENT_FILL safe-area-width='+width.toFixed(3)+' safe-area-height='+height.toFixed(3)+' minimum=.75/.54');}
340
- if(!nodes.length)issues.push('CONTENT_NODES_MISSING');
341
- }
342
- return {issues,contaminated,fonts:fontFailures,nodes:nodes.length,edges:routes.length,edgeLabelMaxAnchorDistance:MAX_EDGE_LABEL_ANCHOR_DISTANCE,arrowheadFloor:{canvas:ARROWHEAD_CANVAS_FLOOR,strokeMultiple:ARROWHEAD_STROKE_MULTIPLE,targetTolerance:ARROWHEAD_TARGET_TOLERANCE},boundaryTexts:boundaryTexts.length};
343
- }
344
- export { visualQuality, visibleSvgText, parseRoutes, rectangles, boundaryOutlines, sequenceQuality };
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 wjgoarxiv
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
@@ -1 +0,0 @@
1
- The publisher-docx engine and templates are user-authored work by wjgoarxiv, provided under the MIT License in this directory. This LitGrok port adapts its entry points and guidance to Grok Build.
@@ -1,137 +0,0 @@
1
- ---
2
- title: 본사 옥상 태양광 설비 1년 운영 결과
3
- subtitle: 2025년 10월~2026년 9월 발전 실적, 전기요금 절감과 2027년 보완 계획
4
- author: 시설관리팀 에너지파트
5
- organization: 예시 주식회사
6
- date: 2026-10-05
7
- short_title: 옥상 태양광 1년 운영 결과
8
- notice: "예시 데이터: 회사명, 설비 용량, 금액은 모두 가정입니다. 실제 수치로 바꿔 주세요"
9
- tonality: Report
10
- ---
11
-
12
- ::: cover variant=masthead kicker="운영 결과 보고"
13
- 본사 옥상 태양광 설비를 가동한 첫 1년의 발전량, 자가소비 비율, 전기요금 절감액, 고장 이력을 정리하고 2027년 보완 공사와 예산 요청을 함께 담았다.
14
- :::
15
-
16
- # 요약
17
-
18
- 옥상 태양광 설비는 1년 동안 312MWh를 생산해 본사 연간 전력 사용량의 8.4%를 대체했다. 설계 단계에서 예측한 발전량 298MWh보다 4.7% 많다. 생산한 전력은 대부분 건물 안에서 바로 썼고, 휴일 낮에 남은 전력만 한전 계통으로 보냈다.
19
-
20
- ::: keyfigures
21
- - **312MWh** 연간 발전량 (예시)
22
- * 2025. 10.~2026. 9. 인버터 누적 기록
23
- - **8.4%** 본사 전력 사용량 대비 (예시)
24
- * 같은 기간 수전 계량기 기준
25
- - **4,180만 원** 전기요금 절감액 (예시)
26
- * 계시별 요금 적용, 부가세 제외
27
- :::
28
-
29
- 절감액은 투자비 회수 계획의 연간 목표 3,900만 원을 넘었다. 다만 여름철 한낮에 모듈 온도가 올라 출력이 떨어지는 시간이 예상보다 길었고, 동쪽 구역 인버터 1대가 두 차례 멈춰 11일 동안 발전량 손실이 있었다. 2027년 상반기에 인버터 교체와 모듈 세척 주기 조정을 진행하며, 이에 필요한 예산 2,600만 원의 승인을 요청한다.
30
-
31
- # 설비 개요
32
-
33
- ## 설치 규모와 구성
34
-
35
- 설비는 본관과 별관 옥상 두 곳에 나뉘어 있다. 본관에는 모듈 540장(설비 용량 248kW), 별관에는 모듈 160장(73kW)이 남향 15도 경사로 놓였다. 인버터는 본관 4대, 별관 1대이며, 각 인버터의 출력은 지하 2층 수전반에서 건물 부하와 합쳐진다.
36
-
37
- 표 1. 구역별 설비 구성 (예시)
38
-
39
- | 구분 | 본관 옥상 | 별관 옥상 | 합계 |
40
- | --- | ---: | ---: | ---: |
41
- | 모듈 수 (장) | 540 | 160 | 700 |
42
- | 설비 용량 (kW) | 248 | 73 | 321 |
43
- | 인버터 (대) | 4 | 1 | 5 |
44
- | 설치 면적 (㎡) | 1,620 | 480 | 2,100 |
45
-
46
- 자료: 시설관리팀 준공 도서(2025. 9.)
47
-
48
- ## 계량과 기록 방식
49
-
50
- 발전량은 인버터별 누적 계량값을 15분 간격으로 원격 수집한다. 건물 사용량은 한전 수전 계량기와 내부 부하 계량기를 함께 읽는다. 두 값의 차이로 자가소비량과 역송량을 계산하며, 월말에 한전 청구서와 대조해 오차가 1%를 넘으면 원인을 찾는다. 1년 동안 오차가 1%를 넘은 달은 2026년 2월 한 번뿐이었고, 원인은 계량기 통신 장애로 확인했다.
51
-
52
- # 발전 실적
53
-
54
- ## 월별 발전량
55
-
56
- 발전량은 5월에 가장 많았고 12월에 가장 적었다. 일사량이 가장 많은 달은 6월이었지만, 장마가 일찍 시작된 데다 모듈 온도가 높아 5월 실적에 못 미쳤다. 겨울철에는 해가 낮아 별관 옥상 일부가 본관 그림자에 가렸다. 아래 표의 예측값은 설계 시뮬레이션의 월별 값을 분기로 합한 것이다.
57
-
58
- 표 2. 분기별 발전량과 예측 대비 실적 (예시)
59
-
60
- | 분기 | 예측 (MWh) | 실적 (MWh) | 예측 대비 (%) |
61
- | --- | ---: | ---: | ---: |
62
- | 2025년 4분기 | 58 | 61 | 105.2 |
63
- | 2026년 1분기 | 66 | 69 | 104.5 |
64
- | 2026년 2분기 | 94 | 101 | 107.4 |
65
- | 2026년 3분기 | 80 | 81 | 101.3 |
66
- | 합계 | 298 | 312 | 104.7 |
67
-
68
- 자료: 인버터 원격 감시 기록
69
-
70
- 3분기 실적이 예측과 거의 같았던 것은 8월 인버터 정지의 영향이다. 정지가 없었다면 3분기 실적은 약 85MWh로 추정되며, 이 경우 연간 실적은 예측보다 6% 정도 많았을 것이다.
71
-
72
- ## 자가소비와 역송
73
-
74
- 생산 전력의 93%를 건물 안에서 바로 썼다. 평일 낮에는 사무 부하와 냉방 부하가 발전량보다 커서 남는 전력이 거의 없다. 역송은 주로 토요일과 공휴일 낮에 생겼고, 1년 동안 모두 22MWh였다. 역송 전력은 상계 거래로 처리해 다음 달 요금에서 차감했다.
75
-
76
- ## 효율 저하 요인
77
-
78
- 출력을 깎은 요인은 세 가지였다. 첫째는 여름철 모듈 온도다. 7월과 8월 한낮에 모듈 표면 온도가 65도를 넘은 시간이 하루 평균 3.2시간이었고, 이 시간대 출력은 정격의 78% 수준에 머물렀다. 둘째는 먼지와 새 배설물이다. 봄철 황사 이후 세척 전후의 출력 차이가 4% 안팎으로 측정됐다. 셋째는 겨울철 별관 그림자로, 12월과 1월 오전 10시 이전에는 별관 모듈 중 40장 정도가 그늘에 들었다.
79
-
80
- # 비용과 절감 효과
81
-
82
- ## 전기요금 절감액
83
-
84
- 절감액은 자가소비량에 해당 시간대 요금 단가를 곱한 값과 상계 처리된 역송 금액을 더해 계산했다. 여름철 낮 시간대 단가가 높아 6~8월 세 달의 절감액이 연간 절감액의 36%를 차지했다.
85
-
86
- 표 3. 절감액과 운영비 (예시)
87
-
88
- | 항목 | 금액 (만 원) | 비고 |
89
- | --- | ---: | --- |
90
- | 자가소비 절감액 | 3,890 | 계시별 단가 적용 |
91
- | 역송 상계 금액 | 290 | 22MWh |
92
- | 유지보수 계약비 | 480 | 연 1회 정밀 점검 포함 |
93
- | 모듈 세척비 | 120 | 연 3회 |
94
- | 순절감액 | 3,580 | 절감액에서 운영비를 뺀 값 |
95
-
96
- 자료: 재무팀 전기요금 정산 자료, 시설관리팀 계약 대장
97
-
98
- ## 투자비 회수 전망
99
-
100
- 설치 투자비는 5억 1,000만 원이었다. 첫해 순절감액 3,580만 원이 그대로 유지된다고 보면 회수에는 약 14년이 걸린다. 그러나 전기요금 단가는 2026년에만 두 차례 올랐고, 모듈 출력은 해마다 0.5% 정도씩 낮아진다. 두 요인을 함께 넣은 재무팀 추정으로는 회수 기간이 12~13년이다.
101
-
102
- ::: callout kind=note title="회수 기간 추정의 전제"
103
- 요금 단가는 연 3% 상승, 모듈 출력은 연 0.5% 저하, 유지보수비는 연 2% 상승을 가정했다. 단가 상승률이 연 1%에 그치면 회수 기간은 15년으로 늘어난다.
104
- :::
105
-
106
- # 운영상 문제와 대응
107
-
108
- ## 인버터 정지
109
-
110
- 동쪽 구역 3번 인버터가 2026년 3월과 8월 두 차례 과열 경보로 멈췄다. 3월에는 하루 만에 재가동했지만, 8월에는 냉각 팬 부품을 해외에서 들여오느라 10일이 걸렸다. 국내 재고가 없었다. 두 번의 정지로 잃은 발전량은 약 5MWh, 금액으로는 70만 원 정도다. 제조사는 같은 모델의 냉각 팬 결함을 인정하고 2027년 1분기 안에 무상 교체를 약속했다. 그러나 팬만 바꾸면 설치 위치의 환기 부족은 그대로 남는다.
111
-
112
- ## 세척 주기
113
-
114
- 계약상 세척은 연 3회(3월, 6월, 10월)였다. 문제는 시기다. 황사가 심했던 4월과 꽃가루가 많았던 5월 사이에는 세척 전후 출력 차이가 4%를 넘었다. 세척 시기를 황사 직후로 옮기고 여름 장마 전 한 번을 추가하면, 연간 발전량이 1.5% 정도 늘 것으로 본다. 세척 업체와는 2026년 12월 계약 갱신 때 횟수와 시기를 함께 바꾸기로 협의했고, 추가 1회 비용은 기존 단가인 회당 40만 원을 그대로 적용하기로 했으며, 황사 특보가 사흘 이상 이어진 주에는 업체가 먼저 일정을 제안하도록 계약서에 넣기로 했다.
115
-
116
- ## 안전 관리
117
-
118
- 옥상 출입은 시설관리팀 승인을 받은 인원만 가능하고, 출입 기록은 보안실 출입 통제 시스템에 남는다. 1년 동안 안전사고는 없었다. 외부 세척 업체 작업자도 작업 당일 현장 안전교육을 받고 추락 방지 장비를 점검받은 뒤에만 옥상에 올라갔으며, 교육 기록과 장비 점검표는 시설관리팀이 작업일마다 받아 보관했다. 다만 별관 옥상 난간 높이가 기준보다 10cm 낮아 2026년 6월에 임시 안전망을 설치했다.
119
-
120
- # 2027년 보완 계획과 예산
121
-
122
- ## 보완 과제
123
-
124
- 보완 과제는 세 가지다. 3번 인버터를 환기가 되는 위치로 옮기면서 냉각 팬을 교체하고, 세척 주기를 연 4회로 늘리며, 별관 옥상 난간을 기준 높이로 높인다. 그늘 문제는 모듈 배치를 바꿔야 해결되므로 비용 대비 효과를 따져 2028년에 다시 검토한다.
125
-
126
- 표 4. 2027년 보완 예산 요청 (예시)
127
-
128
- | 과제 | 시기 | 금액 (만 원) |
129
- | --- | --- | ---: |
130
- | 3번 인버터 이설과 환기 덕트 | 2027년 1분기 | 1,450 |
131
- | 세척 1회 추가(연 4회) | 2027년 6월 | 40 |
132
- | 별관 옥상 난간 보강 | 2027년 2분기 | 1,110 |
133
- | 합계 | | 2,600 |
134
-
135
- ## 기대 효과
136
-
137
- 인버터 이설과 세척 주기 조정으로 연간 발전량이 2~3% 늘면, 절감액은 연 80만~120만 원 정도 늘어난다. 금액만 보면 크지 않다. 그러나 같은 고장이 되풀이되면 한 번에 10일 이상 발전이 멈출 수 있고, 난간 보강은 법정 안전 기준을 맞추기 위한 공사다. 예산이 승인되면 2027년 1월에 업체를 선정하고, 공사는 발전량이 적은 2월 안에 마친다.
@@ -1,82 +0,0 @@
1
- ---
2
- title: 사내 메신저 전환 검토 보고
3
- subtitle: 현행 계약 만료에 따른 대안 비교와 2027년 1분기 전환안
4
- author: 정보전략팀
5
- organization: 예시 공사
6
- date: 2026-10-05
7
- short_title: 사내 메신저 전환 검토
8
- notice: "예시 데이터: 기관명, 인원, 금액은 모두 가정입니다. 실제 수치로 바꿔 주세요"
9
- tonality: Brief
10
- ---
11
-
12
- ::: cover variant=masthead kicker="검토 보고"
13
- :::
14
-
15
- ::: callout kind=key title="결정 요청"
16
- 현행 메신저 계약을 연장하지 않고 2027년 3월 말까지 그룹웨어 내장 메신저(안 2)로 전환하는 안, 그리고 전환 비용 3,200만 원(예시)을 2026년 4분기 정보화 예비비에서 집행하는 안의 승인을 요청한다.
17
- :::
18
-
19
- # 요약
20
-
21
- 안 2로 전환하면 3년간 1억 1,400만 원을 아낀다. 현행 메신저를 3년 더 쓰는 비용은 2억 400만 원이고, 그룹웨어 내장 메신저는 전환비를 포함해 9,000만 원이다(예시).
22
-
23
- 기능 손실은 크지 않다. 직원 1,240명의 최근 6개월 사용 기록을 보면 대화, 파일 전송, 화상 통화가 전체 사용의 96%를 차지하며, 세 기능 모두 내장 메신저에 있다.
24
-
25
- 보안 요건도 충족한다. 내장 메신저는 사내 서버에 대화를 저장하고, 2026년 8월 보안 진단에서 지적 사항 없이 통과했다.
26
-
27
- 위험은 전환 기간의 혼선이다. 대화 기록 이관과 외부 협력사 계정 재발급에 6주가 걸리므로, 2027년 1월 첫 주에 착수해야 3월 말 계약 만료 전에 끝난다.
28
-
29
- # 검토 배경
30
-
31
- - 현행 메신저 계약 만료일 2027. 3. 31., 연장 시 사용료 연 18% 인상 통보 받음
32
- - 그룹웨어는 2025년 교체 때 메신저 기능을 포함해 계약, 현재 사용하지 않는 상태
33
- - 두 메신저를 함께 쓰는 부서가 생겨 업무 요청 누락 사례가 분기마다 보고됨
34
- - 2026년 7월 경영진 회의에서 메신저 일원화 검토를 지시
35
-
36
- # 대안 비교
37
-
38
- 표 1. 대안별 3년 비용과 주요 특성 (예시)
39
-
40
- | 구분 | 안 1 현행 연장 | 안 2 그룹웨어 내장 | 안 3 신규 도입 |
41
- | --- | ---: | ---: | ---: |
42
- | 3년 사용료 (만 원) | 20,400 | 5,800 | 13,500 |
43
- | 전환비 (만 원) | 0 | 3,200 | 4,600 |
44
- | 3년 합계 (만 원) | 20,400 | 9,000 | 18,100 |
45
- | 대화 서버 위치 | 외부 | 사내 | 외부 |
46
- | 전환 기간 | 없음 | 6주 | 10주 |
47
-
48
- 자료: 업체 견적(2026. 9.), 정보전략팀 산출
49
-
50
- - 안 1은 전환 부담이 없으나 비용이 가장 크고, 인상분이 매년 반복될 가능성 있음
51
- - 안 2는 비용이 가장 적고 대화가 사내 서버에 남음. 화면 공유 중 원격 제어 기능은 없으나 사용 비중 0.4%로 원격 지원 도구로 대체 가능
52
- - 안 3은 기능이 가장 많으나 비용과 전환 기간 모두 안 2보다 불리함
53
-
54
- # 전환 일정과 위험
55
-
56
- ## 추진 일정
57
-
58
- - 2027년 1월 1주: 전환 공지, 부서별 담당자 지정
59
- - 2027년 1월 2~4주: 최근 1년 대화 기록 이관, 협력사 계정 380개 재발급
60
- - 2027년 2월: 두 메신저 병행 운영, 현행 메신저는 읽기 전용으로 전환
61
- - 2027년 3월 2주: 현행 메신저 종료, 3월 말 계약 만료
62
-
63
- ## 위험 대응
64
-
65
- - 대화 기록 이관 누락: 이관 전후 건수를 부서별로 대조하고, 원본은 계약 만료 후 1년간 보관
66
- - 협력사 계정 재발급 지연: 협력사별 담당자 목록을 12월 중 먼저 확보
67
- - 병행 기간의 요청 누락: 2월부터 업무 요청은 내장 메신저로만 받도록 부서장 회의에서 공지
68
-
69
- # 소요 예산
70
-
71
- 표 2. 전환 비용 내역 (예시)
72
-
73
- | 항목 | 금액 (만 원) |
74
- | --- | ---: |
75
- | 대화 기록 이관 용역 | 1,800 |
76
- | 협력사 계정 발급과 인증 설정 | 700 |
77
- | 사용자 교육과 안내 자료 | 400 |
78
- | 예비비 | 300 |
79
- | 합계 | 3,200 |
80
-
81
- - 집행 재원: 2026년 4분기 정보화 예비비(잔액 5,100만 원)
82
- - 2027년 이후 사용료는 그룹웨어 유지보수 계약에 포함