amd-gaia 0.14.1__py3-none-any.whl

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 (800) hide show
  1. amd_gaia-0.14.1.dist-info/METADATA +768 -0
  2. amd_gaia-0.14.1.dist-info/RECORD +800 -0
  3. amd_gaia-0.14.1.dist-info/WHEEL +5 -0
  4. amd_gaia-0.14.1.dist-info/entry_points.txt +5 -0
  5. amd_gaia-0.14.1.dist-info/licenses/LICENSE.md +21 -0
  6. amd_gaia-0.14.1.dist-info/top_level.txt +1 -0
  7. gaia/__init__.py +2 -0
  8. gaia/agents/__init__.py +19 -0
  9. gaia/agents/base/__init__.py +9 -0
  10. gaia/agents/base/agent.py +2072 -0
  11. gaia/agents/base/api_agent.py +120 -0
  12. gaia/agents/base/console.py +1457 -0
  13. gaia/agents/base/mcp_agent.py +86 -0
  14. gaia/agents/base/tools.py +83 -0
  15. gaia/agents/blender/agent.py +556 -0
  16. gaia/agents/blender/agent_simple.py +135 -0
  17. gaia/agents/blender/app.py +211 -0
  18. gaia/agents/blender/app_simple.py +41 -0
  19. gaia/agents/blender/core/__init__.py +16 -0
  20. gaia/agents/blender/core/materials.py +506 -0
  21. gaia/agents/blender/core/objects.py +316 -0
  22. gaia/agents/blender/core/rendering.py +225 -0
  23. gaia/agents/blender/core/scene.py +220 -0
  24. gaia/agents/blender/core/view.py +146 -0
  25. gaia/agents/chat/__init__.py +9 -0
  26. gaia/agents/chat/agent.py +975 -0
  27. gaia/agents/chat/app.py +1058 -0
  28. gaia/agents/chat/session.py +508 -0
  29. gaia/agents/chat/tools/__init__.py +15 -0
  30. gaia/agents/chat/tools/file_tools.py +96 -0
  31. gaia/agents/chat/tools/rag_tools.py +1729 -0
  32. gaia/agents/chat/tools/shell_tools.py +436 -0
  33. gaia/agents/code/__init__.py +7 -0
  34. gaia/agents/code/agent.py +547 -0
  35. gaia/agents/code/app.py +266 -0
  36. gaia/agents/code/models.py +135 -0
  37. gaia/agents/code/orchestration/__init__.py +24 -0
  38. gaia/agents/code/orchestration/checklist_executor.py +1739 -0
  39. gaia/agents/code/orchestration/checklist_generator.py +709 -0
  40. gaia/agents/code/orchestration/factories/__init__.py +9 -0
  41. gaia/agents/code/orchestration/factories/base.py +63 -0
  42. gaia/agents/code/orchestration/factories/nextjs_factory.py +118 -0
  43. gaia/agents/code/orchestration/factories/python_factory.py +106 -0
  44. gaia/agents/code/orchestration/orchestrator.py +610 -0
  45. gaia/agents/code/orchestration/project_analyzer.py +391 -0
  46. gaia/agents/code/orchestration/steps/__init__.py +67 -0
  47. gaia/agents/code/orchestration/steps/base.py +188 -0
  48. gaia/agents/code/orchestration/steps/error_handler.py +314 -0
  49. gaia/agents/code/orchestration/steps/nextjs.py +828 -0
  50. gaia/agents/code/orchestration/steps/python.py +307 -0
  51. gaia/agents/code/orchestration/template_catalog.py +463 -0
  52. gaia/agents/code/orchestration/workflows/__init__.py +14 -0
  53. gaia/agents/code/orchestration/workflows/base.py +80 -0
  54. gaia/agents/code/orchestration/workflows/nextjs.py +186 -0
  55. gaia/agents/code/orchestration/workflows/python.py +94 -0
  56. gaia/agents/code/prompts/__init__.py +11 -0
  57. gaia/agents/code/prompts/base_prompt.py +77 -0
  58. gaia/agents/code/prompts/code_patterns.py +1925 -0
  59. gaia/agents/code/prompts/nextjs_prompt.py +40 -0
  60. gaia/agents/code/prompts/python_prompt.py +109 -0
  61. gaia/agents/code/schema_inference.py +365 -0
  62. gaia/agents/code/system_prompt.py +41 -0
  63. gaia/agents/code/tools/__init__.py +42 -0
  64. gaia/agents/code/tools/cli_tools.py +1138 -0
  65. gaia/agents/code/tools/code_formatting.py +319 -0
  66. gaia/agents/code/tools/code_tools.py +769 -0
  67. gaia/agents/code/tools/error_fixing.py +1347 -0
  68. gaia/agents/code/tools/external_tools.py +180 -0
  69. gaia/agents/code/tools/file_io.py +845 -0
  70. gaia/agents/code/tools/prisma_tools.py +190 -0
  71. gaia/agents/code/tools/project_management.py +1016 -0
  72. gaia/agents/code/tools/testing.py +321 -0
  73. gaia/agents/code/tools/typescript_tools.py +122 -0
  74. gaia/agents/code/tools/validation_parsing.py +461 -0
  75. gaia/agents/code/tools/validation_tools.py +803 -0
  76. gaia/agents/code/tools/web_dev_tools.py +1744 -0
  77. gaia/agents/code/validators/__init__.py +16 -0
  78. gaia/agents/code/validators/antipattern_checker.py +241 -0
  79. gaia/agents/code/validators/ast_analyzer.py +197 -0
  80. gaia/agents/code/validators/requirements_validator.py +145 -0
  81. gaia/agents/code/validators/syntax_validator.py +171 -0
  82. gaia/agents/docker/__init__.py +7 -0
  83. gaia/agents/docker/agent.py +642 -0
  84. gaia/agents/jira/__init__.py +11 -0
  85. gaia/agents/jira/agent.py +894 -0
  86. gaia/agents/jira/jql_templates.py +299 -0
  87. gaia/agents/routing/__init__.py +7 -0
  88. gaia/agents/routing/agent.py +512 -0
  89. gaia/agents/routing/system_prompt.py +75 -0
  90. gaia/api/__init__.py +23 -0
  91. gaia/api/agent_registry.py +238 -0
  92. gaia/api/app.py +305 -0
  93. gaia/api/openai_server.py +575 -0
  94. gaia/api/schemas.py +186 -0
  95. gaia/api/sse_handler.py +370 -0
  96. gaia/apps/__init__.py +4 -0
  97. gaia/apps/llm/__init__.py +6 -0
  98. gaia/apps/llm/app.py +169 -0
  99. gaia/apps/summarize/app.py +633 -0
  100. gaia/apps/summarize/html_viewer.py +133 -0
  101. gaia/apps/summarize/pdf_formatter.py +284 -0
  102. gaia/audio/__init__.py +2 -0
  103. gaia/audio/audio_client.py +439 -0
  104. gaia/audio/audio_recorder.py +269 -0
  105. gaia/audio/kokoro_tts.py +599 -0
  106. gaia/audio/whisper_asr.py +432 -0
  107. gaia/chat/__init__.py +16 -0
  108. gaia/chat/app.py +430 -0
  109. gaia/chat/prompts.py +522 -0
  110. gaia/chat/sdk.py +1200 -0
  111. gaia/cli.py +5621 -0
  112. gaia/eval/batch_experiment.py +2332 -0
  113. gaia/eval/claude.py +542 -0
  114. gaia/eval/config.py +37 -0
  115. gaia/eval/email_generator.py +512 -0
  116. gaia/eval/eval.py +3179 -0
  117. gaia/eval/groundtruth.py +1130 -0
  118. gaia/eval/transcript_generator.py +582 -0
  119. gaia/eval/webapp/README.md +168 -0
  120. gaia/eval/webapp/node_modules/.bin/mime +16 -0
  121. gaia/eval/webapp/node_modules/.bin/mime.cmd +17 -0
  122. gaia/eval/webapp/node_modules/.bin/mime.ps1 +28 -0
  123. gaia/eval/webapp/node_modules/.package-lock.json +865 -0
  124. gaia/eval/webapp/node_modules/accepts/HISTORY.md +243 -0
  125. gaia/eval/webapp/node_modules/accepts/LICENSE +23 -0
  126. gaia/eval/webapp/node_modules/accepts/README.md +140 -0
  127. gaia/eval/webapp/node_modules/accepts/index.js +238 -0
  128. gaia/eval/webapp/node_modules/accepts/package.json +47 -0
  129. gaia/eval/webapp/node_modules/array-flatten/LICENSE +21 -0
  130. gaia/eval/webapp/node_modules/array-flatten/README.md +43 -0
  131. gaia/eval/webapp/node_modules/array-flatten/array-flatten.js +64 -0
  132. gaia/eval/webapp/node_modules/array-flatten/package.json +39 -0
  133. gaia/eval/webapp/node_modules/body-parser/HISTORY.md +672 -0
  134. gaia/eval/webapp/node_modules/body-parser/LICENSE +23 -0
  135. gaia/eval/webapp/node_modules/body-parser/README.md +476 -0
  136. gaia/eval/webapp/node_modules/body-parser/SECURITY.md +25 -0
  137. gaia/eval/webapp/node_modules/body-parser/index.js +156 -0
  138. gaia/eval/webapp/node_modules/body-parser/lib/read.js +205 -0
  139. gaia/eval/webapp/node_modules/body-parser/lib/types/json.js +247 -0
  140. gaia/eval/webapp/node_modules/body-parser/lib/types/raw.js +101 -0
  141. gaia/eval/webapp/node_modules/body-parser/lib/types/text.js +121 -0
  142. gaia/eval/webapp/node_modules/body-parser/lib/types/urlencoded.js +307 -0
  143. gaia/eval/webapp/node_modules/body-parser/package.json +56 -0
  144. gaia/eval/webapp/node_modules/bytes/History.md +97 -0
  145. gaia/eval/webapp/node_modules/bytes/LICENSE +23 -0
  146. gaia/eval/webapp/node_modules/bytes/Readme.md +152 -0
  147. gaia/eval/webapp/node_modules/bytes/index.js +170 -0
  148. gaia/eval/webapp/node_modules/bytes/package.json +42 -0
  149. gaia/eval/webapp/node_modules/call-bind-apply-helpers/.eslintrc +17 -0
  150. gaia/eval/webapp/node_modules/call-bind-apply-helpers/.github/FUNDING.yml +12 -0
  151. gaia/eval/webapp/node_modules/call-bind-apply-helpers/.nycrc +9 -0
  152. gaia/eval/webapp/node_modules/call-bind-apply-helpers/CHANGELOG.md +30 -0
  153. gaia/eval/webapp/node_modules/call-bind-apply-helpers/LICENSE +21 -0
  154. gaia/eval/webapp/node_modules/call-bind-apply-helpers/README.md +62 -0
  155. gaia/eval/webapp/node_modules/call-bind-apply-helpers/actualApply.d.ts +1 -0
  156. gaia/eval/webapp/node_modules/call-bind-apply-helpers/actualApply.js +10 -0
  157. gaia/eval/webapp/node_modules/call-bind-apply-helpers/applyBind.d.ts +19 -0
  158. gaia/eval/webapp/node_modules/call-bind-apply-helpers/applyBind.js +10 -0
  159. gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionApply.d.ts +1 -0
  160. gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionApply.js +4 -0
  161. gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionCall.d.ts +1 -0
  162. gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionCall.js +4 -0
  163. gaia/eval/webapp/node_modules/call-bind-apply-helpers/index.d.ts +64 -0
  164. gaia/eval/webapp/node_modules/call-bind-apply-helpers/index.js +15 -0
  165. gaia/eval/webapp/node_modules/call-bind-apply-helpers/package.json +85 -0
  166. gaia/eval/webapp/node_modules/call-bind-apply-helpers/reflectApply.d.ts +3 -0
  167. gaia/eval/webapp/node_modules/call-bind-apply-helpers/reflectApply.js +4 -0
  168. gaia/eval/webapp/node_modules/call-bind-apply-helpers/test/index.js +63 -0
  169. gaia/eval/webapp/node_modules/call-bind-apply-helpers/tsconfig.json +9 -0
  170. gaia/eval/webapp/node_modules/call-bound/.eslintrc +13 -0
  171. gaia/eval/webapp/node_modules/call-bound/.github/FUNDING.yml +12 -0
  172. gaia/eval/webapp/node_modules/call-bound/.nycrc +9 -0
  173. gaia/eval/webapp/node_modules/call-bound/CHANGELOG.md +42 -0
  174. gaia/eval/webapp/node_modules/call-bound/LICENSE +21 -0
  175. gaia/eval/webapp/node_modules/call-bound/README.md +53 -0
  176. gaia/eval/webapp/node_modules/call-bound/index.d.ts +94 -0
  177. gaia/eval/webapp/node_modules/call-bound/index.js +19 -0
  178. gaia/eval/webapp/node_modules/call-bound/package.json +99 -0
  179. gaia/eval/webapp/node_modules/call-bound/test/index.js +61 -0
  180. gaia/eval/webapp/node_modules/call-bound/tsconfig.json +10 -0
  181. gaia/eval/webapp/node_modules/content-disposition/HISTORY.md +60 -0
  182. gaia/eval/webapp/node_modules/content-disposition/LICENSE +22 -0
  183. gaia/eval/webapp/node_modules/content-disposition/README.md +142 -0
  184. gaia/eval/webapp/node_modules/content-disposition/index.js +458 -0
  185. gaia/eval/webapp/node_modules/content-disposition/package.json +44 -0
  186. gaia/eval/webapp/node_modules/content-type/HISTORY.md +29 -0
  187. gaia/eval/webapp/node_modules/content-type/LICENSE +22 -0
  188. gaia/eval/webapp/node_modules/content-type/README.md +94 -0
  189. gaia/eval/webapp/node_modules/content-type/index.js +225 -0
  190. gaia/eval/webapp/node_modules/content-type/package.json +42 -0
  191. gaia/eval/webapp/node_modules/cookie/LICENSE +24 -0
  192. gaia/eval/webapp/node_modules/cookie/README.md +317 -0
  193. gaia/eval/webapp/node_modules/cookie/SECURITY.md +25 -0
  194. gaia/eval/webapp/node_modules/cookie/index.js +334 -0
  195. gaia/eval/webapp/node_modules/cookie/package.json +44 -0
  196. gaia/eval/webapp/node_modules/cookie-signature/.npmignore +4 -0
  197. gaia/eval/webapp/node_modules/cookie-signature/History.md +38 -0
  198. gaia/eval/webapp/node_modules/cookie-signature/Readme.md +42 -0
  199. gaia/eval/webapp/node_modules/cookie-signature/index.js +51 -0
  200. gaia/eval/webapp/node_modules/cookie-signature/package.json +18 -0
  201. gaia/eval/webapp/node_modules/debug/.coveralls.yml +1 -0
  202. gaia/eval/webapp/node_modules/debug/.eslintrc +11 -0
  203. gaia/eval/webapp/node_modules/debug/.npmignore +9 -0
  204. gaia/eval/webapp/node_modules/debug/.travis.yml +14 -0
  205. gaia/eval/webapp/node_modules/debug/CHANGELOG.md +362 -0
  206. gaia/eval/webapp/node_modules/debug/LICENSE +19 -0
  207. gaia/eval/webapp/node_modules/debug/Makefile +50 -0
  208. gaia/eval/webapp/node_modules/debug/README.md +312 -0
  209. gaia/eval/webapp/node_modules/debug/component.json +19 -0
  210. gaia/eval/webapp/node_modules/debug/karma.conf.js +70 -0
  211. gaia/eval/webapp/node_modules/debug/node.js +1 -0
  212. gaia/eval/webapp/node_modules/debug/package.json +49 -0
  213. gaia/eval/webapp/node_modules/debug/src/browser.js +185 -0
  214. gaia/eval/webapp/node_modules/debug/src/debug.js +202 -0
  215. gaia/eval/webapp/node_modules/debug/src/index.js +10 -0
  216. gaia/eval/webapp/node_modules/debug/src/inspector-log.js +15 -0
  217. gaia/eval/webapp/node_modules/debug/src/node.js +248 -0
  218. gaia/eval/webapp/node_modules/depd/History.md +103 -0
  219. gaia/eval/webapp/node_modules/depd/LICENSE +22 -0
  220. gaia/eval/webapp/node_modules/depd/Readme.md +280 -0
  221. gaia/eval/webapp/node_modules/depd/index.js +538 -0
  222. gaia/eval/webapp/node_modules/depd/lib/browser/index.js +77 -0
  223. gaia/eval/webapp/node_modules/depd/package.json +45 -0
  224. gaia/eval/webapp/node_modules/destroy/LICENSE +23 -0
  225. gaia/eval/webapp/node_modules/destroy/README.md +63 -0
  226. gaia/eval/webapp/node_modules/destroy/index.js +209 -0
  227. gaia/eval/webapp/node_modules/destroy/package.json +48 -0
  228. gaia/eval/webapp/node_modules/dunder-proto/.eslintrc +5 -0
  229. gaia/eval/webapp/node_modules/dunder-proto/.github/FUNDING.yml +12 -0
  230. gaia/eval/webapp/node_modules/dunder-proto/.nycrc +13 -0
  231. gaia/eval/webapp/node_modules/dunder-proto/CHANGELOG.md +24 -0
  232. gaia/eval/webapp/node_modules/dunder-proto/LICENSE +21 -0
  233. gaia/eval/webapp/node_modules/dunder-proto/README.md +54 -0
  234. gaia/eval/webapp/node_modules/dunder-proto/get.d.ts +5 -0
  235. gaia/eval/webapp/node_modules/dunder-proto/get.js +30 -0
  236. gaia/eval/webapp/node_modules/dunder-proto/package.json +76 -0
  237. gaia/eval/webapp/node_modules/dunder-proto/set.d.ts +5 -0
  238. gaia/eval/webapp/node_modules/dunder-proto/set.js +35 -0
  239. gaia/eval/webapp/node_modules/dunder-proto/test/get.js +34 -0
  240. gaia/eval/webapp/node_modules/dunder-proto/test/index.js +4 -0
  241. gaia/eval/webapp/node_modules/dunder-proto/test/set.js +50 -0
  242. gaia/eval/webapp/node_modules/dunder-proto/tsconfig.json +9 -0
  243. gaia/eval/webapp/node_modules/ee-first/LICENSE +22 -0
  244. gaia/eval/webapp/node_modules/ee-first/README.md +80 -0
  245. gaia/eval/webapp/node_modules/ee-first/index.js +95 -0
  246. gaia/eval/webapp/node_modules/ee-first/package.json +29 -0
  247. gaia/eval/webapp/node_modules/encodeurl/LICENSE +22 -0
  248. gaia/eval/webapp/node_modules/encodeurl/README.md +109 -0
  249. gaia/eval/webapp/node_modules/encodeurl/index.js +60 -0
  250. gaia/eval/webapp/node_modules/encodeurl/package.json +40 -0
  251. gaia/eval/webapp/node_modules/es-define-property/.eslintrc +13 -0
  252. gaia/eval/webapp/node_modules/es-define-property/.github/FUNDING.yml +12 -0
  253. gaia/eval/webapp/node_modules/es-define-property/.nycrc +9 -0
  254. gaia/eval/webapp/node_modules/es-define-property/CHANGELOG.md +29 -0
  255. gaia/eval/webapp/node_modules/es-define-property/LICENSE +21 -0
  256. gaia/eval/webapp/node_modules/es-define-property/README.md +49 -0
  257. gaia/eval/webapp/node_modules/es-define-property/index.d.ts +3 -0
  258. gaia/eval/webapp/node_modules/es-define-property/index.js +14 -0
  259. gaia/eval/webapp/node_modules/es-define-property/package.json +81 -0
  260. gaia/eval/webapp/node_modules/es-define-property/test/index.js +56 -0
  261. gaia/eval/webapp/node_modules/es-define-property/tsconfig.json +10 -0
  262. gaia/eval/webapp/node_modules/es-errors/.eslintrc +5 -0
  263. gaia/eval/webapp/node_modules/es-errors/.github/FUNDING.yml +12 -0
  264. gaia/eval/webapp/node_modules/es-errors/CHANGELOG.md +40 -0
  265. gaia/eval/webapp/node_modules/es-errors/LICENSE +21 -0
  266. gaia/eval/webapp/node_modules/es-errors/README.md +55 -0
  267. gaia/eval/webapp/node_modules/es-errors/eval.d.ts +3 -0
  268. gaia/eval/webapp/node_modules/es-errors/eval.js +4 -0
  269. gaia/eval/webapp/node_modules/es-errors/index.d.ts +3 -0
  270. gaia/eval/webapp/node_modules/es-errors/index.js +4 -0
  271. gaia/eval/webapp/node_modules/es-errors/package.json +80 -0
  272. gaia/eval/webapp/node_modules/es-errors/range.d.ts +3 -0
  273. gaia/eval/webapp/node_modules/es-errors/range.js +4 -0
  274. gaia/eval/webapp/node_modules/es-errors/ref.d.ts +3 -0
  275. gaia/eval/webapp/node_modules/es-errors/ref.js +4 -0
  276. gaia/eval/webapp/node_modules/es-errors/syntax.d.ts +3 -0
  277. gaia/eval/webapp/node_modules/es-errors/syntax.js +4 -0
  278. gaia/eval/webapp/node_modules/es-errors/test/index.js +19 -0
  279. gaia/eval/webapp/node_modules/es-errors/tsconfig.json +49 -0
  280. gaia/eval/webapp/node_modules/es-errors/type.d.ts +3 -0
  281. gaia/eval/webapp/node_modules/es-errors/type.js +4 -0
  282. gaia/eval/webapp/node_modules/es-errors/uri.d.ts +3 -0
  283. gaia/eval/webapp/node_modules/es-errors/uri.js +4 -0
  284. gaia/eval/webapp/node_modules/es-object-atoms/.eslintrc +16 -0
  285. gaia/eval/webapp/node_modules/es-object-atoms/.github/FUNDING.yml +12 -0
  286. gaia/eval/webapp/node_modules/es-object-atoms/CHANGELOG.md +37 -0
  287. gaia/eval/webapp/node_modules/es-object-atoms/LICENSE +21 -0
  288. gaia/eval/webapp/node_modules/es-object-atoms/README.md +63 -0
  289. gaia/eval/webapp/node_modules/es-object-atoms/RequireObjectCoercible.d.ts +3 -0
  290. gaia/eval/webapp/node_modules/es-object-atoms/RequireObjectCoercible.js +11 -0
  291. gaia/eval/webapp/node_modules/es-object-atoms/ToObject.d.ts +7 -0
  292. gaia/eval/webapp/node_modules/es-object-atoms/ToObject.js +10 -0
  293. gaia/eval/webapp/node_modules/es-object-atoms/index.d.ts +3 -0
  294. gaia/eval/webapp/node_modules/es-object-atoms/index.js +4 -0
  295. gaia/eval/webapp/node_modules/es-object-atoms/isObject.d.ts +3 -0
  296. gaia/eval/webapp/node_modules/es-object-atoms/isObject.js +6 -0
  297. gaia/eval/webapp/node_modules/es-object-atoms/package.json +80 -0
  298. gaia/eval/webapp/node_modules/es-object-atoms/test/index.js +38 -0
  299. gaia/eval/webapp/node_modules/es-object-atoms/tsconfig.json +6 -0
  300. gaia/eval/webapp/node_modules/escape-html/LICENSE +24 -0
  301. gaia/eval/webapp/node_modules/escape-html/Readme.md +43 -0
  302. gaia/eval/webapp/node_modules/escape-html/index.js +78 -0
  303. gaia/eval/webapp/node_modules/escape-html/package.json +24 -0
  304. gaia/eval/webapp/node_modules/etag/HISTORY.md +83 -0
  305. gaia/eval/webapp/node_modules/etag/LICENSE +22 -0
  306. gaia/eval/webapp/node_modules/etag/README.md +159 -0
  307. gaia/eval/webapp/node_modules/etag/index.js +131 -0
  308. gaia/eval/webapp/node_modules/etag/package.json +47 -0
  309. gaia/eval/webapp/node_modules/express/History.md +3656 -0
  310. gaia/eval/webapp/node_modules/express/LICENSE +24 -0
  311. gaia/eval/webapp/node_modules/express/Readme.md +260 -0
  312. gaia/eval/webapp/node_modules/express/index.js +11 -0
  313. gaia/eval/webapp/node_modules/express/lib/application.js +661 -0
  314. gaia/eval/webapp/node_modules/express/lib/express.js +116 -0
  315. gaia/eval/webapp/node_modules/express/lib/middleware/init.js +43 -0
  316. gaia/eval/webapp/node_modules/express/lib/middleware/query.js +47 -0
  317. gaia/eval/webapp/node_modules/express/lib/request.js +525 -0
  318. gaia/eval/webapp/node_modules/express/lib/response.js +1179 -0
  319. gaia/eval/webapp/node_modules/express/lib/router/index.js +673 -0
  320. gaia/eval/webapp/node_modules/express/lib/router/layer.js +181 -0
  321. gaia/eval/webapp/node_modules/express/lib/router/route.js +230 -0
  322. gaia/eval/webapp/node_modules/express/lib/utils.js +303 -0
  323. gaia/eval/webapp/node_modules/express/lib/view.js +182 -0
  324. gaia/eval/webapp/node_modules/express/package.json +102 -0
  325. gaia/eval/webapp/node_modules/finalhandler/HISTORY.md +210 -0
  326. gaia/eval/webapp/node_modules/finalhandler/LICENSE +22 -0
  327. gaia/eval/webapp/node_modules/finalhandler/README.md +147 -0
  328. gaia/eval/webapp/node_modules/finalhandler/SECURITY.md +25 -0
  329. gaia/eval/webapp/node_modules/finalhandler/index.js +341 -0
  330. gaia/eval/webapp/node_modules/finalhandler/package.json +47 -0
  331. gaia/eval/webapp/node_modules/forwarded/HISTORY.md +21 -0
  332. gaia/eval/webapp/node_modules/forwarded/LICENSE +22 -0
  333. gaia/eval/webapp/node_modules/forwarded/README.md +57 -0
  334. gaia/eval/webapp/node_modules/forwarded/index.js +90 -0
  335. gaia/eval/webapp/node_modules/forwarded/package.json +45 -0
  336. gaia/eval/webapp/node_modules/fresh/HISTORY.md +70 -0
  337. gaia/eval/webapp/node_modules/fresh/LICENSE +23 -0
  338. gaia/eval/webapp/node_modules/fresh/README.md +119 -0
  339. gaia/eval/webapp/node_modules/fresh/index.js +137 -0
  340. gaia/eval/webapp/node_modules/fresh/package.json +46 -0
  341. gaia/eval/webapp/node_modules/fs/README.md +9 -0
  342. gaia/eval/webapp/node_modules/fs/package.json +20 -0
  343. gaia/eval/webapp/node_modules/function-bind/.eslintrc +21 -0
  344. gaia/eval/webapp/node_modules/function-bind/.github/FUNDING.yml +12 -0
  345. gaia/eval/webapp/node_modules/function-bind/.github/SECURITY.md +3 -0
  346. gaia/eval/webapp/node_modules/function-bind/.nycrc +13 -0
  347. gaia/eval/webapp/node_modules/function-bind/CHANGELOG.md +136 -0
  348. gaia/eval/webapp/node_modules/function-bind/LICENSE +20 -0
  349. gaia/eval/webapp/node_modules/function-bind/README.md +46 -0
  350. gaia/eval/webapp/node_modules/function-bind/implementation.js +84 -0
  351. gaia/eval/webapp/node_modules/function-bind/index.js +5 -0
  352. gaia/eval/webapp/node_modules/function-bind/package.json +87 -0
  353. gaia/eval/webapp/node_modules/function-bind/test/.eslintrc +9 -0
  354. gaia/eval/webapp/node_modules/function-bind/test/index.js +252 -0
  355. gaia/eval/webapp/node_modules/get-intrinsic/.eslintrc +42 -0
  356. gaia/eval/webapp/node_modules/get-intrinsic/.github/FUNDING.yml +12 -0
  357. gaia/eval/webapp/node_modules/get-intrinsic/.nycrc +9 -0
  358. gaia/eval/webapp/node_modules/get-intrinsic/CHANGELOG.md +186 -0
  359. gaia/eval/webapp/node_modules/get-intrinsic/LICENSE +21 -0
  360. gaia/eval/webapp/node_modules/get-intrinsic/README.md +71 -0
  361. gaia/eval/webapp/node_modules/get-intrinsic/index.js +378 -0
  362. gaia/eval/webapp/node_modules/get-intrinsic/package.json +97 -0
  363. gaia/eval/webapp/node_modules/get-intrinsic/test/GetIntrinsic.js +274 -0
  364. gaia/eval/webapp/node_modules/get-proto/.eslintrc +10 -0
  365. gaia/eval/webapp/node_modules/get-proto/.github/FUNDING.yml +12 -0
  366. gaia/eval/webapp/node_modules/get-proto/.nycrc +9 -0
  367. gaia/eval/webapp/node_modules/get-proto/CHANGELOG.md +21 -0
  368. gaia/eval/webapp/node_modules/get-proto/LICENSE +21 -0
  369. gaia/eval/webapp/node_modules/get-proto/Object.getPrototypeOf.d.ts +5 -0
  370. gaia/eval/webapp/node_modules/get-proto/Object.getPrototypeOf.js +6 -0
  371. gaia/eval/webapp/node_modules/get-proto/README.md +50 -0
  372. gaia/eval/webapp/node_modules/get-proto/Reflect.getPrototypeOf.d.ts +3 -0
  373. gaia/eval/webapp/node_modules/get-proto/Reflect.getPrototypeOf.js +4 -0
  374. gaia/eval/webapp/node_modules/get-proto/index.d.ts +5 -0
  375. gaia/eval/webapp/node_modules/get-proto/index.js +27 -0
  376. gaia/eval/webapp/node_modules/get-proto/package.json +81 -0
  377. gaia/eval/webapp/node_modules/get-proto/test/index.js +68 -0
  378. gaia/eval/webapp/node_modules/get-proto/tsconfig.json +9 -0
  379. gaia/eval/webapp/node_modules/gopd/.eslintrc +16 -0
  380. gaia/eval/webapp/node_modules/gopd/.github/FUNDING.yml +12 -0
  381. gaia/eval/webapp/node_modules/gopd/CHANGELOG.md +45 -0
  382. gaia/eval/webapp/node_modules/gopd/LICENSE +21 -0
  383. gaia/eval/webapp/node_modules/gopd/README.md +40 -0
  384. gaia/eval/webapp/node_modules/gopd/gOPD.d.ts +1 -0
  385. gaia/eval/webapp/node_modules/gopd/gOPD.js +4 -0
  386. gaia/eval/webapp/node_modules/gopd/index.d.ts +5 -0
  387. gaia/eval/webapp/node_modules/gopd/index.js +15 -0
  388. gaia/eval/webapp/node_modules/gopd/package.json +77 -0
  389. gaia/eval/webapp/node_modules/gopd/test/index.js +36 -0
  390. gaia/eval/webapp/node_modules/gopd/tsconfig.json +9 -0
  391. gaia/eval/webapp/node_modules/has-symbols/.eslintrc +11 -0
  392. gaia/eval/webapp/node_modules/has-symbols/.github/FUNDING.yml +12 -0
  393. gaia/eval/webapp/node_modules/has-symbols/.nycrc +9 -0
  394. gaia/eval/webapp/node_modules/has-symbols/CHANGELOG.md +91 -0
  395. gaia/eval/webapp/node_modules/has-symbols/LICENSE +21 -0
  396. gaia/eval/webapp/node_modules/has-symbols/README.md +46 -0
  397. gaia/eval/webapp/node_modules/has-symbols/index.d.ts +3 -0
  398. gaia/eval/webapp/node_modules/has-symbols/index.js +14 -0
  399. gaia/eval/webapp/node_modules/has-symbols/package.json +111 -0
  400. gaia/eval/webapp/node_modules/has-symbols/shams.d.ts +3 -0
  401. gaia/eval/webapp/node_modules/has-symbols/shams.js +45 -0
  402. gaia/eval/webapp/node_modules/has-symbols/test/index.js +22 -0
  403. gaia/eval/webapp/node_modules/has-symbols/test/shams/core-js.js +29 -0
  404. gaia/eval/webapp/node_modules/has-symbols/test/shams/get-own-property-symbols.js +29 -0
  405. gaia/eval/webapp/node_modules/has-symbols/test/tests.js +58 -0
  406. gaia/eval/webapp/node_modules/has-symbols/tsconfig.json +10 -0
  407. gaia/eval/webapp/node_modules/hasown/.eslintrc +5 -0
  408. gaia/eval/webapp/node_modules/hasown/.github/FUNDING.yml +12 -0
  409. gaia/eval/webapp/node_modules/hasown/.nycrc +13 -0
  410. gaia/eval/webapp/node_modules/hasown/CHANGELOG.md +40 -0
  411. gaia/eval/webapp/node_modules/hasown/LICENSE +21 -0
  412. gaia/eval/webapp/node_modules/hasown/README.md +40 -0
  413. gaia/eval/webapp/node_modules/hasown/index.d.ts +3 -0
  414. gaia/eval/webapp/node_modules/hasown/index.js +8 -0
  415. gaia/eval/webapp/node_modules/hasown/package.json +92 -0
  416. gaia/eval/webapp/node_modules/hasown/tsconfig.json +6 -0
  417. gaia/eval/webapp/node_modules/http-errors/HISTORY.md +180 -0
  418. gaia/eval/webapp/node_modules/http-errors/LICENSE +23 -0
  419. gaia/eval/webapp/node_modules/http-errors/README.md +169 -0
  420. gaia/eval/webapp/node_modules/http-errors/index.js +289 -0
  421. gaia/eval/webapp/node_modules/http-errors/package.json +50 -0
  422. gaia/eval/webapp/node_modules/iconv-lite/Changelog.md +162 -0
  423. gaia/eval/webapp/node_modules/iconv-lite/LICENSE +21 -0
  424. gaia/eval/webapp/node_modules/iconv-lite/README.md +156 -0
  425. gaia/eval/webapp/node_modules/iconv-lite/encodings/dbcs-codec.js +555 -0
  426. gaia/eval/webapp/node_modules/iconv-lite/encodings/dbcs-data.js +176 -0
  427. gaia/eval/webapp/node_modules/iconv-lite/encodings/index.js +22 -0
  428. gaia/eval/webapp/node_modules/iconv-lite/encodings/internal.js +188 -0
  429. gaia/eval/webapp/node_modules/iconv-lite/encodings/sbcs-codec.js +72 -0
  430. gaia/eval/webapp/node_modules/iconv-lite/encodings/sbcs-data-generated.js +451 -0
  431. gaia/eval/webapp/node_modules/iconv-lite/encodings/sbcs-data.js +174 -0
  432. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/big5-added.json +122 -0
  433. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/cp936.json +264 -0
  434. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/cp949.json +273 -0
  435. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/cp950.json +177 -0
  436. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/eucjp.json +182 -0
  437. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +1 -0
  438. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/gbk-added.json +55 -0
  439. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/shiftjis.json +125 -0
  440. gaia/eval/webapp/node_modules/iconv-lite/encodings/utf16.js +177 -0
  441. gaia/eval/webapp/node_modules/iconv-lite/encodings/utf7.js +290 -0
  442. gaia/eval/webapp/node_modules/iconv-lite/lib/bom-handling.js +52 -0
  443. gaia/eval/webapp/node_modules/iconv-lite/lib/extend-node.js +217 -0
  444. gaia/eval/webapp/node_modules/iconv-lite/lib/index.d.ts +24 -0
  445. gaia/eval/webapp/node_modules/iconv-lite/lib/index.js +153 -0
  446. gaia/eval/webapp/node_modules/iconv-lite/lib/streams.js +121 -0
  447. gaia/eval/webapp/node_modules/iconv-lite/package.json +46 -0
  448. gaia/eval/webapp/node_modules/inherits/LICENSE +16 -0
  449. gaia/eval/webapp/node_modules/inherits/README.md +42 -0
  450. gaia/eval/webapp/node_modules/inherits/inherits.js +9 -0
  451. gaia/eval/webapp/node_modules/inherits/inherits_browser.js +27 -0
  452. gaia/eval/webapp/node_modules/inherits/package.json +29 -0
  453. gaia/eval/webapp/node_modules/ipaddr.js/LICENSE +19 -0
  454. gaia/eval/webapp/node_modules/ipaddr.js/README.md +233 -0
  455. gaia/eval/webapp/node_modules/ipaddr.js/ipaddr.min.js +1 -0
  456. gaia/eval/webapp/node_modules/ipaddr.js/lib/ipaddr.js +673 -0
  457. gaia/eval/webapp/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +68 -0
  458. gaia/eval/webapp/node_modules/ipaddr.js/package.json +35 -0
  459. gaia/eval/webapp/node_modules/math-intrinsics/.eslintrc +16 -0
  460. gaia/eval/webapp/node_modules/math-intrinsics/.github/FUNDING.yml +12 -0
  461. gaia/eval/webapp/node_modules/math-intrinsics/CHANGELOG.md +24 -0
  462. gaia/eval/webapp/node_modules/math-intrinsics/LICENSE +21 -0
  463. gaia/eval/webapp/node_modules/math-intrinsics/README.md +50 -0
  464. gaia/eval/webapp/node_modules/math-intrinsics/abs.d.ts +1 -0
  465. gaia/eval/webapp/node_modules/math-intrinsics/abs.js +4 -0
  466. gaia/eval/webapp/node_modules/math-intrinsics/constants/maxArrayLength.d.ts +3 -0
  467. gaia/eval/webapp/node_modules/math-intrinsics/constants/maxArrayLength.js +4 -0
  468. gaia/eval/webapp/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts +3 -0
  469. gaia/eval/webapp/node_modules/math-intrinsics/constants/maxSafeInteger.js +5 -0
  470. gaia/eval/webapp/node_modules/math-intrinsics/constants/maxValue.d.ts +3 -0
  471. gaia/eval/webapp/node_modules/math-intrinsics/constants/maxValue.js +5 -0
  472. gaia/eval/webapp/node_modules/math-intrinsics/floor.d.ts +1 -0
  473. gaia/eval/webapp/node_modules/math-intrinsics/floor.js +4 -0
  474. gaia/eval/webapp/node_modules/math-intrinsics/isFinite.d.ts +3 -0
  475. gaia/eval/webapp/node_modules/math-intrinsics/isFinite.js +12 -0
  476. gaia/eval/webapp/node_modules/math-intrinsics/isInteger.d.ts +3 -0
  477. gaia/eval/webapp/node_modules/math-intrinsics/isInteger.js +16 -0
  478. gaia/eval/webapp/node_modules/math-intrinsics/isNaN.d.ts +1 -0
  479. gaia/eval/webapp/node_modules/math-intrinsics/isNaN.js +6 -0
  480. gaia/eval/webapp/node_modules/math-intrinsics/isNegativeZero.d.ts +3 -0
  481. gaia/eval/webapp/node_modules/math-intrinsics/isNegativeZero.js +6 -0
  482. gaia/eval/webapp/node_modules/math-intrinsics/max.d.ts +1 -0
  483. gaia/eval/webapp/node_modules/math-intrinsics/max.js +4 -0
  484. gaia/eval/webapp/node_modules/math-intrinsics/min.d.ts +1 -0
  485. gaia/eval/webapp/node_modules/math-intrinsics/min.js +4 -0
  486. gaia/eval/webapp/node_modules/math-intrinsics/mod.d.ts +3 -0
  487. gaia/eval/webapp/node_modules/math-intrinsics/mod.js +9 -0
  488. gaia/eval/webapp/node_modules/math-intrinsics/package.json +86 -0
  489. gaia/eval/webapp/node_modules/math-intrinsics/pow.d.ts +1 -0
  490. gaia/eval/webapp/node_modules/math-intrinsics/pow.js +4 -0
  491. gaia/eval/webapp/node_modules/math-intrinsics/round.d.ts +1 -0
  492. gaia/eval/webapp/node_modules/math-intrinsics/round.js +4 -0
  493. gaia/eval/webapp/node_modules/math-intrinsics/sign.d.ts +3 -0
  494. gaia/eval/webapp/node_modules/math-intrinsics/sign.js +11 -0
  495. gaia/eval/webapp/node_modules/math-intrinsics/test/index.js +192 -0
  496. gaia/eval/webapp/node_modules/math-intrinsics/tsconfig.json +3 -0
  497. gaia/eval/webapp/node_modules/media-typer/HISTORY.md +22 -0
  498. gaia/eval/webapp/node_modules/media-typer/LICENSE +22 -0
  499. gaia/eval/webapp/node_modules/media-typer/README.md +81 -0
  500. gaia/eval/webapp/node_modules/media-typer/index.js +270 -0
  501. gaia/eval/webapp/node_modules/media-typer/package.json +26 -0
  502. gaia/eval/webapp/node_modules/merge-descriptors/HISTORY.md +21 -0
  503. gaia/eval/webapp/node_modules/merge-descriptors/LICENSE +23 -0
  504. gaia/eval/webapp/node_modules/merge-descriptors/README.md +49 -0
  505. gaia/eval/webapp/node_modules/merge-descriptors/index.js +60 -0
  506. gaia/eval/webapp/node_modules/merge-descriptors/package.json +39 -0
  507. gaia/eval/webapp/node_modules/methods/HISTORY.md +29 -0
  508. gaia/eval/webapp/node_modules/methods/LICENSE +24 -0
  509. gaia/eval/webapp/node_modules/methods/README.md +51 -0
  510. gaia/eval/webapp/node_modules/methods/index.js +69 -0
  511. gaia/eval/webapp/node_modules/methods/package.json +36 -0
  512. gaia/eval/webapp/node_modules/mime/.npmignore +0 -0
  513. gaia/eval/webapp/node_modules/mime/CHANGELOG.md +164 -0
  514. gaia/eval/webapp/node_modules/mime/LICENSE +21 -0
  515. gaia/eval/webapp/node_modules/mime/README.md +90 -0
  516. gaia/eval/webapp/node_modules/mime/cli.js +8 -0
  517. gaia/eval/webapp/node_modules/mime/mime.js +108 -0
  518. gaia/eval/webapp/node_modules/mime/package.json +44 -0
  519. gaia/eval/webapp/node_modules/mime/src/build.js +53 -0
  520. gaia/eval/webapp/node_modules/mime/src/test.js +60 -0
  521. gaia/eval/webapp/node_modules/mime/types.json +1 -0
  522. gaia/eval/webapp/node_modules/mime-db/HISTORY.md +507 -0
  523. gaia/eval/webapp/node_modules/mime-db/LICENSE +23 -0
  524. gaia/eval/webapp/node_modules/mime-db/README.md +100 -0
  525. gaia/eval/webapp/node_modules/mime-db/db.json +8519 -0
  526. gaia/eval/webapp/node_modules/mime-db/index.js +12 -0
  527. gaia/eval/webapp/node_modules/mime-db/package.json +60 -0
  528. gaia/eval/webapp/node_modules/mime-types/HISTORY.md +397 -0
  529. gaia/eval/webapp/node_modules/mime-types/LICENSE +23 -0
  530. gaia/eval/webapp/node_modules/mime-types/README.md +113 -0
  531. gaia/eval/webapp/node_modules/mime-types/index.js +188 -0
  532. gaia/eval/webapp/node_modules/mime-types/package.json +44 -0
  533. gaia/eval/webapp/node_modules/ms/index.js +152 -0
  534. gaia/eval/webapp/node_modules/ms/license.md +21 -0
  535. gaia/eval/webapp/node_modules/ms/package.json +37 -0
  536. gaia/eval/webapp/node_modules/ms/readme.md +51 -0
  537. gaia/eval/webapp/node_modules/negotiator/HISTORY.md +108 -0
  538. gaia/eval/webapp/node_modules/negotiator/LICENSE +24 -0
  539. gaia/eval/webapp/node_modules/negotiator/README.md +203 -0
  540. gaia/eval/webapp/node_modules/negotiator/index.js +82 -0
  541. gaia/eval/webapp/node_modules/negotiator/lib/charset.js +169 -0
  542. gaia/eval/webapp/node_modules/negotiator/lib/encoding.js +184 -0
  543. gaia/eval/webapp/node_modules/negotiator/lib/language.js +179 -0
  544. gaia/eval/webapp/node_modules/negotiator/lib/mediaType.js +294 -0
  545. gaia/eval/webapp/node_modules/negotiator/package.json +42 -0
  546. gaia/eval/webapp/node_modules/object-inspect/.eslintrc +53 -0
  547. gaia/eval/webapp/node_modules/object-inspect/.github/FUNDING.yml +12 -0
  548. gaia/eval/webapp/node_modules/object-inspect/.nycrc +13 -0
  549. gaia/eval/webapp/node_modules/object-inspect/CHANGELOG.md +424 -0
  550. gaia/eval/webapp/node_modules/object-inspect/LICENSE +21 -0
  551. gaia/eval/webapp/node_modules/object-inspect/example/all.js +23 -0
  552. gaia/eval/webapp/node_modules/object-inspect/example/circular.js +6 -0
  553. gaia/eval/webapp/node_modules/object-inspect/example/fn.js +5 -0
  554. gaia/eval/webapp/node_modules/object-inspect/example/inspect.js +10 -0
  555. gaia/eval/webapp/node_modules/object-inspect/index.js +544 -0
  556. gaia/eval/webapp/node_modules/object-inspect/package-support.json +20 -0
  557. gaia/eval/webapp/node_modules/object-inspect/package.json +105 -0
  558. gaia/eval/webapp/node_modules/object-inspect/readme.markdown +84 -0
  559. gaia/eval/webapp/node_modules/object-inspect/test/bigint.js +58 -0
  560. gaia/eval/webapp/node_modules/object-inspect/test/browser/dom.js +15 -0
  561. gaia/eval/webapp/node_modules/object-inspect/test/circular.js +16 -0
  562. gaia/eval/webapp/node_modules/object-inspect/test/deep.js +12 -0
  563. gaia/eval/webapp/node_modules/object-inspect/test/element.js +53 -0
  564. gaia/eval/webapp/node_modules/object-inspect/test/err.js +48 -0
  565. gaia/eval/webapp/node_modules/object-inspect/test/fakes.js +29 -0
  566. gaia/eval/webapp/node_modules/object-inspect/test/fn.js +76 -0
  567. gaia/eval/webapp/node_modules/object-inspect/test/global.js +17 -0
  568. gaia/eval/webapp/node_modules/object-inspect/test/has.js +15 -0
  569. gaia/eval/webapp/node_modules/object-inspect/test/holes.js +15 -0
  570. gaia/eval/webapp/node_modules/object-inspect/test/indent-option.js +271 -0
  571. gaia/eval/webapp/node_modules/object-inspect/test/inspect.js +139 -0
  572. gaia/eval/webapp/node_modules/object-inspect/test/lowbyte.js +12 -0
  573. gaia/eval/webapp/node_modules/object-inspect/test/number.js +58 -0
  574. gaia/eval/webapp/node_modules/object-inspect/test/quoteStyle.js +26 -0
  575. gaia/eval/webapp/node_modules/object-inspect/test/toStringTag.js +40 -0
  576. gaia/eval/webapp/node_modules/object-inspect/test/undef.js +12 -0
  577. gaia/eval/webapp/node_modules/object-inspect/test/values.js +261 -0
  578. gaia/eval/webapp/node_modules/object-inspect/test-core-js.js +26 -0
  579. gaia/eval/webapp/node_modules/object-inspect/util.inspect.js +1 -0
  580. gaia/eval/webapp/node_modules/on-finished/HISTORY.md +98 -0
  581. gaia/eval/webapp/node_modules/on-finished/LICENSE +23 -0
  582. gaia/eval/webapp/node_modules/on-finished/README.md +162 -0
  583. gaia/eval/webapp/node_modules/on-finished/index.js +234 -0
  584. gaia/eval/webapp/node_modules/on-finished/package.json +39 -0
  585. gaia/eval/webapp/node_modules/parseurl/HISTORY.md +58 -0
  586. gaia/eval/webapp/node_modules/parseurl/LICENSE +24 -0
  587. gaia/eval/webapp/node_modules/parseurl/README.md +133 -0
  588. gaia/eval/webapp/node_modules/parseurl/index.js +158 -0
  589. gaia/eval/webapp/node_modules/parseurl/package.json +40 -0
  590. gaia/eval/webapp/node_modules/path/.npmignore +1 -0
  591. gaia/eval/webapp/node_modules/path/LICENSE +18 -0
  592. gaia/eval/webapp/node_modules/path/README.md +15 -0
  593. gaia/eval/webapp/node_modules/path/package.json +24 -0
  594. gaia/eval/webapp/node_modules/path/path.js +628 -0
  595. gaia/eval/webapp/node_modules/path-to-regexp/LICENSE +21 -0
  596. gaia/eval/webapp/node_modules/path-to-regexp/Readme.md +35 -0
  597. gaia/eval/webapp/node_modules/path-to-regexp/index.js +156 -0
  598. gaia/eval/webapp/node_modules/path-to-regexp/package.json +30 -0
  599. gaia/eval/webapp/node_modules/process/.eslintrc +21 -0
  600. gaia/eval/webapp/node_modules/process/LICENSE +22 -0
  601. gaia/eval/webapp/node_modules/process/README.md +26 -0
  602. gaia/eval/webapp/node_modules/process/browser.js +184 -0
  603. gaia/eval/webapp/node_modules/process/index.js +2 -0
  604. gaia/eval/webapp/node_modules/process/package.json +27 -0
  605. gaia/eval/webapp/node_modules/process/test.js +199 -0
  606. gaia/eval/webapp/node_modules/proxy-addr/HISTORY.md +161 -0
  607. gaia/eval/webapp/node_modules/proxy-addr/LICENSE +22 -0
  608. gaia/eval/webapp/node_modules/proxy-addr/README.md +139 -0
  609. gaia/eval/webapp/node_modules/proxy-addr/index.js +327 -0
  610. gaia/eval/webapp/node_modules/proxy-addr/package.json +47 -0
  611. gaia/eval/webapp/node_modules/qs/.editorconfig +46 -0
  612. gaia/eval/webapp/node_modules/qs/.eslintrc +38 -0
  613. gaia/eval/webapp/node_modules/qs/.github/FUNDING.yml +12 -0
  614. gaia/eval/webapp/node_modules/qs/.nycrc +13 -0
  615. gaia/eval/webapp/node_modules/qs/CHANGELOG.md +600 -0
  616. gaia/eval/webapp/node_modules/qs/LICENSE.md +29 -0
  617. gaia/eval/webapp/node_modules/qs/README.md +709 -0
  618. gaia/eval/webapp/node_modules/qs/dist/qs.js +90 -0
  619. gaia/eval/webapp/node_modules/qs/lib/formats.js +23 -0
  620. gaia/eval/webapp/node_modules/qs/lib/index.js +11 -0
  621. gaia/eval/webapp/node_modules/qs/lib/parse.js +296 -0
  622. gaia/eval/webapp/node_modules/qs/lib/stringify.js +351 -0
  623. gaia/eval/webapp/node_modules/qs/lib/utils.js +265 -0
  624. gaia/eval/webapp/node_modules/qs/package.json +91 -0
  625. gaia/eval/webapp/node_modules/qs/test/empty-keys-cases.js +267 -0
  626. gaia/eval/webapp/node_modules/qs/test/parse.js +1170 -0
  627. gaia/eval/webapp/node_modules/qs/test/stringify.js +1298 -0
  628. gaia/eval/webapp/node_modules/qs/test/utils.js +136 -0
  629. gaia/eval/webapp/node_modules/range-parser/HISTORY.md +56 -0
  630. gaia/eval/webapp/node_modules/range-parser/LICENSE +23 -0
  631. gaia/eval/webapp/node_modules/range-parser/README.md +84 -0
  632. gaia/eval/webapp/node_modules/range-parser/index.js +162 -0
  633. gaia/eval/webapp/node_modules/range-parser/package.json +44 -0
  634. gaia/eval/webapp/node_modules/raw-body/HISTORY.md +308 -0
  635. gaia/eval/webapp/node_modules/raw-body/LICENSE +22 -0
  636. gaia/eval/webapp/node_modules/raw-body/README.md +223 -0
  637. gaia/eval/webapp/node_modules/raw-body/SECURITY.md +24 -0
  638. gaia/eval/webapp/node_modules/raw-body/index.d.ts +87 -0
  639. gaia/eval/webapp/node_modules/raw-body/index.js +336 -0
  640. gaia/eval/webapp/node_modules/raw-body/package.json +49 -0
  641. gaia/eval/webapp/node_modules/safe-buffer/LICENSE +21 -0
  642. gaia/eval/webapp/node_modules/safe-buffer/README.md +584 -0
  643. gaia/eval/webapp/node_modules/safe-buffer/index.d.ts +187 -0
  644. gaia/eval/webapp/node_modules/safe-buffer/index.js +65 -0
  645. gaia/eval/webapp/node_modules/safe-buffer/package.json +51 -0
  646. gaia/eval/webapp/node_modules/safer-buffer/LICENSE +21 -0
  647. gaia/eval/webapp/node_modules/safer-buffer/Porting-Buffer.md +268 -0
  648. gaia/eval/webapp/node_modules/safer-buffer/Readme.md +156 -0
  649. gaia/eval/webapp/node_modules/safer-buffer/dangerous.js +58 -0
  650. gaia/eval/webapp/node_modules/safer-buffer/package.json +34 -0
  651. gaia/eval/webapp/node_modules/safer-buffer/safer.js +77 -0
  652. gaia/eval/webapp/node_modules/safer-buffer/tests.js +406 -0
  653. gaia/eval/webapp/node_modules/send/HISTORY.md +526 -0
  654. gaia/eval/webapp/node_modules/send/LICENSE +23 -0
  655. gaia/eval/webapp/node_modules/send/README.md +327 -0
  656. gaia/eval/webapp/node_modules/send/SECURITY.md +24 -0
  657. gaia/eval/webapp/node_modules/send/index.js +1142 -0
  658. gaia/eval/webapp/node_modules/send/node_modules/encodeurl/HISTORY.md +14 -0
  659. gaia/eval/webapp/node_modules/send/node_modules/encodeurl/LICENSE +22 -0
  660. gaia/eval/webapp/node_modules/send/node_modules/encodeurl/README.md +128 -0
  661. gaia/eval/webapp/node_modules/send/node_modules/encodeurl/index.js +60 -0
  662. gaia/eval/webapp/node_modules/send/node_modules/encodeurl/package.json +40 -0
  663. gaia/eval/webapp/node_modules/send/node_modules/ms/index.js +162 -0
  664. gaia/eval/webapp/node_modules/send/node_modules/ms/license.md +21 -0
  665. gaia/eval/webapp/node_modules/send/node_modules/ms/package.json +38 -0
  666. gaia/eval/webapp/node_modules/send/node_modules/ms/readme.md +59 -0
  667. gaia/eval/webapp/node_modules/send/package.json +62 -0
  668. gaia/eval/webapp/node_modules/serve-static/HISTORY.md +487 -0
  669. gaia/eval/webapp/node_modules/serve-static/LICENSE +25 -0
  670. gaia/eval/webapp/node_modules/serve-static/README.md +257 -0
  671. gaia/eval/webapp/node_modules/serve-static/index.js +209 -0
  672. gaia/eval/webapp/node_modules/serve-static/package.json +42 -0
  673. gaia/eval/webapp/node_modules/setprototypeof/LICENSE +13 -0
  674. gaia/eval/webapp/node_modules/setprototypeof/README.md +31 -0
  675. gaia/eval/webapp/node_modules/setprototypeof/index.d.ts +2 -0
  676. gaia/eval/webapp/node_modules/setprototypeof/index.js +17 -0
  677. gaia/eval/webapp/node_modules/setprototypeof/package.json +38 -0
  678. gaia/eval/webapp/node_modules/setprototypeof/test/index.js +24 -0
  679. gaia/eval/webapp/node_modules/side-channel/.editorconfig +9 -0
  680. gaia/eval/webapp/node_modules/side-channel/.eslintrc +12 -0
  681. gaia/eval/webapp/node_modules/side-channel/.github/FUNDING.yml +12 -0
  682. gaia/eval/webapp/node_modules/side-channel/.nycrc +13 -0
  683. gaia/eval/webapp/node_modules/side-channel/CHANGELOG.md +110 -0
  684. gaia/eval/webapp/node_modules/side-channel/LICENSE +21 -0
  685. gaia/eval/webapp/node_modules/side-channel/README.md +61 -0
  686. gaia/eval/webapp/node_modules/side-channel/index.d.ts +14 -0
  687. gaia/eval/webapp/node_modules/side-channel/index.js +43 -0
  688. gaia/eval/webapp/node_modules/side-channel/package.json +85 -0
  689. gaia/eval/webapp/node_modules/side-channel/test/index.js +104 -0
  690. gaia/eval/webapp/node_modules/side-channel/tsconfig.json +9 -0
  691. gaia/eval/webapp/node_modules/side-channel-list/.editorconfig +9 -0
  692. gaia/eval/webapp/node_modules/side-channel-list/.eslintrc +11 -0
  693. gaia/eval/webapp/node_modules/side-channel-list/.github/FUNDING.yml +12 -0
  694. gaia/eval/webapp/node_modules/side-channel-list/.nycrc +13 -0
  695. gaia/eval/webapp/node_modules/side-channel-list/CHANGELOG.md +15 -0
  696. gaia/eval/webapp/node_modules/side-channel-list/LICENSE +21 -0
  697. gaia/eval/webapp/node_modules/side-channel-list/README.md +62 -0
  698. gaia/eval/webapp/node_modules/side-channel-list/index.d.ts +13 -0
  699. gaia/eval/webapp/node_modules/side-channel-list/index.js +113 -0
  700. gaia/eval/webapp/node_modules/side-channel-list/list.d.ts +14 -0
  701. gaia/eval/webapp/node_modules/side-channel-list/package.json +77 -0
  702. gaia/eval/webapp/node_modules/side-channel-list/test/index.js +104 -0
  703. gaia/eval/webapp/node_modules/side-channel-list/tsconfig.json +9 -0
  704. gaia/eval/webapp/node_modules/side-channel-map/.editorconfig +9 -0
  705. gaia/eval/webapp/node_modules/side-channel-map/.eslintrc +11 -0
  706. gaia/eval/webapp/node_modules/side-channel-map/.github/FUNDING.yml +12 -0
  707. gaia/eval/webapp/node_modules/side-channel-map/.nycrc +13 -0
  708. gaia/eval/webapp/node_modules/side-channel-map/CHANGELOG.md +22 -0
  709. gaia/eval/webapp/node_modules/side-channel-map/LICENSE +21 -0
  710. gaia/eval/webapp/node_modules/side-channel-map/README.md +62 -0
  711. gaia/eval/webapp/node_modules/side-channel-map/index.d.ts +15 -0
  712. gaia/eval/webapp/node_modules/side-channel-map/index.js +68 -0
  713. gaia/eval/webapp/node_modules/side-channel-map/package.json +80 -0
  714. gaia/eval/webapp/node_modules/side-channel-map/test/index.js +114 -0
  715. gaia/eval/webapp/node_modules/side-channel-map/tsconfig.json +9 -0
  716. gaia/eval/webapp/node_modules/side-channel-weakmap/.editorconfig +9 -0
  717. gaia/eval/webapp/node_modules/side-channel-weakmap/.eslintrc +12 -0
  718. gaia/eval/webapp/node_modules/side-channel-weakmap/.github/FUNDING.yml +12 -0
  719. gaia/eval/webapp/node_modules/side-channel-weakmap/.nycrc +13 -0
  720. gaia/eval/webapp/node_modules/side-channel-weakmap/CHANGELOG.md +28 -0
  721. gaia/eval/webapp/node_modules/side-channel-weakmap/LICENSE +21 -0
  722. gaia/eval/webapp/node_modules/side-channel-weakmap/README.md +62 -0
  723. gaia/eval/webapp/node_modules/side-channel-weakmap/index.d.ts +15 -0
  724. gaia/eval/webapp/node_modules/side-channel-weakmap/index.js +84 -0
  725. gaia/eval/webapp/node_modules/side-channel-weakmap/package.json +87 -0
  726. gaia/eval/webapp/node_modules/side-channel-weakmap/test/index.js +114 -0
  727. gaia/eval/webapp/node_modules/side-channel-weakmap/tsconfig.json +9 -0
  728. gaia/eval/webapp/node_modules/statuses/HISTORY.md +82 -0
  729. gaia/eval/webapp/node_modules/statuses/LICENSE +23 -0
  730. gaia/eval/webapp/node_modules/statuses/README.md +136 -0
  731. gaia/eval/webapp/node_modules/statuses/codes.json +65 -0
  732. gaia/eval/webapp/node_modules/statuses/index.js +146 -0
  733. gaia/eval/webapp/node_modules/statuses/package.json +49 -0
  734. gaia/eval/webapp/node_modules/toidentifier/HISTORY.md +9 -0
  735. gaia/eval/webapp/node_modules/toidentifier/LICENSE +21 -0
  736. gaia/eval/webapp/node_modules/toidentifier/README.md +61 -0
  737. gaia/eval/webapp/node_modules/toidentifier/index.js +32 -0
  738. gaia/eval/webapp/node_modules/toidentifier/package.json +38 -0
  739. gaia/eval/webapp/node_modules/type-is/HISTORY.md +259 -0
  740. gaia/eval/webapp/node_modules/type-is/LICENSE +23 -0
  741. gaia/eval/webapp/node_modules/type-is/README.md +170 -0
  742. gaia/eval/webapp/node_modules/type-is/index.js +266 -0
  743. gaia/eval/webapp/node_modules/type-is/package.json +45 -0
  744. gaia/eval/webapp/node_modules/unpipe/HISTORY.md +4 -0
  745. gaia/eval/webapp/node_modules/unpipe/LICENSE +22 -0
  746. gaia/eval/webapp/node_modules/unpipe/README.md +43 -0
  747. gaia/eval/webapp/node_modules/unpipe/index.js +69 -0
  748. gaia/eval/webapp/node_modules/unpipe/package.json +27 -0
  749. gaia/eval/webapp/node_modules/util/LICENSE +18 -0
  750. gaia/eval/webapp/node_modules/util/README.md +15 -0
  751. gaia/eval/webapp/node_modules/util/node_modules/inherits/LICENSE +16 -0
  752. gaia/eval/webapp/node_modules/util/node_modules/inherits/README.md +42 -0
  753. gaia/eval/webapp/node_modules/util/node_modules/inherits/inherits.js +7 -0
  754. gaia/eval/webapp/node_modules/util/node_modules/inherits/inherits_browser.js +23 -0
  755. gaia/eval/webapp/node_modules/util/node_modules/inherits/package.json +29 -0
  756. gaia/eval/webapp/node_modules/util/package.json +35 -0
  757. gaia/eval/webapp/node_modules/util/support/isBuffer.js +3 -0
  758. gaia/eval/webapp/node_modules/util/support/isBufferBrowser.js +6 -0
  759. gaia/eval/webapp/node_modules/util/util.js +586 -0
  760. gaia/eval/webapp/node_modules/utils-merge/.npmignore +9 -0
  761. gaia/eval/webapp/node_modules/utils-merge/LICENSE +20 -0
  762. gaia/eval/webapp/node_modules/utils-merge/README.md +34 -0
  763. gaia/eval/webapp/node_modules/utils-merge/index.js +23 -0
  764. gaia/eval/webapp/node_modules/utils-merge/package.json +40 -0
  765. gaia/eval/webapp/node_modules/vary/HISTORY.md +39 -0
  766. gaia/eval/webapp/node_modules/vary/LICENSE +22 -0
  767. gaia/eval/webapp/node_modules/vary/README.md +101 -0
  768. gaia/eval/webapp/node_modules/vary/index.js +149 -0
  769. gaia/eval/webapp/node_modules/vary/package.json +43 -0
  770. gaia/eval/webapp/package-lock.json +875 -0
  771. gaia/eval/webapp/package.json +21 -0
  772. gaia/eval/webapp/public/app.js +3403 -0
  773. gaia/eval/webapp/public/index.html +88 -0
  774. gaia/eval/webapp/public/styles.css +3661 -0
  775. gaia/eval/webapp/server.js +416 -0
  776. gaia/eval/webapp/test-setup.js +73 -0
  777. gaia/llm/__init__.py +2 -0
  778. gaia/llm/lemonade_client.py +3083 -0
  779. gaia/llm/lemonade_manager.py +269 -0
  780. gaia/llm/llm_client.py +729 -0
  781. gaia/llm/vlm_client.py +307 -0
  782. gaia/logger.py +189 -0
  783. gaia/mcp/agent_mcp_server.py +245 -0
  784. gaia/mcp/blender_mcp_client.py +138 -0
  785. gaia/mcp/blender_mcp_server.py +648 -0
  786. gaia/mcp/context7_cache.py +332 -0
  787. gaia/mcp/external_services.py +518 -0
  788. gaia/mcp/mcp_bridge.py +550 -0
  789. gaia/mcp/servers/__init__.py +6 -0
  790. gaia/mcp/servers/docker_mcp.py +83 -0
  791. gaia/rag/__init__.py +10 -0
  792. gaia/rag/app.py +293 -0
  793. gaia/rag/demo.py +304 -0
  794. gaia/rag/pdf_utils.py +235 -0
  795. gaia/rag/sdk.py +2194 -0
  796. gaia/security.py +163 -0
  797. gaia/talk/app.py +289 -0
  798. gaia/talk/sdk.py +538 -0
  799. gaia/util.py +46 -0
  800. gaia/version.py +100 -0
