pixelcrew 0.2.3 → 0.2.6

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 (171) hide show
  1. package/README.md +389 -315
  2. package/bin/pixel-agents.js +306 -149
  3. package/package.json +3 -1
  4. package/skill/SKILL.md +185 -0
  5. package/skill/references/anti-ai-rubric.md +30 -0
  6. package/skill/references/anti-ai-slop-encyclopedia.md +181 -0
  7. package/skill/references/commands-reference.md +135 -0
  8. package/skill/references/testing-and-qa-strategy.md +25 -0
  9. package/skill/references/token-efficiency.md +20 -0
  10. package/src/adapters/adapter.interface.js +77 -0
  11. package/src/adapters/antigravity.js +138 -0
  12. package/src/adapters/claude-code.js +149 -0
  13. package/src/adapters/codex.js +131 -0
  14. package/src/adapters/cursor.js +133 -0
  15. package/src/adapters/generic.js +63 -0
  16. package/src/adapters/index.js +15 -0
  17. package/src/adapters/kiro.js +134 -0
  18. package/src/adapters/registry.js +150 -0
  19. package/src/backend/analyzer/complexity-analyzer.js +104 -0
  20. package/src/backend/analyzer/requirement-analyzer.js +213 -0
  21. package/src/backend/analyzer/threat-analyzer.js +122 -0
  22. package/src/backend/api/api-designer.js +90 -0
  23. package/src/backend/api/error-contract.js +132 -0
  24. package/src/backend/api/route-generator.js +92 -0
  25. package/src/backend/api/schema-generator.js +64 -0
  26. package/src/backend/architecture/adr-generator.js +62 -0
  27. package/src/backend/architecture/architecture-reasoner.js +119 -0
  28. package/src/backend/architecture/architecture-selector.js +57 -0
  29. package/src/backend/architecture/tradeoff-analyzer.js +92 -0
  30. package/src/backend/data/data-modeler.js +114 -0
  31. package/src/backend/data/index-analyzer.js +93 -0
  32. package/src/backend/data/query-analyzer.js +41 -0
  33. package/src/backend/data/schema-generator.js +92 -0
  34. package/src/backend/data/transaction-analyzer.js +49 -0
  35. package/src/backend/index.js +67 -0
  36. package/src/backend/observability/logging-engine.js +80 -0
  37. package/src/backend/observability/metrics-engine.js +31 -0
  38. package/src/backend/observability/tracing-engine.js +16 -0
  39. package/src/backend/patterns/pattern-registry.js +74 -0
  40. package/src/backend/patterns/pattern-selector.js +39 -0
  41. package/src/backend/patterns/tradeoff-engine.js +17 -0
  42. package/src/backend/performance/cache-analyzer.js +31 -0
  43. package/src/backend/performance/concurrency-analyzer.js +34 -0
  44. package/src/backend/performance/performance-engine.js +98 -0
  45. package/src/backend/performance/query-optimizer.js +16 -0
  46. package/src/backend/reliability/failure-analyzer.js +22 -0
  47. package/src/backend/reliability/idempotency-engine.js +56 -0
  48. package/src/backend/reliability/resilience-engine.js +141 -0
  49. package/src/backend/reliability/retry-analyzer.js +15 -0
  50. package/src/backend/security/auth-selector.js +33 -0
  51. package/src/backend/security/authorization-engine.js +90 -0
  52. package/src/backend/security/policy-engine.js +49 -0
  53. package/src/backend/security/secret-analyzer.js +39 -0
  54. package/src/backend/security/security-engine.js +122 -0
  55. package/src/backend/security/threat-model.js +59 -0
  56. package/src/backend/synthesis/backend-synthesizer.js +98 -0
  57. package/src/backend/synthesis/infrastructure-synthesizer.js +108 -0
  58. package/src/backend/synthesis/module-synthesizer.js +262 -0
  59. package/src/backend/validation/architecture-validator.js +70 -0
  60. package/src/backend/validation/backend-quality-validator.js +71 -0
  61. package/src/backend/validation/dependency-validator.js +20 -0
  62. package/src/backend/validation/performance-validator.js +38 -0
  63. package/src/backend/validation/security-validator.js +73 -0
  64. package/src/commands/adapt.js +105 -0
  65. package/src/commands/add.js +78 -0
  66. package/src/commands/animate.js +48 -0
  67. package/src/commands/assemble.js +57 -0
  68. package/src/commands/audit.js +93 -0
  69. package/src/commands/backend.js +125 -0
  70. package/src/commands/bento.js +25 -0
  71. package/src/commands/blueprint.js +65 -0
  72. package/src/commands/bolder.js +48 -0
  73. package/src/commands/boss-fight.js +60 -0
  74. package/src/commands/build.js +39 -0
  75. package/src/commands/calibrate.js +25 -0
  76. package/src/commands/chromatic.js +25 -0
  77. package/src/commands/clarify.js +52 -0
  78. package/src/commands/colorize.js +57 -0
  79. package/src/commands/command.interface.js +28 -0
  80. package/src/commands/commands.js +84 -0
  81. package/src/commands/craft.js +57 -0
  82. package/src/commands/crew.js +66 -0
  83. package/src/commands/critique.js +25 -0
  84. package/src/commands/de-slop.js +25 -0
  85. package/src/commands/delight.js +46 -0
  86. package/src/commands/deploy.js +42 -0
  87. package/src/commands/distill.js +48 -0
  88. package/src/commands/doctor.js +89 -0
  89. package/src/commands/document.js +83 -0
  90. package/src/commands/eight-bit.js +25 -0
  91. package/src/commands/extract.js +75 -0
  92. package/src/commands/fix.js +46 -0
  93. package/src/commands/harden.js +85 -0
  94. package/src/commands/index.js +67 -0
  95. package/src/commands/install.js +75 -0
  96. package/src/commands/layout.js +48 -0
  97. package/src/commands/live.js +44 -0
  98. package/src/commands/manifest.js +25 -0
  99. package/src/commands/office.js +25 -0
  100. package/src/commands/onboard.js +46 -0
  101. package/src/commands/oneshot.js +60 -0
  102. package/src/commands/optimize.js +46 -0
  103. package/src/commands/overdrive.js +46 -0
  104. package/src/commands/parser.js +143 -0
  105. package/src/commands/pixelcrew.js +96 -0
  106. package/src/commands/plan.js +66 -0
  107. package/src/commands/polish.js +45 -0
  108. package/src/commands/quieter.js +48 -0
  109. package/src/commands/recap.js +358 -0
  110. package/src/commands/registry.js +353 -0
  111. package/src/commands/render.js +26 -0
  112. package/src/commands/retrofit.js +25 -0
  113. package/src/commands/review.js +118 -0
  114. package/src/commands/roster.js +25 -0
  115. package/src/commands/sentinel.js +25 -0
  116. package/src/commands/shape.js +66 -0
  117. package/src/commands/skills.js +57 -0
  118. package/src/commands/status.js +48 -0
  119. package/src/commands/stop.js +50 -0
  120. package/src/commands/sync.js +58 -0
  121. package/src/commands/typeset.js +58 -0
  122. package/src/commands/warp.js +25 -0
  123. package/src/core/agent-runtime.js +94 -0
  124. package/src/core/event-bus.js +98 -0
  125. package/src/core/index.js +9 -0
  126. package/src/core/orchestrator.js +234 -0
  127. package/src/core/scheduler.js +124 -0
  128. package/src/core/task-graph.js +185 -0
  129. package/src/dashboard/app.js +1172 -30
  130. package/src/dashboard/index.html +223 -23
  131. package/src/dashboard/styles.css +870 -0
  132. package/src/index.js +16 -0
  133. package/src/orchestrator/artifact-graph.js +104 -0
  134. package/src/orchestrator/ast-normalizer.js +147 -0
  135. package/src/orchestrator/code-generator.js +632 -780
  136. package/src/orchestrator/design-engine.js +203 -0
  137. package/src/orchestrator/engine.js +307 -38
  138. package/src/orchestrator/oneshot.js +367 -380
  139. package/src/orchestrator/ontology.js +394 -0
  140. package/src/orchestrator/planner.js +231 -258
  141. package/src/orchestrator/repair-planner.js +67 -0
  142. package/src/orchestrator/requirement-contract.js +177 -0
  143. package/src/orchestrator/requirement-validator.js +39 -0
  144. package/src/orchestrator/semantic-engine.js +582 -0
  145. package/src/orchestrator/semantic-reviewer.js +179 -0
  146. package/src/orchestrator/task-planner.js +111 -0
  147. package/src/orchestrator/telemetry.js +209 -0
  148. package/src/orchestrator/ui-synthesizer.js +245 -0
  149. package/src/orchestrator/visual-critic.js +106 -0
  150. package/src/policies/architecture/layering.policy.js +14 -0
  151. package/src/policies/performance/indexing.policy.js +13 -0
  152. package/src/policies/reliability/resilience.policy.js +13 -0
  153. package/src/policies/security/auth.policy.js +31 -0
  154. package/src/protocol/agent.js +124 -0
  155. package/src/protocol/event.js +78 -0
  156. package/src/protocol/index.js +8 -0
  157. package/src/protocol/skill.js +54 -0
  158. package/src/protocol/task.js +100 -0
  159. package/src/scaffold/claude-generator.js +60 -0
  160. package/src/scaffold/commands-catalog.js +321 -0
  161. package/src/scaffold/cursor-generator.js +74 -0
  162. package/src/scaffold/ide-rules.js +133 -0
  163. package/src/scaffold/init.js +415 -91
  164. package/src/scaffold/installer.js +571 -0
  165. package/src/scaffold/kiro-generator.js +86 -0
  166. package/src/scaffold/skills-bundle.js +520 -0
  167. package/src/scaffold/templates.js +57 -4
  168. package/src/scaffold/workstations.js +364 -0
  169. package/src/server/server.js +283 -40
  170. package/src/utils/fs-safe.js +168 -0
  171. package/src/utils/markdown-report.js +175 -0
