minecodex 2.0.1 → 2.0.3

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 (102) hide show
  1. package/DESIGN.md +149 -0
  2. package/apps/dashboard/DESIGN.md +45 -0
  3. package/features/images/DESIGN.md +71 -0
  4. package/features/images/README.md +2 -0
  5. package/features/images/codex-feature.json +2 -1
  6. package/features/images/src/adapters/codex/cloud-import.mjs +52 -0
  7. package/features/images/src/adapters/codex/image-prompt.mjs +22 -0
  8. package/features/images/src/adapters/codex/library-api.mjs +55 -0
  9. package/features/images/src/adapters/codex/library-viewer.mjs +18 -0
  10. package/features/images/src/adapters/codex/prompt-resolver-source.mjs +8 -0
  11. package/features/images/src/backend/cloud-library.mjs +10 -0
  12. package/features/images/src/domain/library-prompt.mjs +7 -0
  13. package/features/images/src/library-prompt-page.mjs +8 -76
  14. package/features/images/src/library-prompt-source.mjs +10 -0
  15. package/features/images/web/app.js +9 -9
  16. package/features/images/web/styles.css +219 -219
  17. package/features/model-slider/DESIGN.md +34 -0
  18. package/features/model-slider/src/adapters/codex/controller.mjs +93 -0
  19. package/features/model-slider/src/domain/model-rules.mjs +143 -0
  20. package/features/model-slider/src/frontend/install.mjs +2110 -0
  21. package/features/model-slider/src/injection-source.mjs +10 -0
  22. package/features/notes/DESIGN.md +19 -15
  23. package/features/notes/README.md +10 -2
  24. package/features/notes/assets/default-prompts.json +170 -0
  25. package/features/notes/assets/dsh-prompt-LICENSE.txt +24 -0
  26. package/features/notes/assets/icons/book-open-nav-fill.svg +1 -0
  27. package/features/notes/codex-feature.json +5 -1
  28. package/features/notes/src/backend/default-prompts.mjs +29 -0
  29. package/features/notes/src/{product.mjs → backend/product.mjs} +3 -1
  30. package/features/notes/src/{quick-prompts-server.mjs → backend/quick-prompts-server.mjs} +2 -2
  31. package/features/notes/src/{quick-prompts-page.mjs → frontend/entry.mjs} +78 -266
  32. package/features/notes/src/frontend/icons.json +13 -0
  33. package/features/notes/src/frontend/styles.css +110 -0
  34. package/features/notes/src/main.mjs +2 -2
  35. package/features/notes/vendor/phosphor-LICENSE +21 -0
  36. package/features/session-status/DESIGN.md +7 -7
  37. package/features/session-status/README.md +4 -0
  38. package/features/session-status/codex-feature.json +1 -1
  39. package/features/session-status/src/adapters/codex/context-usage.mjs +39 -0
  40. package/features/session-status/src/adapters/codex/session-log.mjs +81 -0
  41. package/features/session-status/src/adapters/codex/session-reader.mjs +106 -0
  42. package/features/session-status/src/domain/session-stats.mjs +141 -0
  43. package/features/session-status/src/injection-source.mjs +6 -0
  44. package/features/session-status/src/session-status.mjs +43 -103
  45. package/features/sidebar-focus/DESIGN.md +6 -5
  46. package/features/sidebar-focus/codex-feature.json +2 -1
  47. package/features/sidebar-focus/src/adapters/codex/renderer.mjs +28 -0
  48. package/features/sidebar-focus/src/injection-source.mjs +6 -0
  49. package/features/sidebar-focus/src/sidebar-focus.mjs +19 -66
  50. package/features/sites/DESIGN.md +60 -0
  51. package/features/sites/README.md +27 -0
  52. package/features/sites/codex-feature.json +28 -0
  53. package/features/sites/src/adapters/codex/catalog.mjs +26 -0
  54. package/features/sites/src/adapters/codex/renderer.mjs +83 -0
  55. package/features/sites/src/backend/discovery.mjs +73 -0
  56. package/features/sites/src/backend/project-sites.mjs +34 -0
  57. package/features/sites/src/backend/site-launcher.mjs +54 -0
  58. package/features/sites/src/backend/sites-preview.mjs +53 -0
  59. package/features/sites/src/backend/sites-service.mjs +162 -0
  60. package/features/sites/src/domain/site.mjs +40 -0
  61. package/features/sites/src/frontend/entry.mjs +383 -0
  62. package/features/sites/src/frontend/icons.json +12 -0
  63. package/features/sites/src/frontend/styles.css +72 -0
  64. package/features/sites/src/injection-source.mjs +7 -0
  65. package/features/sites/vendor/lucide-LICENSE +35 -0
  66. package/features/unread-inbox/DESIGN.md +6 -2
  67. package/features/unread-inbox/codex-feature.json +2 -1
  68. package/features/unread-inbox/src/adapters/codex/renderer.mjs +66 -0
  69. package/features/unread-inbox/src/injection-source.mjs +6 -0
  70. package/features/unread-inbox/src/unread-inbox.mjs +36 -91
  71. package/features/usage-meter/DESIGN.md +9 -9
  72. package/features/usage-meter/README.md +2 -1
  73. package/features/usage-meter/codex-feature.json +3 -3
  74. package/features/usage-meter/src/adapters/codex/renderer.mjs +61 -0
  75. package/features/usage-meter/src/injection-source.mjs +6 -0
  76. package/features/usage-meter/src/usage-meter.mjs +27 -66
  77. package/package.json +17 -4
  78. package/packages/cli/src/config.mjs +2 -1
  79. package/packages/codex-adapter/README.md +15 -0
  80. package/packages/codex-adapter/package.json +1 -0
  81. package/packages/codex-adapter/src/renderer/environment.mjs +53 -0
  82. package/packages/runtime-host/README.md +27 -0
  83. package/packages/runtime-host/src/codex-injection.mjs +36 -2393
  84. package/packages/runtime-host/src/codex-runtime.mjs +21 -3
  85. package/packages/runtime-host/src/feature-registry.mjs +28 -3
  86. package/packages/ui/DESIGN.md +31 -0
  87. package/packages/ui/package.json +8 -0
  88. package/packages/ui/src/components/button.mjs +21 -0
  89. package/packages/ui/src/components/composer-menu.mjs +18 -0
  90. package/packages/ui/src/components/dialog.mjs +55 -0
  91. package/packages/ui/src/components/navigation-rail.mjs +77 -0
  92. package/packages/ui/src/components/page.mjs +8 -0
  93. package/packages/ui/src/components/tooltip.mjs +96 -0
  94. package/packages/ui/src/foundation/layers.mjs +14 -0
  95. package/packages/ui/src/foundation/surfaces.mjs +34 -0
  96. package/packages/ui/src/install.mjs +22 -0
  97. package/packages/ui/src/native/navigation-rail.mjs +33 -0
  98. package/packages/ui/src/native/theme.mjs +35 -0
  99. package/packages/{runtime-host/src/codex-design-contract.mjs → ui/src/native/tokens.mjs} +67 -24
  100. package/packages/runtime-host/src/cloud-images.mjs +0 -123
  101. package/packages/runtime-host/src/session-status-reader.mjs +0 -340
  102. /package/features/notes/src/{prompt-schema.mjs → backend/prompt-schema.mjs} +0 -0