@@ -0,0 +1,3661 @@
1
+ /* Global Styles */
2
+ * {
3
+ margin: 0;
4
+ padding: 0;
5
+ box-sizing: border-box;
6
+ }
7
+
8
+ body {
9
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
10
+ line-height: 1.6;
11
+ color: #333;
12
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
13
+ min-height: 100vh;
14
+ }
15
+
16
+ .container {
17
+ max-width: 1800px;
18
+ width: 95%;
19
+ margin: 0 auto;
20
+ padding: 20px;
21
+ }
22
+
23
+ /* Header */
24
+ header {
25
+ text-align: center;
26
+ margin-bottom: 40px;
27
+ padding: 40px 0;
28
+ background: rgba(255, 255, 255, 0.95);
29
+ backdrop-filter: blur(10px);
30
+ border-radius: 20px;
31
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
32
+ border: 1px solid rgba(255, 255, 255, 0.2);
33
+ }
34
+
35
+ .header-content h1 {
36
+ color: #2c3e50;
37
+ font-size: 3em;
38
+ font-weight: 700;
39
+ margin-bottom: 15px;
40
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
41
+ -webkit-background-clip: text;
42
+ -webkit-text-fill-color: transparent;
43
+ background-clip: text;
44
+ }
45
+
46
+ .subtitle {
47
+ color: #6c757d;
48
+ font-size: 1.3em;
49
+ margin-bottom: 25px;
50
+ font-weight: 400;
51
+ }
52
+
53
+ .features {
54
+ display: flex;
55
+ justify-content: center;
56
+ flex-wrap: wrap;
57
+ gap: 15px;
58
+ margin-top: 20px;
59
+ }
60
+
61
+ .feature {
62
+ background: rgba(102, 126, 234, 0.1);
63
+ color: #667eea;
64
+ padding: 8px 16px;
65
+ border-radius: 20px;
66
+ font-size: 0.9em;
67
+ font-weight: 500;
68
+ border: 1px solid rgba(102, 126, 234, 0.2);
69
+ transition: all 0.3s ease;
70
+ }
71
+
72
+ .feature:hover {
73
+ background: rgba(102, 126, 234, 0.2);
74
+ transform: translateY(-2px);
75
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.3);
76
+ }
77
+
78
+ /* Custom Tooltips */
79
+ .feature[data-tooltip] {
80
+ position: relative;
81
+ cursor: help;
82
+ }
83
+
84
+ .feature[data-tooltip]::before {
85
+ content: attr(data-tooltip);
86
+ position: absolute;
87
+ bottom: 100%;
88
+ left: 50%;
89
+ transform: translateX(-50%);
90
+ background: rgba(45, 55, 72, 0.95);
91
+ color: white;
92
+ padding: 12px 16px;
93
+ border-radius: 12px;
94
+ font-size: 0.85em;
95
+ font-weight: 400;
96
+ line-height: 1.4;
97
+ white-space: normal;
98
+ max-width: 280px;
99
+ width: max-content;
100
+ text-align: center;
101
+ opacity: 0;
102
+ visibility: hidden;
103
+ transition: all 0.3s ease;
104
+ margin-bottom: 8px;
105
+ backdrop-filter: blur(10px);
106
+ border: 1px solid rgba(255, 255, 255, 0.1);
107
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
108
+ z-index: 1000;
109
+ }
110
+
111
+ .feature[data-tooltip]::after {
112
+ content: '';
113
+ position: absolute;
114
+ bottom: 100%;
115
+ left: 50%;
116
+ transform: translateX(-50%);
117
+ width: 0;
118
+ height: 0;
119
+ border-style: solid;
120
+ border-width: 8px 8px 0 8px;
121
+ border-color: rgba(45, 55, 72, 0.95) transparent transparent transparent;
122
+ opacity: 0;
123
+ visibility: hidden;
124
+ transition: all 0.3s ease;
125
+ margin-bottom: -1px;
126
+ z-index: 1001;
127
+ }
128
+
129
+ .feature[data-tooltip]:hover::before,
130
+ .feature[data-tooltip]:hover::after {
131
+ opacity: 1;
132
+ visibility: visible;
133
+ transform: translateX(-50%) translateY(-5px);
134
+ }
135
+
136
+ /* Controls Section */
137
+ .controls {
138
+ background: rgba(255, 255, 255, 0.95);
139
+ backdrop-filter: blur(10px);
140
+ padding: 30px;
141
+ border-radius: 20px;
142
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
143
+ border: 1px solid rgba(255, 255, 255, 0.2);
144
+ margin-bottom: 30px;
145
+ transition: all 0.3s ease;
146
+ }
147
+
148
+ .controls:hover {
149
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15);
150
+ }
151
+
152
+ .file-selector h3 {
153
+ color: #2c3e50;
154
+ margin-bottom: 20px;
155
+ font-size: 1.4em;
156
+ }
157
+
158
+ .file-lists {
159
+ display: grid;
160
+ grid-template-columns: 1fr 1fr 1fr 1fr;
161
+ gap: 20px;
162
+ margin-bottom: 20px;
163
+ }
164
+
165
+ .experiments-list, .evaluations-list, .test-data-list, .groundtruth-list {
166
+ background: #f8f9fa;
167
+ padding: 15px;
168
+ border-radius: 8px;
169
+ border: 1px solid #dee2e6;
170
+ }
171
+
172
+ .experiments-list h4, .evaluations-list h4, .test-data-list h4, .groundtruth-list h4 {
173
+ color: #495057;
174
+ margin-bottom: 10px;
175
+ font-size: 1.1em;
176
+ }
177
+
178
+ select {
179
+ width: 100%;
180
+ padding: 8px;
181
+ border: 1px solid #ced4da;
182
+ border-radius: 5px;
183
+ font-size: 14px;
184
+ background: white;
185
+ }
186
+
187
+ select:focus {
188
+ outline: none;
189
+ border-color: #007bff;
190
+ box-shadow: 0 0 0 2px rgba(0,123,255,0.25);
191
+ }
192
+
193
+ /* Buttons */
194
+ .action-buttons {
195
+ display: flex;
196
+ gap: 15px;
197
+ justify-content: center;
198
+ margin-top: 20px;
199
+ }
200
+
201
+ .btn-primary, .btn-secondary {
202
+ padding: 12px 24px;
203
+ border: none;
204
+ border-radius: 25px;
205
+ font-size: 14px;
206
+ font-weight: 600;
207
+ cursor: pointer;
208
+ transition: all 0.3s ease;
209
+ position: relative;
210
+ overflow: hidden;
211
+ }
212
+
213
+ .btn-primary {
214
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
215
+ color: white;
216
+ box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3);
217
+ }
218
+
219
+ .btn-primary:hover {
220
+ transform: translateY(-2px);
221
+ box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4);
222
+ }
223
+
224
+ .btn-secondary {
225
+ background: rgba(108, 117, 125, 0.1);
226
+ color: #6c757d;
227
+ border: 1px solid rgba(108, 117, 125, 0.3);
228
+ backdrop-filter: blur(10px);
229
+ }
230
+
231
+ .btn-secondary:hover {
232
+ background: rgba(108, 117, 125, 0.2);
233
+ transform: translateY(-1px);
234
+ box-shadow: 0 4px 12px rgba(108, 117, 125, 0.2);
235
+ }
236
+
237
+ /* Reports Container */
238
+ .reports-container {
239
+ min-height: 400px;
240
+ }
241
+
242
+ .reports-grid {
243
+ display: grid;
244
+ grid-template-columns: repeat(auto-fit, minmax(500px, 1fr));
245
+ gap: 20px;
246
+ }
247
+
248
+ .empty-state {
249
+ grid-column: 1 / -1;
250
+ text-align: center;
251
+ padding: 60px 20px;
252
+ color: #6c757d;
253
+ background: white;
254
+ border-radius: 10px;
255
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
256
+ }
257
+
258
+ .empty-state h3 {
259
+ margin-bottom: 10px;
260
+ font-size: 1.5em;
261
+ }
262
+
263
+ /* Report Cards */
264
+ .report-card {
265
+ background: rgba(255, 255, 255, 0.95);
266
+ backdrop-filter: blur(10px);
267
+ border-radius: 20px;
268
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
269
+ border: 1px solid rgba(255, 255, 255, 0.2);
270
+ overflow: hidden; /* Clip content to rounded corners */
271
+ transition: all 0.3s ease;
272
+ position: relative;
273
+ z-index: 0; /* Base level for report card */
274
+ }
275
+
276
+ /* Allow overflow for specific sections that need it (tooltips) */
277
+ .report-card .metrics-section,
278
+ .report-card .charts-section-vertical {
279
+ overflow: visible;
280
+ }
281
+
282
+ .report-card:hover {
283
+ transform: translateY(-5px);
284
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.2);
285
+ }
286
+
287
+ .report-header {
288
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
289
+ color: white;
290
+ padding: 20px;
291
+ position: relative;
292
+ border-radius: 20px 20px 0 0; /* Match parent's border-radius on top corners */
293
+ }
294
+
295
+ .report-header h3 {
296
+ font-size: 1.3em;
297
+ margin-bottom: 5px;
298
+ margin-right: 100px; /* Make room for action buttons */
299
+ }
300
+
301
+ .report-header .meta {
302
+ opacity: 0.9;
303
+ font-size: 0.9em;
304
+ }
305
+
306
+ .report-actions {
307
+ position: absolute;
308
+ top: 15px;
309
+ right: 15px;
310
+ display: flex;
311
+ align-items: center;
312
+ gap: 10px;
313
+ }
314
+
315
+ .report-actions .export-btn {
316
+ background: rgba(255, 255, 255, 0.2);
317
+ border: 1px solid rgba(255, 255, 255, 0.3);
318
+ color: white;
319
+ }
320
+
321
+ .report-actions .export-btn:hover {
322
+ background: rgba(255, 255, 255, 0.3);
323
+ }
324
+
325
+ .report-close {
326
+ background: rgba(255,255,255,0.2);
327
+ border: none;
328
+ color: white;
329
+ width: 25px;
330
+ height: 25px;
331
+ border-radius: 50%;
332
+ cursor: pointer;
333
+ font-size: 16px;
334
+ display: flex;
335
+ align-items: center;
336
+ justify-content: center;
337
+ }
338
+
339
+ .report-close:hover {
340
+ background: rgba(255,255,255,0.3);
341
+ }
342
+
343
+ .report-content {
344
+ padding: 20px;
345
+ overflow: visible !important; /* Allow tooltips to overflow */
346
+ position: relative;
347
+ }
348
+
349
+ /* Metrics Grid */
350
+ .metrics-grid {
351
+ display: grid;
352
+ grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
353
+ gap: 15px;
354
+ margin-bottom: 20px;
355
+ }
356
+
357
+ .metric-card {
358
+ text-align: center;
359
+ padding: 15px;
360
+ background: #f8f9fa;
361
+ border-radius: 8px;
362
+ border: 1px solid #e9ecef;
363
+ }
364
+
365
+ .metric-value {
366
+ font-size: 1.8em;
367
+ font-weight: bold;
368
+ color: #2c3e50;
369
+ margin-bottom: 5px;
370
+ word-break: break-word;
371
+ line-height: 1.2;
372
+ }
373
+
374
+ .metric-label {
375
+ font-size: 0.85em;
376
+ color: #6c757d;
377
+ text-transform: uppercase;
378
+ letter-spacing: 0.5px;
379
+ }
380
+
381
+ /* Cost Breakdown Section */
382
+ .cost-breakdown-section {
383
+ margin: 20px 0;
384
+ }
385
+
386
+ .cost-breakdown-section h4 {
387
+ color: #2c3e50;
388
+ margin-bottom: 15px;
389
+ font-size: 1.1em;
390
+ }
391
+
392
+ .cost-grid {
393
+ display: grid;
394
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
395
+ gap: 15px;
396
+ margin-bottom: 20px;
397
+ }
398
+
399
+ .cost-card {
400
+ background: linear-gradient(135deg, #ffeaa7 0%, #fdcb6e 100%);
401
+ border-radius: 10px;
402
+ padding: 15px;
403
+ text-align: center;
404
+ box-shadow: 0 2px 8px rgba(253, 203, 110, 0.3);
405
+ transition: transform 0.2s, box-shadow 0.2s;
406
+ }
407
+
408
+ .cost-card:hover {
409
+ transform: translateY(-2px);
410
+ box-shadow: 0 4px 12px rgba(253, 203, 110, 0.4);
411
+ }
412
+
413
+ .cost-value {
414
+ font-size: 1.4em;
415
+ font-weight: bold;
416
+ color: #2d3436;
417
+ margin-bottom: 5px;
418
+ }
419
+
420
+ .cost-label {
421
+ font-size: 0.85em;
422
+ color: #636e72;
423
+ text-transform: uppercase;
424
+ letter-spacing: 0.5px;
425
+ }
426
+
427
+ .cost-banner-free {
428
+ background: linear-gradient(135deg, #00b894 0%, #00cec9 100%);
429
+ border-radius: 12px;
430
+ padding: 20px;
431
+ display: flex;
432
+ align-items: center;
433
+ gap: 15px;
434
+ box-shadow: 0 4px 12px rgba(0, 184, 148, 0.3);
435
+ animation: subtle-pulse 3s ease-in-out infinite;
436
+ }
437
+
438
+ @keyframes subtle-pulse {
439
+ 0%, 100% { transform: scale(1); }
440
+ 50% { transform: scale(1.01); }
441
+ }
442
+
443
+ .cost-banner-icon {
444
+ font-size: 2.5em;
445
+ }
446
+
447
+ .cost-banner-text {
448
+ flex: 1;
449
+ }
450
+
451
+ .cost-banner-title {
452
+ color: white;
453
+ font-size: 1.3em;
454
+ font-weight: bold;
455
+ margin-bottom: 5px;
456
+ }
457
+
458
+ .cost-banner-subtitle {
459
+ color: rgba(255, 255, 255, 0.9);
460
+ font-size: 0.95em;
461
+ }
462
+
463
+ /* Timing Section */
464
+ .timing-grid {
465
+ display: grid;
466
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
467
+ gap: 20px;
468
+ margin: 20px 0;
469
+ }
470
+
471
+ .timing-card {
472
+ background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
473
+ border-radius: 12px;
474
+ padding: 20px;
475
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
476
+ transition: transform 0.2s, box-shadow 0.2s;
477
+ }
478
+
479
+ .timing-card:hover {
480
+ transform: translateY(-2px);
481
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
482
+ }
483
+
484
+ .timing-header {
485
+ font-weight: 600;
486
+ color: #2c3e50;
487
+ margin-bottom: 15px;
488
+ font-size: 1.1em;
489
+ border-bottom: 2px solid rgba(102, 126, 234, 0.3);
490
+ padding-bottom: 8px;
491
+ }
492
+
493
+ .timing-metrics {
494
+ display: grid;
495
+ grid-template-columns: repeat(auto-fit, minmax(60px, 1fr));
496
+ gap: 10px;
497
+ }
498
+
499
+ .timing-stat {
500
+ text-align: center;
501
+ padding: 5px;
502
+ }
503
+
504
+ .timing-value {
505
+ display: block;
506
+ font-size: 1.2em;
507
+ font-weight: bold;
508
+ color: #667eea;
509
+ margin-bottom: 3px;
510
+ }
511
+
512
+ .timing-label {
513
+ display: block;
514
+ font-size: 0.75em;
515
+ color: #6c757d;
516
+ text-transform: uppercase;
517
+ letter-spacing: 0.5px;
518
+ }
519
+
520
+ /* Quality Ratings */
521
+ .quality-section {
522
+ margin-top: 20px;
523
+ }
524
+
525
+ .quality-section h4 {
526
+ color: #2c3e50;
527
+ margin-bottom: 15px;
528
+ font-size: 1.1em;
529
+ }
530
+
531
+ .quality-item {
532
+ display: flex;
533
+ justify-content: space-between;
534
+ align-items: center;
535
+ padding: 8px 0;
536
+ border-bottom: 1px solid #e9ecef;
537
+ }
538
+
539
+ .quality-item:last-child {
540
+ border-bottom: none;
541
+ }
542
+
543
+ .quality-label {
544
+ font-size: 0.9em;
545
+ color: #495057;
546
+ }
547
+
548
+ .quality-rating {
549
+ padding: 4px 12px;
550
+ border-radius: 15px;
551
+ font-size: 0.8em;
552
+ font-weight: 600;
553
+ text-transform: uppercase;
554
+ }
555
+
556
+ .rating-excellent {
557
+ background: #d4edda;
558
+ color: #155724;
559
+ }
560
+
561
+ .rating-good {
562
+ background: #d1ecf1;
563
+ color: #0c5460;
564
+ }
565
+
566
+ .rating-fair {
567
+ background: #fff3cd;
568
+ color: #856404;
569
+ }
570
+
571
+ .rating-poor {
572
+ background: #f8d7da;
573
+ color: #721c24;
574
+ }
575
+
576
+ /* Experiment Details */
577
+ .experiment-details {
578
+ margin-top: 20px;
579
+ }
580
+
581
+ .experiment-details h4 {
582
+ color: #2c3e50;
583
+ margin-bottom: 15px;
584
+ font-size: 1.1em;
585
+ }
586
+
587
+ .detail-grid {
588
+ display: grid;
589
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
590
+ gap: 10px;
591
+ font-size: 0.9em;
592
+ }
593
+
594
+ .detail-grid > div {
595
+ padding: 8px;
596
+ background: #f8f9fa;
597
+ border-radius: 5px;
598
+ border: 1px solid #e9ecef;
599
+ }
600
+
601
+ /* Collapsible Sections */
602
+ .collapsible-section {
603
+ margin-top: 20px;
604
+ border: 1px solid #e9ecef;
605
+ border-radius: 8px;
606
+ overflow: hidden;
607
+ }
608
+
609
+ .collapsible-header {
610
+ padding: 12px 15px;
611
+ background: #f8f9fa;
612
+ cursor: pointer;
613
+ display: flex;
614
+ justify-content: space-between;
615
+ align-items: center;
616
+ transition: background-color 0.2s ease;
617
+ user-select: none;
618
+ }
619
+
620
+ .collapsible-header:hover {
621
+ background: #e9ecef;
622
+ }
623
+
624
+ .collapsible-header h4 {
625
+ margin: 0;
626
+ color: #2c3e50;
627
+ font-size: 1.1em;
628
+ }
629
+
630
+ .collapsible-toggle {
631
+ color: #6c757d;
632
+ font-size: 1.2em;
633
+ transition: transform 0.2s ease;
634
+ }
635
+
636
+ .collapsible-toggle.expanded {
637
+ transform: rotate(90deg);
638
+ }
639
+
640
+ .collapsible-content {
641
+ max-height: 0;
642
+ overflow: hidden;
643
+ transition: max-height 0.3s ease;
644
+ }
645
+
646
+ .collapsible-content.expanded {
647
+ max-height: 5000px;
648
+ }
649
+
650
+ .collapsible-body {
651
+ padding: 15px;
652
+ background: white;
653
+ }
654
+
655
+ .evaluation-summary {
656
+ background: white;
657
+ padding: 25px;
658
+ border-radius: 10px;
659
+ margin-bottom: 25px;
660
+ box-shadow: 0 2px 8px rgba(0,0,0,0.05);
661
+ }
662
+
663
+ .evaluation-summary h4 {
664
+ color: #2c3e50;
665
+ margin-bottom: 20px;
666
+ font-size: 1.2em;
667
+ border-bottom: 2px solid #e9ecef;
668
+ padding-bottom: 10px;
669
+ }
670
+
671
+ .summary-item {
672
+ margin-bottom: 20px;
673
+ }
674
+
675
+ .summary-item:last-child {
676
+ margin-bottom: 0;
677
+ }
678
+
679
+ .summary-label {
680
+ font-weight: 600;
681
+ color: #495057;
682
+ margin-bottom: 8px;
683
+ font-size: 0.9em;
684
+ text-transform: uppercase;
685
+ letter-spacing: 0.5px;
686
+ }
687
+
688
+ .summary-text {
689
+ background: #f8f9fa;
690
+ padding: 12px;
691
+ border-radius: 6px;
692
+ border-left: 4px solid #007bff;
693
+ line-height: 1.6;
694
+ font-size: 0.9em;
695
+ white-space: pre-wrap;
696
+ max-height: 400px;
697
+ overflow-y: auto;
698
+ word-wrap: break-word;
699
+ }
700
+
701
+ .summary-list {
702
+ background: #f8f9fa;
703
+ padding: 12px 12px 12px 32px;
704
+ border-radius: 6px;
705
+ border-left: 4px solid #007bff;
706
+ line-height: 1.6;
707
+ font-size: 0.9em;
708
+ margin: 0;
709
+ }
710
+
711
+ .summary-list li {
712
+ margin-bottom: 8px;
713
+ }
714
+
715
+ .summary-list li:last-child {
716
+ margin-bottom: 0;
717
+ }
718
+
719
+ .explanation-item {
720
+ margin-bottom: 15px;
721
+ padding: 12px;
722
+ background: #f8f9fa;
723
+ border-radius: 6px;
724
+ border-left: 4px solid #28a745;
725
+ }
726
+
727
+ /* Quality score badges */
728
+ .quality-excellent {
729
+ background: #28a745;
730
+ color: white;
731
+ padding: 2px 6px;
732
+ border-radius: 8px;
733
+ font-size: 0.65em;
734
+ font-weight: 500;
735
+ margin-left: 4px;
736
+ white-space: nowrap;
737
+ vertical-align: middle;
738
+ }
739
+
740
+ .quality-good {
741
+ background: #17a2b8;
742
+ color: white;
743
+ padding: 2px 6px;
744
+ border-radius: 8px;
745
+ font-size: 0.65em;
746
+ font-weight: 500;
747
+ margin-left: 4px;
748
+ white-space: nowrap;
749
+ vertical-align: middle;
750
+ }
751
+
752
+ .quality-fair {
753
+ background: #ffc107;
754
+ color: #212529;
755
+ padding: 2px 6px;
756
+ border-radius: 8px;
757
+ font-size: 0.65em;
758
+ font-weight: 500;
759
+ margin-left: 4px;
760
+ white-space: nowrap;
761
+ vertical-align: middle;
762
+ }
763
+
764
+ .quality-poor {
765
+ background: #dc3545;
766
+ color: white;
767
+ padding: 2px 6px;
768
+ border-radius: 8px;
769
+ font-size: 0.65em;
770
+ font-weight: 500;
771
+ margin-left: 4px;
772
+ white-space: nowrap;
773
+ vertical-align: middle;
774
+ }
775
+
776
+ .explanation-label {
777
+ font-weight: 600;
778
+ color: #495057;
779
+ margin-bottom: 6px;
780
+ font-size: 0.9em;
781
+ }
782
+
783
+ .explanation-rating {
784
+ display: inline-block;
785
+ margin-bottom: 8px;
786
+ }
787
+
788
+ .explanation-text {
789
+ font-size: 0.85em;
790
+ line-height: 1.5;
791
+ color: #343a40;
792
+ max-height: 200px;
793
+ overflow-y: auto;
794
+ word-wrap: break-word;
795
+ }
796
+
797
+ /* Responsive Design */
798
+ @media (max-width: 768px) {
799
+ .file-lists {
800
+ grid-template-columns: 1fr;
801
+ }
802
+
803
+ .reports-grid {
804
+ grid-template-columns: 1fr;
805
+ }
806
+
807
+ .action-buttons {
808
+ flex-direction: column;
809
+ }
810
+
811
+ .container {
812
+ padding: 10px;
813
+ }
814
+
815
+ header h1 {
816
+ font-size: 2em;
817
+ }
818
+
819
+ .detail-grid {
820
+ grid-template-columns: 1fr;
821
+ }
822
+ }
823
+
824
+ @media (max-width: 1024px) and (min-width: 769px) {
825
+ .file-lists {
826
+ grid-template-columns: 1fr 1fr;
827
+ }
828
+ }
829
+
830
+ @media (max-width: 1200px) and (min-width: 1025px) {
831
+ .file-lists {
832
+ grid-template-columns: 1fr 1fr 1fr;
833
+ }
834
+ }
835
+
836
+ /* Enhanced Evaluation Styles */
837
+ .quality-overview {
838
+ margin-bottom: 20px;
839
+ padding: 20px;
840
+ background: linear-gradient(135deg, #f8f9fa, #e9ecef);
841
+ border-radius: 12px;
842
+ border: 1px solid #dee2e6;
843
+ }
844
+
845
+ .quality-score-card {
846
+ display: flex;
847
+ flex-direction: column;
848
+ gap: 15px;
849
+ }
850
+
851
+ .quality-score-main {
852
+ display: flex;
853
+ align-items: center;
854
+ gap: 20px;
855
+ justify-content: center;
856
+ padding: 15px;
857
+ background: white;
858
+ border-radius: 8px;
859
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
860
+ }
861
+
862
+ .quality-score-value {
863
+ font-size: 2.5em;
864
+ font-weight: 600;
865
+ color: #2c3e50;
866
+ }
867
+
868
+ .quality-score-rating {
869
+ font-size: 1.2em;
870
+ font-weight: bold;
871
+ padding: 8px 16px;
872
+ border-radius: 20px;
873
+ text-transform: uppercase;
874
+ }
875
+
876
+ .quality-distribution {
877
+ display: flex;
878
+ flex-direction: column;
879
+ gap: 10px;
880
+ }
881
+
882
+ .quality-counts {
883
+ display: flex;
884
+ gap: 15px;
885
+ justify-content: center;
886
+ flex-wrap: wrap;
887
+ }
888
+
889
+ .count-item {
890
+ padding: 6px 12px;
891
+ border-radius: 15px;
892
+ font-size: 0.9em;
893
+ font-weight: 500;
894
+ }
895
+
896
+ .count-item.excellent {
897
+ background: #d4edda;
898
+ color: #155724;
899
+ border: 1px solid #c3e6cb;
900
+ }
901
+
902
+ .count-item.good {
903
+ background: #d1ecf1;
904
+ color: #0c5460;
905
+ border: 1px solid #bee5eb;
906
+ }
907
+
908
+ .count-item.fair {
909
+ background: #fff3cd;
910
+ color: #856404;
911
+ border: 1px solid #ffeaa7;
912
+ }
913
+
914
+ .count-item.poor {
915
+ background: #f8d7da;
916
+ color: #721c24;
917
+ border: 1px solid #f5c6cb;
918
+ }
919
+
920
+ .quality-explanation {
921
+ text-align: center;
922
+ font-style: italic;
923
+ color: #6c757d;
924
+ background: white;
925
+ padding: 12px;
926
+ border-radius: 6px;
927
+ border-left: 4px solid #007bff;
928
+ }
929
+
930
+ .quality-details {
931
+ margin: 20px 0;
932
+ padding: 20px;
933
+ background: #f8f9fa;
934
+ border-radius: 8px;
935
+ border: 1px solid #dee2e6;
936
+ }
937
+
938
+ .quality-details h5 {
939
+ color: #495057;
940
+ margin-bottom: 15px;
941
+ font-size: 1.1em;
942
+ }
943
+
944
+ .quality-grid {
945
+ display: grid;
946
+ grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
947
+ gap: 20px;
948
+ margin-bottom: 20px;
949
+ padding: 15px;
950
+ }
951
+
952
+ .quality-detail-card {
953
+ background: white;
954
+ border: 1px solid #dee2e6;
955
+ border-radius: 8px;
956
+ padding: 15px;
957
+ box-shadow: 0 2px 4px rgba(0,0,0,0.05);
958
+ transition: box-shadow 0.2s ease;
959
+ }
960
+
961
+ .quality-detail-card.expanded {
962
+ padding: 20px;
963
+ }
964
+
965
+ .quality-detail-card:hover {
966
+ box-shadow: 0 4px 8px rgba(0,0,0,0.1);
967
+ }
968
+
969
+ .quality-detail-header {
970
+ display: flex;
971
+ justify-content: space-between;
972
+ align-items: center;
973
+ margin-bottom: 10px;
974
+ padding-bottom: 8px;
975
+ border-bottom: 1px solid #e9ecef;
976
+ }
977
+
978
+ .quality-detail-label {
979
+ font-weight: 600;
980
+ color: #495057;
981
+ font-size: 0.95em;
982
+ }
983
+
984
+ .quality-detail-explanation {
985
+ color: #6c757d;
986
+ font-size: 0.9em;
987
+ line-height: 1.4;
988
+ text-align: left;
989
+ word-wrap: break-word;
990
+ white-space: pre-wrap;
991
+ }
992
+
993
+ .quality-detail-explanation.full {
994
+ line-height: 1.6;
995
+ max-height: 300px;
996
+ overflow-y: auto;
997
+ padding: 10px;
998
+ background: #f8f9fa;
999
+ border-radius: 4px;
1000
+ margin-top: 8px;
1001
+ }
1002
+
1003
+ .overall-item-rating {
1004
+ text-align: center;
1005
+ padding: 12px;
1006
+ background: white;
1007
+ border-radius: 6px;
1008
+ border: 1px solid #dee2e6;
1009
+ font-weight: 600;
1010
+ color: #495057;
1011
+ }
1012
+
1013
+ .explanation-item {
1014
+ margin-bottom: 20px;
1015
+ padding: 20px;
1016
+ background: white;
1017
+ border-radius: 8px;
1018
+ border-left: 4px solid #007bff;
1019
+ box-shadow: 0 2px 4px rgba(0,0,0,0.05);
1020
+ }
1021
+
1022
+ .explanation-label {
1023
+ font-weight: 600;
1024
+ color: #495057;
1025
+ margin-bottom: 8px;
1026
+ font-size: 1.05em;
1027
+ }
1028
+
1029
+ .explanation-rating {
1030
+ margin-bottom: 12px;
1031
+ }
1032
+
1033
+ .explanation-text {
1034
+ color: #495057;
1035
+ line-height: 1.6;
1036
+ text-align: justify;
1037
+ }
1038
+
1039
+ /* Enhanced rating styles */
1040
+ .rating-excellent {
1041
+ background-color: #28a745;
1042
+ color: white;
1043
+ padding: 4px 8px;
1044
+ border-radius: 4px;
1045
+ font-weight: 600;
1046
+ font-size: 0.85em;
1047
+ }
1048
+
1049
+ .rating-good {
1050
+ background-color: #17a2b8;
1051
+ color: white;
1052
+ padding: 4px 8px;
1053
+ border-radius: 4px;
1054
+ font-weight: 600;
1055
+ font-size: 0.85em;
1056
+ }
1057
+
1058
+ .rating-fair {
1059
+ background-color: #ffc107;
1060
+ color: #212529;
1061
+ padding: 4px 8px;
1062
+ border-radius: 4px;
1063
+ font-weight: 600;
1064
+ font-size: 0.85em;
1065
+ }
1066
+
1067
+ .rating-poor {
1068
+ background-color: #dc3545;
1069
+ color: white;
1070
+ padding: 4px 8px;
1071
+ border-radius: 4px;
1072
+ font-weight: 600;
1073
+ font-size: 0.85em;
1074
+ }
1075
+
1076
+ /* Responsive quality grid */
1077
+ @media (max-width: 768px) {
1078
+ .quality-grid {
1079
+ grid-template-columns: 1fr;
1080
+ }
1081
+
1082
+ .quality-score-main {
1083
+ flex-direction: column;
1084
+ gap: 10px;
1085
+ }
1086
+
1087
+ .quality-counts {
1088
+ flex-direction: column;
1089
+ align-items: center;
1090
+ }
1091
+ }
1092
+
1093
+ /* Consolidated Report Styles */
1094
+ .consolidated-report .report-content {
1095
+ padding: 20px;
1096
+ overflow: visible !important; /* Allow tooltips to overflow */
1097
+ }
1098
+
1099
+ .consolidated-summary {
1100
+ margin-bottom: 30px;
1101
+ }
1102
+
1103
+ .consolidated-summary h4 {
1104
+ color: #2c3e50;
1105
+ margin-bottom: 20px;
1106
+ font-size: 1.3em;
1107
+ }
1108
+
1109
+ .summary-grid {
1110
+ display: grid;
1111
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
1112
+ gap: 15px;
1113
+ margin-bottom: 25px;
1114
+ }
1115
+
1116
+ .summary-card {
1117
+ background: white;
1118
+ border: 1px solid #e0e0e0;
1119
+ border-radius: 10px;
1120
+ padding: 20px;
1121
+ text-align: center;
1122
+ box-shadow: 0 2px 4px rgba(0,0,0,0.05);
1123
+ transition: transform 0.2s, box-shadow 0.2s;
1124
+ }
1125
+
1126
+ .summary-card:hover {
1127
+ transform: translateY(-2px);
1128
+ box-shadow: 0 4px 8px rgba(0,0,0,0.1);
1129
+ }
1130
+
1131
+ .summary-value {
1132
+ font-size: 2em;
1133
+ font-weight: bold;
1134
+ color: #2c3e50;
1135
+ margin-bottom: 5px;
1136
+ }
1137
+
1138
+ .summary-label {
1139
+ color: #6c757d;
1140
+ font-size: 0.9em;
1141
+ text-transform: uppercase;
1142
+ letter-spacing: 0.5px;
1143
+ }
1144
+
1145
+ /* Enhanced Summary Extensions */
1146
+ .summary-subcaption {
1147
+ font-size: 0.85em;
1148
+ color: #95a5a6;
1149
+ margin-top: 5px;
1150
+ font-style: italic;
1151
+ }
1152
+
1153
+ .summary-card.small {
1154
+ padding: 15px;
1155
+ }
1156
+
1157
+ .summary-card.small .summary-value {
1158
+ font-size: 1.5em;
1159
+ }
1160
+
1161
+ .summary-grid.coverage-stats {
1162
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
1163
+ }
1164
+
1165
+ .consolidated-summary.enhanced h5 {
1166
+ color: #2c3e50;
1167
+ font-weight: 600;
1168
+ margin-top: 25px;
1169
+ margin-bottom: 15px;
1170
+ padding-bottom: 5px;
1171
+ border-bottom: 2px solid #ecf0f1;
1172
+ }
1173
+
1174
+ /* Enhanced Quality Distribution */
1175
+ .quality-distribution {
1176
+ display: flex;
1177
+ align-items: center;
1178
+ gap: 20px;
1179
+ background: white;
1180
+ padding: 20px;
1181
+ border-radius: 10px;
1182
+ border: 1px solid #e0e0e0;
1183
+ margin-bottom: 20px;
1184
+ }
1185
+
1186
+ .quality-bars {
1187
+ flex: 1;
1188
+ }
1189
+
1190
+ .quality-bar-group {
1191
+ margin-bottom: 10px;
1192
+ display: flex;
1193
+ align-items: center;
1194
+ }
1195
+
1196
+ .quality-bar {
1197
+ height: 25px;
1198
+ border-radius: 4px;
1199
+ display: inline-block;
1200
+ position: relative;
1201
+ min-width: 40px;
1202
+ transition: width 0.3s ease;
1203
+ }
1204
+
1205
+ .quality-bar.excellent {
1206
+ background: linear-gradient(135deg, #28a745, #20c997);
1207
+ }
1208
+
1209
+ .quality-bar.good {
1210
+ background: linear-gradient(135deg, #17a2b8, #20c997);
1211
+ }
1212
+
1213
+ .quality-bar.fair {
1214
+ background: linear-gradient(135deg, #ffc107, #fd7e14);
1215
+ }
1216
+
1217
+ .quality-bar.poor {
1218
+ background: linear-gradient(135deg, #dc3545, #e83e8c);
1219
+ }
1220
+
1221
+ .quality-label {
1222
+ position: absolute;
1223
+ right: 8px;
1224
+ top: 50%;
1225
+ transform: translateY(-50%);
1226
+ color: white;
1227
+ font-weight: 600;
1228
+ font-size: 0.85em;
1229
+ text-shadow: 0 1px 2px rgba(0,0,0,0.2);
1230
+ }
1231
+
1232
+ .quality-text {
1233
+ display: inline-block;
1234
+ margin-left: 10px;
1235
+ font-size: 0.9em;
1236
+ color: #6c757d;
1237
+ min-width: 100px;
1238
+ }
1239
+
1240
+ /* Model Breakdown */
1241
+ .model-breakdown {
1242
+ display: grid;
1243
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
1244
+ gap: 15px;
1245
+ margin-bottom: 20px;
1246
+ }
1247
+
1248
+ .model-stat-card {
1249
+ background: white;
1250
+ padding: 15px;
1251
+ border-radius: 10px;
1252
+ border: 1px solid #e0e0e0;
1253
+ border-left: 4px solid #007bff;
1254
+ transition: all 0.2s;
1255
+ }
1256
+
1257
+ .model-stat-card:hover {
1258
+ transform: translateX(5px);
1259
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
1260
+ }
1261
+
1262
+ .model-header {
1263
+ display: flex;
1264
+ align-items: center;
1265
+ gap: 10px;
1266
+ margin-bottom: 10px;
1267
+ }
1268
+
1269
+ .model-icon {
1270
+ font-size: 1.2em;
1271
+ }
1272
+
1273
+ .model-name {
1274
+ font-weight: 600;
1275
+ color: #2c3e50;
1276
+ }
1277
+
1278
+ .model-details {
1279
+ display: flex;
1280
+ justify-content: space-between;
1281
+ align-items: center;
1282
+ }
1283
+
1284
+ .model-count {
1285
+ color: #6c757d;
1286
+ font-size: 0.9em;
1287
+ }
1288
+
1289
+ .model-score {
1290
+ padding: 3px 8px;
1291
+ border-radius: 4px;
1292
+ font-size: 0.85em;
1293
+ font-weight: 600;
1294
+ }
1295
+
1296
+ .model-score.excellent {
1297
+ background: #d4edda;
1298
+ color: #155724;
1299
+ }
1300
+
1301
+ .model-score.good {
1302
+ background: #d1ecf1;
1303
+ color: #0c5460;
1304
+ }
1305
+
1306
+ .model-score.fair {
1307
+ background: #fff3cd;
1308
+ color: #856404;
1309
+ }
1310
+
1311
+ .model-score.poor {
1312
+ background: #f8d7da;
1313
+ color: #721c24;
1314
+ }
1315
+
1316
+ /* Quality Distribution Section */
1317
+ .quality-distribution-section {
1318
+ margin: 25px 0;
1319
+ }
1320
+
1321
+ .quality-distribution-section h4,
1322
+ .distribution-title {
1323
+ font-size: 1.3em;
1324
+ font-weight: 700;
1325
+ color: #2c3e50;
1326
+ margin-bottom: 10px;
1327
+ white-space: nowrap;
1328
+ overflow: visible;
1329
+ }
1330
+
1331
+ .distribution-subtitle {
1332
+ font-size: 0.9em;
1333
+ color: #6c757d;
1334
+ font-style: italic;
1335
+ margin-bottom: 15px;
1336
+ }
1337
+
1338
+ /* Quality Distribution Bar */
1339
+ .quality-distribution-bar {
1340
+ display: flex;
1341
+ flex-direction: row;
1342
+ height: 50px;
1343
+ border-radius: 8px;
1344
+ overflow: visible; /* Changed from hidden to allow tooltips */
1345
+ box-shadow: 0 2px 6px rgba(0,0,0,0.1);
1346
+ margin: 10px auto;
1347
+ position: relative; /* Ensure proper positioning context */
1348
+ max-width: 800px;
1349
+ }
1350
+
1351
+ .quality-bar {
1352
+ display: flex;
1353
+ align-items: center;
1354
+ justify-content: center;
1355
+ color: white;
1356
+ font-weight: 600;
1357
+ font-size: 0.85em;
1358
+ transition: all 0.3s ease;
1359
+ position: relative;
1360
+ overflow: hidden; /* Keep overflow hidden on individual bars */
1361
+ border-radius: 0; /* Remove individual border radius */
1362
+ }
1363
+
1364
+ /* Add rounded corners only to first and last bars */
1365
+ .quality-bar:first-child {
1366
+ border-radius: 8px 0 0 8px;
1367
+ }
1368
+
1369
+ .quality-bar:last-child {
1370
+ border-radius: 0 8px 8px 0;
1371
+ }
1372
+
1373
+ .quality-bar.excellent {
1374
+ background: linear-gradient(135deg, #28a745, #20c997);
1375
+ }
1376
+
1377
+ .quality-bar.good {
1378
+ background: linear-gradient(135deg, #17a2b8, #20c997);
1379
+ }
1380
+
1381
+ .quality-bar.fair {
1382
+ background: linear-gradient(135deg, #ffc107, #ffb347);
1383
+ }
1384
+
1385
+ .quality-bar.poor {
1386
+ background: linear-gradient(135deg, #dc3545, #ff6b6b);
1387
+ }
1388
+
1389
+ .quality-bar .bar-label {
1390
+ white-space: nowrap;
1391
+ padding: 0 8px;
1392
+ overflow: visible; /* Allow tooltips to show */
1393
+ text-overflow: ellipsis;
1394
+ font-size: 0.9em;
1395
+ position: relative; /* Ensure proper tooltip positioning */
1396
+ z-index: 1; /* Keep label above bar background */
1397
+ }
1398
+
1399
+ /* Comparison Table */
1400
+ .comparison-table-section {
1401
+ margin: 30px 0;
1402
+ width: 100%;
1403
+ max-width: 100%;
1404
+ overflow: hidden;
1405
+ }
1406
+
1407
+ .comparison-table-section h4 {
1408
+ color: #2c3e50;
1409
+ margin-bottom: 20px;
1410
+ font-size: 1.3em;
1411
+ }
1412
+
1413
+ .table-container {
1414
+ overflow-x: auto;
1415
+ border-radius: 10px;
1416
+ box-shadow: 0 2px 8px rgba(0,0,0,0.1);
1417
+ max-width: 100%;
1418
+ width: 100%;
1419
+ }
1420
+
1421
+ .comparison-table {
1422
+ width: 100%;
1423
+ border-collapse: collapse;
1424
+ background: white;
1425
+ table-layout: fixed;
1426
+ }
1427
+
1428
+ .comparison-table thead {
1429
+ background: linear-gradient(135deg, #8b92f0, #9b6fc4);
1430
+ color: white;
1431
+ }
1432
+
1433
+ .comparison-table th {
1434
+ padding: 10px 6px;
1435
+ text-align: left;
1436
+ font-weight: 600;
1437
+ font-size: 0.8em;
1438
+ text-transform: uppercase;
1439
+ letter-spacing: 0.5px;
1440
+ }
1441
+
1442
+ .comparison-table tbody tr {
1443
+ border-bottom: 1px solid #e0e0e0;
1444
+ transition: background-color 0.2s;
1445
+ }
1446
+
1447
+ .comparison-table tbody tr:hover {
1448
+ background-color: #f8f9fa;
1449
+ }
1450
+
1451
+ .comparison-table td {
1452
+ padding: 8px 6px;
1453
+ vertical-align: middle;
1454
+ font-size: 0.85em;
1455
+ }
1456
+
1457
+ .rank-cell {
1458
+ font-weight: bold;
1459
+ color: #667eea;
1460
+ font-size: 1.1em;
1461
+ text-align: center;
1462
+ }
1463
+
1464
+ .model-cell {
1465
+ font-weight: 500;
1466
+ color: #2c3e50;
1467
+ min-width: 180px;
1468
+ max-width: 240px;
1469
+ word-wrap: break-word;
1470
+ overflow-wrap: break-word;
1471
+ }
1472
+
1473
+ .model-name-wrapper {
1474
+ display: flex;
1475
+ align-items: center;
1476
+ gap: 6px;
1477
+ }
1478
+
1479
+ .model-name {
1480
+ flex: 1;
1481
+ cursor: help;
1482
+ }
1483
+
1484
+ .badge-local, .badge-cloud, .badge-count {
1485
+ display: inline-block;
1486
+ padding: 3px 8px;
1487
+ border-radius: 12px;
1488
+ font-size: 0.7em;
1489
+ font-weight: 600;
1490
+ margin-left: 8px;
1491
+ }
1492
+
1493
+ .badge-local {
1494
+ background: #d4edda;
1495
+ color: #155724;
1496
+ }
1497
+
1498
+ .badge-cloud {
1499
+ background: #d1ecf1;
1500
+ color: #0c5460;
1501
+ }
1502
+
1503
+ .badge-count {
1504
+ background: #fff3cd;
1505
+ color: #856404;
1506
+ cursor: help;
1507
+ }
1508
+
1509
+ /* Score Bar */
1510
+ .score-bar-container {
1511
+ position: relative;
1512
+ background: #e9ecef;
1513
+ height: 30px;
1514
+ border-radius: 15px;
1515
+ overflow: hidden;
1516
+ min-width: 150px;
1517
+ }
1518
+
1519
+ .score-bar {
1520
+ height: 100%;
1521
+ background: linear-gradient(90deg, #8b92f0, #9b6fc4);
1522
+ transition: width 0.3s ease;
1523
+ border-radius: 15px;
1524
+ }
1525
+
1526
+ .score-text {
1527
+ position: absolute;
1528
+ top: 50%;
1529
+ left: 50%;
1530
+ transform: translate(-50%, -50%);
1531
+ font-weight: 600;
1532
+ font-size: 0.85em;
1533
+ color: #2c3e50;
1534
+ }
1535
+
1536
+ /* Mini Distribution */
1537
+ .mini-distribution {
1538
+ display: flex;
1539
+ gap: 5px;
1540
+ }
1541
+
1542
+ .mini-count {
1543
+ padding: 4px 8px;
1544
+ border-radius: 4px;
1545
+ font-size: 0.8em;
1546
+ font-weight: 600;
1547
+ min-width: 20px;
1548
+ text-align: center;
1549
+ }
1550
+
1551
+ .mini-count.excellent {
1552
+ background: #d4edda;
1553
+ color: #155724;
1554
+ }
1555
+
1556
+ .mini-count.good {
1557
+ background: #d1ecf1;
1558
+ color: #0c5460;
1559
+ }
1560
+
1561
+ .mini-count.fair {
1562
+ background: #fff3cd;
1563
+ color: #856404;
1564
+ }
1565
+
1566
+ .mini-count.poor {
1567
+ background: #f8d7da;
1568
+ color: #721c24;
1569
+ }
1570
+
1571
+ .rank-header, .rank-cell {
1572
+ width: 4%;
1573
+ min-width: 35px;
1574
+ }
1575
+
1576
+ .model-header {
1577
+ width: 32%;
1578
+ }
1579
+
1580
+ .score-header, .score-cell {
1581
+ width: 12%;
1582
+ }
1583
+
1584
+ .rating-header, .rating-cell {
1585
+ width: 10%;
1586
+ }
1587
+
1588
+ .distribution-header, .distribution-cell {
1589
+ width: 25%;
1590
+ }
1591
+
1592
+ .cost-header, .cost-cell {
1593
+ width: 9%;
1594
+ font-weight: 600;
1595
+ }
1596
+
1597
+ .tokens-header, .tokens-cell {
1598
+ width: 8%;
1599
+ color: #6c757d;
1600
+ }
1601
+
1602
+ /* Quality Row Highlights */
1603
+ .quality-row-excellent {
1604
+ background: linear-gradient(90deg, rgba(40,167,69,0.05), transparent);
1605
+ }
1606
+
1607
+ .quality-row-good {
1608
+ background: linear-gradient(90deg, rgba(23,162,184,0.05), transparent);
1609
+ }
1610
+
1611
+ .quality-row-fair {
1612
+ background: linear-gradient(90deg, rgba(255,193,7,0.05), transparent);
1613
+ }
1614
+
1615
+ .quality-row-poor {
1616
+ background: linear-gradient(90deg, rgba(220,53,69,0.05), transparent);
1617
+ }
1618
+
1619
+ /* Charts Section */
1620
+ .charts-section {
1621
+ display: grid;
1622
+ grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
1623
+ gap: 30px;
1624
+ margin: 30px 0;
1625
+ }
1626
+
1627
+ .chart-container {
1628
+ background: white;
1629
+ border: 1px solid #e0e0e0;
1630
+ border-radius: 10px;
1631
+ padding: 20px;
1632
+ box-shadow: 0 2px 6px rgba(0,0,0,0.05);
1633
+ }
1634
+
1635
+ .chart-container h5 {
1636
+ color: #2c3e50;
1637
+ margin-bottom: 20px;
1638
+ font-size: 1.1em;
1639
+ }
1640
+
1641
+ .bar-chart {
1642
+ display: flex;
1643
+ align-items: flex-end;
1644
+ justify-content: space-around;
1645
+ height: 250px;
1646
+ padding: 40px 10px 10px 10px; /* Extra top padding for value labels */
1647
+ border-left: 2px solid #e0e0e0;
1648
+ border-bottom: 2px solid #e0e0e0;
1649
+ overflow: visible; /* Ensure tooltips aren't clipped */
1650
+ }
1651
+
1652
+ .chart-bar-group {
1653
+ display: flex;
1654
+ flex-direction: column;
1655
+ align-items: center;
1656
+ flex: 1;
1657
+ max-width: 80px;
1658
+ margin: 0 5px;
1659
+ }
1660
+
1661
+ .chart-bar-container {
1662
+ width: 100%;
1663
+ height: 200px;
1664
+ display: flex;
1665
+ align-items: flex-end;
1666
+ justify-content: center;
1667
+ position: relative;
1668
+ overflow: visible; /* Ensure tooltips aren't clipped */
1669
+ }
1670
+
1671
+ .chart-bar {
1672
+ width: 80%;
1673
+ background: linear-gradient(180deg, #667eea, #764ba2);
1674
+ border-radius: 4px 4px 0 0;
1675
+ position: relative;
1676
+ transition: all 0.3s ease;
1677
+ min-height: 5px;
1678
+ }
1679
+
1680
+ .chart-bar:hover {
1681
+ transform: scaleY(1.05);
1682
+ box-shadow: 0 -2px 10px rgba(102,126,234,0.3);
1683
+ }
1684
+
1685
+ .chart-bar.quality-excellent {
1686
+ background: linear-gradient(180deg, #28a745, #20c997);
1687
+ }
1688
+
1689
+ .chart-bar.quality-good {
1690
+ background: linear-gradient(180deg, #17a2b8, #20c997);
1691
+ }
1692
+
1693
+ .chart-bar.quality-fair {
1694
+ background: linear-gradient(180deg, #ffc107, #ffb347);
1695
+ }
1696
+
1697
+ .chart-bar.quality-poor {
1698
+ background: linear-gradient(180deg, #dc3545, #ff6b6b);
1699
+ }
1700
+
1701
+ .chart-bar.cost-bar {
1702
+ background: linear-gradient(180deg, #ff6b6b, #dc3545);
1703
+ }
1704
+
1705
+ .bar-value {
1706
+ position: absolute;
1707
+ top: -20px;
1708
+ left: 50%;
1709
+ transform: translateX(-50%);
1710
+ font-size: 1.1em;
1711
+ font-weight: bold;
1712
+ color: #2c3e50;
1713
+ white-space: nowrap;
1714
+ }
1715
+
1716
+ .chart-label {
1717
+ margin-top: 10px;
1718
+ font-size: 0.85em;
1719
+ font-weight: 500;
1720
+ color: #495057;
1721
+ text-align: center;
1722
+ max-width: 150px;
1723
+ overflow: hidden;
1724
+ text-overflow: ellipsis;
1725
+ white-space: nowrap;
1726
+ cursor: help;
1727
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
1728
+ padding: 2px 4px;
1729
+ }
1730
+
1731
+ /* Aspect Breakdown Section */
1732
+ .aspect-breakdown-section {
1733
+ margin: 30px 0;
1734
+ position: relative; /* Create stacking context */
1735
+ z-index: 1; /* Base z-index */
1736
+ }
1737
+
1738
+ .aspect-breakdown-section h4 {
1739
+ color: #2c3e50;
1740
+ margin-bottom: 20px;
1741
+ font-size: 1.3em;
1742
+ }
1743
+
1744
+ .aspect-breakdown {
1745
+ background: white;
1746
+ border: 1px solid #e0e0e0;
1747
+ border-radius: 10px;
1748
+ padding: 25px;
1749
+ box-shadow: 0 2px 6px rgba(0,0,0,0.05);
1750
+ margin-bottom: 20px;
1751
+ overflow: visible !important; /* Allow tooltips to show outside container */
1752
+ position: relative; /* Create stacking context */
1753
+ z-index: 0; /* Lowest level container */
1754
+ width: 100%; /* Ensure full width usage */
1755
+ }
1756
+
1757
+ .aspect-row {
1758
+ display: grid;
1759
+ grid-template-columns: 250px 1fr;
1760
+ gap: 20px;
1761
+ align-items: center;
1762
+ padding: 12px 0;
1763
+ border-bottom: 1px solid #f0f0f0;
1764
+ position: relative; /* Create stacking context */
1765
+ z-index: 1; /* Base level */
1766
+ overflow: visible !important; /* Allow tooltips to overflow */
1767
+ }
1768
+
1769
+ /* When hovering over any bar in a row, elevate the entire row */
1770
+ .aspect-row:has(.aspect-bar:hover) {
1771
+ z-index: 9999 !important;
1772
+ }
1773
+
1774
+ .aspect-row:last-child {
1775
+ border-bottom: none;
1776
+ }
1777
+
1778
+ .aspect-header {
1779
+ display: flex;
1780
+ align-items: center;
1781
+ gap: 10px;
1782
+ }
1783
+
1784
+ .aspect-icon {
1785
+ font-size: 1.2em;
1786
+ }
1787
+
1788
+ .aspect-label {
1789
+ font-weight: 600;
1790
+ color: #495057;
1791
+ }
1792
+
1793
+ .aspect-distribution {
1794
+ display: flex;
1795
+ height: 35px; /* Slightly taller bars */
1796
+ border-radius: 6px;
1797
+ overflow: visible !important; /* Changed from hidden to allow tooltips */
1798
+ background: #f8f9fa;
1799
+ box-shadow: inset 0 1px 3px rgba(0,0,0,0.1);
1800
+ position: relative; /* Ensure proper positioning context */
1801
+ z-index: 1; /* Lower than tooltips */
1802
+ margin-top: 10px; /* Add space for tooltips above */
1803
+ margin-bottom: 10px; /* Add space for potential overflow */
1804
+ width: 100%; /* Use full available width */
1805
+ }
1806
+
1807
+ .aspect-bar {
1808
+ display: flex;
1809
+ align-items: center;
1810
+ justify-content: center;
1811
+ color: white;
1812
+ font-size: 0.9em; /* Slightly larger text */
1813
+ font-weight: 600;
1814
+ transition: all 0.3s ease;
1815
+ position: relative; /* Enable tooltip positioning */
1816
+ cursor: help; /* Show help cursor on hover */
1817
+ z-index: 10; /* Above distribution background */
1818
+ min-width: 30px; /* Ensure minimum width for small percentages */
1819
+ }
1820
+
1821
+ .aspect-bar:hover {
1822
+ opacity: 0.9;
1823
+ transform: scale(1.02);
1824
+ z-index: 999999 !important; /* Maximum z-index when hovering to bring both bar and tooltip above everything */
1825
+ position: relative !important;
1826
+ }
1827
+
1828
+ /* Add rounded corners to first and last bars */
1829
+ .aspect-bar:first-child {
1830
+ border-radius: 6px 0 0 6px;
1831
+ }
1832
+
1833
+ .aspect-bar:last-child {
1834
+ border-radius: 0 6px 6px 0;
1835
+ }
1836
+
1837
+ /* For single bar, apply all corners */
1838
+ .aspect-bar:only-child {
1839
+ border-radius: 6px;
1840
+ }
1841
+
1842
+ .aspect-bar.excellent {
1843
+ background: #28a745;
1844
+ }
1845
+
1846
+ .aspect-bar.good {
1847
+ background: #17a2b8;
1848
+ }
1849
+
1850
+ .aspect-bar.fair {
1851
+ background: #ffc107;
1852
+ color: #212529;
1853
+ }
1854
+
1855
+ .aspect-bar.poor {
1856
+ background: #dc3545;
1857
+ }
1858
+
1859
+
1860
+
1861
+ /* Clean Performance Matrix */
1862
+ .clean-matrix-container {
1863
+ background: white;
1864
+ border: 1px solid #e0e0e0;
1865
+ border-radius: 10px;
1866
+ padding: 20px;
1867
+ box-shadow: 0 2px 6px rgba(0,0,0,0.05);
1868
+ margin-bottom: 20px;
1869
+ width: 100%;
1870
+ }
1871
+
1872
+ .clean-matrix-container h5 {
1873
+ color: #2c3e50;
1874
+ margin-bottom: 15px;
1875
+ font-size: 1.1em;
1876
+ }
1877
+
1878
+ .clean-matrix-container .table-wrapper {
1879
+ overflow-x: auto;
1880
+ width: 100%;
1881
+ }
1882
+
1883
+ .clean-performance-matrix {
1884
+ width: 100%;
1885
+ border-collapse: collapse;
1886
+ font-size: 0.9em;
1887
+ table-layout: auto;
1888
+ display: table;
1889
+ }
1890
+
1891
+ .clean-performance-matrix thead {
1892
+ display: table-header-group;
1893
+ }
1894
+
1895
+ .clean-performance-matrix tbody {
1896
+ display: table-row-group;
1897
+ }
1898
+
1899
+ .clean-performance-matrix tr {
1900
+ display: table-row;
1901
+ }
1902
+
1903
+ .clean-performance-matrix th {
1904
+ background: #f8f9fa;
1905
+ padding: 10px 6px;
1906
+ text-align: center;
1907
+ font-weight: 600;
1908
+ border: 1px solid #dee2e6;
1909
+ color: #495057;
1910
+ white-space: nowrap;
1911
+ vertical-align: middle;
1912
+ display: table-cell;
1913
+ }
1914
+
1915
+ .clean-performance-matrix th.model-header {
1916
+ text-align: left;
1917
+ padding-left: 12px;
1918
+ min-width: 140px;
1919
+ }
1920
+
1921
+ .clean-performance-matrix th.aspect-header {
1922
+ font-size: 0.85em;
1923
+ padding: 8px 4px;
1924
+ min-width: 100px;
1925
+ }
1926
+
1927
+ .clean-performance-matrix th.grade-header {
1928
+ font-size: 0.9em;
1929
+ min-width: 80px;
1930
+ background: #e8f4f8;
1931
+ font-weight: 700;
1932
+ }
1933
+
1934
+ .clean-performance-matrix td {
1935
+ padding: 8px 6px;
1936
+ text-align: center;
1937
+ border: 1px solid #dee2e6;
1938
+ font-weight: 500;
1939
+ text-transform: capitalize;
1940
+ vertical-align: middle;
1941
+ display: table-cell;
1942
+ }
1943
+
1944
+ .clean-performance-matrix td.grade-cell {
1945
+ font-weight: 600;
1946
+ font-size: 0.85em;
1947
+ text-transform: none;
1948
+ color: #2c3e50;
1949
+ }
1950
+
1951
+ .clean-performance-matrix td.model-name {
1952
+ text-align: left;
1953
+ font-weight: 600;
1954
+ color: #495057;
1955
+ background: #f8f9fa;
1956
+ padding-left: 12px;
1957
+ white-space: nowrap;
1958
+ }
1959
+
1960
+ .cell-excellent {
1961
+ background: #d4edda;
1962
+ color: #155724;
1963
+ }
1964
+
1965
+ .cell-good {
1966
+ background: #d1ecf1;
1967
+ color: #0c5460;
1968
+ }
1969
+
1970
+ .cell-fair {
1971
+ background: #fff3cd;
1972
+ color: #856404;
1973
+ }
1974
+
1975
+ .cell-poor {
1976
+ background: #f8d7da;
1977
+ color: #721c24;
1978
+ }
1979
+
1980
+ .cell-unknown {
1981
+ background: #e9ecef;
1982
+ color: #6c757d;
1983
+ }
1984
+
1985
+ /* Free model styling for cost bars */
1986
+ .cost-bar.free-model {
1987
+ background: #d4edda !important;
1988
+ border: 2px solid #28a745;
1989
+ }
1990
+
1991
+ .cost-bar .bar-value {
1992
+ font-size: 0.8em !important;
1993
+ font-weight: 500 !important;
1994
+ }
1995
+
1996
+ .cost-bar.free-model .bar-value {
1997
+ color: #155724 !important;
1998
+ font-weight: 500 !important;
1999
+ background: none !important;
2000
+ }
2001
+
2002
+ /* Latency chart styling */
2003
+ .chart-bar.latency-bar {
2004
+ background: linear-gradient(180deg, #6c63ff, #4834d4);
2005
+ transition: all 0.3s ease;
2006
+ }
2007
+
2008
+ .latency-bar:hover {
2009
+ background: linear-gradient(180deg, #7d75ff, #5942e4);
2010
+ transform: translateY(-2px);
2011
+ }
2012
+
2013
+ .latency-bar .bar-value {
2014
+ font-size: 0.8em !important;
2015
+ font-weight: 500 !important;
2016
+ color: white !important;
2017
+ }
2018
+
2019
+ /* Full-width vertical chart layout */
2020
+ .charts-section-vertical {
2021
+ display: flex;
2022
+ flex-direction: column;
2023
+ gap: 30px;
2024
+ width: 100%;
2025
+ margin: 20px 0;
2026
+ }
2027
+
2028
+ .chart-container-full {
2029
+ width: 100%;
2030
+ background: white;
2031
+ padding: 20px;
2032
+ border-radius: 8px;
2033
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
2034
+ overflow: visible; /* Ensure tooltips aren't clipped */
2035
+ }
2036
+
2037
+ .chart-container-full h5 {
2038
+ margin: 0 0 15px 0;
2039
+ color: #2c3e50;
2040
+ font-size: 1.1em;
2041
+ font-weight: 600;
2042
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
2043
+ }
2044
+
2045
+ /* Token chart styling */
2046
+ .token-chart {
2047
+ margin-top: 10px;
2048
+ }
2049
+
2050
+ .stacked-bar-wrapper {
2051
+ position: relative;
2052
+ display: flex;
2053
+ flex-direction: column-reverse; /* Stack from bottom up */
2054
+ justify-content: flex-start; /* Align to bottom */
2055
+ align-items: center;
2056
+ width: 80%; /* Match other chart bars */
2057
+ background: transparent;
2058
+ border-radius: 4px 4px 0 0;
2059
+ overflow: visible; /* Allow tooltips to show */
2060
+ }
2061
+
2062
+ .stacked-bar {
2063
+ width: 100%; /* Full width of wrapper */
2064
+ transition: all 0.3s ease;
2065
+ position: relative;
2066
+ cursor: pointer;
2067
+ }
2068
+
2069
+ .stacked-bar.input-tokens {
2070
+ background: linear-gradient(180deg, #42b883, #2e8659);
2071
+ border-radius: 0 0 4px 4px; /* Round bottom corners - appears at bottom with column-reverse */
2072
+ }
2073
+
2074
+ .stacked-bar.output-tokens {
2075
+ background: linear-gradient(180deg, #ff9800, #e68900);
2076
+ border-radius: 4px 4px 0 0; /* Round top corners - appears at top with column-reverse */
2077
+ }
2078
+
2079
+ .stacked-bar:hover {
2080
+ opacity: 0.85;
2081
+ filter: brightness(1.1);
2082
+ z-index: 100; /* Bring to front on hover */
2083
+ position: relative;
2084
+ }
2085
+
2086
+ /* Tooltip styling for stacked bars */
2087
+ .stacked-bar[data-tooltip]:hover::after,
2088
+ .chart-bar[data-tooltip]:hover::after {
2089
+ content: attr(data-tooltip);
2090
+ position: absolute;
2091
+ bottom: 105%;
2092
+ left: 50%;
2093
+ transform: translateX(-50%);
2094
+ background: rgba(0, 0, 0, 0.9);
2095
+ color: white;
2096
+ padding: 6px 10px;
2097
+ border-radius: 4px;
2098
+ font-size: 0.85em;
2099
+ white-space: nowrap;
2100
+ z-index: 10000; /* Increased z-index */
2101
+ pointer-events: none;
2102
+ }
2103
+
2104
+ .stacked-bar[data-tooltip]:hover::before,
2105
+ .chart-bar[data-tooltip]:hover::before {
2106
+ content: '';
2107
+ position: absolute;
2108
+ bottom: 100%;
2109
+ left: 50%;
2110
+ transform: translateX(-50%);
2111
+ border: 5px solid transparent;
2112
+ border-top-color: rgba(0, 0, 0, 0.9);
2113
+ z-index: 10000; /* Increased z-index */
2114
+ pointer-events: none;
2115
+ }
2116
+
2117
+ .bar-value-top {
2118
+ position: absolute;
2119
+ bottom: calc(100% + 5px); /* Position just above the bar */
2120
+ left: 50%;
2121
+ transform: translateX(-50%);
2122
+ font-size: 0.85em;
2123
+ font-weight: 600;
2124
+ color: #2c3e50;
2125
+ white-space: nowrap;
2126
+ z-index: 10;
2127
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
2128
+ text-shadow: 0 1px 2px rgba(255, 255, 255, 0.8); /* Subtle shadow for better readability */
2129
+ }
2130
+
2131
+ /* Percentage values (Grade scores) - slightly larger to match visual size of other values */
2132
+ .bar-value-top.percentage-value {
2133
+ font-size: 0.9em;
2134
+ font-weight: 600;
2135
+ }
2136
+
2137
+ /* Token legend */
2138
+ .token-legend {
2139
+ display: flex;
2140
+ gap: 20px;
2141
+ margin-bottom: 15px;
2142
+ justify-content: center;
2143
+ }
2144
+
2145
+ .legend-item {
2146
+ display: flex;
2147
+ align-items: center;
2148
+ gap: 5px;
2149
+ font-size: 0.85em;
2150
+ color: #666;
2151
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
2152
+ font-weight: 500;
2153
+ }
2154
+
2155
+ .legend-color {
2156
+ width: 16px;
2157
+ height: 16px;
2158
+ border-radius: 3px;
2159
+ }
2160
+
2161
+ .legend-color.input-color {
2162
+ background: linear-gradient(180deg, #42b883, #2e8659);
2163
+ }
2164
+
2165
+ .legend-color.output-color {
2166
+ background: linear-gradient(180deg, #ff9800, #e68900);
2167
+ }
2168
+
2169
+ /* Export Dropdown Styles */
2170
+
2171
+ .export-dropdown {
2172
+ position: relative;
2173
+ }
2174
+
2175
+ .export-btn {
2176
+ background: transparent;
2177
+ border: 1px solid #dee2e6;
2178
+ border-radius: 4px;
2179
+ padding: 6px 8px;
2180
+ cursor: pointer;
2181
+ color: #6c757d;
2182
+ transition: all 0.2s ease;
2183
+ display: flex;
2184
+ align-items: center;
2185
+ }
2186
+
2187
+ .export-btn:hover {
2188
+ background: #f8f9fa;
2189
+ color: #495057;
2190
+ border-color: #adb5bd;
2191
+ }
2192
+
2193
+ .export-btn svg {
2194
+ width: 16px;
2195
+ height: 16px;
2196
+ }
2197
+
2198
+ .export-menu {
2199
+ position: absolute;
2200
+ top: 100%;
2201
+ right: 0;
2202
+ margin-top: 4px;
2203
+ background: white;
2204
+ border: 1px solid #dee2e6;
2205
+ border-radius: 8px;
2206
+ box-shadow: 0 4px 12px rgba(0,0,0,0.15);
2207
+ min-width: 160px;
2208
+ display: none;
2209
+ z-index: 1000;
2210
+ }
2211
+
2212
+ .export-menu.show {
2213
+ display: block;
2214
+ }
2215
+
2216
+ .export-option {
2217
+ display: block;
2218
+ width: 100%;
2219
+ padding: 10px 16px;
2220
+ border: none;
2221
+ background: none;
2222
+ text-align: left;
2223
+ cursor: pointer;
2224
+ color: #495057;
2225
+ font-size: 14px;
2226
+ transition: background 0.2s ease;
2227
+ }
2228
+
2229
+ .export-option:first-child {
2230
+ border-radius: 7px 7px 0 0;
2231
+ }
2232
+
2233
+ .export-option:last-child {
2234
+ border-radius: 0 0 7px 7px;
2235
+ }
2236
+
2237
+ .export-option:hover {
2238
+ background: #f8f9fa;
2239
+ color: #212529;
2240
+ }
2241
+
2242
+ /* Tooltip Styles */
2243
+ .tooltip-trigger {
2244
+ position: relative;
2245
+ cursor: help;
2246
+ display: inline-block;
2247
+ }
2248
+
2249
+ .info-icon {
2250
+ display: inline-block;
2251
+ width: 14px;
2252
+ height: 14px;
2253
+ background: #6c757d;
2254
+ color: white;
2255
+ border-radius: 50%;
2256
+ text-align: center;
2257
+ line-height: 14px;
2258
+ font-size: 10px;
2259
+ font-weight: bold;
2260
+ margin-left: 4px;
2261
+ cursor: help;
2262
+ vertical-align: middle;
2263
+ }
2264
+
2265
+ .info-icon:hover {
2266
+ background: #495057;
2267
+ }
2268
+
2269
+ [data-tooltip] {
2270
+ position: relative;
2271
+ cursor: help;
2272
+ }
2273
+
2274
+ [data-tooltip]:hover::after,
2275
+ [data-tooltip]:hover::before {
2276
+ opacity: 1;
2277
+ visibility: visible;
2278
+ transform: translateY(0);
2279
+ }
2280
+
2281
+ [data-tooltip]::after {
2282
+ content: attr(data-tooltip);
2283
+ position: absolute;
2284
+ bottom: calc(100% + 10px);
2285
+ left: 50%;
2286
+ transform: translateX(-50%) translateY(5px);
2287
+ background: #333;
2288
+ color: white;
2289
+ padding: 8px 12px;
2290
+ border-radius: 6px;
2291
+ font-size: 12px;
2292
+ line-height: 1.4;
2293
+ white-space: normal;
2294
+ max-width: 300px;
2295
+ width: max-content;
2296
+ z-index: 2147483646 !important; /* Maximum z-index with !important */
2297
+ opacity: 0;
2298
+ visibility: hidden;
2299
+ transition: all 0.3s ease;
2300
+ box-shadow: 0 4px 12px rgba(0,0,0,0.15);
2301
+ pointer-events: none; /* Prevent tooltip from blocking interactions */
2302
+ }
2303
+
2304
+ [data-tooltip]::before {
2305
+ content: '';
2306
+ position: absolute;
2307
+ bottom: calc(100% + 5px);
2308
+ left: 50%;
2309
+ transform: translateX(-50%) translateY(5px);
2310
+ border: 5px solid transparent;
2311
+ border-top-color: #333;
2312
+ opacity: 0;
2313
+ visibility: hidden;
2314
+ transition: all 0.3s ease;
2315
+ z-index: 2147483647 !important; /* Maximum z-index with !important */
2316
+ pointer-events: none; /* Prevent arrow from blocking interactions */
2317
+ }
2318
+
2319
+ /* Tooltip positioning variants */
2320
+ [data-tooltip-position="right"]::after {
2321
+ bottom: auto;
2322
+ left: calc(100% + 10px);
2323
+ top: 50%;
2324
+ transform: translateY(-50%) translateX(-5px);
2325
+ }
2326
+
2327
+ [data-tooltip-position="right"]::before {
2328
+ bottom: auto;
2329
+ left: calc(100% + 5px);
2330
+ top: 50%;
2331
+ transform: translateY(-50%) translateX(-5px);
2332
+ border: 5px solid transparent;
2333
+ border-right-color: #333;
2334
+ }
2335
+
2336
+ /* Tooltips positioned below for quality distribution elements */
2337
+ .quality-distribution-section [data-tooltip]::after,
2338
+ .quality-distribution-bar [data-tooltip]::after,
2339
+ .quality-bar [data-tooltip]::after {
2340
+ bottom: auto;
2341
+ top: calc(100% + 10px);
2342
+ transform: translateX(-50%) translateY(-5px);
2343
+ white-space: pre-line; /* Ensure line breaks work in quality distribution tooltips */
2344
+ text-align: left;
2345
+ max-width: 400px; /* Slightly wider for model lists */
2346
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
2347
+ line-height: 1.6;
2348
+ padding: 12px 16px;
2349
+ }
2350
+
2351
+ .quality-distribution-section [data-tooltip]::before,
2352
+ .quality-distribution-bar [data-tooltip]::before,
2353
+ .quality-bar [data-tooltip]::before {
2354
+ bottom: auto;
2355
+ top: calc(100% + 5px);
2356
+ transform: translateX(-50%) translateY(-5px);
2357
+ border: 5px solid transparent;
2358
+ border-bottom-color: #333;
2359
+ border-top-color: transparent;
2360
+ }
2361
+
2362
+ .quality-distribution-section [data-tooltip]:hover::after,
2363
+ .quality-distribution-bar [data-tooltip]:hover::after,
2364
+ .quality-bar [data-tooltip]:hover::after {
2365
+ transform: translateX(-50%) translateY(0);
2366
+ }
2367
+
2368
+ .quality-distribution-section [data-tooltip]:hover::before,
2369
+ .quality-distribution-bar [data-tooltip]:hover::before,
2370
+ .quality-bar [data-tooltip]:hover::before {
2371
+ transform: translateX(-50%) translateY(0);
2372
+ }
2373
+
2374
+ /* Tooltips for aspect bars - positioned ABOVE to avoid overlap with bars below */
2375
+ .aspect-bar[data-tooltip]::after {
2376
+ content: attr(data-tooltip);
2377
+ position: absolute !important;
2378
+ bottom: calc(100% + 10px) !important; /* Position ABOVE the bar */
2379
+ top: auto !important;
2380
+ left: 50%;
2381
+ transform: translateX(-50%);
2382
+ white-space: pre-line;
2383
+ text-align: left;
2384
+ max-width: 450px;
2385
+ padding: 12px 16px;
2386
+ line-height: 1.6;
2387
+ background: #333;
2388
+ color: white;
2389
+ border-radius: 6px;
2390
+ font-size: 12px;
2391
+ z-index: 2147483647 !important; /* Maximum z-index */
2392
+ opacity: 0;
2393
+ visibility: hidden;
2394
+ transition: all 0.3s ease;
2395
+ box-shadow: 0 4px 12px rgba(0,0,0,0.15);
2396
+ pointer-events: none;
2397
+ }
2398
+
2399
+ .aspect-bar[data-tooltip]::before {
2400
+ content: '';
2401
+ position: absolute !important;
2402
+ bottom: calc(100% + 5px) !important; /* Arrow ABOVE the bar */
2403
+ top: auto !important;
2404
+ left: 50%;
2405
+ transform: translateX(-50%);
2406
+ border: 5px solid transparent;
2407
+ border-top-color: #333; /* Arrow pointing DOWN from tooltip */
2408
+ border-bottom-color: transparent;
2409
+ z-index: 2147483647 !important; /* Maximum z-index */
2410
+ opacity: 0;
2411
+ visibility: hidden;
2412
+ transition: all 0.3s ease;
2413
+ pointer-events: none;
2414
+ }
2415
+
2416
+ .aspect-bar[data-tooltip]:hover::after,
2417
+ .aspect-bar[data-tooltip]:hover::before {
2418
+ opacity: 1;
2419
+ visibility: visible;
2420
+ }
2421
+
2422
+
2423
+
2424
+
2425
+
2426
+ /* Ensure tooltips stay within viewport bounds */
2427
+ @media screen and (max-width: 600px) {
2428
+ [data-tooltip]::after {
2429
+ max-width: 200px;
2430
+ font-size: 11px;
2431
+ }
2432
+
2433
+ .quality-distribution-section [data-tooltip]::after,
2434
+ .quality-distribution-bar [data-tooltip]::after,
2435
+ .quality-bar [data-tooltip]::after,
2436
+ .aspect-bar[data-tooltip]::after {
2437
+ left: 50%;
2438
+ transform: translateX(-50%) translateY(-5px);
2439
+ margin-left: 0;
2440
+ margin-right: 0;
2441
+ }
2442
+ }
2443
+
2444
+ /* Export Progress Indicator */
2445
+ .export-progress {
2446
+ position: fixed;
2447
+ top: 50%;
2448
+ left: 50%;
2449
+ transform: translate(-50%, -50%);
2450
+ background: white;
2451
+ padding: 30px;
2452
+ border-radius: 10px;
2453
+ box-shadow: 0 10px 40px rgba(0,0,0,0.2);
2454
+ z-index: 10000;
2455
+ text-align: center;
2456
+ }
2457
+
2458
+ /* Export-specific styles */
2459
+ .export-ready {
2460
+ overflow: visible !important;
2461
+ max-width: none !important;
2462
+ width: 100% !important;
2463
+ }
2464
+
2465
+ .export-ready .report-content {
2466
+ overflow: visible !important;
2467
+ max-width: none !important;
2468
+ }
2469
+
2470
+ .export-ready .collapsible-content {
2471
+ max-height: none !important;
2472
+ overflow: visible !important;
2473
+ }
2474
+
2475
+ .export-ready .consolidated-report {
2476
+ width: 100% !important;
2477
+ max-width: none !important;
2478
+ }
2479
+
2480
+ .export-ready .table-container {
2481
+ overflow: visible !important;
2482
+ max-width: none !important;
2483
+ }
2484
+
2485
+ .export-ready .comparison-table {
2486
+ width: 100% !important;
2487
+ table-layout: auto !important;
2488
+ }
2489
+
2490
+ .export-ready .charts-section-vertical,
2491
+ .export-ready .chart-container-full {
2492
+ width: 100% !important;
2493
+ overflow: visible !important;
2494
+ }
2495
+
2496
+ .export-ready .bar-chart {
2497
+ overflow: visible !important;
2498
+ }
2499
+
2500
+ .export-ready .aspect-breakdown-section,
2501
+ .export-ready .aspect-breakdown,
2502
+ .export-ready .clean-matrix-container {
2503
+ width: 100% !important;
2504
+ overflow: visible !important;
2505
+ }
2506
+
2507
+ .export-ready .aspect-distribution {
2508
+ overflow: visible !important;
2509
+ }
2510
+
2511
+ .export-ready .consolidated-summary,
2512
+ .export-ready .summary-grid {
2513
+ width: 100% !important;
2514
+ }
2515
+
2516
+ .export-ready .quality-distribution-bar {
2517
+ overflow: visible !important;
2518
+ }
2519
+
2520
+ .export-progress h3 {
2521
+ margin-bottom: 15px;
2522
+ color: #2c3e50;
2523
+ }
2524
+
2525
+ .export-spinner {
2526
+ width: 40px;
2527
+ height: 40px;
2528
+ border: 4px solid #f3f3f3;
2529
+ border-top: 4px solid #667eea;
2530
+ border-radius: 50%;
2531
+ animation: spin 1s linear infinite;
2532
+ margin: 0 auto;
2533
+ }
2534
+
2535
+ @keyframes spin {
2536
+ 0% { transform: rotate(0deg); }
2537
+ 100% { transform: rotate(360deg); }
2538
+ }
2539
+
2540
+ /* Responsive Design for Consolidated Report */
2541
+ @media (max-width: 768px) {
2542
+ .summary-grid {
2543
+ grid-template-columns: 1fr 1fr;
2544
+ }
2545
+
2546
+ .charts-section {
2547
+ grid-template-columns: 1fr;
2548
+ }
2549
+
2550
+ .comparison-table {
2551
+ font-size: 0.85em;
2552
+ }
2553
+
2554
+ .comparison-table th,
2555
+ .comparison-table td {
2556
+ padding: 6px 4px;
2557
+ font-size: 0.8em;
2558
+ }
2559
+
2560
+ .model-cell {
2561
+ max-width: 140px;
2562
+ overflow: hidden;
2563
+ text-overflow: ellipsis;
2564
+ white-space: nowrap;
2565
+ }
2566
+
2567
+ .bar-chart {
2568
+ height: 200px;
2569
+ }
2570
+
2571
+ .chart-bar-container {
2572
+ height: 150px;
2573
+ }
2574
+
2575
+ /* Adjust distribution title for smaller screens */
2576
+ .quality-distribution-section h4,
2577
+ .distribution-title {
2578
+ font-size: 1.1em;
2579
+ }
2580
+ }
2581
+
2582
+ /* View Source Button */
2583
+ .view-source-btn {
2584
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
2585
+ color: white;
2586
+ border: none;
2587
+ border-radius: 5px;
2588
+ padding: 5px 12px;
2589
+ font-size: 0.85em;
2590
+ cursor: pointer;
2591
+ margin-left: auto;
2592
+ margin-right: 10px;
2593
+ display: inline-flex;
2594
+ align-items: center;
2595
+ gap: 5px;
2596
+ transition: all 0.3s ease;
2597
+ white-space: nowrap;
2598
+ }
2599
+
2600
+ .view-source-btn:hover {
2601
+ transform: translateY(-1px);
2602
+ box-shadow: 0 2px 8px rgba(102, 126, 234, 0.3);
2603
+ }
2604
+
2605
+ /* Adjust collapsible header to accommodate button */
2606
+ .collapsible-header {
2607
+ display: flex;
2608
+ align-items: center;
2609
+ justify-content: space-between;
2610
+ }
2611
+
2612
+ .collapsible-header h5 {
2613
+ margin: 0;
2614
+ flex-grow: 0;
2615
+ }
2616
+
2617
+ /* Source File Modal */
2618
+ .source-modal {
2619
+ position: fixed;
2620
+ top: 0;
2621
+ left: 0;
2622
+ width: 100%;
2623
+ height: 100%;
2624
+ background: rgba(0, 0, 0, 0.7);
2625
+ z-index: 10000;
2626
+ display: flex;
2627
+ justify-content: center;
2628
+ align-items: center;
2629
+ animation: fadeIn 0.3s ease;
2630
+ }
2631
+
2632
+ @keyframes fadeIn {
2633
+ from {
2634
+ opacity: 0;
2635
+ }
2636
+ to {
2637
+ opacity: 1;
2638
+ }
2639
+ }
2640
+
2641
+ .source-modal-content {
2642
+ background: white;
2643
+ border-radius: 12px;
2644
+ width: 90%;
2645
+ max-width: 1200px;
2646
+ height: 80%;
2647
+ max-height: 800px;
2648
+ display: flex;
2649
+ flex-direction: column;
2650
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
2651
+ animation: slideUp 0.3s ease;
2652
+ }
2653
+
2654
+ @keyframes slideUp {
2655
+ from {
2656
+ transform: translateY(20px);
2657
+ opacity: 0;
2658
+ }
2659
+ to {
2660
+ transform: translateY(0);
2661
+ opacity: 1;
2662
+ }
2663
+ }
2664
+
2665
+ .source-modal-header {
2666
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
2667
+ color: white;
2668
+ padding: 20px;
2669
+ border-radius: 12px 12px 0 0;
2670
+ display: flex;
2671
+ align-items: center;
2672
+ gap: 15px;
2673
+ position: relative;
2674
+ }
2675
+
2676
+ .source-modal-header h3 {
2677
+ margin: 0;
2678
+ font-size: 1.3em;
2679
+ display: flex;
2680
+ align-items: center;
2681
+ gap: 10px;
2682
+ }
2683
+
2684
+ .source-modal-path {
2685
+ font-size: 0.85em;
2686
+ opacity: 0.9;
2687
+ font-family: 'Courier New', monospace;
2688
+ background: rgba(255, 255, 255, 0.1);
2689
+ padding: 4px 8px;
2690
+ border-radius: 4px;
2691
+ }
2692
+
2693
+ .source-modal-close {
2694
+ position: absolute;
2695
+ right: 20px;
2696
+ top: 50%;
2697
+ transform: translateY(-50%);
2698
+ background: rgba(255, 255, 255, 0.2);
2699
+ border: none;
2700
+ color: white;
2701
+ width: 30px;
2702
+ height: 30px;
2703
+ border-radius: 50%;
2704
+ font-size: 20px;
2705
+ cursor: pointer;
2706
+ display: flex;
2707
+ align-items: center;
2708
+ justify-content: center;
2709
+ transition: background 0.3s ease;
2710
+ }
2711
+
2712
+ .source-modal-close:hover {
2713
+ background: rgba(255, 255, 255, 0.3);
2714
+ }
2715
+
2716
+ .source-modal-body {
2717
+ flex: 1;
2718
+ overflow: auto;
2719
+ padding: 20px;
2720
+ background: #f8f9fa;
2721
+ }
2722
+
2723
+ .source-content {
2724
+ background: white;
2725
+ padding: 20px;
2726
+ border-radius: 8px;
2727
+ border: 1px solid #e0e0e0;
2728
+ font-family: 'Courier New', Courier, monospace;
2729
+ font-size: 0.9em;
2730
+ line-height: 1.6;
2731
+ white-space: pre-wrap;
2732
+ word-wrap: break-word;
2733
+ margin: 0;
2734
+ }
2735
+
2736
+ .source-modal-footer {
2737
+ padding: 15px 20px;
2738
+ border-top: 1px solid #e0e0e0;
2739
+ display: flex;
2740
+ justify-content: space-between;
2741
+ align-items: center;
2742
+ background: white;
2743
+ border-radius: 0 0 12px 12px;
2744
+ }
2745
+
2746
+ .source-stats {
2747
+ color: #6c757d;
2748
+ font-size: 0.9em;
2749
+ }
2750
+
2751
+ .source-modal-copy {
2752
+ background: #28a745;
2753
+ color: white;
2754
+ border: none;
2755
+ padding: 8px 16px;
2756
+ border-radius: 5px;
2757
+ cursor: pointer;
2758
+ font-size: 0.9em;
2759
+ display: flex;
2760
+ align-items: center;
2761
+ gap: 5px;
2762
+ transition: background 0.3s ease;
2763
+ }
2764
+
2765
+ .source-modal-copy:hover {
2766
+ background: #218838;
2767
+ }
2768
+
2769
+ /* Responsive adjustments for modal */
2770
+ @media (max-width: 768px) {
2771
+ .source-modal-content {
2772
+ width: 95%;
2773
+ height: 90%;
2774
+ }
2775
+
2776
+ .source-modal-header {
2777
+ padding: 15px;
2778
+ }
2779
+
2780
+ .source-modal-header h3 {
2781
+ font-size: 1.1em;
2782
+ }
2783
+
2784
+ .source-modal-path {
2785
+ display: none;
2786
+ }
2787
+
2788
+ .source-content {
2789
+ font-size: 0.8em;
2790
+ padding: 15px;
2791
+ }
2792
+ }
2793
+
2794
+ /* Agent Output Specific Styles */
2795
+ .report-card.agent-output {
2796
+ /* Use standard report card styling */
2797
+ }
2798
+
2799
+ .agent-outputs-list {
2800
+ flex: 1;
2801
+ min-width: 200px;
2802
+ }
2803
+
2804
+ /* Section Icons */
2805
+ .section-icon {
2806
+ margin-right: 6px;
2807
+ }
2808
+
2809
+ /* Summary Status Banner */
2810
+ .summary-status-banner {
2811
+ display: flex;
2812
+ align-items: center;
2813
+ gap: 15px;
2814
+ padding: 15px;
2815
+ border-radius: 8px;
2816
+ margin-bottom: 15px;
2817
+ background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
2818
+ }
2819
+
2820
+ .summary-status-banner.success {
2821
+ background: linear-gradient(135deg, #d4edda 0%, #c3e6cb 100%);
2822
+ border: 1px solid #b1dfbb;
2823
+ }
2824
+
2825
+ .summary-status-banner.error {
2826
+ background: linear-gradient(135deg, #f8d7da 0%, #f5c6cb 100%);
2827
+ border: 1px solid #f1aeb5;
2828
+ }
2829
+
2830
+ .status-icon {
2831
+ font-size: 2em;
2832
+ }
2833
+
2834
+ .status-details {
2835
+ flex: 1;
2836
+ }
2837
+
2838
+ .status-text {
2839
+ font-size: 1.1em;
2840
+ font-weight: 600;
2841
+ color: #495057;
2842
+ margin-bottom: 4px;
2843
+ }
2844
+
2845
+ .status-result {
2846
+ font-size: 0.9em;
2847
+ color: #6c757d;
2848
+ }
2849
+
2850
+ /* Agent Output Metric Styling */
2851
+ .metric-value.error {
2852
+ color: #dc3545;
2853
+ }
2854
+
2855
+ .metric-value.success {
2856
+ color: #28a745;
2857
+ }
2858
+
2859
+ .conversation-flow {
2860
+ display: flex;
2861
+ flex-direction: column;
2862
+ gap: 10px;
2863
+ }
2864
+
2865
+ .conversation-message {
2866
+ border-radius: 8px;
2867
+ margin-bottom: 12px;
2868
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
2869
+ overflow: hidden;
2870
+ }
2871
+
2872
+ .conversation-message.user-message {
2873
+ background: linear-gradient(135deg, #e3f2fd 0%, #d1e9ff 100%);
2874
+ border-left: 4px solid #2196F3;
2875
+ }
2876
+
2877
+ .conversation-message.assistant-message {
2878
+ background: linear-gradient(135deg, #e8f5e9 0%, #d4edda 100%);
2879
+ border-left: 4px solid #4CAF50;
2880
+ }
2881
+
2882
+ .conversation-message.system-message {
2883
+ background: linear-gradient(135deg, #fff8e1 0%, #ffecb3 100%);
2884
+ border-left: 4px solid #FFC107;
2885
+ }
2886
+
2887
+ .message-header {
2888
+ display: flex;
2889
+ align-items: center;
2890
+ justify-content: space-between;
2891
+ padding: 10px 15px;
2892
+ background: rgba(255, 255, 255, 0.3);
2893
+ border-bottom: 1px solid rgba(0, 0, 0, 0.05);
2894
+ }
2895
+
2896
+ .message-role {
2897
+ font-weight: 600;
2898
+ font-size: 0.9em;
2899
+ text-transform: uppercase;
2900
+ letter-spacing: 0.5px;
2901
+ }
2902
+
2903
+ .message-number {
2904
+ color: #6c757d;
2905
+ font-size: 0.8em;
2906
+ background: rgba(255, 255, 255, 0.5);
2907
+ padding: 2px 8px;
2908
+ border-radius: 12px;
2909
+ }
2910
+
2911
+ .message-body {
2912
+ padding: 15px;
2913
+ }
2914
+
2915
+ .message-text {
2916
+ font-size: 0.9em;
2917
+ line-height: 1.5;
2918
+ color: #212529;
2919
+ }
2920
+
2921
+ /* Assistant Reasoning */
2922
+ .assistant-reasoning {
2923
+ background: rgba(255, 255, 255, 0.5);
2924
+ padding: 12px;
2925
+ border-radius: 6px;
2926
+ }
2927
+
2928
+ .reasoning-item {
2929
+ margin-bottom: 8px;
2930
+ font-size: 0.85em;
2931
+ }
2932
+
2933
+ .reasoning-label {
2934
+ font-weight: 600;
2935
+ margin-right: 8px;
2936
+ }
2937
+
2938
+ /* Tool Invocation */
2939
+ .tool-invocation {
2940
+ margin-top: 12px;
2941
+ padding: 10px;
2942
+ background: rgba(23, 162, 184, 0.1);
2943
+ border-radius: 6px;
2944
+ border: 1px solid rgba(23, 162, 184, 0.2);
2945
+ }
2946
+
2947
+ .tool-name-inline {
2948
+ font-weight: 600;
2949
+ color: #17a2b8;
2950
+ margin-bottom: 8px;
2951
+ }
2952
+
2953
+ .tool-args-inline {
2954
+ background: white;
2955
+ padding: 8px;
2956
+ border-radius: 4px;
2957
+ font-size: 0.75em;
2958
+ overflow-x: auto;
2959
+ }
2960
+
2961
+ /* Plan Details */
2962
+ .plan-details {
2963
+ margin-top: 10px;
2964
+ }
2965
+
2966
+ .plan-details summary {
2967
+ cursor: pointer;
2968
+ font-weight: 600;
2969
+ font-size: 0.85em;
2970
+ padding: 6px;
2971
+ color: #495057;
2972
+ }
2973
+
2974
+ .plan-content {
2975
+ background: white;
2976
+ padding: 10px;
2977
+ border-radius: 4px;
2978
+ margin-top: 8px;
2979
+ font-size: 0.75em;
2980
+ }
2981
+
2982
+ /* Final Answer */
2983
+ .final-answer {
2984
+ margin-top: 12px;
2985
+ padding: 10px;
2986
+ background: rgba(40, 167, 69, 0.1);
2987
+ border-radius: 6px;
2988
+ border: 1px solid rgba(40, 167, 69, 0.2);
2989
+ }
2990
+
2991
+ .answer-label {
2992
+ font-weight: 600;
2993
+ color: #28a745;
2994
+ display: block;
2995
+ margin-bottom: 6px;
2996
+ }
2997
+
2998
+ .answer-text {
2999
+ font-size: 0.9em;
3000
+ line-height: 1.5;
3001
+ }
3002
+
3003
+ .message-content code {
3004
+ background: #f8f9fa;
3005
+ padding: 2px 4px;
3006
+ border-radius: 3px;
3007
+ font-family: 'Consolas', 'Monaco', monospace;
3008
+ font-size: 0.8em;
3009
+ }
3010
+
3011
+ .report-card.agent-output .metrics-grid .metric {
3012
+ padding: 8px 12px;
3013
+ }
3014
+
3015
+ .report-card.agent-output .metrics-grid .metric-label {
3016
+ font-size: 0.85em;
3017
+ font-weight: 500;
3018
+ }
3019
+
3020
+ .report-card.agent-output .metrics-grid .metric-value {
3021
+ font-size: 0.9em;
3022
+ font-weight: 600;
3023
+ }
3024
+
3025
+ /* Stats Badge */
3026
+ .stats-badge {
3027
+ background: rgba(255, 255, 255, 0.8);
3028
+ padding: 12px;
3029
+ border-radius: 6px;
3030
+ }
3031
+
3032
+ .stats-header {
3033
+ font-weight: 600;
3034
+ font-size: 0.85em;
3035
+ margin-bottom: 10px;
3036
+ color: #495057;
3037
+ }
3038
+
3039
+ .stats-grid {
3040
+ display: grid;
3041
+ grid-template-columns: repeat(2, 1fr);
3042
+ gap: 8px;
3043
+ }
3044
+
3045
+ .stat-item {
3046
+ display: flex;
3047
+ justify-content: space-between;
3048
+ padding: 4px 8px;
3049
+ background: rgba(0, 0, 0, 0.02);
3050
+ border-radius: 4px;
3051
+ font-size: 0.8em;
3052
+ }
3053
+
3054
+ .stat-label {
3055
+ color: #6c757d;
3056
+ font-weight: 500;
3057
+ }
3058
+
3059
+ .stat-value {
3060
+ font-weight: 600;
3061
+ color: #212529;
3062
+ }
3063
+
3064
+ /* Tool Result */
3065
+ .tool-result {
3066
+ background: rgba(255, 255, 255, 0.8);
3067
+ padding: 12px;
3068
+ border-radius: 6px;
3069
+ }
3070
+
3071
+ .tool-result.success {
3072
+ background: rgba(40, 167, 69, 0.05);
3073
+ border: 1px solid rgba(40, 167, 69, 0.1);
3074
+ }
3075
+
3076
+ .result-header {
3077
+ font-weight: 600;
3078
+ font-size: 0.85em;
3079
+ margin-bottom: 10px;
3080
+ color: #28a745;
3081
+ }
3082
+
3083
+ .result-data {
3084
+ background: white;
3085
+ padding: 8px;
3086
+ border-radius: 4px;
3087
+ font-size: 0.75em;
3088
+ max-height: 200px;
3089
+ overflow-y: auto;
3090
+ }
3091
+
3092
+ /* Issues List */
3093
+ .issues-list {
3094
+ margin-top: 10px;
3095
+ }
3096
+
3097
+ .issue-item {
3098
+ display: flex;
3099
+ align-items: center;
3100
+ gap: 10px;
3101
+ padding: 6px 10px;
3102
+ margin-bottom: 4px;
3103
+ background: white;
3104
+ border-radius: 4px;
3105
+ font-size: 0.8em;
3106
+ }
3107
+
3108
+ .issue-key {
3109
+ font-weight: 600;
3110
+ color: #17a2b8;
3111
+ min-width: 60px;
3112
+ }
3113
+
3114
+ .issue-summary {
3115
+ flex: 1;
3116
+ color: #495057;
3117
+ }
3118
+
3119
+ .issue-status {
3120
+ padding: 2px 8px;
3121
+ border-radius: 12px;
3122
+ font-size: 0.75em;
3123
+ font-weight: 600;
3124
+ background: #e9ecef;
3125
+ color: #495057;
3126
+ }
3127
+
3128
+ .issue-status.parking-lot {
3129
+ background: #fff3cd;
3130
+ color: #856404;
3131
+ }
3132
+
3133
+ /* JSON Content */
3134
+ .json-content {
3135
+ background: #f8f9fa;
3136
+ padding: 10px;
3137
+ border-radius: 4px;
3138
+ font-family: 'Consolas', 'Monaco', monospace;
3139
+ font-size: 0.75em;
3140
+ line-height: 1.4;
3141
+ max-height: 300px;
3142
+ overflow: auto;
3143
+ }
3144
+
3145
+ /* Performance Section */
3146
+ .performance-summary {
3147
+ margin-bottom: 20px;
3148
+ }
3149
+
3150
+ .token-stats {
3151
+ display: flex;
3152
+ justify-content: space-around;
3153
+ margin-bottom: 15px;
3154
+ padding: 15px;
3155
+ background: rgba(255, 255, 255, 0.5);
3156
+ border-radius: 8px;
3157
+ }
3158
+
3159
+ .token-stat {
3160
+ text-align: center;
3161
+ }
3162
+
3163
+ .token-stat.total {
3164
+ border-right: 2px solid #dee2e6;
3165
+ padding-right: 20px;
3166
+ margin-right: 20px;
3167
+ }
3168
+
3169
+ .token-stat .stat-label {
3170
+ font-size: 0.8em;
3171
+ color: #6c757d;
3172
+ text-transform: uppercase;
3173
+ letter-spacing: 0.5px;
3174
+ display: block;
3175
+ margin-bottom: 4px;
3176
+ }
3177
+
3178
+ .token-stat .stat-value {
3179
+ font-size: 1.2em;
3180
+ font-weight: 700;
3181
+ color: #212529;
3182
+ }
3183
+
3184
+ .token-stat .stat-percentage {
3185
+ font-size: 0.75em;
3186
+ color: #6c757d;
3187
+ }
3188
+
3189
+ .performance-averages {
3190
+ display: flex;
3191
+ gap: 20px;
3192
+ padding: 10px 15px;
3193
+ background: rgba(23, 162, 184, 0.05);
3194
+ border-radius: 6px;
3195
+ }
3196
+
3197
+ .avg-metric {
3198
+ flex: 1;
3199
+ display: flex;
3200
+ justify-content: space-between;
3201
+ align-items: center;
3202
+ }
3203
+
3204
+ .avg-label {
3205
+ font-size: 0.85em;
3206
+ color: #6c757d;
3207
+ font-weight: 500;
3208
+ }
3209
+
3210
+ .avg-value {
3211
+ font-size: 0.9em;
3212
+ font-weight: 600;
3213
+ color: #17a2b8;
3214
+ }
3215
+
3216
+ /* Steps Table */
3217
+ .steps-table-container {
3218
+ margin-top: 20px;
3219
+ }
3220
+
3221
+ .steps-table-container h5 {
3222
+ font-size: 0.95em;
3223
+ font-weight: 600;
3224
+ margin-bottom: 10px;
3225
+ color: #495057;
3226
+ }
3227
+
3228
+ .steps-table {
3229
+ width: 100%;
3230
+ border-collapse: collapse;
3231
+ font-size: 0.85em;
3232
+ }
3233
+
3234
+ .steps-table thead {
3235
+ background: rgba(0, 0, 0, 0.03);
3236
+ }
3237
+
3238
+ .steps-table th {
3239
+ padding: 8px 12px;
3240
+ text-align: left;
3241
+ font-weight: 600;
3242
+ color: #495057;
3243
+ border-bottom: 2px solid #dee2e6;
3244
+ }
3245
+
3246
+ .steps-table tbody tr {
3247
+ border-bottom: 1px solid #eee;
3248
+ }
3249
+
3250
+ .steps-table tbody tr:hover {
3251
+ background: rgba(0, 0, 0, 0.01);
3252
+ }
3253
+
3254
+ .steps-table td {
3255
+ padding: 8px 12px;
3256
+ }
3257
+
3258
+ .steps-table .step-number {
3259
+ font-weight: 600;
3260
+ color: #17a2b8;
3261
+ }
3262
+
3263
+ /* No Data Message */
3264
+ .no-data-message {
3265
+ text-align: center;
3266
+ padding: 20px;
3267
+ color: #6c757d;
3268
+ font-style: italic;
3269
+ }
3270
+
3271
+ .tool-executions {
3272
+ display: flex;
3273
+ flex-direction: column;
3274
+ gap: 15px;
3275
+ }
3276
+
3277
+ .tool-call {
3278
+ background: #f8f9fa;
3279
+ padding: 12px;
3280
+ border-radius: 6px;
3281
+ border-left: 3px solid #17a2b8;
3282
+ }
3283
+
3284
+ .tool-header {
3285
+ display: flex;
3286
+ justify-content: space-between;
3287
+ align-items: center;
3288
+ margin-bottom: 8px;
3289
+ font-weight: 600;
3290
+ }
3291
+
3292
+ .tool-name {
3293
+ color: #17a2b8;
3294
+ font-size: 0.95em;
3295
+ }
3296
+
3297
+ .tool-index {
3298
+ color: #6c757d;
3299
+ font-size: 0.8em;
3300
+ }
3301
+
3302
+ .tool-details > div {
3303
+ margin-bottom: 6px;
3304
+ font-size: 0.85em;
3305
+ }
3306
+
3307
+ .tool-thought {
3308
+ color: #495057;
3309
+ }
3310
+
3311
+ .tool-goal {
3312
+ color: #28a745;
3313
+ font-weight: 500;
3314
+ }
3315
+
3316
+ .tool-args {
3317
+ background: white;
3318
+ padding: 8px;
3319
+ border-radius: 4px;
3320
+ border: 1px solid #dee2e6;
3321
+ }
3322
+
3323
+ .tool-args code {
3324
+ background: none;
3325
+ padding: 0;
3326
+ }
3327
+
3328
+ .system-prompt-info {
3329
+ margin-bottom: 10px;
3330
+ padding: 8px 12px;
3331
+ background: rgba(23, 162, 184, 0.05);
3332
+ border-radius: 4px;
3333
+ display: inline-block;
3334
+ }
3335
+
3336
+ .prompt-tokens {
3337
+ font-size: 0.85em;
3338
+ color: #17a2b8;
3339
+ font-weight: 500;
3340
+ margin-right: 10px;
3341
+ }
3342
+
3343
+ .prompt-chars {
3344
+ font-size: 0.8em;
3345
+ color: #6c757d;
3346
+ }
3347
+
3348
+ .token-note {
3349
+ margin: 10px 0;
3350
+ padding: 10px;
3351
+ background: #fff3cd;
3352
+ border: 1px solid #ffeeba;
3353
+ border-radius: 4px;
3354
+ color: #856404;
3355
+ font-size: 0.85em;
3356
+ }
3357
+
3358
+ .system-prompt {
3359
+ background: #f8f9fa;
3360
+ padding: 12px;
3361
+ border-radius: 5px;
3362
+ border: 1px solid #dee2e6;
3363
+ font-family: 'Consolas', 'Monaco', monospace;
3364
+ font-size: 0.75em;
3365
+ line-height: 1.3;
3366
+ overflow-x: auto;
3367
+ white-space: pre-wrap;
3368
+ max-height: 300px;
3369
+ overflow-y: auto;
3370
+ }
3371
+
3372
+ /* Detailed Statistics Table */
3373
+ .detailed-stats {
3374
+ margin-top: 20px;
3375
+ background: white;
3376
+ border-radius: 8px;
3377
+ padding: 15px;
3378
+ border: 1px solid #e9ecef;
3379
+ }
3380
+
3381
+ .detailed-stats h5 {
3382
+ font-size: 0.95em;
3383
+ font-weight: 600;
3384
+ margin-bottom: 12px;
3385
+ color: #495057;
3386
+ }
3387
+
3388
+ .stats-summary-table {
3389
+ width: 100%;
3390
+ border-collapse: separate;
3391
+ border-spacing: 0;
3392
+ font-size: 0.85em;
3393
+ background: white;
3394
+ border-radius: 6px;
3395
+ overflow: hidden;
3396
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
3397
+ }
3398
+
3399
+ .stats-summary-table thead {
3400
+ background: linear-gradient(to bottom, #f8f9fa, #f1f3f5);
3401
+ }
3402
+
3403
+ .stats-summary-table th {
3404
+ padding: 10px 15px;
3405
+ font-weight: 600;
3406
+ color: #495057;
3407
+ text-transform: uppercase;
3408
+ font-size: 0.75em;
3409
+ letter-spacing: 0.5px;
3410
+ border-bottom: 2px solid #dee2e6;
3411
+ }
3412
+
3413
+ .stats-summary-table th:first-child {
3414
+ text-align: left;
3415
+ width: 40%;
3416
+ }
3417
+
3418
+ .stats-summary-table th:not(:first-child) {
3419
+ text-align: center;
3420
+ }
3421
+
3422
+ .stats-summary-table tbody tr {
3423
+ transition: background-color 0.15s ease;
3424
+ }
3425
+
3426
+ .stats-summary-table tbody tr:hover {
3427
+ background-color: rgba(23, 162, 184, 0.03);
3428
+ }
3429
+
3430
+ .stats-summary-table tbody tr:not(:last-child) td {
3431
+ border-bottom: 1px solid #f1f3f5;
3432
+ }
3433
+
3434
+ .stats-summary-table td {
3435
+ padding: 12px 15px;
3436
+ color: #495057;
3437
+ }
3438
+
3439
+ .stats-summary-table td:first-child {
3440
+ font-weight: 500;
3441
+ color: #212529;
3442
+ }
3443
+
3444
+ .stats-summary-table td:not(:first-child) {
3445
+ text-align: center;
3446
+ font-family: 'SF Mono', 'Monaco', 'Consolas', monospace;
3447
+ font-size: 0.9em;
3448
+ }
3449
+
3450
+ /* Default coloring for min/max values (for token counts where higher max is notable) */
3451
+ .stats-summary-table td.stat-min {
3452
+ color: #6c757d;
3453
+ font-weight: 500;
3454
+ }
3455
+
3456
+ .stats-summary-table td.stat-max {
3457
+ color: #495057;
3458
+ font-weight: 500;
3459
+ }
3460
+
3461
+ .stats-summary-table td.stat-avg {
3462
+ color: #17a2b8;
3463
+ font-weight: 600;
3464
+ }
3465
+
3466
+ /* Inverted coloring for performance metrics (TTFT - lower is better) */
3467
+ .stats-summary-table tr.metric-ttft td.stat-min {
3468
+ color: #28a745;
3469
+ font-weight: 600;
3470
+ }
3471
+
3472
+ .stats-summary-table tr.metric-ttft td.stat-max {
3473
+ color: #dc3545;
3474
+ font-weight: 600;
3475
+ }
3476
+
3477
+ /* Inverted coloring for speed metrics (Tokens/Second - higher is better) */
3478
+ .stats-summary-table tr.metric-speed td.stat-min {
3479
+ color: #dc3545;
3480
+ font-weight: 600;
3481
+ }
3482
+
3483
+ .stats-summary-table tr.metric-speed td.stat-max {
3484
+ color: #28a745;
3485
+ font-weight: 600;
3486
+ }
3487
+
3488
+ .token-overview {
3489
+ background: rgba(23, 162, 184, 0.05);
3490
+ padding: 15px;
3491
+ border-radius: 6px;
3492
+ margin-bottom: 20px;
3493
+ }
3494
+
3495
+ .token-overview h5 {
3496
+ font-size: 0.95em;
3497
+ font-weight: 600;
3498
+ margin-bottom: 12px;
3499
+ color: #495057;
3500
+ }
3501
+
3502
+ .metric-value.success {
3503
+ color: #28a745;
3504
+ font-weight: 600;
3505
+ }
3506
+
3507
+ .metric-value.error {
3508
+ color: #dc3545;
3509
+ font-weight: 600;
3510
+ }
3511
+ /* Path display styling */
3512
+ .path-display {
3513
+ display: block;
3514
+ font-size: 0.75em;
3515
+ color: #666;
3516
+ margin-top: 2px;
3517
+ margin-bottom: 8px;
3518
+ font-family: monospace;
3519
+ word-break: break-all;
3520
+ }
3521
+
3522
+ /* Grade calculation details */
3523
+ .grade-calculation-details {
3524
+ margin-top: 16px;
3525
+ padding: 12px;
3526
+ background-color: #f8f9fa;
3527
+ border-left: 3px solid #007bff;
3528
+ border-radius: 4px;
3529
+ font-size: 0.9em;
3530
+ }
3531
+
3532
+ .grade-calculation-details h6 {
3533
+ margin: 0 0 8px 0;
3534
+ color: #495057;
3535
+ font-size: 0.95em;
3536
+ }
3537
+
3538
+ .grade-calc-item {
3539
+ padding: 6px 0;
3540
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
3541
+ }
3542
+
3543
+ .grade-calc-item code {
3544
+ background-color: #e9ecef;
3545
+ padding: 2px 6px;
3546
+ border-radius: 3px;
3547
+ font-family: 'Courier New', monospace;
3548
+ font-size: 0.9em;
3549
+ color: #212529;
3550
+ }
3551
+
3552
+ .grade-calc-item strong {
3553
+ color: #212529;
3554
+ }
3555
+
3556
+ /* Improved grade calculation details */
3557
+ .formula-explanation {
3558
+ background-color: #fff;
3559
+ padding: 12px;
3560
+ border-radius: 4px;
3561
+ margin-bottom: 12px;
3562
+ border: 1px solid #dee2e6;
3563
+ }
3564
+
3565
+ .formula-explanation code {
3566
+ display: block;
3567
+ background-color: #e9ecef;
3568
+ padding: 8px 12px;
3569
+ border-radius: 3px;
3570
+ font-family: 'Courier New', monospace;
3571
+ font-size: 1em;
3572
+ color: #212529;
3573
+ margin-bottom: 8px;
3574
+ }
3575
+
3576
+ .formula-legend {
3577
+ display: grid;
3578
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
3579
+ gap: 8px;
3580
+ margin-bottom: 8px;
3581
+ font-size: 0.9em;
3582
+ }
3583
+
3584
+ .formula-legend span {
3585
+ color: #495057;
3586
+ }
3587
+
3588
+ .formula-note {
3589
+ font-size: 0.85em;
3590
+ color: #6c757d;
3591
+ font-style: italic;
3592
+ margin-top: 8px;
3593
+ }
3594
+
3595
+ .model-calc-header {
3596
+ font-size: 1em;
3597
+ margin-bottom: 6px;
3598
+ color: #212529;
3599
+ }
3600
+
3601
+ .calc-step {
3602
+ margin-left: 12px;
3603
+ margin-bottom: 4px;
3604
+ font-size: 0.9em;
3605
+ }
3606
+
3607
+ .step-label {
3608
+ display: inline-block;
3609
+ min-width: 120px;
3610
+ color: #6c757d;
3611
+ font-size: 0.9em;
3612
+ }
3613
+
3614
+ .calc-step code {
3615
+ background-color: #e9ecef;
3616
+ padding: 2px 8px;
3617
+ border-radius: 3px;
3618
+ font-family: 'Courier New', monospace;
3619
+ font-size: 0.95em;
3620
+ color: #212529;
3621
+ margin: 0 4px;
3622
+ }
3623
+
3624
+ /* Collapsible grade calculation */
3625
+ .grade-calc-header {
3626
+ cursor: pointer;
3627
+ display: flex;
3628
+ justify-content: space-between;
3629
+ align-items: center;
3630
+ padding: 8px 0;
3631
+ user-select: none;
3632
+ }
3633
+
3634
+ .grade-calc-header:hover {
3635
+ opacity: 0.8;
3636
+ }
3637
+
3638
+ .grade-calc-header h6 {
3639
+ margin: 0;
3640
+ display: inline-block;
3641
+ }
3642
+
3643
+ .toggle-icon {
3644
+ font-size: 0.8em;
3645
+ transition: transform 0.2s ease;
3646
+ color: #007bff;
3647
+ }
3648
+
3649
+ .grade-calculation-details.expanded .toggle-icon {
3650
+ transform: rotate(90deg);
3651
+ }
3652
+
3653
+ .grade-calc-content {
3654
+ max-height: 0;
3655
+ overflow: hidden;
3656
+ transition: max-height 0.3s ease;
3657
+ }
3658
+
3659
+ .grade-calculation-details.expanded .grade-calc-content {
3660
+ max-height: 1000px;
3661
+ }