@@ -306,6 +306,105 @@ body:not(.crt-active) .crt-vignette {
306
306
  border: 2px solid var(--border-light);
307
307
  padding: 4px 8px;
308
308
  gap: 8px;
309
+ position: relative;
310
+ }
311
+
312
+ .command-autocomplete-popup {
313
+ position: absolute;
314
+ top: 100%;
315
+ left: 0;
316
+ right: 0;
317
+ background: #0d111d;
318
+ border: 2px solid var(--color-cyan);
319
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.75), 0 0 12px rgba(0, 240, 255, 0.2);
320
+ z-index: 1000;
321
+ max-height: 280px;
322
+ overflow-y: auto;
323
+ margin-top: 4px;
324
+ }
325
+
326
+ .autocomplete-header {
327
+ font-family: var(--font-pixel);
328
+ font-size: 9px;
329
+ color: var(--color-cyan);
330
+ background: #151b2e;
331
+ padding: 6px 10px;
332
+ border-bottom: 1px solid #232b45;
333
+ display: flex;
334
+ justify-content: space-between;
335
+ align-items: center;
336
+ }
337
+
338
+ .autocomplete-hint {
339
+ font-family: var(--font-display);
340
+ font-size: 10px;
341
+ color: #7b88a8;
342
+ }
343
+
344
+ .autocomplete-list {
345
+ display: flex;
346
+ flex-direction: column;
347
+ }
348
+
349
+ .autocomplete-item {
350
+ display: flex;
351
+ align-items: center;
352
+ padding: 8px 12px;
353
+ cursor: pointer;
354
+ border-bottom: 1px solid #171d30;
355
+ gap: 12px;
356
+ transition: background 0.1s;
357
+ }
358
+
359
+ .autocomplete-item:hover,
360
+ .autocomplete-item.selected {
361
+ background: rgba(0, 240, 255, 0.12);
362
+ }
363
+
364
+ .autocomplete-name {
365
+ font-family: var(--font-pixel);
366
+ font-size: 11px;
367
+ color: var(--color-gold);
368
+ min-width: 100px;
369
+ }
370
+
371
+ .autocomplete-desc {
372
+ font-family: var(--font-display);
373
+ font-size: 12px;
374
+ color: #d1d5db;
375
+ flex: 1;
376
+ }
377
+
378
+ .autocomplete-usage {
379
+ font-family: var(--font-terminal);
380
+ font-size: 12px;
381
+ color: #6b7280;
382
+ background: #080a12;
383
+ padding: 2px 6px;
384
+ border-radius: 2px;
385
+ border: 1px solid #222a40;
386
+ }
387
+
388
+ .provider-indicator {
389
+ display: flex;
390
+ align-items: center;
391
+ gap: 6px;
392
+ background: #111524;
393
+ border: 1px solid #2a3350;
394
+ padding: 4px 8px;
395
+ }
396
+
397
+ .provider-label {
398
+ font-family: var(--font-pixel);
399
+ font-size: 9px;
400
+ color: #7b88a8;
401
+ }
402
+
403
+ .provider-name {
404
+ font-family: var(--font-pixel);
405
+ font-size: 10px;
406
+ color: var(--color-cyan);
407
+ font-weight: bold;
309
408
  }
