@geminilight/mindos 0.6.71 → 0.6.73

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 (227) hide show
  1. package/_standalone/.mindos-build-version +1 -1
  2. package/_standalone/.next/BUILD_ID +1 -1
  3. package/_standalone/.next/app-path-routes-manifest.json +27 -27
  4. package/_standalone/.next/build-manifest.json +3 -3
  5. package/_standalone/.next/cache/.previewinfo +1 -1
  6. package/_standalone/.next/cache/.rscinfo +1 -1
  7. package/_standalone/.next/cache/config.json +3 -3
  8. package/_standalone/.next/prerender-manifest.json +3 -3
  9. package/_standalone/.next/react-loadable-manifest.json +4 -4
  10. package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
  11. package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  12. package/_standalone/.next/server/app/_global-error.html +2 -2
  13. package/_standalone/.next/server/app/_global-error.rsc +1 -1
  14. package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  15. package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  16. package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  17. package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  18. package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  19. package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  20. package/_standalone/.next/server/app/_not-found/page.js +1 -1
  21. package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  22. package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  23. package/_standalone/.next/server/app/agents/[agentKey]/page.js +1 -1
  24. package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
  25. package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
  26. package/_standalone/.next/server/app/agents/page.js +1 -1
  27. package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
  28. package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  29. package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
  30. package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
  31. package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
  32. package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
  33. package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
  34. package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
  35. package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
  36. package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
  37. package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
  38. package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
  39. package/_standalone/.next/server/app/api/agents/copy-skill/route_client-reference-manifest.js +1 -1
  40. package/_standalone/.next/server/app/api/agents/custom/detect/route_client-reference-manifest.js +1 -1
  41. package/_standalone/.next/server/app/api/agents/custom/route_client-reference-manifest.js +1 -1
  42. package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
  43. package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
  44. package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
  45. package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
  46. package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
  47. package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  48. package/_standalone/.next/server/app/api/channels/verify/route_client-reference-manifest.js +1 -1
  49. package/_standalone/.next/server/app/api/connect/route_client-reference-manifest.js +1 -1
  50. package/_standalone/.next/server/app/api/embedding/route_client-reference-manifest.js +1 -1
  51. package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
  52. package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
  53. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  54. package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -1
  55. package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
  56. package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  57. package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  58. package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
  59. package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  60. package/_standalone/.next/server/app/api/im/activity/route_client-reference-manifest.js +1 -1
  61. package/_standalone/.next/server/app/api/im/config/route_client-reference-manifest.js +1 -1
  62. package/_standalone/.next/server/app/api/im/status/route_client-reference-manifest.js +1 -1
  63. package/_standalone/.next/server/app/api/im/test/route_client-reference-manifest.js +1 -1
  64. package/_standalone/.next/server/app/api/im/webhook/feishu/route_client-reference-manifest.js +1 -1
  65. package/_standalone/.next/server/app/api/im/webhook-status/route_client-reference-manifest.js +1 -1
  66. package/_standalone/.next/server/app/api/inbox/clip/route_client-reference-manifest.js +1 -1
  67. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
  68. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  69. package/_standalone/.next/server/app/api/lint/route_client-reference-manifest.js +1 -1
  70. package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
  71. package/_standalone/.next/server/app/api/mcp/direct-tools/route_client-reference-manifest.js +1 -1
  72. package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
  73. package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
  74. package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
  75. package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  76. package/_standalone/.next/server/app/api/mcp/tools/route_client-reference-manifest.js +1 -1
  77. package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
  78. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  79. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  80. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  81. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  82. package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
  83. package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
  84. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  85. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  86. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  87. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  88. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  89. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  90. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  91. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  92. package/_standalone/.next/server/app/api/space-overview/route_client-reference-manifest.js +1 -1
  93. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  94. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  95. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  96. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  97. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  98. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  99. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  100. package/_standalone/.next/server/app/changelog/page.js +1 -1
  101. package/_standalone/.next/server/app/changelog/page.js.nft.json +1 -1
  102. package/_standalone/.next/server/app/changelog/page_client-reference-manifest.js +1 -1
  103. package/_standalone/.next/server/app/changes/page.js +1 -1
  104. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  105. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  106. package/_standalone/.next/server/app/echo/[segment]/page.js +1 -1
  107. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  108. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  109. package/_standalone/.next/server/app/echo/page.js +1 -1
  110. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  111. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  112. package/_standalone/.next/server/app/explore/page.js +1 -1
  113. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  114. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  115. package/_standalone/.next/server/app/help/page.js +1 -1
  116. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  117. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  118. package/_standalone/.next/server/app/inbox/history/page.js +1 -1
  119. package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -1
  120. package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -1
  121. package/_standalone/.next/server/app/login/page.js +1 -1
  122. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  123. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  124. package/_standalone/.next/server/app/page.js +1 -1
  125. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  126. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  127. package/_standalone/.next/server/app/setup/page.js +1 -1
  128. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  129. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  130. package/_standalone/.next/server/app/trash/page.js +2 -2
  131. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  132. package/_standalone/.next/server/app/view/[...path]/page.js +2 -2
  133. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  134. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  135. package/_standalone/.next/server/app-paths-manifest.json +27 -27
  136. package/_standalone/.next/server/chunks/{3311.js → 2449.js} +2 -2
  137. package/_standalone/.next/server/chunks/5299.js +1 -1
  138. package/_standalone/.next/server/chunks/6022.js +34 -34
  139. package/_standalone/.next/server/middleware-build-manifest.js +1 -1
  140. package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  141. package/_standalone/.next/server/pages/500.html +2 -2
  142. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  143. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  144. package/_standalone/.next/static/chunks/{7143.879daa87569c5b02.js → 4094.09364c01df411380.js} +1 -1
  145. package/_standalone/.next/static/chunks/{5795.d9099a1afecd6047.js → 5331.c89084fd7f67887d.js} +2 -2
  146. package/_standalone/.next/static/chunks/app/{layout-a344709b8447be75.js → layout-fcbde5bee626d21a.js} +63 -63
  147. package/_standalone/.next/static/chunks/app/trash/page-e623ff0ab35de002.js +1 -0
  148. package/_standalone/.next/static/chunks/app/view/[...path]/page-49c4eff6ffdb5168.js +12 -0
  149. package/_standalone/.next/static/chunks/{webpack-2f2787d3469d3df1.js → webpack-dc486b68118d1328.js} +1 -1
  150. package/_standalone/.next/trace +72 -72
  151. package/_standalone/package-lock.json +2 -2
  152. package/_standalone/package.json +1 -1
  153. package/app/package.json +1 -1
  154. package/package.json +1 -1
  155. package/_standalone/.next/static/chunks/app/trash/page-0907fdd06a4467de.js +0 -1
  156. package/_standalone/.next/static/chunks/app/view/[...path]/page-f53ce199b4a4bbb5.js +0 -12
  157. package/browser-extension/README.md +0 -160
  158. package/browser-extension/build.mjs +0 -63
  159. package/browser-extension/extension/background/service-worker.js +0 -1
  160. package/browser-extension/extension/content/extractor.js +0 -2
  161. package/browser-extension/extension/icons/icon-128.png +0 -0
  162. package/browser-extension/extension/icons/icon-128.svg +0 -4
  163. package/browser-extension/extension/icons/icon-16.png +0 -0
  164. package/browser-extension/extension/icons/icon-16.svg +0 -4
  165. package/browser-extension/extension/icons/icon-32.png +0 -0
  166. package/browser-extension/extension/icons/icon-32.svg +0 -4
  167. package/browser-extension/extension/icons/icon-48.png +0 -0
  168. package/browser-extension/extension/icons/icon-48.svg +0 -4
  169. package/browser-extension/extension/manifest.json +0 -47
  170. package/browser-extension/extension/popup/popup.css +0 -510
  171. package/browser-extension/extension/popup/popup.html +0 -128
  172. package/browser-extension/extension/popup/popup.js +0 -73
  173. package/browser-extension/package-lock.json +0 -617
  174. package/browser-extension/package.json +0 -21
  175. package/browser-extension/scripts/gen-icons.sh +0 -38
  176. package/browser-extension/src/background/service-worker.ts +0 -27
  177. package/browser-extension/src/content/extractor.ts +0 -44
  178. package/browser-extension/src/icons/icon-128.png +0 -0
  179. package/browser-extension/src/icons/icon-128.svg +0 -4
  180. package/browser-extension/src/icons/icon-16.png +0 -0
  181. package/browser-extension/src/icons/icon-16.svg +0 -4
  182. package/browser-extension/src/icons/icon-32.png +0 -0
  183. package/browser-extension/src/icons/icon-32.svg +0 -4
  184. package/browser-extension/src/icons/icon-48.png +0 -0
  185. package/browser-extension/src/icons/icon-48.svg +0 -4
  186. package/browser-extension/src/lib/api.ts +0 -146
  187. package/browser-extension/src/lib/markdown.ts +0 -68
  188. package/browser-extension/src/lib/storage.ts +0 -37
  189. package/browser-extension/src/lib/types.ts +0 -42
  190. package/browser-extension/src/manifest.json +0 -47
  191. package/browser-extension/src/popup/popup.css +0 -510
  192. package/browser-extension/src/popup/popup.html +0 -128
  193. package/browser-extension/src/popup/popup.ts +0 -416
  194. package/browser-extension/tsconfig.json +0 -16
  195. package/tests/e2e/README.md +0 -25
  196. package/tests/e2e/navigation.spec.ts +0 -14
  197. package/tests/e2e/playwright.config.ts +0 -14
  198. package/tests/integration/README.md +0 -25
  199. package/tests/integration/mcp-contract.test.ts +0 -57
  200. package/tests/integration/mcp-transport.test.ts +0 -361
  201. package/tests/integration/package-lock.json +0 -1463
  202. package/tests/integration/package.json +0 -8
  203. package/tests/integration/vitest.config.ts +0 -11
  204. package/tests/security-hardening.test.ts +0 -456
  205. package/tests/unit/build-integrity.test.ts +0 -137
  206. package/tests/unit/cli-build.test.ts +0 -180
  207. package/tests/unit/cli-config.test.ts +0 -257
  208. package/tests/unit/cli-mcp-install-toml.test.ts +0 -586
  209. package/tests/unit/cli-mcp-install.test.ts +0 -123
  210. package/tests/unit/cli-mcp-stdio-default.test.ts +0 -180
  211. package/tests/unit/cli-modules-load.test.ts +0 -64
  212. package/tests/unit/cli-port.test.ts +0 -87
  213. package/tests/unit/cli-skill-auto-copy.test.ts +0 -260
  214. package/tests/unit/cli-smoke.test.ts +0 -88
  215. package/tests/unit/cli-uninstall.test.ts +0 -218
  216. package/tests/unit/cli-update-root.test.ts +0 -89
  217. package/tests/unit/cli-user-flow-sim.test.ts +0 -506
  218. package/tests/unit/cli-wait-hint.test.ts +0 -86
  219. package/tests/unit/custom-agents.test.ts +0 -478
  220. package/tests/unit/dep-safety.test.ts +0 -126
  221. package/tests/unit/detect-system-lang.test.ts +0 -122
  222. package/tests/unit/mcp-build.test.ts +0 -162
  223. package/tests/unit/setup-needs-restart.test.ts +0 -139
  224. package/tests/unit/stop-restart.test.ts +0 -393
  225. package/tests/unit/vitest.config.ts +0 -8
  226. /package/_standalone/.next/static/{w5bqzZbd2_vdoPRB0JQ_I → Dn8EHqUedSzanCfrM8WWS}/_buildManifest.js +0 -0
  227. /package/_standalone/.next/static/{w5bqzZbd2_vdoPRB0JQ_I → Dn8EHqUedSzanCfrM8WWS}/_ssgManifest.js +0 -0