@@ -1,125 +1,125 @@
1
1
  :root {
2
2
  color-scheme: light;
3
- --codex-base-accent: #339cff;
4
- --color-token-main-surface-primary: #fff;
5
- --color-token-bg-primary: #f9f9f9;
6
- --color-token-bg-secondary: color-mix(in srgb, #f9f9f9 92%, transparent);
7
- --color-surface-tertiary: #f0f0f0;
8
- --color-surface-elevated-secondary: #fff;
9
- --color-border-subtle: color-mix(in oklab, #1a1c1f 4%, transparent);
10
- --color-background-primary-ghost-hover: color-mix(in oklab, #1a1c1f 5%, transparent);
11
- --color-chart-blue: #339cff;
12
- --color-text-inverse: #fff;
13
- --color-background-elevated-primary-opaque: #fff;
14
- --color-background-panel: #f5f5f5;
15
- --color-background-primary-solid: #1a1c1f;
16
- --color-text-primary-solid: #fff;
17
- --color-background-button-secondary: color-mix(in oklab, #1a1c1f 5%, transparent);
18
- --color-background-button-secondary-hover: color-mix(in oklab, #1a1c1f 8%, transparent);
19
- --color-background-button-tertiary-hover: color-mix(in oklab, #1a1c1f 7%, transparent);
20
- --color-text-foreground: #1a1c1f;
21
- --color-text-foreground-secondary: color-mix(in oklab, #1a1c1f 70%, transparent);
22
- --color-text-foreground-tertiary: color-mix(in oklab, #1a1c1f 50%, transparent);
23
- --color-icon-tertiary: rgb(13 13 13 / 48.4%);
24
- --color-text-accent: #087ccf;
25
- --color-border: color-mix(in oklab, #1a1c1f 8%, transparent);
26
- --color-border-heavy: color-mix(in oklab, #1a1c1f 14%, transparent);
27
- --color-border-focus: #339cff;
28
- --color-token-scrollbar-slider-background: var(--color-border);
29
- --color-token-scrollbar-slider-hover-background: var(--color-border-heavy);
30
- --color-token-scrollbar-slider-active-background: var(--color-border-heavy);
31
- --color-token-list-hover-background: color-mix(in oklab, #1a1c1f 5%, transparent);
32
- --color-token-input-background: #f3f3f3;
33
- --color-token-input-border: color-mix(in oklab, #1a1c1f 14%, transparent);
34
- --color-token-input-foreground: #1a1c1f;
35
- --color-token-input-placeholder-foreground: color-mix(in oklab, #1a1c1f 50%, transparent);
36
- --font-sans-default: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
37
- --default-mono-font-family: ui-monospace, "SFMono-Regular", "SF Mono", Menlo, Consolas, monospace;
38
- --text-heading-md: 20px;
3
+ --mcx-codex-base-accent: #339cff;
4
+ --mcx-color-token-main-surface-primary: #fff;
5
+ --mcx-color-token-bg-primary: #f9f9f9;
6
+ --mcx-color-token-bg-secondary: color-mix(in srgb, #f9f9f9 92%, transparent);
7
+ --mcx-color-surface-tertiary: #f0f0f0;
8
+ --mcx-color-surface-elevated-secondary: #fff;
9
+ --mcx-color-border-subtle: color-mix(in oklab, #1a1c1f 4%, transparent);
10
+ --mcx-color-background-primary-ghost-hover: color-mix(in oklab, #1a1c1f 5%, transparent);
11
+ --mcx-color-chart-blue: #339cff;
12
+ --mcx-color-text-inverse: #fff;
13
+ --mcx-color-background-elevated-primary-opaque: #fff;
14
+ --mcx-color-background-panel: #f5f5f5;
15
+ --mcx-color-background-primary-solid: #1a1c1f;
16
+ --mcx-color-text-primary-solid: #fff;
17
+ --mcx-color-background-button-secondary: color-mix(in oklab, #1a1c1f 5%, transparent);
18
+ --mcx-color-background-button-secondary-hover: color-mix(in oklab, #1a1c1f 8%, transparent);
19
+ --mcx-color-background-button-tertiary-hover: color-mix(in oklab, #1a1c1f 7%, transparent);
20
+ --mcx-color-text-foreground: #1a1c1f;
21
+ --mcx-color-text-foreground-secondary: color-mix(in oklab, #1a1c1f 70%, transparent);
22
+ --mcx-color-text-foreground-tertiary: color-mix(in oklab, #1a1c1f 50%, transparent);
23
+ --mcx-color-icon-tertiary: rgb(13 13 13 / 48.4%);
24
+ --mcx-color-text-accent: #087ccf;
25
+ --mcx-color-border: color-mix(in oklab, #1a1c1f 8%, transparent);
26
+ --mcx-color-border-heavy: color-mix(in oklab, #1a1c1f 14%, transparent);
27
+ --mcx-color-border-focus: #339cff;
28
+ --mcx-color-token-scrollbar-slider-background: var(--mcx-color-border);
29
+ --mcx-color-token-scrollbar-slider-hover-background: var(--mcx-color-border-heavy);
30
+ --mcx-color-token-scrollbar-slider-active-background: var(--mcx-color-border-heavy);
31
+ --mcx-color-token-list-hover-background: color-mix(in oklab, #1a1c1f 5%, transparent);
32
+ --mcx-color-token-input-background: #f3f3f3;
33
+ --mcx-color-token-input-border: color-mix(in oklab, #1a1c1f 14%, transparent);
34
+ --mcx-color-token-input-foreground: #1a1c1f;
35
+ --mcx-color-token-input-placeholder-foreground: color-mix(in oklab, #1a1c1f 50%, transparent);
36
+ --mcx-font-sans-default: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
37
+ --mcx-default-mono-font-family: ui-monospace, "SFMono-Regular", "SF Mono", Menlo, Consolas, monospace;
38
+ --mcx-text-heading-md: 20px;
39
39
  --text-heading-sm: 18px;
40
- --text-base: 14px;
41
- --text-sm: 13px;
42
- --text-xs: 12px;
43
- --radius-md: 10px;
44
- --radius-lg: 12.5px;
45
- --radius-xl: 15px;
46
- --shadow-xl: 0 8px 30px rgb(0 0 0 / 14%);
40
+ --mcx-text-base: 14px;
41
+ --mcx-text-sm: 13px;
42
+ --mcx-text-xs: 12px;
43
+ --mcx-radius-md: 10px;
44
+ --mcx-radius-lg: 12.5px;
45
+ --mcx-radius-xl: 15px;
46
+ --mcx-shadow-xl: 0 8px 30px rgb(0 0 0 / 14%);
47
47
  --library-gutter: clamp(20px, 4vw, 56px);
48
48
  --library-card-radius: 16px;
49
- --library-canvas: color-mix(in srgb, var(--color-token-main-surface-primary) 98.8%, var(--color-text-foreground));
50
- --library-card-border: light-dark(rgb(0 0 0 / 5%), var(--color-border-subtle));
49
+ --library-canvas: color-mix(in srgb, var(--mcx-color-token-main-surface-primary) 98.8%, var(--mcx-color-text-foreground));
50
+ --library-card-border: light-dark(rgb(0 0 0 / 5%), var(--mcx-color-border-subtle));
51
51
  --library-card-shadow: 0 4px 16px 0 light-dark(rgb(0 0 0 / 5%), rgb(0 0 0 / 16%));
52
52
  --library-detail-gutter: clamp(20px, 3vw, 40px);
53
- font-family: var(--font-sans-default);
54
- background: var(--color-token-main-surface-primary);
55
- color: var(--color-text-foreground);
53
+ font-family: var(--mcx-font-sans-default);
54
+ background: var(--mcx-color-token-main-surface-primary);
55
+ color: var(--mcx-color-text-foreground);
56
56
  }
57
57
 
58
58
  :root[data-theme="dark"] {
59
59
  color-scheme: dark;
60
- --color-token-main-surface-primary: #181818;
61
- --color-token-bg-primary: #141414;
62
- --color-token-bg-secondary: color-mix(in srgb, #141414 92%, transparent);
63
- --color-surface-tertiary: rgb(40 40 40);
64
- --color-surface-elevated-secondary: rgb(45 45 45);
65
- --color-border-subtle: rgb(255 255 255 / 4.2%);
66
- --color-background-primary-ghost-hover: rgb(255 255 255 / 7.8%);
67
- --color-chart-blue: #339cff;
68
- --color-text-inverse: rgb(13 13 13);
69
- --color-background-elevated-primary-opaque: #363636;
70
- --color-background-panel: #232323;
71
- --color-background-primary-solid: #fff;
72
- --color-text-primary-solid: #2d2d2d;
73
- --color-background-button-secondary: rgb(255 255 255 / 5.2%);
74
- --color-background-button-secondary-hover: rgb(255 255 255 / 7.8%);
75
- --color-background-button-tertiary-hover: rgb(255 255 255 / 6.8%);
76
- --color-text-foreground: #fff;
77
- --color-text-foreground-secondary: rgb(255 255 255 / 71%);
78
- --color-text-foreground-tertiary: rgb(255 255 255 / 49.8%);
79
- --color-icon-tertiary: color-mix(in oklab, #fff 50%, transparent);
80
- --color-text-accent: #83c3ff;
81
- --color-border: rgb(255 255 255 / 8.4%);
82
- --color-border-heavy: rgb(255 255 255 / 15.6%);
83
- --color-border-focus: rgb(131 195 255 / 76%);
84
- --color-token-list-hover-background: rgb(255 255 255 / 7.8%);
85
- --color-token-input-background: rgb(45 45 45 / 96%);
86
- --color-token-input-border: rgb(255 255 255 / 15.6%);
87
- --color-token-input-foreground: #fff;
88
- --color-token-input-placeholder-foreground: rgb(255 255 255 / 49.8%);
60
+ --mcx-color-token-main-surface-primary: #181818;
61
+ --mcx-color-token-bg-primary: #141414;
62
+ --mcx-color-token-bg-secondary: color-mix(in srgb, #141414 92%, transparent);
63
+ --mcx-color-surface-tertiary: rgb(40 40 40);
64
+ --mcx-color-surface-elevated-secondary: rgb(45 45 45);
65
+ --mcx-color-border-subtle: rgb(255 255 255 / 4.2%);
66
+ --mcx-color-background-primary-ghost-hover: rgb(255 255 255 / 7.8%);
67
+ --mcx-color-chart-blue: #339cff;
68
+ --mcx-color-text-inverse: rgb(13 13 13);
69
+ --mcx-color-background-elevated-primary-opaque: #363636;
70
+ --mcx-color-background-panel: #232323;
71
+ --mcx-color-background-primary-solid: #fff;
72
+ --mcx-color-text-primary-solid: #2d2d2d;
73
+ --mcx-color-background-button-secondary: rgb(255 255 255 / 5.2%);
74
+ --mcx-color-background-button-secondary-hover: rgb(255 255 255 / 7.8%);
75
+ --mcx-color-background-button-tertiary-hover: rgb(255 255 255 / 6.8%);
76
+ --mcx-color-text-foreground: #fff;
77
+ --mcx-color-text-foreground-secondary: rgb(255 255 255 / 71%);
78
+ --mcx-color-text-foreground-tertiary: rgb(255 255 255 / 49.8%);
79
+ --mcx-color-icon-tertiary: color-mix(in oklab, #fff 50%, transparent);
80
+ --mcx-color-text-accent: #83c3ff;
81
+ --mcx-color-border: rgb(255 255 255 / 8.4%);
82
+ --mcx-color-border-heavy: rgb(255 255 255 / 15.6%);
83
+ --mcx-color-border-focus: rgb(131 195 255 / 76%);
84
+ --mcx-color-token-list-hover-background: rgb(255 255 255 / 7.8%);
85
+ --mcx-color-token-input-background: rgb(45 45 45 / 96%);
86
+ --mcx-color-token-input-border: rgb(255 255 255 / 15.6%);
87
+ --mcx-color-token-input-foreground: #fff;
88
+ --mcx-color-token-input-placeholder-foreground: rgb(255 255 255 / 49.8%);
89
89
  }
90
90
 
91
91
  @media (prefers-color-scheme: dark) {
92
92
  :root:not([data-theme]) {
93
93
  color-scheme: dark;
94
- --color-token-main-surface-primary: #181818;
95
- --color-token-bg-primary: #141414;
96
- --color-token-bg-secondary: color-mix(in srgb, #141414 92%, transparent);
97
- --color-surface-tertiary: rgb(40 40 40);
98
- --color-surface-elevated-secondary: rgb(45 45 45);
99
- --color-border-subtle: rgb(255 255 255 / 4.2%);
100
- --color-background-primary-ghost-hover: rgb(255 255 255 / 7.8%);
101
- --color-chart-blue: #339cff;
102
- --color-text-inverse: rgb(13 13 13);
103
- --color-background-elevated-primary-opaque: #363636;
104
- --color-background-panel: #232323;
105
- --color-background-primary-solid: #fff;
106
- --color-text-primary-solid: #2d2d2d;
107
- --color-background-button-secondary: rgb(255 255 255 / 5.2%);
108
- --color-background-button-secondary-hover: rgb(255 255 255 / 7.8%);
109
- --color-background-button-tertiary-hover: rgb(255 255 255 / 6.8%);
110
- --color-text-foreground: #fff;
111
- --color-text-foreground-secondary: rgb(255 255 255 / 71%);
112
- --color-text-foreground-tertiary: rgb(255 255 255 / 49.8%);
113
- --color-icon-tertiary: color-mix(in oklab, #fff 50%, transparent);
114
- --color-text-accent: #83c3ff;
115
- --color-border: rgb(255 255 255 / 8.4%);
116
- --color-border-heavy: rgb(255 255 255 / 15.6%);
117
- --color-border-focus: rgb(131 195 255 / 76%);
118
- --color-token-list-hover-background: rgb(255 255 255 / 7.8%);
119
- --color-token-input-background: rgb(45 45 45 / 96%);
120
- --color-token-input-border: rgb(255 255 255 / 15.6%);
121
- --color-token-input-foreground: #fff;
122
- --color-token-input-placeholder-foreground: rgb(255 255 255 / 49.8%);
94
+ --mcx-color-token-main-surface-primary: #181818;
95
+ --mcx-color-token-bg-primary: #141414;
96
+ --mcx-color-token-bg-secondary: color-mix(in srgb, #141414 92%, transparent);
97
+ --mcx-color-surface-tertiary: rgb(40 40 40);
98
+ --mcx-color-surface-elevated-secondary: rgb(45 45 45);
99
+ --mcx-color-border-subtle: rgb(255 255 255 / 4.2%);
100
+ --mcx-color-background-primary-ghost-hover: rgb(255 255 255 / 7.8%);
101
+ --mcx-color-chart-blue: #339cff;
102
+ --mcx-color-text-inverse: rgb(13 13 13);
103
+ --mcx-color-background-elevated-primary-opaque: #363636;
104
+ --mcx-color-background-panel: #232323;
105
+ --mcx-color-background-primary-solid: #fff;
106
+ --mcx-color-text-primary-solid: #2d2d2d;
107
+ --mcx-color-background-button-secondary: rgb(255 255 255 / 5.2%);
108
+ --mcx-color-background-button-secondary-hover: rgb(255 255 255 / 7.8%);
109
+ --mcx-color-background-button-tertiary-hover: rgb(255 255 255 / 6.8%);
110
+ --mcx-color-text-foreground: #fff;
111
+ --mcx-color-text-foreground-secondary: rgb(255 255 255 / 71%);
112
+ --mcx-color-text-foreground-tertiary: rgb(255 255 255 / 49.8%);
113
+ --mcx-color-icon-tertiary: color-mix(in oklab, #fff 50%, transparent);
114
+ --mcx-color-text-accent: #83c3ff;
115
+ --mcx-color-border: rgb(255 255 255 / 8.4%);
116
+ --mcx-color-border-heavy: rgb(255 255 255 / 15.6%);
117
+ --mcx-color-border-focus: rgb(131 195 255 / 76%);
118
+ --mcx-color-token-list-hover-background: rgb(255 255 255 / 7.8%);
119
+ --mcx-color-token-input-background: rgb(45 45 45 / 96%);
120
+ --mcx-color-token-input-border: rgb(255 255 255 / 15.6%);
121
+ --mcx-color-token-input-foreground: #fff;
122
+ --mcx-color-token-input-placeholder-foreground: rgb(255 255 255 / 49.8%);
123
123
  }
124
124
  }
125
125
 
@@ -129,13 +129,13 @@ html,
129
129
  body {
130
130
  min-height: 100%;
131
131
  margin: 0;
132
- background: var(--color-token-main-surface-primary);
132
+ background: var(--mcx-color-token-main-surface-primary);
133
133
  }
134
134
 
135
135
  body {
136
136
  min-width: 320px;
137
- color: var(--color-text-foreground);
138
- font: 400 var(--text-base)/1.5 var(--font-sans-default);
137
+ color: var(--mcx-color-text-foreground);
138
+ font: 400 var(--mcx-text-base)/1.5 var(--mcx-font-sans-default);
139
139
  -webkit-font-smoothing: antialiased;
140
140
  }
141
141
 
@@ -165,7 +165,7 @@ button { color: inherit; }
165
165
  height: 100vh;
166
166
  display: flex;
167
167
  overflow: hidden;
168
- background: var(--color-token-main-surface-primary);
168
+ background: var(--mcx-color-token-main-surface-primary);
169
169
  }
170
170
 
171
171
  /* 侧栏分界不占用布局宽度。 */
@@ -175,7 +175,7 @@ button { color: inherit; }
175
175
  z-index: 12;
176
176
  inset: 0 auto 0 0;
177
177
  width: 1px;
178
- background: var(--color-border);
178
+ background: var(--mcx-color-border);
179
179
  pointer-events: none;
180
180
  }
181
181
 
@@ -211,7 +211,7 @@ button { color: inherit; }
211
211
  .library-scroll,
212
212
  .drawer-scroll,
213
213
  .source-menu {
214
- scrollbar-color: var(--color-token-scrollbar-slider-background) transparent;
214
+ scrollbar-color: var(--mcx-color-token-scrollbar-slider-background) transparent;
215
215
  }
216
216
 
217
217
  .library-scroll::-webkit-scrollbar { width: 12px; }
@@ -227,19 +227,19 @@ button { color: inherit; }
227
227
  .library-scroll::-webkit-scrollbar-thumb,
228
228
  .drawer-scroll::-webkit-scrollbar-thumb,
229
229
  .source-menu::-webkit-scrollbar-thumb {
230
- background-color: var(--color-token-scrollbar-slider-background);
230
+ background-color: var(--mcx-color-token-scrollbar-slider-background);
231
231
  }
232
232
 
233
233
  .library-scroll::-webkit-scrollbar-thumb:hover,
234
234
  .drawer-scroll::-webkit-scrollbar-thumb:hover,
235
235
  .source-menu::-webkit-scrollbar-thumb:hover {
236
- background-color: var(--color-token-scrollbar-slider-hover-background);
236
+ background-color: var(--mcx-color-token-scrollbar-slider-hover-background);
237
237
  }
238
238
 
239
239
  .library-scroll::-webkit-scrollbar-thumb:active,
240
240
  .drawer-scroll::-webkit-scrollbar-thumb:active,
241
241
  .source-menu::-webkit-scrollbar-thumb:active {
242
- background-color: var(--color-token-scrollbar-slider-active-background);
242
+ background-color: var(--mcx-color-token-scrollbar-slider-active-background);
243
243
  }
244
244
 
245
245
  .library-header,
@@ -247,8 +247,8 @@ button { color: inherit; }
247
247
  height: 72px;
248
248
  display: flex;
249
249
  align-items: center;
250
- border-bottom: 1px solid var(--color-border);
251
- background: var(--color-token-main-surface-primary);
250
+ border-bottom: 1px solid var(--mcx-color-border);
251
+ background: var(--mcx-color-token-main-surface-primary);
252
252
  }
253
253
 
254
254
  .library-header {
@@ -284,7 +284,7 @@ p { margin: 0; }
284
284
 
285
285
  h1,
286
286
  .drawer-header h2 {
287
- font-size: var(--text-base);
287
+ font-size: var(--mcx-text-base);
288
288
  font-weight: 600;
289
289
  letter-spacing: -0.01em;
290
290
  }
@@ -338,17 +338,17 @@ h1,
338
338
  align-items: center;
339
339
  gap: 6px;
340
340
  padding: 0 14px;
341
- color: var(--color-text-foreground-secondary);
341
+ color: var(--mcx-color-text-foreground-secondary);
342
342
  background: transparent;
343
343
  cursor: pointer;
344
- font-size: var(--text-sm);
344
+ font-size: var(--mcx-text-sm);
345
345
  font-weight: 500;
346
346
  }
347
347
 
348
348
  .toolbar-button:hover,
349
349
  .toolbar-button[aria-expanded="true"] {
350
- color: var(--color-text-foreground);
351
- background: var(--color-background-button-tertiary-hover);
350
+ color: var(--mcx-color-text-foreground);
351
+ background: var(--mcx-color-background-button-tertiary-hover);
352
352
  }
353
353
 
354
354
  .source-filter-button {
@@ -379,7 +379,7 @@ h1,
379
379
  .filter-count,
380
380
  .source-option-count,
381
381
  .density-button-value {
382
- color: var(--color-text-foreground-tertiary);
382
+ color: var(--mcx-color-text-foreground-tertiary);
383
383
  font-variant-numeric: tabular-nums;
384
384
  }
385
385
 
@@ -400,7 +400,7 @@ h1,
400
400
  }
401
401
 
402
402
  .source-filter-button:hover,
403
- .source-filter-button[aria-expanded="true"] { background: var(--color-background-button-secondary-hover); }
403
+ .source-filter-button[aria-expanded="true"] { background: var(--mcx-color-background-button-secondary-hover); }
404
404
  .source-filter-button[aria-expanded="true"] .filter-chevron { transform: rotate(180deg); }
405
405
 
406
406
  .source-menu {
@@ -409,8 +409,8 @@ h1,
409
409
  z-index: 20;
410
410
  border: 0;
411
411
  border-radius: 16px;
412
- background: var(--color-background-elevated-primary-opaque);
413
- box-shadow: 0 8px 32px var(--color-border-heavy);
412
+ background: var(--mcx-color-background-elevated-primary-opaque);
413
+ box-shadow: 0 8px 32px var(--mcx-color-border-heavy);
414
414
  }
415
415
 
416
416
  .source-menu[hidden] { display: none; }
@@ -440,17 +440,17 @@ h1,
440
440
  align-items: center;
441
441
  gap: 7px;
442
442
  padding: 8px 10px;
443
- color: var(--color-text-foreground-secondary);
443
+ color: var(--mcx-color-text-foreground-secondary);
444
444
  background: transparent;
445
445
  cursor: pointer;
446
446
  text-align: left;
447
- font-size: var(--text-sm);
447
+ font-size: var(--mcx-text-sm);
448
448
  }
449
449
 
450
450
  .source-option:hover,
451
451
  .source-option[aria-selected="true"] {
452
- color: var(--color-text-foreground);
453
- background: var(--color-token-list-hover-background);
452
+ color: var(--mcx-color-text-foreground);
453
+ background: var(--mcx-color-token-list-hover-background);
454
454
  }
455
455
 
456
456
  .source-option-label {
@@ -465,15 +465,15 @@ h1,
465
465
  .source-menu-divider {
466
466
  height: 1px;
467
467
  margin: 5px 4px;
468
- background: var(--color-border);
468
+ background: var(--mcx-color-border);
469
469
  }
470
470
 
471
471
  .density-control { display: flex; align-items: center; }
472
472
  .density-icon { width: 14px; height: 14px; flex: 0 0 auto; }
473
473
  .source-filter-button, .density-trigger {
474
- font-size: var(--text-sm);
474
+ font-size: var(--mcx-text-sm);
475
475
  font-weight: 400;
476
- color: var(--color-icon-tertiary);
476
+ color: var(--mcx-color-icon-tertiary);
477
477
  }
478
478
  .density-trigger { padding-inline: 8px; }
479
479
  .density-menu { left: auto; right: 0; width: 76px; }
@@ -482,8 +482,8 @@ h1,
482
482
  .density-menu .source-option:focus-visible { outline-offset: -2px; }
483
483
 
484
484
  .group-button[aria-pressed="true"] {
485
- color: var(--color-text-foreground);
486
- background: var(--color-background-button-secondary-hover);
485
+ color: var(--mcx-color-text-foreground);
486
+ background: var(--mcx-color-background-button-secondary-hover);
487
487
  }
488
488
 
489
489
  .secondary-button,
@@ -491,7 +491,7 @@ h1,
491
491
  .icon-button {
492
492
  min-height: 32px;
493
493
  border: 1px solid transparent;
494
- border-radius: var(--radius-md);
494
+ border-radius: var(--mcx-radius-md);
495
495
  display: inline-flex;
496
496
  align-items: center;
497
497
  justify-content: center;
@@ -499,22 +499,22 @@ h1,
499
499
  padding: 0 12px;
500
500
  color: inherit;
501
501
  cursor: pointer;
502
- font-size: var(--text-sm);
502
+ font-size: var(--mcx-text-sm);
503
503
  font-weight: 500;
504
504
  text-decoration: none;
505
505
  transition: background-color 120ms ease, border-color 120ms ease, opacity 120ms ease;
506
506
  }
507
507
 
508
508
  .secondary-button {
509
- border-color: var(--color-border);
510
- background: var(--color-background-button-secondary);
509
+ border-color: var(--mcx-color-border);
510
+ background: var(--mcx-color-background-button-secondary);
511
511
  }
512
512
 
513
- .secondary-button:hover { background: var(--color-background-button-secondary-hover); }
513
+ .secondary-button:hover { background: var(--mcx-color-background-button-secondary-hover); }
514
514
 
515
515
  .primary-button {
516
- color: var(--color-text-primary-solid);
517
- background: var(--color-background-primary-solid);
516
+ color: var(--mcx-color-text-primary-solid);
517
+ background: var(--mcx-color-background-primary-solid);
518
518
  }
519
519
 
520
520
  .primary-button:hover { opacity: 0.88; }
@@ -524,11 +524,11 @@ h1,
524
524
  width: 28px;
525
525
  min-height: 28px;
526
526
  padding: 0;
527
- color: var(--color-icon-tertiary);
527
+ color: var(--mcx-color-icon-tertiary);
528
528
  background: transparent;
529
529
  }
530
530
 
531
- .icon-button:hover { background: var(--color-background-button-tertiary-hover); }
531
+ .icon-button:hover { background: var(--mcx-color-background-button-tertiary-hover); }
532
532
  .icon-button:disabled { opacity: 0.45; cursor: default; }
533
533
 
534
534
  .lucide {
@@ -542,7 +542,7 @@ h1,
542
542
  }
543
543
 
544
544
  .loading-ring-icon { display: none; }
545
- .rescan-button.is-loading { color: var(--color-text-foreground-secondary); }
545
+ .rescan-button.is-loading { color: var(--mcx-color-text-foreground-secondary); }
546
546
  .rescan-button.is-loading .refresh-icon { display: none; }
547
547
  .rescan-button.is-loading .loading-ring-icon {
548
548
  display: block;
@@ -561,7 +561,7 @@ h1,
561
561
  .density-trigger:focus-visible,
562
562
  .image-card:focus-visible,
563
563
  .thread-board:focus-visible {
564
- outline: 2px solid var(--color-border-focus);
564
+ outline: 2px solid var(--mcx-color-border-focus);
565
565
  outline-offset: 2px;
566
566
  }
567
567
 
@@ -593,8 +593,8 @@ h1,
593
593
  border-radius: var(--library-card-radius);
594
594
  box-shadow: var(--library-card-shadow);
595
595
  display: block;
596
- color: var(--color-text-foreground);
597
- background: var(--color-token-main-surface-primary);
596
+ color: var(--mcx-color-text-foreground);
597
+ background: var(--mcx-color-token-main-surface-primary);
598
598
  cursor: pointer;
599
599
  text-align: left;
600
600
  transition: background-color 120ms ease, border-color 120ms ease, transform 120ms ease;
@@ -605,7 +605,7 @@ h1,
605
605
  }
606
606
 
607
607
  .image-card.is-selected {
608
- outline: 2px solid var(--color-border-focus);
608
+ outline: 2px solid var(--mcx-color-border-focus);
609
609
  outline-offset: 3px;
610
610
  }
611
611
 
@@ -613,7 +613,7 @@ h1,
613
613
  width: 100%;
614
614
  height: auto;
615
615
  display: block;
616
- background: var(--color-token-bg-primary);
616
+ background: var(--mcx-color-token-bg-primary);
617
617
  }
618
618
 
619
619
  .thread-board-preview {
@@ -622,7 +622,7 @@ h1,
622
622
  display: flex;
623
623
  flex-direction: column;
624
624
  gap: 1px;
625
- background: var(--color-border);
625
+ background: var(--mcx-color-border);
626
626
  }
627
627
 
628
628
  .thread-board-preview img {
@@ -632,7 +632,7 @@ h1,
632
632
  aspect-ratio: 16 / 6;
633
633
  display: block;
634
634
  object-fit: cover;
635
- background: var(--color-token-bg-primary);
635
+ background: var(--mcx-color-token-bg-primary);
636
636
  }
637
637
 
638
638
  .thread-board-preview.is-single img {
@@ -656,7 +656,7 @@ h1,
656
656
  color: #fff;
657
657
  background: rgb(20 20 20 / 76%);
658
658
  backdrop-filter: blur(8px);
659
- font-size: var(--text-xs);
659
+ font-size: var(--mcx-text-xs);
660
660
  font-variant-numeric: tabular-nums;
661
661
  }
662
662
 
@@ -668,14 +668,14 @@ h1,
668
668
  flex-direction: column;
669
669
  justify-content: center;
670
670
  gap: 2px;
671
- background: var(--color-token-main-surface-primary);
672
- font-size: var(--text-xs);
671
+ background: var(--mcx-color-token-main-surface-primary);
672
+ font-size: var(--mcx-text-xs);
673
673
  white-space: nowrap;
674
674
  }
675
675
 
676
676
  .thread-board-title {
677
677
  overflow: hidden;
678
- color: var(--color-text-foreground);
678
+ color: var(--mcx-color-text-foreground);
679
679
  font-weight: 500;
680
680
  text-overflow: ellipsis;
681
681
  }
@@ -685,7 +685,7 @@ h1,
685
685
  align-items: center;
686
686
  justify-content: space-between;
687
687
  gap: 8px;
688
- color: var(--color-text-foreground-tertiary);
688
+ color: var(--mcx-color-text-foreground-tertiary);
689
689
  font-variant-numeric: tabular-nums;
690
690
  }
691
691
 
@@ -694,14 +694,14 @@ h1,
694
694
  inset: auto 10px 10px;
695
695
  min-height: 48px;
696
696
  padding: 8px 12px;
697
- border: 1px solid var(--color-border-subtle);
698
- border-radius: var(--radius-lg);
697
+ border: 1px solid var(--mcx-color-border-subtle);
698
+ border-radius: var(--mcx-radius-lg);
699
699
  display: flex;
700
700
  flex-direction: column;
701
701
  gap: 2px;
702
- background: color-mix(in srgb, var(--color-token-main-surface-primary) 94%, transparent);
702
+ background: color-mix(in srgb, var(--mcx-color-token-main-surface-primary) 94%, transparent);
703
703
  backdrop-filter: blur(12px);
704
- font-size: var(--text-xs);
704
+ font-size: var(--mcx-text-xs);
705
705
  font-variant-numeric: tabular-nums;
706
706
  white-space: nowrap;
707
707
  opacity: 0;
@@ -721,7 +721,7 @@ h1,
721
721
  display: flex;
722
722
  align-items: center;
723
723
  gap: 6px;
724
- color: var(--color-text-foreground-secondary);
724
+ color: var(--mcx-color-text-foreground-secondary);
725
725
  }
726
726
 
727
727
  .source-value > span {
@@ -738,7 +738,7 @@ h1,
738
738
  }
739
739
 
740
740
  .card-source { font-weight: 500; }
741
- .card-time { color: var(--color-text-foreground-tertiary); }
741
+ .card-time { color: var(--mcx-color-text-foreground-tertiary); }
742
742
 
743
743
  .empty-state {
744
744
  width: min(420px, calc(100% - 48px));
@@ -747,8 +747,8 @@ h1,
747
747
  text-align: center;
748
748
  }
749
749
 
750
- .empty-state h2 { font-size: var(--text-base); font-weight: 600; }
751
- .empty-state p { margin-top: 6px; color: var(--color-text-foreground-secondary); font-size: var(--text-sm); }
750
+ .empty-state h2 { font-size: var(--mcx-text-base); font-weight: 600; }
751
+ .empty-state p { margin-top: 6px; color: var(--mcx-color-text-foreground-secondary); font-size: var(--mcx-text-sm); }
752
752
 
753
753
  .status-announcer {
754
754
  position: absolute;
@@ -770,8 +770,8 @@ h1,
770
770
  bottom: 0;
771
771
  width: 80%;
772
772
  overflow: hidden;
773
- border-left: 1px solid var(--color-border);
774
- background: var(--color-token-main-surface-primary);
773
+ border-left: 1px solid var(--mcx-color-border);
774
+ background: var(--mcx-color-token-main-surface-primary);
775
775
  transform: translateX(32px);
776
776
  opacity: 0;
777
777
  visibility: hidden;
@@ -800,7 +800,7 @@ h1,
800
800
  height: 100%;
801
801
  display: flex;
802
802
  flex-direction: column;
803
- background: var(--color-token-main-surface-primary);
803
+ background: var(--mcx-color-token-main-surface-primary);
804
804
  }
805
805
 
806
806
  .drawer-open .image-grid {
@@ -839,57 +839,57 @@ h1,
839
839
  .image-editor [hidden] { display: none !important; }
840
840
  .image-editor-controls { position: sticky; z-index: 6; top: 0; border-radius: var(--library-card-radius) var(--library-card-radius) 0 0; background: transparent; }
841
841
  .image-editor-toolbar { position: relative; display: flex; justify-content: center; min-height: 48px; padding: 8px 16px; }
842
- .image-edit-actions, .image-edit-mode { display: flex; min-width: 0; align-items: center; gap: 2px; padding: 2px; overflow: hidden; border-radius: 9999px; background: color-mix(in srgb, var(--color-surface-tertiary) 95%, transparent); box-shadow: 0 0 0 1px var(--color-border-subtle), var(--shadow-md); backdrop-filter: blur(4px); }
843
- .image-edit-action, .image-edit-mode button { display: inline-flex; height: 28px; align-items: center; justify-content: center; gap: 4px; border: 1px solid transparent; border-radius: 999px; padding: 0 6px; background: transparent; color: var(--color-text-foreground); font-family: var(--font-sans-default); font-size: var(--text-base); font-weight: var(--font-weight-normal); line-height: 18px; white-space: nowrap; cursor: pointer; }
844
- .image-edit-action:hover, .image-edit-action[aria-expanded="true"], .image-edit-mode button:hover { background: var(--color-background-primary-ghost-hover); }
845
- .image-edit-action:focus-visible, .image-edit-mode button:focus-visible, .image-zoom-trigger:focus-visible, .image-edit-menu button:focus-visible { outline: 1px solid var(--color-border-focus); outline-offset: 1px; }
846
- .image-edit-mode button:disabled { color: var(--color-text-foreground-tertiary); cursor: default; }
847
- .image-edit-mode > span { min-width: 0; overflow: hidden; padding: 0 6px; color: var(--color-text-foreground-tertiary); font-size: var(--text-base); line-height: 18px; text-overflow: ellipsis; white-space: nowrap; }
842
+ .image-edit-actions, .image-edit-mode { display: flex; min-width: 0; align-items: center; gap: 2px; padding: 2px; overflow: hidden; border-radius: 9999px; background: color-mix(in srgb, var(--mcx-color-surface-tertiary) 95%, transparent); box-shadow: 0 0 0 1px var(--mcx-color-border-subtle), var(--mcx-shadow-md); backdrop-filter: blur(4px); }
843
+ .image-edit-action, .image-edit-mode button { display: inline-flex; height: 28px; align-items: center; justify-content: center; gap: 4px; border: 1px solid transparent; border-radius: 999px; padding: 0 6px; background: transparent; color: var(--mcx-color-text-foreground); font-family: var(--mcx-font-sans-default); font-size: var(--mcx-text-base); font-weight: var(--mcx-font-weight-normal); line-height: 18px; white-space: nowrap; cursor: pointer; }
844
+ .image-edit-action:hover, .image-edit-action[aria-expanded="true"], .image-edit-mode button:hover { background: var(--mcx-color-background-primary-ghost-hover); }
845
+ .image-edit-action:focus-visible, .image-edit-mode button:focus-visible, .image-zoom-trigger:focus-visible, .image-edit-menu button:focus-visible { outline: 1px solid var(--mcx-color-border-focus); outline-offset: 1px; }
846
+ .image-edit-mode button:disabled { color: var(--mcx-color-text-foreground-tertiary); cursor: default; }
847
+ .image-edit-mode > span { min-width: 0; overflow: hidden; padding: 0 6px; color: var(--mcx-color-text-foreground-tertiary); font-size: var(--mcx-text-base); line-height: 18px; text-overflow: ellipsis; white-space: nowrap; }
848
848
  .image-edit-mode button { width: 28px; padding: 0; flex: 0 0 auto; }
849
849
  .image-edit-mode button > svg { width: 16px; height: 16px; fill: currentColor; }
850
850
  .image-edit-mode button[aria-label="Redo"] > svg { transform: scaleX(-1); }
851
- .image-edit-mode [data-edit-cancel] { color: var(--color-text-foreground-tertiary); }
851
+ .image-edit-mode [data-edit-cancel] { color: var(--mcx-color-text-foreground-tertiary); }
852
852
  .image-edit-mode [data-edit-cancel] > svg { width: 14px; height: 14px; }
853
- .image-edit-mode [data-edit-send] { width: auto; padding: 0 6px; background: var(--color-chart-blue); color: var(--color-text-inverse); }
854
- .image-edit-mode [data-edit-send]:hover { background: color-mix(in srgb, var(--color-chart-blue) 90%, transparent); }
855
- .image-edit-mode [data-edit-send]:disabled { color: var(--color-text-inverse); opacity: .4; }
856
- .image-zoom-trigger { position: absolute; top: 8px; right: 10px; height: 28px; display: inline-flex; align-items: center; gap: 2px; border: 1px solid transparent; border-radius: var(--radius-lg); padding: 0 8px; background: transparent; color: var(--color-text-foreground-tertiary); cursor: pointer; font-family: var(--font-sans-default); font-size: var(--text-sm); font-weight: var(--font-weight-normal); line-height: 20px; font-variant-numeric: tabular-nums; }
857
- .image-zoom-trigger:hover, .image-zoom-trigger[aria-expanded="true"] { background: var(--color-background-primary-ghost-hover); }
853
+ .image-edit-mode [data-edit-send] { width: auto; padding: 0 6px; background: var(--mcx-color-chart-blue); color: var(--mcx-color-text-inverse); }
854
+ .image-edit-mode [data-edit-send]:hover { background: color-mix(in srgb, var(--mcx-color-chart-blue) 90%, transparent); }
855
+ .image-edit-mode [data-edit-send]:disabled { color: var(--mcx-color-text-inverse); opacity: .4; }
856
+ .image-zoom-trigger { position: absolute; top: 8px; right: 10px; height: 28px; display: inline-flex; align-items: center; gap: 2px; border: 1px solid transparent; border-radius: var(--mcx-radius-lg); padding: 0 8px; background: transparent; color: var(--mcx-color-text-foreground-tertiary); cursor: pointer; font-family: var(--mcx-font-sans-default); font-size: var(--mcx-text-sm); font-weight: var(--mcx-font-weight-normal); line-height: 20px; font-variant-numeric: tabular-nums; }
857
+ .image-zoom-trigger:hover, .image-zoom-trigger[aria-expanded="true"] { background: var(--mcx-color-background-primary-ghost-hover); }
858
858
  .image-zoom-trigger [data-zoom-chevron] { width: 12px; height: 12px; fill: none; stroke: currentColor; stroke-width: 1.5; opacity: .5; }
859
- .image-edit-menu { position: absolute; z-index: 8; width: 160px; padding: 4px; border: 0; border-radius: var(--radius-xl); background: color-mix(in srgb, var(--color-surface-elevated-secondary) 90%, transparent); box-shadow: 0 0 0 .5px var(--color-border), var(--shadow-xl); backdrop-filter: blur(4px); }
860
- .image-edit-menu button { display: flex; width: 100%; align-items: center; gap: 6px; border: 0; border-radius: var(--radius-lg); padding: 5px 8px; background: transparent; color: var(--color-text-foreground); font-family: var(--font-sans-default); font-size: var(--text-sm); font-weight: var(--font-weight-normal); line-height: var(--text-sm--line-height); text-align: left; cursor: pointer; }
861
- .image-edit-menu button:hover { background: var(--color-background-primary-ghost-hover); }
859
+ .image-edit-menu { position: absolute; z-index: 8; width: 160px; padding: 4px; border: 0; border-radius: var(--mcx-radius-xl); background: color-mix(in srgb, var(--mcx-color-surface-elevated-secondary) 90%, transparent); box-shadow: 0 0 0 .5px var(--mcx-color-border), var(--mcx-shadow-xl); backdrop-filter: blur(4px); }
860
+ .image-edit-menu button { display: flex; width: 100%; align-items: center; gap: 6px; border: 0; border-radius: var(--mcx-radius-lg); padding: 5px 8px; background: transparent; color: var(--mcx-color-text-foreground); font-family: var(--mcx-font-sans-default); font-size: var(--mcx-text-sm); font-weight: var(--mcx-font-weight-normal); line-height: var(--mcx-text-sm--line-height); text-align: left; cursor: pointer; }
861
+ .image-edit-menu button:hover { background: var(--mcx-color-background-primary-ghost-hover); }
862
862
  .image-ratio-label { min-width: 0; flex: 1; display: flex; align-items: center; justify-content: space-between; gap: 16px; }
863
- .image-ratio-label small { margin: 0; color: var(--color-text-foreground-tertiary); font-size: inherit; }
863
+ .image-ratio-label small { margin: 0; color: var(--mcx-color-text-foreground-tertiary); font-size: inherit; }
864
864
  .image-ratio-icon { display: block; width: 16px; height: 16px; flex: 0 0 auto; fill: currentColor; opacity: .75; }
865
865
  .image-menu-check { width: 17px; height: 17px; flex: 0 0 auto; fill: currentColor; opacity: .75; }
866
866
  .image-menu-check.is-hidden { visibility: hidden; }
867
- .image-menu-separator { height: 1px; margin: 0 8px; background: var(--color-border); }
867
+ .image-menu-separator { height: 1px; margin: 0 8px; background: var(--mcx-color-border); }
868
868
  .image-zoom-menu { width: 136px; padding: 6px; border-radius: 10px; }
869
869
  .image-zoom-menu button { border-radius: 6px; padding: 5px 5px 5px 8px; line-height: 20px; }
870
870
  .image-editor-stage { position: relative; overflow: auto; border-radius: var(--library-card-radius); touch-action: none; }
871
871
  .image-editor-stage img { transform-origin: center; transition: transform 120ms ease-out; }
872
872
  .image-edit-mask, .image-comment-layer { position: absolute; inset: 0; width: 100%; height: 100%; }
873
- .image-edit-mask { cursor: crosshair; opacity: .5; color: var(--color-text-accent); }
873
+ .image-edit-mask { cursor: crosshair; opacity: .5; color: var(--mcx-color-text-accent); }
874
874
  .image-comment-layer { pointer-events: none; }
875
- .image-comment-marker { position: absolute; display: flex; width: 30px; height: 30px; align-items: center; justify-content: center; border: 0; padding: 0; background: transparent; color: var(--color-text-accent); font-family: var(--font-sans-default); transform: translate(-50%, -50%); }
875
+ .image-comment-marker { position: absolute; display: flex; width: 30px; height: 30px; align-items: center; justify-content: center; border: 0; padding: 0; background: transparent; color: var(--mcx-color-text-accent); font-family: var(--mcx-font-sans-default); transform: translate(-50%, -50%); }
876
876
  button.image-comment-marker { pointer-events: auto; cursor: pointer; }
877
877
  .image-comment-marker > svg { position: absolute; inset: 0; width: 30px; height: 30px; fill: currentColor; overflow: visible; stroke: white; stroke-width: 1.65; }
878
878
  .image-comment-marker > span { position: relative; z-index: 1; color: white; font-size: 10px; font-weight: 700; line-height: 10px; transform: translate(-1px, -1px); }
879
- .image-comment-popover { position: absolute; z-index: 4; width: min(294px, calc(100% - 16px)); height: 44px; padding: 8px 8px 8px 16px; border: 0; border-radius: 22px; background: var(--color-surface-elevated-secondary); box-shadow: 0 0 0 1px var(--color-border-subtle), var(--shadow-md); }
880
- .image-comment-popover input { width: 100%; height: 28px; border: 0; padding: 0; outline: 0; background: transparent; color: var(--color-token-input-foreground); font-family: var(--font-sans-default); font-size: var(--text-base); font-weight: var(--font-weight-normal); line-height: 21px; }
879
+ .image-comment-popover { position: absolute; z-index: 4; width: min(294px, calc(100% - 16px)); height: 44px; padding: 8px 8px 8px 16px; border: 0; border-radius: 22px; background: var(--mcx-color-surface-elevated-secondary); box-shadow: 0 0 0 1px var(--mcx-color-border-subtle), var(--mcx-shadow-md); }
880
+ .image-comment-popover input { width: 100%; height: 28px; border: 0; padding: 0; outline: 0; background: transparent; color: var(--mcx-color-token-input-foreground); font-family: var(--mcx-font-sans-default); font-size: var(--mcx-text-base); font-weight: var(--mcx-font-weight-normal); line-height: 21px; }
881
881
  .image-comment-popover.is-existing-comment { height: 120px; padding: 8px 12px 8px 16px; }
882
- .image-comment-popover textarea { display: block; width: 100%; height: 60px; resize: none; border: 0; padding: 2px 0 0; outline: 0; background: transparent; color: var(--color-token-input-foreground); font-family: var(--font-sans-default); font-size: var(--text-base); font-weight: var(--font-weight-normal); line-height: 24px; }
882
+ .image-comment-popover textarea { display: block; width: 100%; height: 60px; resize: none; border: 0; padding: 2px 0 0; outline: 0; background: transparent; color: var(--mcx-color-token-input-foreground); font-family: var(--mcx-font-sans-default); font-size: var(--mcx-text-base); font-weight: var(--mcx-font-weight-normal); line-height: 24px; }
883
883
  .image-comment-editor-footer { height: 44px; display: flex; align-items: end; justify-content: space-between; }
884
884
  .image-comment-editor-actions { display: flex; gap: 6px; }
885
- .image-comment-editor-footer button { height: 28px; border: 1px solid var(--color-border); border-radius: 999px; padding: 0 8px; background: color-mix(in srgb, var(--color-token-main-surface-primary) 96%, transparent); color: var(--color-text-foreground); font-family: var(--font-sans-default); font-size: var(--text-sm); font-weight: var(--font-weight-normal); line-height: 18px; cursor: pointer; }
886
- .image-comment-editor-footer button:hover { background: var(--color-background-primary-ghost-hover); }
885
+ .image-comment-editor-footer button { height: 28px; border: 1px solid var(--mcx-color-border); border-radius: 999px; padding: 0 8px; background: color-mix(in srgb, var(--mcx-color-token-main-surface-primary) 96%, transparent); color: var(--mcx-color-text-foreground); font-family: var(--mcx-font-sans-default); font-size: var(--mcx-text-sm); font-weight: var(--mcx-font-weight-normal); line-height: 18px; cursor: pointer; }
886
+ .image-comment-editor-footer button:hover { background: var(--mcx-color-background-primary-ghost-hover); }
887
887
  .image-comment-editor-footer .image-comment-delete { width: 28px; padding: 0; border-color: transparent; background: transparent; }
888
888
  .image-comment-delete > svg { width: 20px; height: 20px; fill: currentColor; }
889
- .image-comment-editor-footer .image-comment-save { border-color: transparent; background: var(--color-background-primary-solid); color: var(--color-text-button-primary); }
889
+ .image-comment-editor-footer .image-comment-save { border-color: transparent; background: var(--mcx-color-background-primary-solid); color: var(--mcx-color-text-button-primary); }
890
890
  .image-comment-editor-footer button:disabled { cursor: default; opacity: .4; }
891
891
  .image-brush-slider { position: absolute; z-index: 3; top: 50%; left: 16px; transform: translateY(-50%) rotate(-90deg); transform-origin: center; }
892
- .image-brush-slider input { accent-color: var(--color-text-accent); }
892
+ .image-brush-slider input { accent-color: var(--mcx-color-text-accent); }
893
893
  .image-edit-menu[data-resize-menu] { top: 48px; left: 50%; transform: translateX(-50%); }
894
894
  .image-zoom-menu { top: 48px; right: 10px; }
895
895
  .image-edit-action > svg { width: 16px; height: 16px; flex: 0 0 auto; fill: currentColor; }
@@ -903,7 +903,7 @@ button.image-comment-marker { pointer-events: auto; cursor: pointer; }
903
903
  max-height: min(68vh, 720px);
904
904
  display: block;
905
905
  object-fit: contain;
906
- border-radius: var(--radius-md);
906
+ border-radius: var(--mcx-radius-md);
907
907
  }
908
908
 
909
909
  .detail-section {
@@ -912,12 +912,12 @@ button.image-comment-marker { pointer-events: auto; cursor: pointer; }
912
912
  border-top: 0;
913
913
  }
914
914
 
915
- .detail-section + .detail-section { border-top: 1px solid var(--color-border-subtle); }
915
+ .detail-section + .detail-section { border-top: 1px solid var(--mcx-color-border-subtle); }
916
916
 
917
917
  .detail-section h3 {
918
918
  margin-bottom: 10px;
919
- color: var(--color-text-foreground);
920
- font-size: var(--text-sm);
919
+ color: var(--mcx-color-text-foreground);
920
+ font-size: var(--mcx-text-sm);
921
921
  font-weight: 600;
922
922
  }
923
923
 
@@ -938,21 +938,21 @@ button.image-comment-marker { pointer-events: auto; cursor: pointer; }
938
938
  }
939
939
 
940
940
  .prompt-copy-button.is-copied {
941
- color: var(--color-text-foreground);
942
- background: var(--color-background-button-secondary);
941
+ color: var(--mcx-color-text-foreground);
942
+ background: var(--mcx-color-background-button-secondary);
943
943
  }
944
944
  .prompt-copy-button svg[hidden] { display: none; }
945
945
 
946
946
  .drawer-prompt {
947
947
  overflow-wrap: anywhere;
948
948
  white-space: pre-wrap;
949
- color: var(--color-text-foreground-secondary);
950
- font-size: var(--text-sm);
949
+ color: var(--mcx-color-text-foreground-secondary);
950
+ font-size: var(--mcx-text-sm);
951
951
  line-height: 1.75;
952
952
  }
953
953
 
954
954
  .drawer-prompt.is-loading,
955
- .drawer-prompt.is-missing { color: var(--color-text-foreground-tertiary); }
955
+ .drawer-prompt.is-missing { color: var(--mcx-color-text-foreground-tertiary); }
956
956
 
957
957
  .image-information { margin: 0; }
958
958
 
@@ -967,15 +967,15 @@ button.image-comment-marker { pointer-events: auto; cursor: pointer; }
967
967
  .image-information div[hidden] { display: none; }
968
968
 
969
969
  .image-information dt {
970
- color: var(--color-text-foreground-tertiary);
971
- font-size: var(--text-xs);
970
+ color: var(--mcx-color-text-foreground-tertiary);
971
+ font-size: var(--mcx-text-xs);
972
972
  }
973
973
 
974
974
  .image-information dd {
975
975
  min-width: 0;
976
976
  margin: 0;
977
- color: var(--color-text-foreground-secondary);
978
- font-size: var(--text-xs);
977
+ color: var(--mcx-color-text-foreground-secondary);
978
+ font-size: var(--mcx-text-xs);
979
979
  font-variant-numeric: tabular-nums;
980
980
  }
981
981
 
@@ -987,8 +987,8 @@ button.image-comment-marker { pointer-events: auto; cursor: pointer; }
987
987
  grid-template-columns: repeat(2, minmax(0, 144px));
988
988
  justify-content: end;
989
989
  gap: 12px;
990
- border-top: 1px solid var(--color-border);
991
- background: var(--color-token-main-surface-primary);
990
+ border-top: 1px solid var(--mcx-color-border);
991
+ background: var(--mcx-color-token-main-surface-primary);
992
992
  }
993
993
 
994
994
  .source-action {
@@ -1020,12 +1020,12 @@ button.image-comment-marker { pointer-events: auto; cursor: pointer; }
1020
1020
  width: max-content;
1021
1021
  max-width: min(260px, 70vw);
1022
1022
  padding: 6px 8px;
1023
- border: 1px solid var(--color-border-heavy);
1023
+ border: 1px solid var(--mcx-color-border-heavy);
1024
1024
  border-radius: 7px;
1025
- color: var(--color-text-foreground);
1026
- background: var(--color-background-elevated-primary-opaque);
1027
- box-shadow: var(--shadow-xl);
1028
- font-size: var(--text-xs);
1025
+ color: var(--mcx-color-text-foreground);
1026
+ background: var(--mcx-color-background-elevated-primary-opaque);
1027
+ box-shadow: var(--mcx-shadow-xl);
1028
+ font-size: var(--mcx-text-xs);
1029
1029
  font-weight: 400;
1030
1030
  line-height: 1.35;
1031
1031
  text-align: center;
@@ -1102,13 +1102,13 @@ button.image-comment-marker { pointer-events: auto; cursor: pointer; }
1102
1102
  .new-images-chip {
1103
1103
  position: absolute; z-index: 5; top: 12px; left: 50%; transform: translateX(-50%);
1104
1104
  display: flex; align-items: center; gap: 8px;
1105
- min-height: 36px; padding: 8px 16px; border: 1px solid var(--color-border);
1106
- border-radius: 999px; background: var(--color-surface-elevated-secondary);
1107
- color: var(--color-text-foreground); font: 500 13px/18px var(--font-sans-default);
1105
+ min-height: 36px; padding: 8px 16px; border: 1px solid var(--mcx-color-border);
1106
+ border-radius: 999px; background: var(--mcx-color-surface-elevated-secondary);
1107
+ color: var(--mcx-color-text-foreground); font: 500 13px/18px var(--mcx-font-sans-default);
1108
1108
  box-shadow: 0 2px 6px #0000000a, 0 8px 24px #00000014;
1109
1109
  white-space: nowrap; cursor: pointer; -webkit-app-region: no-drag;
1110
1110
  }
1111
- .new-images-chip:hover { background: var(--color-background-panel); }
1112
- .new-images-chip:focus-visible { outline: 2px solid var(--color-border-focus); outline-offset: 3px; }
1111
+ .new-images-chip:hover { background: var(--mcx-color-background-panel); }
1112
+ .new-images-chip:focus-visible { outline: 2px solid var(--mcx-color-border-focus); outline-offset: 3px; }
1113
1113
  .new-images-arrow { font-size: 18px; line-height: 18px; }
1114
1114
  .new-images-chip[hidden], .drawer-open .new-images-chip, .thread-context .new-images-chip { display: none; }