310
409
 
311
410
  .prompt-prefix {
@@ -1639,3 +1738,774 @@ body:not(.crt-active) .crt-vignette {
1639
1738
  .pipeline-arrow { transform: rotate(90deg); }
1640
1739
  }
1641
1740
 
1741
+ /* ==========================================================================
1742
+ INTERACTIVE PROVIDER BADGE & MODAL
1743
+ ========================================================================== */
1744
+ .provider-indicator.clickable-badge {
1745
+ cursor: pointer;
1746
+ display: flex;
1747
+ align-items: center;
1748
+ gap: 8px;
1749
+ background: #111728;
1750
+ border: 2px solid var(--color-cyan);
1751
+ padding: 4px 10px;
1752
+ box-shadow: var(--pixel-shadow-sm), 0 0 8px rgba(0, 240, 255, 0.25);
1753
+ transition: transform 0.1s, box-shadow 0.1s;
1754
+ }
1755
+ .provider-indicator.clickable-badge:hover {
1756
+ background: #1a223a;
1757
+ box-shadow: var(--pixel-shadow-sm), 0 0 14px rgba(0, 240, 255, 0.5);
1758
+ transform: translateY(-1px);
1759
+ }
1760
+ .provider-icon {
1761
+ font-size: 16px;
1762
+ }
1763
+ .provider-meta {
1764
+ display: flex;
1765
+ flex-direction: column;
1766
+ }
1767
+ .provider-label {
1768
+ font-family: var(--font-pixel);
1769
+ font-size: 7px;
1770
+ color: var(--text-dim);
1771
+ }
1772
+ .provider-name {
1773
+ font-family: var(--font-pixel);
1774
+ font-size: 9px;
1775
+ color: var(--color-cyan);
1776
+ }
1777
+ .provider-chevron {
1778
+ font-size: 8px;
1779
+ color: var(--color-cyan);
1780
+ margin-left: 2px;
1781
+ }
1782
+
1783
+ /* ==========================================================================
1784
+ PROCEDURAL LO-FI MUSIC PLAYER
1785
+ ========================================================================== */
1786
+ .lofi-player-box {
1787
+ display: flex;
1788
+ align-items: center;
1789
+ gap: 8px;
1790
+ background: #111422;
1791
+ border: 2px solid #3d285c;
1792
+ padding: 3px 8px;
1793
+ box-shadow: var(--pixel-shadow-sm);
1794
+ }
1795
+ .btn-lofi {
1796
+ background: #2a1b40;
1797
+ color: #ff77e9;
1798
+ border-color: #ff77e9;
1799
+ padding: 5px 8px;
1800
+ display: flex;
1801
+ align-items: center;
1802
+ gap: 6px;
1803
+ }
1804
+ .btn-lofi:hover {
1805
+ background: #3f2266;
1806
+ color: #fff;
1807
+ }
1808
+ .btn-lofi.playing {
1809
+ background: #501d66;
1810
+ color: #39ff14;
1811
+ border-color: #39ff14;
1812
+ box-shadow: 0 0 10px rgba(57, 255, 20, 0.4);
1813
+ }
1814
+ .lofi-visualizer {
1815
+ display: flex;
1816
+ align-items: flex-end;
1817
+ gap: 2px;
1818
+ height: 16px;
1819
+ width: 22px;
1820
+ }
1821
+ .lofi-bar {
1822
+ width: 3px;
1823
+ height: 4px;
1824
+ background: #4e5a7e;
1825
+ transition: height 0.1s ease;
1826
+ }
1827
+ .lofi-visualizer.playing .lofi-bar:nth-child(1) { animation: lofiEqualize 0.5s infinite ease-in-out alternate; background: #ff007f; }
1828
+ .lofi-visualizer.playing .lofi-bar:nth-child(2) { animation: lofiEqualize 0.7s infinite ease-in-out alternate 0.1s; background: #00f0ff; }
1829
+ .lofi-visualizer.playing .lofi-bar:nth-child(3) { animation: lofiEqualize 0.4s infinite ease-in-out alternate 0.2s; background: #ffd700; }
1830
+ .lofi-visualizer.playing .lofi-bar:nth-child(4) { animation: lofiEqualize 0.6s infinite ease-in-out alternate 0.15s; background: #39ff14; }
1831
+ .lofi-visualizer.playing .lofi-bar:nth-child(5) { animation: lofiEqualize 0.8s infinite ease-in-out alternate 0.05s; background: #b026ff; }
1832
+ @keyframes lofiEqualize {
1833
+ 0% { height: 3px; }
1834
+ 100% { height: 16px; }
1835
+ }
1836
+ .lofi-select {
1837
+ background: #090c17;
1838
+ color: #e2e8f0;
1839
+ border: 1px solid var(--border-color);
1840
+ font-family: var(--font-display);
1841
+ font-size: 11px;
1842
+ padding: 3px 6px;
1843
+ cursor: pointer;
1844
+ }
1845
+ .lofi-vol-slider {
1846
+ width: 50px;
1847
+ accent-color: #ff007f;
1848
+ cursor: pointer;
1849
+ }
1850
+
1851
+ /* ==========================================================================
1852
+ LIVE ACTIVE TASK HUD BANNER
1853
+ ========================================================================== */
1854
+ .active-task-hud {
1855
+ background: linear-gradient(90deg, #0d1222 0%, #151a30 50%, #0d1222 100%);
1856
+ border: 2px solid #232b4a;
1857
+ box-shadow: var(--pixel-shadow-sm);
1858
+ padding: 8px 16px;
1859
+ display: flex;
1860
+ align-items: center;
1861
+ justify-content: space-between;
1862
+ gap: 16px;
1863
+ flex-wrap: wrap;
1864
+ }
1865
+ .hud-left {
1866
+ display: flex;
1867
+ align-items: center;
1868
+ gap: 10px;
1869
+ flex: 1;
1870
+ min-width: 260px;
1871
+ }
1872
+ .hud-pulse-dot {
1873
+ width: 8px;
1874
+ height: 8px;
1875
+ border-radius: 50%;
1876
+ background: var(--color-cyan);
1877
+ box-shadow: 0 0 8px var(--color-cyan);
1878
+ animation: pulseDot 1.2s infinite alternate;
1879
+ }
1880
+ .hud-label {
1881
+ font-family: var(--font-pixel);
1882
+ font-size: 8px;
1883
+ color: var(--text-dim);
1884
+ }
1885
+ .hud-task-text {
1886
+ font-family: var(--font-display);
1887
+ font-size: 13px;
1888
+ color: #ffffff;
1889
+ font-weight: bold;
1890
+ overflow: hidden;
1891
+ text-overflow: ellipsis;
1892
+ white-space: nowrap;
1893
+ max-width: 600px;
1894
+ }
1895
+ .hud-right {
1896
+ display: flex;
1897
+ align-items: center;
1898
+ gap: 12px;
1899
+ }
1900
+ .hud-tool-badge {
1901
+ background: #1e1333;
1902
+ border: 1px solid var(--color-magenta);
1903
+ padding: 3px 8px;
1904
+ font-family: var(--font-pixel);
1905
+ font-size: 8px;
1906
+ color: var(--color-magenta);
1907
+ display: flex;
1908
+ align-items: center;
1909
+ gap: 4px;
1910
+ animation: fadeIn 0.2s;
1911
+ }
1912
+ .hud-timer-box {
1913
+ display: flex;
1914
+ align-items: center;
1915
+ gap: 6px;
1916
+ font-family: var(--font-pixel);
1917
+ font-size: 8px;
1918
+ }
1919
+ .hud-timer-label { color: var(--text-dim); }
1920
+ .hud-timer-val { color: var(--color-green); font-weight: bold; }
1921
+
1922
+ /* ==========================================================================
1923
+ STREAM TAB SWITCHER & ANTIGRAVITY SIDECHAT VIEW
1924
+ ========================================================================== */
1925
+ .stream-tab-controls {
1926
+ display: flex;
1927
+ align-items: center;
1928
+ gap: 6px;
1929
+ }
1930
+ .stream-tab {
1931
+ background: #0d101c;
1932
+ border: 1px solid var(--border-color);
1933
+ color: var(--text-dim);
1934
+ font-family: var(--font-pixel);
1935
+ font-size: 9px;
1936
+ padding: 6px 12px;
1937
+ cursor: pointer;
1938
+ display: flex;
1939
+ align-items: center;
1940
+ gap: 6px;
1941
+ transition: all 0.15s ease;
1942
+ }
1943
+ .stream-tab:hover {
1944
+ background: #171d33;
1945
+ color: var(--text-main);
1946
+ }
1947
+ .stream-tab.active {
1948
+ background: #182240;
1949
+ border-color: var(--color-cyan);
1950
+ color: var(--color-cyan);
1951
+ box-shadow: 0 0 10px rgba(0, 240, 255, 0.25);
1952
+ }
1953
+ .tab-dot.live-pulse {
1954
+ width: 6px;
1955
+ height: 6px;
1956
+ border-radius: 50%;
1957
+ background: var(--color-green);
1958
+ box-shadow: 0 0 6px var(--color-green);
1959
+ animation: pulseDot 0.8s infinite alternate;
1960
+ }
1961
+ .tab-badge {
1962
+ font-size: 7px;
1963
+ background: var(--color-magenta);
1964
+ color: #fff;
1965
+ padding: 1px 4px;
1966
+ border-radius: 2px;
1967
+ }
1968
+
1969
+ /* Antigravity Sidechat Stream */
1970
+ .sidechat-stream-container {
1971
+ background: #060810;
1972
+ padding: 12px;
1973
+ height: 280px;
1974
+ overflow-y: auto;
1975
+ display: flex;
1976
+ flex-direction: column;
1977
+ gap: 10px;
1978
+ font-family: 'JetBrains Mono', 'Fira Code', var(--font-terminal), monospace;
1979
+ }
1980
+ .sidechat-intro-card {
1981
+ background: #0e1424;
1982
+ border: 1px solid #233054;
1983
+ padding: 10px 14px;
1984
+ display: flex;
1985
+ align-items: center;
1986
+ gap: 12px;
1987
+ }
1988
+ .intro-icon { font-size: 22px; }
1989
+ .intro-title { font-family: var(--font-pixel); font-size: 9px; color: var(--color-cyan); }
1990
+ .intro-sub { font-size: 11px; color: var(--text-dim); margin-top: 2px; }
1991
+
1992
+ .sidechat-card {
1993
+ background: #0d1120;
1994
+ border: 1px solid #1e2848;
1995
+ border-left: 4px solid var(--color-cyan);
1996
+ padding: 10px 12px;
1997
+ display: flex;
1998
+ flex-direction: column;
1999
+ gap: 6px;
2000
+ animation: fadeIn 0.15s ease-out;
2001
+ }
2002
+ .sidechat-card.card-lead { border-left-color: var(--color-gold); }
2003
+ .sidechat-card.card-frontend { border-left-color: var(--color-cyan); }
2004
+ .sidechat-card.card-backend { border-left-color: var(--color-magenta); }
2005
+ .sidechat-card.card-database { border-left-color: var(--color-gold); }
2006
+ .sidechat-card.card-security { border-left-color: var(--color-red); }
2007
+ .sidechat-card.card-performance { border-left-color: var(--color-green); }
2008
+ .sidechat-card.card-qa { border-left-color: var(--color-purple); }
2009
+
2010
+ .sidechat-card-header {
2011
+ display: flex;
2012
+ align-items: center;
2013
+ justify-content: space-between;
2014
+ gap: 8px;
2015
+ }
2016
+ .sidechat-agent-badge {
2017
+ font-family: var(--font-pixel);
2018
+ font-size: 8px;
2019
+ padding: 2px 6px;
2020
+ background: #141b33;
2021
+ border: 1px solid currentColor;
2022
+ display: flex;
2023
+ align-items: center;
2024
+ gap: 4px;
2025
+ }
2026
+ .sidechat-type-badge {
2027
+ font-family: var(--font-pixel);
2028
+ font-size: 7px;
2029
+ padding: 2px 5px;
2030
+ background: #1f2742;
2031
+ color: #94a3b8;
2032
+ }
2033
+ .sidechat-timestamp {
2034
+ font-size: 11px;
2035
+ color: #556488;
2036
+ font-family: monospace;
2037
+ }
2038
+
2039
+ .sidechat-thought-box {
2040
+ background: #12182c;
2041
+ border: 1px dashed #303e6b;
2042
+ padding: 8px 10px;
2043
+ font-size: 12px;
2044
+ color: #b8c5e2;
2045
+ display: flex;
2046
+ align-items: flex-start;
2047
+ gap: 8px;
2048
+ }
2049
+ .thought-brain-icon { font-size: 14px; animation: floatIcon 1.5s infinite ease-in-out; }
2050
+ .thought-content { flex: 1; line-height: 1.4; }
2051
+ .thought-typing-dots {
2052
+ display: inline-block;
2053
+ animation: typingDots 1.2s infinite;
2054
+ }
2055
+ @keyframes typingDots {
2056
+ 0% { content: '.'; }
2057
+ 33% { content: '..'; }
2058
+ 66% { content: '...'; }
2059
+ 100% { content: ''; }
2060
+ }
2061
+
2062
+ .sidechat-tool-box {
2063
+ background: #090c17;
2064
+ border: 1px solid #283358;
2065
+ padding: 8px 10px;
2066
+ display: flex;
2067
+ flex-direction: column;
2068
+ gap: 6px;
2069
+ }
2070
+ .tool-box-header {
2071
+ display: flex;
2072
+ align-items: center;
2073
+ justify-content: space-between;
2074
+ gap: 8px;
2075
+ }
2076
+ .tool-action-pill {
2077
+ font-family: var(--font-pixel);
2078
+ font-size: 8px;
2079
+ padding: 2px 6px;
2080
+ background: #1d2542;
2081
+ border: 1px solid #3e4e82;
2082
+ color: #ffffff;
2083
+ }
2084
+ .tool-action-pill.read { background: #00364d; color: var(--color-cyan); border-color: var(--color-cyan); }
2085
+ .tool-action-pill.edit { background: #4d0026; color: var(--color-magenta); border-color: var(--color-magenta); }
2086
+ .tool-action-pill.exec { background: #3d3400; color: var(--color-gold); border-color: var(--color-gold); }
2087
+ .tool-action-pill.search { background: #1b004d; color: var(--color-purple); border-color: var(--color-purple); }
2088
+ .tool-action-pill.browser { background: #004d1f; color: var(--color-green); border-color: var(--color-green); }
2089
+
2090
+ .tool-target-path {
2091
+ font-family: monospace;
2092
+ font-size: 12px;
2093
+ color: #38bdf8;
2094
+ background: #0b1122;
2095
+ padding: 2px 6px;
2096
+ border: 1px solid #1e2d52;
2097
+ word-break: break-all;
2098
+ }
2099
+ .tool-snippet-block {
2100
+ background: #030408;
2101
+ border: 1px solid #182038;
2102
+ padding: 6px 8px;
2103
+ font-family: 'JetBrains Mono', monospace;
2104
+ font-size: 11px;
2105
+ color: #94a3b8;
2106
+ overflow-x: auto;
2107
+ white-space: pre-wrap;
2108
+ }
2109
+
2110
+ /* ==========================================================================
2111
+ PROVIDER MODAL
2112
+ ========================================================================== */
2113
+ .provider-modal-card {
2114
+ max-width: 680px;
2115
+ width: 90%;
2116
+ }
2117
+ .provider-modal-body {
2118
+ padding: 16px;
2119
+ display: flex;
2120
+ flex-direction: column;
2121
+ gap: 16px;
2122
+ }
2123
+ .provider-info-banner {
2124
+ background: #0d1326;
2125
+ border: 2px solid var(--color-cyan);
2126
+ padding: 12px 16px;
2127
+ display: flex;
2128
+ align-items: center;
2129
+ justify-content: space-between;
2130
+ gap: 12px;
2131
+ }
2132
+ .provider-banner-left {
2133
+ display: flex;
2134
+ align-items: center;
2135
+ gap: 12px;
2136
+ }
2137
+ .active-prov-icon { font-size: 28px; }
2138
+ .active-prov-title { font-family: var(--font-pixel); font-size: 11px; color: var(--color-cyan); }
2139
+ .active-prov-desc { font-size: 12px; color: var(--text-dim); margin-top: 2px; }
2140
+ .active-status-badge {
2141
+ font-family: var(--font-pixel);
2142
+ font-size: 8px;
2143
+ color: var(--color-green);
2144
+ background: #0c1a14;
2145
+ padding: 4px 8px;
2146
+ border: 1px solid var(--color-green);
2147
+ }
2148
+ .provider-list-title {
2149
+ font-family: var(--font-pixel);
2150
+ font-size: 9px;
2151
+ color: var(--text-main);
2152
+ }
2153
+ .provider-grid {
2154
+ display: grid;
2155
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
2156
+ gap: 10px;
2157
+ }
2158
+ .provider-card {
2159
+ background: #090c17;
2160
+ border: 1px solid var(--border-color);
2161
+ padding: 12px;
2162
+ display: flex;
2163
+ flex-direction: column;
2164
+ gap: 8px;
2165
+ cursor: pointer;
2166
+ transition: all 0.15s ease;
2167
+ }
2168
+ .provider-card:hover {
2169
+ background: #141a30;
2170
+ border-color: var(--color-cyan);
2171
+ }
2172
+ .provider-card.active {
2173
+ background: #131d3d;
2174
+ border: 2px solid var(--color-cyan);
2175
+ box-shadow: 0 0 10px rgba(0, 240, 255, 0.3);
2176
+ }
2177
+ .provider-card-header {
2178
+ display: flex;
2179
+ align-items: center;
2180
+ justify-content: space-between;
2181
+ }
2182
+ .provider-card-title {
2183
+ display: flex;
2184
+ align-items: center;
2185
+ gap: 6px;
2186
+ font-family: var(--font-pixel);
2187
+ font-size: 9px;
2188
+ color: #ffffff;
2189
+ }
2190
+ .provider-card-desc {
2191
+ font-size: 11px;
2192
+ color: var(--text-dim);
2193
+ line-height: 1.3;
2194
+ }
2195
+ .provider-card-status {
2196
+ font-family: var(--font-pixel);
2197
+ font-size: 7px;
2198
+ padding: 2px 4px;
2199
+ }
2200
+ .provider-card.active .provider-card-status {
2201
+ color: var(--color-green);
2202
+ background: #0e2016;
2203
+ }
2204
+ .provider-card.available .provider-card-status {
2205
+ color: var(--color-cyan);
2206
+ background: #0e1c28;
2207
+ }
2208
+ .provider-card.missing .provider-card-status {
2209
+ color: #64748b;
2210
+ background: #0f121d;
2211
+ }
2212
+ .provider-tips {
2213
+ font-size: 12px;
2214
+ color: var(--text-dim);
2215
+ background: #0b0e1b;
2216
+ padding: 8px 12px;
2217
+ border-left: 3px solid var(--color-gold);
2218
+ }
2219
+
2220
+ /* ==========================================================================
2221
+ REAL-TIME TOKEN TELEMETRY & VISUALIZER STYLES
2222
+ ========================================================================== */
2223
+
2224
+ .token-telemetry-badge {
2225
+ display: flex;
2226
+ align-items: center;
2227
+ gap: 8px;
2228
+ background: linear-gradient(135deg, #091a18 0%, #061214 100%);
2229
+ border: 2px solid #00f0ff66;
2230
+ padding: 4px 10px;
2231
+ border-radius: 4px;
2232
+ cursor: pointer;
2233
+ transition: all 0.2s ease;
2234
+ box-shadow: 0 0 10px rgba(0, 240, 255, 0.15);
2235
+ }
2236
+
2237
+ .token-telemetry-badge:hover {
2238
+ border-color: var(--color-cyan);
2239
+ background: #0e292a;
2240
+ transform: translateY(-1px);
2241
+ box-shadow: 0 0 14px rgba(0, 240, 255, 0.35);
2242
+ }
2243
+
2244
+ .token-telemetry-icon {
2245
+ font-size: 14px;
2246
+ animation: pulse-glow 2s infinite ease-in-out;
2247
+ }
2248
+
2249
+ .token-telemetry-meta {
2250
+ display: flex;
2251
+ flex-direction: column;
2252
+ }
2253
+
2254
+ .token-telemetry-label {
2255
+ font-family: var(--font-pixel);
2256
+ font-size: 7px;
2257
+ color: #64748b;
2258
+ letter-spacing: 0.5px;
2259
+ }
2260
+
2261
+ .token-telemetry-val {
2262
+ font-family: var(--font-pixel);
2263
+ font-size: 9px;
2264
+ color: var(--color-cyan);
2265
+ font-weight: bold;
2266
+ }
2267
+
2268
+ .token-telemetry-pill {
2269
+ font-family: var(--font-pixel);
2270
+ font-size: 7px;
2271
+ background: #00ff8822;
2272
+ color: var(--color-green);
2273
+ border: 1px solid #00ff8844;
2274
+ padding: 2px 5px;
2275
+ border-radius: 2px;
2276
+ }
2277
+
2278
+ /* HUD Token Badge */
2279
+ .hud-token-badge {
2280
+ display: flex;
2281
+ align-items: center;
2282
+ gap: 6px;
2283
+ background: #081a17;
2284
+ border: 1px solid #00ff8855;
2285
+ padding: 3px 8px;
2286
+ font-family: var(--font-pixel);
2287
+ font-size: 8px;
2288
+ color: var(--color-green);
2289
+ border-radius: 2px;
2290
+ }
2291
+
2292
+ .hud-token-icon { font-size: 10px; }
2293
+ .hud-token-val { font-weight: bold; }
2294
+ .hud-cost-val { color: var(--color-gold); font-size: 7px; }
2295
+
2296
+ /* Token Analytics Modal */
2297
+ .token-modal-card {
2298
+ max-width: 860px;
2299
+ width: 95%;
2300
+ border-color: var(--color-green);
2301
+ box-shadow: 0 0 30px rgba(0, 255, 136, 0.2);
2302
+ }
2303
+
2304
+ .token-analytics-kpi-grid {
2305
+ display: grid;
2306
+ grid-template-columns: repeat(4, 1fr);
2307
+ gap: 12px;
2308
+ margin-bottom: 16px;
2309
+ }
2310
+
2311
+ @media (max-width: 768px) {
2312
+ .token-analytics-kpi-grid {
2313
+ grid-template-columns: repeat(2, 1fr);
2314
+ }
2315
+ }
2316
+
2317
+ .token-kpi-card {
2318
+ background: #090e18;
2319
+ border: 2px solid var(--border-color);
2320
+ padding: 12px;
2321
+ display: flex;
2322
+ flex-direction: column;
2323
+ gap: 4px;
2324
+ }
2325
+
2326
+ .token-kpi-card.highlight-green {
2327
+ border-color: #00ff8855;
2328
+ background: #071712;
2329
+ }
2330
+
2331
+ .kpi-label {
2332
+ font-family: var(--font-pixel);
2333
+ font-size: 7px;
2334
+ color: var(--text-dim);
2335
+ letter-spacing: 0.5px;
2336
+ }
2337
+
2338
+ .kpi-val {
2339
+ font-family: var(--font-pixel);
2340
+ font-size: 14px;
2341
+ font-weight: bold;
2342
+ }
2343
+
2344
+ .kpi-val.text-cyan { color: var(--color-cyan); }
2345
+ .kpi-val.text-green { color: var(--color-green); }
2346
+ .kpi-val.text-gold { color: var(--color-gold); }
2347
+
2348
+ .kpi-sub {
2349
+ font-size: 10px;
2350
+ color: #64748b;
2351
+ margin-top: 2px;
2352
+ }
2353
+
2354
+ /* Sparkline Stream Chart */
2355
+ .token-chart-section {
2356
+ background: #080c16;
2357
+ border: 2px solid var(--border-color);
2358
+ padding: 12px;
2359
+ margin-bottom: 16px;
2360
+ }
2361
+
2362
+ .chart-header {
2363
+ display: flex;
2364
+ justify-content: space-between;
2365
+ align-items: center;
2366
+ margin-bottom: 8px;
2367
+ }
2368
+
2369
+ .chart-title {
2370
+ font-family: var(--font-pixel);
2371
+ font-size: 8px;
2372
+ color: var(--color-cyan);
2373
+ }
2374
+
2375
+ .chart-live-indicator {
2376
+ font-family: var(--font-pixel);
2377
+ font-size: 7px;
2378
+ color: var(--color-green);
2379
+ animation: pulse-glow 1.5s infinite;
2380
+ }
2381
+
2382
+ .sparkline-container {
2383
+ width: 100%;
2384
+ height: 130px;
2385
+ background: #04070f;
2386
+ border: 1px solid #1a2236;
2387
+ position: relative;
2388
+ overflow: hidden;
2389
+ }
2390
+
2391
+ .sparkline-canvas {
2392
+ width: 100%;
2393
+ height: 100%;
2394
+ display: block;
2395
+ }
2396
+
2397
+ /* Per-Agent Breakdown */
2398
+ .token-agent-breakdown-section {
2399
+ background: #090e18;
2400
+ border: 2px solid var(--border-color);
2401
+ padding: 12px;
2402
+ margin-bottom: 16px;
2403
+ }
2404
+
2405
+ .breakdown-header {
2406
+ display: flex;
2407
+ justify-content: space-between;
2408
+ align-items: baseline;
2409
+ margin-bottom: 12px;
2410
+ }
2411
+
2412
+ .breakdown-title {
2413
+ font-family: var(--font-pixel);
2414
+ font-size: 8px;
2415
+ color: #ffffff;
2416
+ }
2417
+
2418
+ .breakdown-subtitle {
2419
+ font-size: 11px;
2420
+ color: var(--text-dim);
2421
+ }
2422
+
2423
+ .agent-token-bars {
2424
+ display: flex;
2425
+ flex-direction: column;
2426
+ gap: 8px;
2427
+ }
2428
+
2429
+ .agent-token-bar-row {
2430
+ display: grid;
2431
+ grid-template-columns: 140px 1fr 100px;
2432
+ align-items: center;
2433
+ gap: 10px;
2434
+ font-size: 11px;
2435
+ }
2436
+
2437
+ .agent-bar-meta {
2438
+ display: flex;
2439
+ align-items: center;
2440
+ gap: 6px;
2441
+ font-family: var(--font-pixel);
2442
+ font-size: 8px;
2443
+ color: var(--text-main);
2444
+ white-space: nowrap;
2445
+ overflow: hidden;
2446
+ text-overflow: ellipsis;
2447
+ }
2448
+
2449
+ .agent-bar-track {
2450
+ height: 12px;
2451
+ background: #0e1526;
2452
+ border: 1px solid #1e293b;
2453
+ position: relative;
2454
+ overflow: hidden;
2455
+ border-radius: 2px;
2456
+ }
2457
+
2458
+ .agent-bar-fill {
2459
+ height: 100%;
2460
+ background: var(--color-cyan);
2461
+ transition: width 0.4s ease;
2462
+ }
2463
+
2464
+ .agent-bar-fill.cd { background: #ff9900; }
2465
+ .agent-bar-fill.ux { background: #38bdf8; }
2466
+ .agent-bar-fill.ds { background: #34d399; }
2467
+ .agent-bar-fill.fe { background: #00f0ff; }
2468
+ .agent-bar-fill.be { background: #c084fc; }
2469
+ .agent-bar-fill.db { background: #fbbf24; }
2470
+ .agent-bar-fill.perf { background: #4ade80; }
2471
+ .agent-bar-fill.sec { background: #f87171; }
2472
+ .agent-bar-fill.qa { background: #f472b6; }
2473
+
2474
+ .agent-bar-stats {
2475
+ font-family: var(--font-pixel);
2476
+ font-size: 7px;
2477
+ color: var(--text-dim);
2478
+ text-align: right;
2479
+ white-space: nowrap;
2480
+ }
2481
+
2482
+ /* Strategies Card */
2483
+ .token-strategies-card {
2484
+ background: #070b14;
2485
+ border: 2px dashed #00ff8844;
2486
+ padding: 10px 12px;
2487
+ }
2488
+
2489
+ .strategies-title {
2490
+ font-family: var(--font-pixel);
2491
+ font-size: 8px;
2492
+ color: var(--color-green);
2493
+ margin-bottom: 8px;
2494
+ }
2495
+
2496
+ .strategies-pills-list {
2497
+ display: flex;
2498
+ flex-wrap: wrap;
2499
+ gap: 6px;
2500
+ }
2501
+
2502
+ .strat-pill.active {
2503
+ background: #00ff8815;
2504
+ color: #00ff88;
2505
+ border: 1px solid #00ff8844;
2506
+ padding: 3px 8px;
2507
+ font-family: var(--font-pixel);
2508
+ font-size: 7px;
2509
+ }
2510
+
2511
+