@@ -1,2 +0,0 @@
1
- "use strict";(()=>{var ue=Object.create;var ee=Object.defineProperty;var ge=Object.getOwnPropertyDescriptor;var fe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,me=Object.prototype.hasOwnProperty;var V=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Ne=(e,t,i,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let l of fe(t))!me.call(e,l)&&l!==i&&ee(e,l,{get:()=>t[l],enumerable:!(r=ge(t,l))||r.enumerable});return e};var ve=(e,t,i)=>(i=e!=null?ue(_e(e)):{},Ne(t||!e||!e.__esModule?ee(i,"default",{value:e,enumerable:!0}):i,e));var ie=V((pe,j)=>{function te(e,t){if(t&&t.documentElement)e=t,t=arguments[2];else if(!e||!e.documentElement)throw new Error("First argument to Readability constructor should be a document object.");if(t=t||{},this._doc=e,this._docJSDOMParser=this._doc.firstChild.__JSDOMParser__,this._articleTitle=null,this._articleByline=null,this._articleDir=null,this._articleSiteName=null,this._attempts=[],this._debug=!!t.debug,this._maxElemsToParse=t.maxElemsToParse||this.DEFAULT_MAX_ELEMS_TO_PARSE,this._nbTopCandidates=t.nbTopCandidates||this.DEFAULT_N_TOP_CANDIDATES,this._charThreshold=t.charThreshold||this.DEFAULT_CHAR_THRESHOLD,this._classesToPreserve=this.CLASSES_TO_PRESERVE.concat(t.classesToPreserve||[]),this._keepClasses=!!t.keepClasses,this._serializer=t.serializer||function(i){return i.innerHTML},this._disableJSONLD=!!t.disableJSONLD,this._allowedVideoRegex=t.allowedVideoRegex||this.REGEXPS.videos,this._flags=this.FLAG_STRIP_UNLIKELYS|this.FLAG_WEIGHT_CLASSES|this.FLAG_CLEAN_CONDITIONALLY,this._debug){let i=function(r){if(r.nodeType==r.TEXT_NODE)return`${r.nodeName} ("${r.textContent}")`;let l=Array.from(r.attributes||[],function(a){return`${a.name}="${a.value}"`}).join(" ");return`<${r.localName} ${l}>`};this.log=function(){if(typeof console<"u"){let l=Array.from(arguments,a=>a&&a.nodeType==this.ELEMENT_NODE?i(a):a);l.unshift("Reader: (Readability)"),console.log.apply(console,l)}else if(typeof dump<"u"){var r=Array.prototype.map.call(arguments,function(l){return l&&l.nodeName?i(l):l}).join(" ");dump("Reader: (Readability) "+r+`
2
- `)}}}else this.log=function(){}}te.prototype={FLAG_STRIP_UNLIKELYS:1,FLAG_WEIGHT_CLASSES:2,FLAG_CLEAN_CONDITIONALLY:4,ELEMENT_NODE:1,TEXT_NODE:3,DEFAULT_MAX_ELEMS_TO_PARSE:0,DEFAULT_N_TOP_CANDIDATES:5,DEFAULT_TAGS_TO_SCORE:"section,h2,h3,h4,h5,h6,p,td,pre".toUpperCase().split(","),DEFAULT_CHAR_THRESHOLD:500,REGEXPS:{unlikelyCandidates:/-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|footer|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i,okMaybeItsACandidate:/and|article|body|column|content|main|shadow/i,positive:/article|body|content|entry|hentry|h-entry|main|page|pagination|post|text|blog|story/i,negative:/-ad-|hidden|^hid$| hid$| hid |^hid |banner|combx|comment|com-|contact|foot|footer|footnote|gdpr|masthead|media|meta|outbrain|promo|related|scroll|share|shoutbox|sidebar|skyscraper|sponsor|shopping|tags|tool|widget/i,extraneous:/print|archive|comment|discuss|e[\-]?mail|share|reply|all|login|sign|single|utility/i,byline:/byline|author|dateline|writtenby|p-author/i,replaceFonts:/<(\/?)font[^>]*>/gi,normalize:/\s{2,}/g,videos:/\/\/(www\.)?((dailymotion|youtube|youtube-nocookie|player\.vimeo|v\.qq)\.com|(archive|upload\.wikimedia)\.org|player\.twitch\.tv)/i,shareElements:/(\b|_)(share|sharedaddy)(\b|_)/i,nextLink:/(next|weiter|continue|>([^\|]|$)|»([^\|]|$))/i,prevLink:/(prev|earl|old|new|<|«)/i,tokenize:/\W+/g,whitespace:/^\s*$/,hasContent:/\S$/,hashUrl:/^#.+/,srcsetUrl:/(\S+)(\s+[\d.]+[xw])?(\s*(?:,|$))/g,b64DataUrl:/^data:\s*([^\s;,]+)\s*;\s*base64\s*,/i,commas:/\u002C|\u060C|\uFE50|\uFE10|\uFE11|\u2E41|\u2E34|\u2E32|\uFF0C/g,jsonLdArticleTypes:/^Article|AdvertiserContentArticle|NewsArticle|AnalysisNewsArticle|AskPublicNewsArticle|BackgroundNewsArticle|OpinionNewsArticle|ReportageNewsArticle|ReviewNewsArticle|Report|SatiricalArticle|ScholarlyArticle|MedicalScholarlyArticle|SocialMediaPosting|BlogPosting|LiveBlogPosting|DiscussionForumPosting|TechArticle|APIReference$/},UNLIKELY_ROLES:["menu","menubar","complementary","navigation","alert","alertdialog","dialog"],DIV_TO_P_ELEMS:new Set(["BLOCKQUOTE","DL","DIV","IMG","OL","P","PRE","TABLE","UL"]),ALTER_TO_DIV_EXCEPTIONS:["DIV","ARTICLE","SECTION","P"],PRESENTATIONAL_ATTRIBUTES:["align","background","bgcolor","border","cellpadding","cellspacing","frame","hspace","rules","style","valign","vspace"],DEPRECATED_SIZE_ATTRIBUTE_ELEMS:["TABLE","TH","TD","HR","PRE"],PHRASING_ELEMS:["ABBR","AUDIO","B","BDO","BR","BUTTON","CITE","CODE","DATA","DATALIST","DFN","EM","EMBED","I","IMG","INPUT","KBD","LABEL","MARK","MATH","METER","NOSCRIPT","OBJECT","OUTPUT","PROGRESS","Q","RUBY","SAMP","SCRIPT","SELECT","SMALL","SPAN","STRONG","SUB","SUP","TEXTAREA","TIME","VAR","WBR"],CLASSES_TO_PRESERVE:["page"],HTML_ESCAPE_MAP:{lt:"<",gt:">",amp:"&",quot:'"',apos:"'"},_postProcessContent:function(e){this._fixRelativeUris(e),this._simplifyNestedElements(e),this._keepClasses||this._cleanClasses(e)},_removeNodes:function(e,t){if(this._docJSDOMParser&&e._isLiveNodeList)throw new Error("Do not pass live node lists to _removeNodes");for(var i=e.length-1;i>=0;i--){var r=e[i],l=r.parentNode;l&&(!t||t.call(this,r,i,e))&&l.removeChild(r)}},_replaceNodeTags:function(e,t){if(this._docJSDOMParser&&e._isLiveNodeList)throw new Error("Do not pass live node lists to _replaceNodeTags");for(let i of e)this._setNodeTag(i,t)},_forEachNode:function(e,t){Array.prototype.forEach.call(e,t,this)},_findNode:function(e,t){return Array.prototype.find.call(e,t,this)},_someNode:function(e,t){return Array.prototype.some.call(e,t,this)},_everyNode:function(e,t){return Array.prototype.every.call(e,t,this)},_concatNodeLists:function(){var e=Array.prototype.slice,t=e.call(arguments),i=t.map(function(r){return e.call(r)});return Array.prototype.concat.apply([],i)},_getAllNodesWithTag:function(e,t){return e.querySelectorAll?e.querySelectorAll(t.join(",")):[].concat.apply([],t.map(function(i){var r=e.getElementsByTagName(i);return Array.isArray(r)?r:Array.from(r)}))},_cleanClasses:function(e){var t=this._classesToPreserve,i=(e.getAttribute("class")||"").split(/\s+/).filter(function(r){return t.indexOf(r)!=-1}).join(" ");for(i?e.setAttribute("class",i):e.removeAttribute("class"),e=e.firstElementChild;e;e=e.nextElementSibling)this._cleanClasses(e)},_fixRelativeUris:function(e){var t=this._doc.baseURI,i=this._doc.documentURI;function r(s){if(t==i&&s.charAt(0)=="#")return s;try{return new URL(s,t).href}catch{}return s}var l=this._getAllNodesWithTag(e,["a"]);this._forEachNode(l,function(s){var h=s.getAttribute("href");if(h)if(h.indexOf("javascript:")===0)if(s.childNodes.length===1&&s.childNodes[0].nodeType===this.TEXT_NODE){var o=this._doc.createTextNode(s.textContent);s.parentNode.replaceChild(o,s)}else{for(var n=this._doc.createElement("span");s.firstChild;)n.appendChild(s.firstChild);s.parentNode.replaceChild(n,s)}else s.setAttribute("href",r(h))});var a=this._getAllNodesWithTag(e,["img","picture","figure","video","audio","source"]);this._forEachNode(a,function(s){var h=s.getAttribute("src"),o=s.getAttribute("poster"),n=s.getAttribute("srcset");if(h&&s.setAttribute("src",r(h)),o&&s.setAttribute("poster",r(o)),n){var u=n.replace(this.REGEXPS.srcsetUrl,function(m,y,N,E){return r(y)+(N||"")+E});s.setAttribute("srcset",u)}})},_simplifyNestedElements:function(e){for(var t=e;t;){if(t.parentNode&&["DIV","SECTION"].includes(t.tagName)&&!(t.id&&t.id.startsWith("readability"))){if(this._isElementWithoutContent(t)){t=this._removeAndGetNext(t);continue}else if(this._hasSingleTagInsideElement(t,"DIV")||this._hasSingleTagInsideElement(t,"SECTION")){for(var i=t.children[0],r=0;r<t.attributes.length;r++)i.setAttribute(t.attributes[r].name,t.attributes[r].value);t.parentNode.replaceChild(i,t),t=i;continue}}t=this._getNextNode(t)}},_getArticleTitle:function(){var e=this._doc,t="",i="";try{t=i=e.title.trim(),typeof t!="string"&&(t=i=this._getInnerText(e.getElementsByTagName("title")[0]))}catch{}var r=!1;function l(u){return u.split(/\s+/).length}if(/ [\|\-\\\/>»] /.test(t))r=/ [\\\/>»] /.test(t),t=i.replace(/(.*)[\|\-\\\/>»] .*/gi,"$1"),l(t)<3&&(t=i.replace(/[^\|\-\\\/>»]*[\|\-\\\/>»](.*)/gi,"$1"));else if(t.indexOf(": ")!==-1){var a=this._concatNodeLists(e.getElementsByTagName("h1"),e.getElementsByTagName("h2")),s=t.trim(),h=this._someNode(a,function(u){return u.textContent.trim()===s});h||(t=i.substring(i.lastIndexOf(":")+1),l(t)<3?t=i.substring(i.indexOf(":")+1):l(i.substr(0,i.indexOf(":")))>5&&(t=i))}else if(t.length>150||t.length<15){var o=e.getElementsByTagName("h1");o.length===1&&(t=this._getInnerText(o[0]))}t=t.trim().replace(this.REGEXPS.normalize," ");var n=l(t);return n<=4&&(!r||n!=l(i.replace(/[\|\-\\\/>»]+/g,""))-1)&&(t=i),t},_prepDocument:function(){var e=this._doc;this._removeNodes(this._getAllNodesWithTag(e,["style"])),e.body&&this._replaceBrs(e.body),this._replaceNodeTags(this._getAllNodesWithTag(e,["font"]),"SPAN")},_nextNode:function(e){for(var t=e;t&&t.nodeType!=this.ELEMENT_NODE&&this.REGEXPS.whitespace.test(t.textContent);)t=t.nextSibling;return t},_replaceBrs:function(e){this._forEachNode(this._getAllNodesWithTag(e,["br"]),function(t){for(var i=t.nextSibling,r=!1;(i=this._nextNode(i))&&i.tagName=="BR";){r=!0;var l=i.nextSibling;i.parentNode.removeChild(i),i=l}if(r){var a=this._doc.createElement("p");for(t.parentNode.replaceChild(a,t),i=a.nextSibling;i;){if(i.tagName=="BR"){var s=this._nextNode(i.nextSibling);if(s&&s.tagName=="BR")break}if(!this._isPhrasingContent(i))break;var h=i.nextSibling;a.appendChild(i),i=h}for(;a.lastChild&&this._isWhitespace(a.lastChild);)a.removeChild(a.lastChild);a.parentNode.tagName==="P"&&this._setNodeTag(a.parentNode,"DIV")}})},_setNodeTag:function(e,t){if(this.log("_setNodeTag",e,t),this._docJSDOMParser)return e.localName=t.toLowerCase(),e.tagName=t.toUpperCase(),e;for(var i=e.ownerDocument.createElement(t);e.firstChild;)i.appendChild(e.firstChild);e.parentNode.replaceChild(i,e),e.readability&&(i.readability=e.readability);for(var r=0;r<e.attributes.length;r++)try{i.setAttribute(e.attributes[r].name,e.attributes[r].value)}catch{}return i},_prepArticle:function(e){this._cleanStyles(e),this._markDataTables(e),this._fixLazyImages(e),this._cleanConditionally(e,"form"),this._cleanConditionally(e,"fieldset"),this._clean(e,"object"),this._clean(e,"embed"),this._clean(e,"footer"),this._clean(e,"link"),this._clean(e,"aside");var t=this.DEFAULT_CHAR_THRESHOLD;this._forEachNode(e.children,function(i){this._cleanMatchedNodes(i,function(r,l){return this.REGEXPS.shareElements.test(l)&&r.textContent.length<t})}),this._clean(e,"iframe"),this._clean(e,"input"),this._clean(e,"textarea"),this._clean(e,"select"),this._clean(e,"button"),this._cleanHeaders(e),this._cleanConditionally(e,"table"),this._cleanConditionally(e,"ul"),this._cleanConditionally(e,"div"),this._replaceNodeTags(this._getAllNodesWithTag(e,["h1"]),"h2"),this._removeNodes(this._getAllNodesWithTag(e,["p"]),function(i){var r=i.getElementsByTagName("img").length,l=i.getElementsByTagName("embed").length,a=i.getElementsByTagName("object").length,s=i.getElementsByTagName("iframe").length,h=r+l+a+s;return h===0&&!this._getInnerText(i,!1)}),this._forEachNode(this._getAllNodesWithTag(e,["br"]),function(i){var r=this._nextNode(i.nextSibling);r&&r.tagName=="P"&&i.parentNode.removeChild(i)}),this._forEachNode(this._getAllNodesWithTag(e,["table"]),function(i){var r=this._hasSingleTagInsideElement(i,"TBODY")?i.firstElementChild:i;if(this._hasSingleTagInsideElement(r,"TR")){var l=r.firstElementChild;if(this._hasSingleTagInsideElement(l,"TD")){var a=l.firstElementChild;a=this._setNodeTag(a,this._everyNode(a.childNodes,this._isPhrasingContent)?"P":"DIV"),i.parentNode.replaceChild(a,i)}}})},_initializeNode:function(e){switch(e.readability={contentScore:0},e.tagName){case"DIV":e.readability.contentScore+=5;break;case"PRE":case"TD":case"BLOCKQUOTE":e.readability.contentScore+=3;break;case"ADDRESS":case"OL":case"UL":case"DL":case"DD":case"DT":case"LI":case"FORM":e.readability.contentScore-=3;break;case"H1":case"H2":case"H3":case"H4":case"H5":case"H6":case"TH":e.readability.contentScore-=5;break}e.readability.contentScore+=this._getClassWeight(e)},_removeAndGetNext:function(e){var t=this._getNextNode(e,!0);return e.parentNode.removeChild(e),t},_getNextNode:function(e,t){if(!t&&e.firstElementChild)return e.firstElementChild;if(e.nextElementSibling)return e.nextElementSibling;do e=e.parentNode;while(e&&!e.nextElementSibling);return e&&e.nextElementSibling},_textSimilarity:function(e,t){var i=e.toLowerCase().split(this.REGEXPS.tokenize).filter(Boolean),r=t.toLowerCase().split(this.REGEXPS.tokenize).filter(Boolean);if(!i.length||!r.length)return 0;var l=r.filter(s=>!i.includes(s)),a=l.join(" ").length/r.join(" ").length;return 1-a},_checkByline:function(e,t){if(this._articleByline)return!1;if(e.getAttribute!==void 0)var i=e.getAttribute("rel"),r=e.getAttribute("itemprop");return(i==="author"||r&&r.indexOf("author")!==-1||this.REGEXPS.byline.test(t))&&this._isValidByline(e.textContent)?(this._articleByline=e.textContent.trim(),!0):!1},_getNodeAncestors:function(e,t){t=t||0;for(var i=0,r=[];e.parentNode&&(r.push(e.parentNode),!(t&&++i===t));)e=e.parentNode;return r},_grabArticle:function(e){this.log("**** grabArticle ****");var t=this._doc,i=e!==null;if(e=e||this._doc.body,!e)return this.log("No body found in document. Abort."),null;for(var r=e.innerHTML;;){this.log("Starting grabArticle loop");var l=this._flagIsActive(this.FLAG_STRIP_UNLIKELYS),a=[],s=this._doc.documentElement;let Q=!0;for(;s;){s.tagName==="HTML"&&(this._articleLang=s.getAttribute("lang"));var h=s.className+" "+s.id;if(!this._isProbablyVisible(s)){this.log("Removing hidden node - "+h),s=this._removeAndGetNext(s);continue}if(s.getAttribute("aria-modal")=="true"&&s.getAttribute("role")=="dialog"){s=this._removeAndGetNext(s);continue}if(this._checkByline(s,h)){s=this._removeAndGetNext(s);continue}if(Q&&this._headerDuplicatesTitle(s)){this.log("Removing header: ",s.textContent.trim(),this._articleTitle.trim()),Q=!1,s=this._removeAndGetNext(s);continue}if(l){if(this.REGEXPS.unlikelyCandidates.test(h)&&!this.REGEXPS.okMaybeItsACandidate.test(h)&&!this._hasAncestorTag(s,"table")&&!this._hasAncestorTag(s,"code")&&s.tagName!=="BODY"&&s.tagName!=="A"){this.log("Removing unlikely candidate - "+h),s=this._removeAndGetNext(s);continue}if(this.UNLIKELY_ROLES.includes(s.getAttribute("role"))){this.log("Removing content with role "+s.getAttribute("role")+" - "+h),s=this._removeAndGetNext(s);continue}}if((s.tagName==="DIV"||s.tagName==="SECTION"||s.tagName==="HEADER"||s.tagName==="H1"||s.tagName==="H2"||s.tagName==="H3"||s.tagName==="H4"||s.tagName==="H5"||s.tagName==="H6")&&this._isElementWithoutContent(s)){s=this._removeAndGetNext(s);continue}if(this.DEFAULT_TAGS_TO_SCORE.indexOf(s.tagName)!==-1&&a.push(s),s.tagName==="DIV"){for(var o=null,n=s.firstChild;n;){var u=n.nextSibling;if(this._isPhrasingContent(n))o!==null?o.appendChild(n):this._isWhitespace(n)||(o=t.createElement("p"),s.replaceChild(o,n),o.appendChild(n));else if(o!==null){for(;o.lastChild&&this._isWhitespace(o.lastChild);)o.removeChild(o.lastChild);o=null}n=u}if(this._hasSingleTagInsideElement(s,"P")&&this._getLinkDensity(s)<.25){var m=s.children[0];s.parentNode.replaceChild(m,s),s=m,a.push(s)}else this._hasChildBlockElement(s)||(s=this._setNodeTag(s,"P"),a.push(s))}s=this._getNextNode(s)}var y=[];this._forEachNode(a,function(d){if(!(!d.parentNode||typeof d.parentNode.tagName>"u")){var b=this._getInnerText(d);if(!(b.length<25)){var Z=this._getNodeAncestors(d,5);if(Z.length!==0){var B=0;B+=1,B+=b.split(this.REGEXPS.commas).length,B+=Math.min(Math.floor(b.length/100),3),this._forEachNode(Z,function(S,F){if(!(!S.tagName||!S.parentNode||typeof S.parentNode.tagName>"u")){if(typeof S.readability>"u"&&(this._initializeNode(S),y.push(S)),F===0)var X=1;else F===1?X=2:X=F*3;S.readability.contentScore+=B/X}})}}}});for(var N=[],E=0,A=y.length;E<A;E+=1){var v=y[E],T=v.readability.contentScore*(1-this._getLinkDensity(v));v.readability.contentScore=T,this.log("Candidate:",v,"with score "+T);for(var p=0;p<this._nbTopCandidates;p++){var x=N[p];if(!x||T>x.readability.contentScore){N.splice(p,0,v),N.length>this._nbTopCandidates&&N.pop();break}}}var c=N[0]||null,L=!1,g;if(c===null||c.tagName==="BODY"){for(c=t.createElement("DIV"),L=!0;e.firstChild;)this.log("Moving child out:",e.firstChild),c.appendChild(e.firstChild);e.appendChild(c),this._initializeNode(c)}else if(c){for(var R=[],P=1;P<N.length;P++)N[P].readability.contentScore/c.readability.contentScore>=.75&&R.push(this._getNodeAncestors(N[P]));var O=3;if(R.length>=O)for(g=c.parentNode;g.tagName!=="BODY";){for(var G=0,M=0;M<R.length&&G<O;M++)G+=Number(R[M].includes(g));if(G>=O){c=g;break}g=g.parentNode}c.readability||this._initializeNode(c),g=c.parentNode;for(var H=c.readability.contentScore,he=H/3;g.tagName!=="BODY";){if(!g.readability){g=g.parentNode;continue}var Y=g.readability.contentScore;if(Y<he)break;if(Y>H){c=g;break}H=g.readability.contentScore,g=g.parentNode}for(g=c.parentNode;g.tagName!="BODY"&&g.children.length==1;)c=g,g=c.parentNode;c.readability||this._initializeNode(c)}var _=t.createElement("DIV");i&&(_.id="readability-content");var oe=Math.max(10,c.readability.contentScore*.2);g=c.parentNode;for(var k=g.children,w=0,q=k.length;w<q;w++){var f=k[w],I=!1;if(this.log("Looking at sibling node:",f,f.readability?"with score "+f.readability.contentScore:""),this.log("Sibling has score",f.readability?f.readability.contentScore:"Unknown"),f===c)I=!0;else{var z=0;if(f.className===c.className&&c.className!==""&&(z+=c.readability.contentScore*.2),f.readability&&f.readability.contentScore+z>=oe)I=!0;else if(f.nodeName==="P"){var J=this._getLinkDensity(f),K=this._getInnerText(f),U=K.length;(U>80&&J<.25||U<80&&U>0&&J===0&&K.search(/\.( |$)/)!==-1)&&(I=!0)}}I&&(this.log("Appending node:",f),this.ALTER_TO_DIV_EXCEPTIONS.indexOf(f.nodeName)===-1&&(this.log("Altering sibling:",f,"to div."),f=this._setNodeTag(f,"DIV")),_.appendChild(f),k=g.children,w-=1,q-=1)}if(this._debug&&this.log("Article content pre-prep: "+_.innerHTML),this._prepArticle(_),this._debug&&this.log("Article content post-prep: "+_.innerHTML),L)c.id="readability-page-1",c.className="page";else{var C=t.createElement("DIV");for(C.id="readability-page-1",C.className="page";_.firstChild;)C.appendChild(_.firstChild);_.appendChild(C)}this._debug&&this.log("Article content after paging: "+_.innerHTML);var W=!0,D=this._getInnerText(_,!0).length;if(D<this._charThreshold)if(W=!1,e.innerHTML=r,this._flagIsActive(this.FLAG_STRIP_UNLIKELYS))this._removeFlag(this.FLAG_STRIP_UNLIKELYS),this._attempts.push({articleContent:_,textLength:D});else if(this._flagIsActive(this.FLAG_WEIGHT_CLASSES))this._removeFlag(this.FLAG_WEIGHT_CLASSES),this._attempts.push({articleContent:_,textLength:D});else if(this._flagIsActive(this.FLAG_CLEAN_CONDITIONALLY))this._removeFlag(this.FLAG_CLEAN_CONDITIONALLY),this._attempts.push({articleContent:_,textLength:D});else{if(this._attempts.push({articleContent:_,textLength:D}),this._attempts.sort(function(d,b){return b.textLength-d.textLength}),!this._attempts[0].textLength)return null;_=this._attempts[0].articleContent,W=!0}if(W){var ce=[g,c].concat(this._getNodeAncestors(g));return this._someNode(ce,function(d){if(!d.tagName)return!1;var b=d.getAttribute("dir");return b?(this._articleDir=b,!0):!1}),_}}},_isValidByline:function(e){return typeof e=="string"||e instanceof String?(e=e.trim(),e.length>0&&e.length<100):!1},_unescapeHtmlEntities:function(e){if(!e)return e;var t=this.HTML_ESCAPE_MAP;return e.replace(/&(quot|amp|apos|lt|gt);/g,function(i,r){return t[r]}).replace(/&#(?:x([0-9a-z]{1,4})|([0-9]{1,4}));/gi,function(i,r,l){var a=parseInt(r||l,r?16:10);return String.fromCharCode(a)})},_getJSONLD:function(e){var t=this._getAllNodesWithTag(e,["script"]),i;return this._forEachNode(t,function(r){if(!i&&r.getAttribute("type")==="application/ld+json")try{var l=r.textContent.replace(/^\s*<!\[CDATA\[|\]\]>\s*$/g,""),a=JSON.parse(l);if(!a["@context"]||!a["@context"].match(/^https?\:\/\/schema\.org$/)||(!a["@type"]&&Array.isArray(a["@graph"])&&(a=a["@graph"].find(function(n){return(n["@type"]||"").match(this.REGEXPS.jsonLdArticleTypes)})),!a||!a["@type"]||!a["@type"].match(this.REGEXPS.jsonLdArticleTypes)))return;if(i={},typeof a.name=="string"&&typeof a.headline=="string"&&a.name!==a.headline){var s=this._getArticleTitle(),h=this._textSimilarity(a.name,s)>.75,o=this._textSimilarity(a.headline,s)>.75;o&&!h?i.title=a.headline:i.title=a.name}else typeof a.name=="string"?i.title=a.name.trim():typeof a.headline=="string"&&(i.title=a.headline.trim());a.author&&(typeof a.author.name=="string"?i.byline=a.author.name.trim():Array.isArray(a.author)&&a.author[0]&&typeof a.author[0].name=="string"&&(i.byline=a.author.filter(function(n){return n&&typeof n.name=="string"}).map(function(n){return n.name.trim()}).join(", "))),typeof a.description=="string"&&(i.excerpt=a.description.trim()),a.publisher&&typeof a.publisher.name=="string"&&(i.siteName=a.publisher.name.trim()),typeof a.datePublished=="string"&&(i.datePublished=a.datePublished.trim());return}catch(n){this.log(n.message)}}),i||{}},_getArticleMetadata:function(e){var t={},i={},r=this._doc.getElementsByTagName("meta"),l=/\s*(article|dc|dcterm|og|twitter)\s*:\s*(author|creator|description|published_time|title|site_name)\s*/gi,a=/^\s*(?:(dc|dcterm|og|twitter|weibo:(article|webpage))\s*[\.:]\s*)?(author|creator|description|title|site_name)\s*$/i;return this._forEachNode(r,function(s){var h=s.getAttribute("name"),o=s.getAttribute("property"),n=s.getAttribute("content");if(n){var u=null,m=null;o&&(u=o.match(l),u&&(m=u[0].toLowerCase().replace(/\s/g,""),i[m]=n.trim())),!u&&h&&a.test(h)&&(m=h,n&&(m=m.toLowerCase().replace(/\s/g,"").replace(/\./g,":"),i[m]=n.trim()))}}),t.title=e.title||i["dc:title"]||i["dcterm:title"]||i["og:title"]||i["weibo:article:title"]||i["weibo:webpage:title"]||i.title||i["twitter:title"],t.title||(t.title=this._getArticleTitle()),t.byline=e.byline||i["dc:creator"]||i["dcterm:creator"]||i.author,t.excerpt=e.excerpt||i["dc:description"]||i["dcterm:description"]||i["og:description"]||i["weibo:article:description"]||i["weibo:webpage:description"]||i.description||i["twitter:description"],t.siteName=e.siteName||i["og:site_name"],t.publishedTime=e.datePublished||i["article:published_time"]||null,t.title=this._unescapeHtmlEntities(t.title),t.byline=this._unescapeHtmlEntities(t.byline),t.excerpt=this._unescapeHtmlEntities(t.excerpt),t.siteName=this._unescapeHtmlEntities(t.siteName),t.publishedTime=this._unescapeHtmlEntities(t.publishedTime),t},_isSingleImage:function(e){return e.tagName==="IMG"?!0:e.children.length!==1||e.textContent.trim()!==""?!1:this._isSingleImage(e.children[0])},_unwrapNoscriptImages:function(e){var t=Array.from(e.getElementsByTagName("img"));this._forEachNode(t,function(r){for(var l=0;l<r.attributes.length;l++){var a=r.attributes[l];switch(a.name){case"src":case"srcset":case"data-src":case"data-srcset":return}if(/\.(jpg|jpeg|png|webp)/i.test(a.value))return}r.parentNode.removeChild(r)});var i=Array.from(e.getElementsByTagName("noscript"));this._forEachNode(i,function(r){var l=e.createElement("div");if(l.innerHTML=r.innerHTML,!!this._isSingleImage(l)){var a=r.previousElementSibling;if(a&&this._isSingleImage(a)){var s=a;s.tagName!=="IMG"&&(s=a.getElementsByTagName("img")[0]);for(var h=l.getElementsByTagName("img")[0],o=0;o<s.attributes.length;o++){var n=s.attributes[o];if(n.value!==""&&(n.name==="src"||n.name==="srcset"||/\.(jpg|jpeg|png|webp)/i.test(n.value))){if(h.getAttribute(n.name)===n.value)continue;var u=n.name;h.hasAttribute(u)&&(u="data-old-"+u),h.setAttribute(u,n.value)}}r.parentNode.replaceChild(l.firstElementChild,a)}}})},_removeScripts:function(e){this._removeNodes(this._getAllNodesWithTag(e,["script","noscript"]))},_hasSingleTagInsideElement:function(e,t){return e.children.length!=1||e.children[0].tagName!==t?!1:!this._someNode(e.childNodes,function(i){return i.nodeType===this.TEXT_NODE&&this.REGEXPS.hasContent.test(i.textContent)})},_isElementWithoutContent:function(e){return e.nodeType===this.ELEMENT_NODE&&e.textContent.trim().length==0&&(e.children.length==0||e.children.length==e.getElementsByTagName("br").length+e.getElementsByTagName("hr").length)},_hasChildBlockElement:function(e){return this._someNode(e.childNodes,function(t){return this.DIV_TO_P_ELEMS.has(t.tagName)||this._hasChildBlockElement(t)})},_isPhrasingContent:function(e){return e.nodeType===this.TEXT_NODE||this.PHRASING_ELEMS.indexOf(e.tagName)!==-1||(e.tagName==="A"||e.tagName==="DEL"||e.tagName==="INS")&&this._everyNode(e.childNodes,this._isPhrasingContent)},_isWhitespace:function(e){return e.nodeType===this.TEXT_NODE&&e.textContent.trim().length===0||e.nodeType===this.ELEMENT_NODE&&e.tagName==="BR"},_getInnerText:function(e,t){t=typeof t>"u"?!0:t;var i=e.textContent.trim();return t?i.replace(this.REGEXPS.normalize," "):i},_getCharCount:function(e,t){return t=t||",",this._getInnerText(e).split(t).length-1},_cleanStyles:function(e){if(!(!e||e.tagName.toLowerCase()==="svg")){for(var t=0;t<this.PRESENTATIONAL_ATTRIBUTES.length;t++)e.removeAttribute(this.PRESENTATIONAL_ATTRIBUTES[t]);this.DEPRECATED_SIZE_ATTRIBUTE_ELEMS.indexOf(e.tagName)!==-1&&(e.removeAttribute("width"),e.removeAttribute("height"));for(var i=e.firstElementChild;i!==null;)this._cleanStyles(i),i=i.nextElementSibling}},_getLinkDensity:function(e){var t=this._getInnerText(e).length;if(t===0)return 0;var i=0;return this._forEachNode(e.getElementsByTagName("a"),function(r){var l=r.getAttribute("href"),a=l&&this.REGEXPS.hashUrl.test(l)?.3:1;i+=this._getInnerText(r).length*a}),i/t},_getClassWeight:function(e){if(!this._flagIsActive(this.FLAG_WEIGHT_CLASSES))return 0;var t=0;return typeof e.className=="string"&&e.className!==""&&(this.REGEXPS.negative.test(e.className)&&(t-=25),this.REGEXPS.positive.test(e.className)&&(t+=25)),typeof e.id=="string"&&e.id!==""&&(this.REGEXPS.negative.test(e.id)&&(t-=25),this.REGEXPS.positive.test(e.id)&&(t+=25)),t},_clean:function(e,t){var i=["object","embed","iframe"].indexOf(t)!==-1;this._removeNodes(this._getAllNodesWithTag(e,[t]),function(r){if(i){for(var l=0;l<r.attributes.length;l++)if(this._allowedVideoRegex.test(r.attributes[l].value))return!1;if(r.tagName==="object"&&this._allowedVideoRegex.test(r.innerHTML))return!1}return!0})},_hasAncestorTag:function(e,t,i,r){i=i||3,t=t.toUpperCase();for(var l=0;e.parentNode;){if(i>0&&l>i)return!1;if(e.parentNode.tagName===t&&(!r||r(e.parentNode)))return!0;e=e.parentNode,l++}return!1},_getRowAndColumnCount:function(e){for(var t=0,i=0,r=e.getElementsByTagName("tr"),l=0;l<r.length;l++){var a=r[l].getAttribute("rowspan")||0;a&&(a=parseInt(a,10)),t+=a||1;for(var s=0,h=r[l].getElementsByTagName("td"),o=0;o<h.length;o++){var n=h[o].getAttribute("colspan")||0;n&&(n=parseInt(n,10)),s+=n||1}i=Math.max(i,s)}return{rows:t,columns:i}},_markDataTables:function(e){for(var t=e.getElementsByTagName("table"),i=0;i<t.length;i++){var r=t[i],l=r.getAttribute("role");if(l=="presentation"){r._readabilityDataTable=!1;continue}var a=r.getAttribute("datatable");if(a=="0"){r._readabilityDataTable=!1;continue}var s=r.getAttribute("summary");if(s){r._readabilityDataTable=!0;continue}var h=r.getElementsByTagName("caption")[0];if(h&&h.childNodes.length>0){r._readabilityDataTable=!0;continue}var o=["col","colgroup","tfoot","thead","th"],n=function(m){return!!r.getElementsByTagName(m)[0]};if(o.some(n)){this.log("Data table because found data-y descendant"),r._readabilityDataTable=!0;continue}if(r.getElementsByTagName("table")[0]){r._readabilityDataTable=!1;continue}var u=this._getRowAndColumnCount(r);if(u.rows>=10||u.columns>4){r._readabilityDataTable=!0;continue}r._readabilityDataTable=u.rows*u.columns>10}},_fixLazyImages:function(e){this._forEachNode(this._getAllNodesWithTag(e,["img","picture","figure"]),function(t){if(t.src&&this.REGEXPS.b64DataUrl.test(t.src)){var i=this.REGEXPS.b64DataUrl.exec(t.src);if(i[1]==="image/svg+xml")return;for(var r=!1,l=0;l<t.attributes.length;l++){var a=t.attributes[l];if(a.name!=="src"&&/\.(jpg|jpeg|png|webp)/i.test(a.value)){r=!0;break}}if(r){var s=t.src.search(/base64\s*/i)+7,h=t.src.length-s;h<133&&t.removeAttribute("src")}}if(!((t.src||t.srcset&&t.srcset!="null")&&t.className.toLowerCase().indexOf("lazy")===-1)){for(var o=0;o<t.attributes.length;o++)if(a=t.attributes[o],!(a.name==="src"||a.name==="srcset"||a.name==="alt")){var n=null;if(/\.(jpg|jpeg|png|webp)\s+\d/.test(a.value)?n="srcset":/^\s*\S+\.(jpg|jpeg|png|webp)\S*\s*$/.test(a.value)&&(n="src"),n){if(t.tagName==="IMG"||t.tagName==="PICTURE")t.setAttribute(n,a.value);else if(t.tagName==="FIGURE"&&!this._getAllNodesWithTag(t,["img","picture"]).length){var u=this._doc.createElement("img");u.setAttribute(n,a.value),t.appendChild(u)}}}}})},_getTextDensity:function(e,t){var i=this._getInnerText(e,!0).length;if(i===0)return 0;var r=0,l=this._getAllNodesWithTag(e,t);return this._forEachNode(l,a=>r+=this._getInnerText(a,!0).length),r/i},_cleanConditionally:function(e,t){this._flagIsActive(this.FLAG_CLEAN_CONDITIONALLY)&&this._removeNodes(this._getAllNodesWithTag(e,[t]),function(i){var r=function(g){return g._readabilityDataTable},l=t==="ul"||t==="ol";if(!l){var a=0,s=this._getAllNodesWithTag(i,["ul","ol"]);this._forEachNode(s,g=>a+=this._getInnerText(g).length),l=a/this._getInnerText(i).length>.9}if(t==="table"&&r(i)||this._hasAncestorTag(i,"table",-1,r)||this._hasAncestorTag(i,"code"))return!1;var h=this._getClassWeight(i);this.log("Cleaning Conditionally",i);var o=0;if(h+o<0)return!0;if(this._getCharCount(i,",")<10){for(var n=i.getElementsByTagName("p").length,u=i.getElementsByTagName("img").length,m=i.getElementsByTagName("li").length-100,y=i.getElementsByTagName("input").length,N=this._getTextDensity(i,["h1","h2","h3","h4","h5","h6"]),E=0,A=this._getAllNodesWithTag(i,["object","embed","iframe"]),v=0;v<A.length;v++){for(var T=0;T<A[v].attributes.length;T++)if(this._allowedVideoRegex.test(A[v].attributes[T].value))return!1;if(A[v].tagName==="object"&&this._allowedVideoRegex.test(A[v].innerHTML))return!1;E++}var p=this._getLinkDensity(i),x=this._getInnerText(i).length,c=u>1&&n/u<.5&&!this._hasAncestorTag(i,"figure")||!l&&m>n||y>Math.floor(n/3)||!l&&N<.9&&x<25&&(u===0||u>2)&&!this._hasAncestorTag(i,"figure")||!l&&h<25&&p>.2||h>=25&&p>.5||E===1&&x<75||E>1;if(l&&c){for(var L=0;L<i.children.length;L++)if(i.children[L].children.length>1)return c;let g=i.getElementsByTagName("li").length;if(u==g)return!1}return c}return!1})},_cleanMatchedNodes:function(e,t){for(var i=this._getNextNode(e,!0),r=this._getNextNode(e);r&&r!=i;)t.call(this,r,r.className+" "+r.id)?r=this._removeAndGetNext(r):r=this._getNextNode(r)},_cleanHeaders:function(e){let t=this._getAllNodesWithTag(e,["h1","h2"]);this._removeNodes(t,function(i){let r=this._getClassWeight(i)<0;return r&&this.log("Removing header with low class weight:",i),r})},_headerDuplicatesTitle:function(e){if(e.tagName!="H1"&&e.tagName!="H2")return!1;var t=this._getInnerText(e,!1);return this.log("Evaluating similarity of header:",t,this._articleTitle),this._textSimilarity(this._articleTitle,t)>.75},_flagIsActive:function(e){return(this._flags&e)>0},_removeFlag:function(e){this._flags=this._flags&~e},_isProbablyVisible:function(e){return(!e.style||e.style.display!="none")&&(!e.style||e.style.visibility!="hidden")&&!e.hasAttribute("hidden")&&(!e.hasAttribute("aria-hidden")||e.getAttribute("aria-hidden")!="true"||e.className&&e.className.indexOf&&e.className.indexOf("fallback-image")!==-1)},parse:function(){if(this._maxElemsToParse>0){var e=this._doc.getElementsByTagName("*").length;if(e>this._maxElemsToParse)throw new Error("Aborting parsing document; "+e+" elements found")}this._unwrapNoscriptImages(this._doc);var t=this._disableJSONLD?{}:this._getJSONLD(this._doc);this._removeScripts(this._doc),this._prepDocument();var i=this._getArticleMetadata(t);this._articleTitle=i.title;var r=this._grabArticle();if(!r)return null;if(this.log("Grabbed: "+r.innerHTML),this._postProcessContent(r),!i.excerpt){var l=r.getElementsByTagName("p");l.length>0&&(i.excerpt=l[0].textContent.trim())}var a=r.textContent;return{title:this._articleTitle,byline:i.byline||this._articleByline,dir:this._articleDir,lang:this._articleLang,content:this._serializer(r),textContent:a,length:a.length,excerpt:i.excerpt,siteName:i.siteName||this._articleSiteName,publishedTime:i.publishedTime}}};typeof j=="object"&&(j.exports=te)});var ae=V((Se,$)=>{var re={unlikelyCandidates:/-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|footer|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i,okMaybeItsACandidate:/and|article|body|column|content|main|shadow/i};function Ee(e){return(!e.style||e.style.display!="none")&&!e.hasAttribute("hidden")&&(!e.hasAttribute("aria-hidden")||e.getAttribute("aria-hidden")!="true"||e.className&&e.className.indexOf&&e.className.indexOf("fallback-image")!==-1)}function de(e,t={}){typeof t=="function"&&(t={visibilityChecker:t});var i={minScore:20,minContentLength:140,visibilityChecker:Ee};t=Object.assign(i,t);var r=e.querySelectorAll("p, pre, article"),l=e.querySelectorAll("div > br");if(l.length){var a=new Set(r);[].forEach.call(l,function(h){a.add(h.parentNode)}),r=Array.from(a)}var s=0;return[].some.call(r,function(h){if(!t.visibilityChecker(h))return!1;var o=h.className+" "+h.id;if(re.unlikelyCandidates.test(o)&&!re.okMaybeItsACandidate.test(o)||h.matches("li p"))return!1;var n=h.textContent.trim().length;return n<t.minContentLength?!1:(s+=Math.sqrt(n-t.minContentLength),s>t.minScore)})}typeof $=="object"&&($.exports=de)});var le=V((Le,se)=>{var be=ie(),ye=ae();se.exports={Readability:be,isProbablyReaderable:ye}});var ne=ve(le());function Ae(){let e=document.cloneNode(!0),i=new ne.Readability(e,{charThreshold:100}).parse(),r=i?.title||document.title||"Untitled",l=i?.content||document.body.innerHTML,a=i?.textContent||document.body.textContent||"",s=a.split(/\s+/).filter(Boolean).length,h=(a.match(/[\u4e00-\u9fff\u3400-\u4dbf\uac00-\ud7af]/g)||[]).length,o=h>s?h:s;return{title:r,byline:i?.byline||null,excerpt:i?.excerpt||null,content:l,textContent:a,siteName:i?.siteName||null,url:window.location.href,savedAt:new Date().toISOString(),wordCount:o}}window.__mindosClipResult=Ae();})();
@@ -1,4 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128">
2
- <rect width="128" height="128" rx="20" fill="#c8873a"/>
3
- <text x="64" y="96" font-family="Arial,Helvetica,sans-serif" font-weight="bold" font-size="96" fill="#ffffff" text-anchor="middle">M</text>
4
- </svg>
@@ -1,4 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
2
- <rect width="16" height="16" rx="3" fill="#c8873a"/>
3
- <text x="8" y="12.5" font-family="Arial,Helvetica,sans-serif" font-weight="bold" font-size="12" fill="#ffffff" text-anchor="middle">M</text>
4
- </svg>
@@ -1,4 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
2
- <rect width="32" height="32" rx="6" fill="#c8873a"/>
3
- <text x="16" y="24" font-family="Arial,Helvetica,sans-serif" font-weight="bold" font-size="24" fill="#ffffff" text-anchor="middle">M</text>
4
- </svg>
@@ -1,4 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48">
2
- <rect width="48" height="48" rx="8" fill="#c8873a"/>
3
- <text x="24" y="36" font-family="Arial,Helvetica,sans-serif" font-weight="bold" font-size="36" fill="#ffffff" text-anchor="middle">M</text>
4
- </svg>
@@ -1,47 +0,0 @@
1
- {
2
- "manifest_version": 3,
3
- "name": "MindOS Web Clipper",
4
- "version": "0.1.2",
5
- "description": "Save any web page to your MindOS knowledge base — one click, beautifully formatted Markdown.",
6
- "icons": {
7
- "16": "icons/icon-16.png",
8
- "32": "icons/icon-32.png",
9
- "48": "icons/icon-48.png",
10
- "128": "icons/icon-128.png"
11
- },
12
- "action": {
13
- "default_popup": "popup/popup.html",
14
- "default_icon": {
15
- "16": "icons/icon-16.png",
16
- "32": "icons/icon-32.png"
17
- },
18
- "default_title": "Clip to MindOS"
19
- },
20
- "background": {
21
- "service_worker": "background/service-worker.js",
22
- "type": "module"
23
- },
24
- "permissions": [
25
- "storage",
26
- "activeTab",
27
- "scripting",
28
- "contextMenus"
29
- ],
30
- "host_permissions": [
31
- "http://localhost:*/*",
32
- "http://127.0.0.1:*/*",
33
- "http://[::1]:*/*",
34
- "http://10.*.*.*:*/*",
35
- "http://172.16.*.*:*/*",
36
- "http://192.168.*.*:*/*"
37
- ],
38
- "commands": {
39
- "clip-page": {
40
- "suggested_key": {
41
- "default": "Ctrl+Shift+M",
42
- "mac": "Command+Shift+M"
43
- },
44
- "description": "Clip current page to MindOS"
45
- }
46
- }
47
- }
@@ -1,510 +0,0 @@
1
- /* ── MindOS Web Clipper — Popup Styles ── */
2
- /* Design: warm amber accent, low-saturation grey, Warm Industrial aesthetic */
3
-
4
- :root {
5
- --bg: #fafaf8;
6
- --bg-card: #ffffff;
7
- --bg-muted: #f3f2ef;
8
- --bg-elevated: #ffffff;
9
- --fg: #1a1a18;
10
- --fg-secondary: #4a4944;
11
- --fg-muted: #6b6a66;
12
- --fg-hint: #9c9b96;
13
- --border: #e5e4e0;
14
- --border-subtle: #edece8;
15
- --amber: #c8873a;
16
- --amber-hover: #b5762f;
17
- --amber-fg: #ffffff;
18
- --amber-subtle: rgba(200, 135, 58, 0.08);
19
- --amber-light: rgba(200, 135, 58, 0.15);
20
- --amber-text: #a06b2c;
21
- --success: #22a06b;
22
- --success-subtle: rgba(34, 160, 107, 0.08);
23
- --success-light: rgba(34, 160, 107, 0.12);
24
- --error: #e34935;
25
- --error-subtle: rgba(227, 73, 53, 0.08);
26
- --radius: 10px;
27
- --radius-sm: 6px;
28
- --radius-xs: 4px;
29
- --shadow-sm: 0 1px 2px rgba(0,0,0,0.04);
30
- --shadow-md: 0 2px 8px rgba(0,0,0,0.06), 0 1px 2px rgba(0,0,0,0.04);
31
- --shadow-lg: 0 4px 16px rgba(0,0,0,0.08), 0 2px 4px rgba(0,0,0,0.04);
32
- --font-sans: 'IBM Plex Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
33
- --font-mono: 'IBM Plex Mono', 'SF Mono', monospace;
34
- --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
35
- --ease-in-out: cubic-bezier(0.45, 0, 0.55, 1);
36
- --transition: 150ms var(--ease-out);
37
- }
38
-
39
- /* Dark mode */
40
- @media (prefers-color-scheme: dark) {
41
- :root {
42
- --bg: #161614;
43
- --bg-card: #1e1e1c;
44
- --bg-muted: #262623;
45
- --bg-elevated: #2a2a27;
46
- --fg: #e8e7e3;
47
- --fg-secondary: #c5c4c0;
48
- --fg-muted: #9c9b96;
49
- --fg-hint: #6b6a66;
50
- --border: #333330;
51
- --border-subtle: #2d2d2a;
52
- --amber-hover: #d9954a;
53
- --amber-subtle: rgba(200, 135, 58, 0.12);
54
- --amber-light: rgba(200, 135, 58, 0.18);
55
- --amber-text: #d9a45e;
56
- --success-subtle: rgba(34, 160, 107, 0.12);
57
- --success-light: rgba(34, 160, 107, 0.16);
58
- --error: #f87171;
59
- --error-subtle: rgba(248, 113, 113, 0.12);
60
- --error-subtle: rgba(227, 73, 53, 0.12);
61
- --shadow-sm: 0 1px 2px rgba(0,0,0,0.2);
62
- --shadow-md: 0 2px 8px rgba(0,0,0,0.25), 0 1px 2px rgba(0,0,0,0.15);
63
- --shadow-lg: 0 4px 16px rgba(0,0,0,0.35), 0 2px 4px rgba(0,0,0,0.2);
64
- }
65
- }
66
-
67
- /* Reset */
68
- *, *::before, *::after {
69
- margin: 0;
70
- padding: 0;
71
- box-sizing: border-box;
72
- }
73
-
74
- body {
75
- width: 360px;
76
- min-height: 200px;
77
- max-height: 520px;
78
- font-family: var(--font-sans);
79
- font-size: 13px;
80
- line-height: 1.5;
81
- color: var(--fg);
82
- background: var(--bg);
83
- overflow-y: auto;
84
- -webkit-font-smoothing: antialiased;
85
- }
86
-
87
- #app {
88
- padding: 16px;
89
- }
90
-
91
- /* ── Views ── */
92
-
93
- .view {
94
- display: flex;
95
- flex-direction: column;
96
- gap: 12px;
97
- animation: fadeIn 200ms var(--ease-out);
98
- }
99
- .view[hidden] { display: none !important; }
100
-
101
- @keyframes fadeIn {
102
- from { opacity: 0; transform: translateY(4px); }
103
- to { opacity: 1; transform: translateY(0); }
104
- }
105
-
106
- /* ── Header ── */
107
-
108
- .header { display: flex; flex-direction: column; gap: 4px; }
109
- .header.compact {
110
- flex-direction: row;
111
- align-items: center;
112
- justify-content: space-between;
113
- padding-bottom: 4px;
114
- border-bottom: 1px solid var(--border-subtle);
115
- }
116
-
117
- .logo {
118
- display: flex;
119
- align-items: center;
120
- gap: 8px;
121
- }
122
- .logo img { border-radius: var(--radius-xs); }
123
- .logo-text {
124
- font-size: 14px;
125
- font-weight: 600;
126
- letter-spacing: -0.02em;
127
- color: var(--fg);
128
- }
129
-
130
- .subtitle {
131
- font-size: 12px;
132
- color: var(--fg-muted);
133
- margin-top: 2px;
134
- }
135
-
136
- /* ── Buttons ── */
137
-
138
- .btn-primary {
139
- display: flex;
140
- align-items: center;
141
- justify-content: center;
142
- gap: 6px;
143
- width: 100%;
144
- height: 40px;
145
- border: none;
146
- border-radius: var(--radius);
147
- background: var(--amber);
148
- color: var(--amber-fg);
149
- font-family: var(--font-sans);
150
- font-size: 13px;
151
- font-weight: 600;
152
- cursor: pointer;
153
- transition: background var(--transition), box-shadow var(--transition), transform 100ms var(--ease-out);
154
- box-shadow: var(--shadow-sm);
155
- }
156
- .btn-primary:hover { background: var(--amber-hover); box-shadow: var(--shadow-md); }
157
- .btn-primary:active { transform: scale(0.98); }
158
- .btn-primary:disabled { opacity: 0.5; cursor: not-allowed; transform: none; box-shadow: none; }
159
- .btn-primary:focus-visible { outline: 2px solid var(--amber); outline-offset: 2px; }
160
-
161
- .btn-primary .btn-text,
162
- .btn-primary .btn-loading {
163
- display: flex;
164
- align-items: center;
165
- gap: 6px;
166
- }
167
- .btn-primary .btn-loading[hidden] { display: none; }
168
-
169
- .btn-secondary {
170
- display: flex;
171
- align-items: center;
172
- justify-content: center;
173
- width: 100%;
174
- height: 36px;
175
- border: 1px solid var(--border);
176
- border-radius: var(--radius);
177
- background: transparent;
178
- color: var(--fg);
179
- font-family: var(--font-sans);
180
- font-size: 13px;
181
- font-weight: 500;
182
- cursor: pointer;
183
- transition: background var(--transition), border-color var(--transition);
184
- }
185
- .btn-secondary:hover { background: var(--bg-muted); border-color: var(--fg-hint); }
186
- .btn-secondary:focus-visible { outline: 2px solid var(--amber); outline-offset: 2px; }
187
-
188
- .btn-icon {
189
- display: flex;
190
- align-items: center;
191
- justify-content: center;
192
- width: 28px;
193
- height: 28px;
194
- border: 1px solid transparent;
195
- border-radius: var(--radius-sm);
196
- background: transparent;
197
- color: var(--fg-hint);
198
- cursor: pointer;
199
- transition: color var(--transition), background var(--transition), border-color var(--transition);
200
- }
201
- .btn-icon:hover { color: var(--fg-muted); background: var(--bg-muted); border-color: var(--border); }
202
- .btn-icon:focus-visible { outline: 2px solid var(--amber); outline-offset: 2px; }
203
-
204
- /* ── Forms ── */
205
-
206
- .form-group {
207
- display: flex;
208
- flex-direction: column;
209
- gap: 4px;
210
- }
211
-
212
- .form-group label {
213
- font-size: 11px;
214
- font-weight: 600;
215
- text-transform: uppercase;
216
- letter-spacing: 0.04em;
217
- color: var(--fg-muted);
218
- }
219
-
220
- .form-group input {
221
- height: 38px;
222
- padding: 0 12px;
223
- border: 1px solid var(--border);
224
- border-radius: var(--radius-sm);
225
- background: var(--bg-card);
226
- color: var(--fg);
227
- font-family: var(--font-sans);
228
- font-size: 13px;
229
- transition: border-color var(--transition), box-shadow var(--transition);
230
- }
231
- .form-group input:focus-visible {
232
- outline: none;
233
- border-color: var(--amber);
234
- box-shadow: 0 0 0 3px var(--amber-subtle);
235
- }
236
- .form-group input::placeholder { color: var(--fg-hint); }
237
-
238
- .hint {
239
- font-size: 11px;
240
- color: var(--fg-hint);
241
- }
242
-
243
- /* ── Clip Preview Card ── */
244
-
245
- .clip-preview {
246
- display: flex;
247
- flex-direction: column;
248
- gap: 8px;
249
- padding: 16px;
250
- border: 1px solid var(--border);
251
- border-radius: var(--radius);
252
- background: var(--bg-card);
253
- box-shadow: var(--shadow-sm);
254
- }
255
-
256
- .title-input {
257
- border: none !important;
258
- padding: 0 !important;
259
- height: auto !important;
260
- font-size: 15px;
261
- font-weight: 600;
262
- line-height: 1.3;
263
- color: var(--fg);
264
- background: transparent;
265
- outline: none;
266
- box-shadow: none !important;
267
- }
268
- .title-input::placeholder { color: var(--fg-hint); }
269
-
270
- .meta-row {
271
- display: flex;
272
- gap: 6px;
273
- flex-wrap: wrap;
274
- }
275
-
276
- .meta-badge {
277
- display: inline-flex;
278
- align-items: center;
279
- gap: 4px;
280
- padding: 2px 8px;
281
- font-size: 11px;
282
- color: var(--fg-muted);
283
- background: var(--bg-muted);
284
- border-radius: 99px;
285
- line-height: 1.4;
286
- }
287
- .meta-badge svg { flex-shrink: 0; }
288
-
289
- /* ── Error Bar ── */
290
-
291
- .error-bar {
292
- display: flex;
293
- align-items: flex-start;
294
- gap: 8px;
295
- padding: 8px 12px;
296
- border-radius: var(--radius-sm);
297
- background: var(--error-subtle);
298
- color: var(--error);
299
- font-size: 12px;
300
- line-height: 1.4;
301
- }
302
- .error-bar[hidden] { display: none; }
303
-
304
- /* ── Success View ── */
305
-
306
- .success-card {
307
- display: flex;
308
- flex-direction: column;
309
- align-items: center;
310
- gap: 8px;
311
- padding: 24px 16px 20px;
312
- border-radius: var(--radius);
313
- background: var(--success-subtle);
314
- border: 1px solid var(--success-light);
315
- }
316
-
317
- .success-icon {
318
- display: flex;
319
- align-items: center;
320
- justify-content: center;
321
- width: 36px;
322
- height: 36px;
323
- border-radius: 50%;
324
- background: var(--success);
325
- color: white;
326
- }
327
-
328
- .success-title {
329
- font-size: 15px;
330
- font-weight: 700;
331
- color: var(--fg);
332
- }
333
-
334
- .success-detail {
335
- font-size: 11px;
336
- font-family: var(--font-mono);
337
- color: var(--fg-muted);
338
- word-break: break-all;
339
- text-align: center;
340
- line-height: 1.4;
341
- padding: 4px 8px;
342
- border-radius: var(--radius-xs);
343
- background: var(--bg-muted);
344
- max-width: 100%;
345
- }
346
-
347
- .success-actions {
348
- display: flex;
349
- gap: 8px;
350
- width: 100%;
351
- }
352
- .success-actions .btn-secondary { flex: 1; }
353
-
354
- /* ── Loading ── */
355
-
356
- .loading-state {
357
- display: flex;
358
- flex-direction: column;
359
- align-items: center;
360
- gap: 16px;
361
- padding: 40px 0;
362
- }
363
-
364
- .loading-brand {
365
- display: flex;
366
- align-items: center;
367
- gap: 8px;
368
- }
369
- .loading-brand img { border-radius: var(--radius-xs); }
370
- .loading-text {
371
- color: var(--fg-muted);
372
- font-size: 13px;
373
- }
374
-
375
- /* ── Spinner ── */
376
-
377
- .spinner {
378
- width: 18px;
379
- height: 18px;
380
- animation: spin 0.9s var(--ease-in-out) infinite;
381
- color: var(--amber);
382
- }
383
- .spinner.large { width: 28px; height: 28px; }
384
-
385
- @keyframes spin {
386
- to { transform: rotate(360deg); }
387
- }
388
-
389
- /* ── DirPicker ── */
390
-
391
- .dir-trigger {
392
- display: flex;
393
- align-items: center;
394
- gap: 8px;
395
- width: 100%;
396
- height: 38px;
397
- padding: 0 12px;
398
- border: 1px solid var(--border);
399
- border-radius: var(--radius-sm);
400
- background: var(--bg-card);
401
- color: var(--fg);
402
- font-family: var(--font-sans);
403
- font-size: 13px;
404
- text-align: left;
405
- cursor: pointer;
406
- transition: border-color var(--transition), box-shadow var(--transition);
407
- }
408
- .dir-trigger:hover { border-color: var(--fg-hint); }
409
- .dir-trigger:focus-visible { outline: none; border-color: var(--amber); box-shadow: 0 0 0 3px var(--amber-subtle); }
410
- .dir-trigger.active { border-color: var(--amber); box-shadow: 0 0 0 3px var(--amber-subtle); }
411
- .dir-trigger .dir-icon { color: var(--amber); flex-shrink: 0; }
412
- .dir-trigger .dir-label { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
413
- .dir-trigger .dir-chevron { flex-shrink: 0; color: var(--fg-hint); transition: transform var(--transition); }
414
- .dir-trigger.active .dir-chevron { transform: rotate(180deg); }
415
-
416
- .dir-panel {
417
- border: 1px solid var(--amber);
418
- border-radius: var(--radius-sm);
419
- background: var(--bg-card);
420
- overflow: hidden;
421
- margin-top: 4px;
422
- box-shadow: var(--shadow-md);
423
- animation: slideDown 150ms var(--ease-out);
424
- }
425
- .dir-panel[hidden] { display: none; }
426
-
427
- @keyframes slideDown {
428
- from { opacity: 0; transform: translateY(-4px); }
429
- to { opacity: 1; transform: translateY(0); }
430
- }
431
-
432
- .dir-breadcrumb {
433
- display: flex;
434
- align-items: center;
435
- gap: 2px;
436
- padding: 6px 10px;
437
- background: var(--bg-muted);
438
- border-bottom: 1px solid var(--border);
439
- overflow-x: auto;
440
- font-size: 11px;
441
- }
442
- .dir-breadcrumb button {
443
- flex-shrink: 0;
444
- padding: 2px 6px;
445
- border: none;
446
- border-radius: var(--radius-xs);
447
- background: transparent;
448
- color: var(--fg-muted);
449
- font-family: var(--font-sans);
450
- font-size: 11px;
451
- cursor: pointer;
452
- transition: color var(--transition), background var(--transition);
453
- }
454
- .dir-breadcrumb button:hover { color: var(--fg); background: var(--amber-subtle); }
455
- .dir-breadcrumb button.active { color: var(--amber); font-weight: 600; }
456
- .dir-breadcrumb .crumb-sep {
457
- color: var(--fg-hint);
458
- font-size: 9px;
459
- flex-shrink: 0;
460
- }
461
-
462
- .dir-list {
463
- max-height: 180px;
464
- overflow-y: auto;
465
- }
466
- .dir-list:empty::after {
467
- content: 'No subdirectories';
468
- display: block;
469
- padding: 12px;
470
- text-align: center;
471
- color: var(--fg-hint);
472
- font-size: 11px;
473
- }
474
-
475
- .dir-item {
476
- display: flex;
477
- align-items: center;
478
- gap: 8px;
479
- width: 100%;
480
- padding: 7px 10px;
481
- border: none;
482
- background: transparent;
483
- color: var(--fg);
484
- font-family: var(--font-sans);
485
- font-size: 12px;
486
- text-align: left;
487
- cursor: pointer;
488
- transition: background var(--transition);
489
- }
490
- .dir-item:hover { background: var(--amber-subtle); }
491
- .dir-item .dir-item-icon { color: var(--amber); flex-shrink: 0; }
492
- .dir-item .dir-item-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
493
- .dir-item .dir-item-arrow { color: var(--fg-hint); flex-shrink: 0; }
494
-
495
- .dir-confirm {
496
- display: flex;
497
- align-items: center;
498
- justify-content: center;
499
- width: 100%;
500
- padding: 6px;
501
- border: none;
502
- border-top: 1px solid var(--border);
503
- background: transparent;
504
- color: var(--amber);
505
- font-weight: 600;
506
- font-size: 12px;
507
- cursor: pointer;
508
- transition: background var(--transition);
509
- }
510
- .dir-confirm:hover { background: var(--amber-subtle); }