@codemieai/code 0.0.55 → 0.0.56

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 (110) hide show
  1. package/README.md +28 -0
  2. package/dist/agents/core/AgentCLI.d.ts.map +1 -1
  3. package/dist/agents/core/AgentCLI.js +10 -2
  4. package/dist/agents/core/AgentCLI.js.map +1 -1
  5. package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
  6. package/dist/agents/core/BaseAgentAdapter.js +20 -6
  7. package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
  8. package/dist/agents/core/session/ensure-session.d.ts.map +1 -1
  9. package/dist/agents/core/session/ensure-session.js +7 -2
  10. package/dist/agents/core/session/ensure-session.js.map +1 -1
  11. package/dist/agents/core/session/types.d.ts +1 -0
  12. package/dist/agents/core/session/types.d.ts.map +1 -1
  13. package/dist/agents/plugins/claude/claude.plugin.js +4 -4
  14. package/dist/agents/plugins/claude/claude.plugin.js.map +1 -1
  15. package/dist/agents/plugins/claude/plugin/.claude-plugin/plugin.json +1 -1
  16. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/SKILL.md +273 -0
  17. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/style-guide/css/base.css +166 -0
  18. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/style-guide/css/buttons.css +253 -0
  19. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/style-guide/css/components.css +605 -0
  20. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/style-guide/css/forms.css +550 -0
  21. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/style-guide/css/layout.css +410 -0
  22. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/style-guide/css/tokens.css +323 -0
  23. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/style-guide/css/typography.css +155 -0
  24. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/style-guide/css/utilities.css +238 -0
  25. package/dist/agents/plugins/claude/plugin/skills/msgraph/scripts/msgraph.js +1 -0
  26. package/dist/cli/commands/hook.d.ts +2 -0
  27. package/dist/cli/commands/hook.d.ts.map +1 -1
  28. package/dist/cli/commands/hook.js +36 -31
  29. package/dist/cli/commands/hook.js.map +1 -1
  30. package/dist/cli/commands/setup.js +11 -1
  31. package/dist/cli/commands/setup.js.map +1 -1
  32. package/dist/providers/core/codemie-auth-helpers.d.ts +22 -0
  33. package/dist/providers/core/codemie-auth-helpers.d.ts.map +1 -0
  34. package/dist/providers/core/codemie-auth-helpers.js +118 -0
  35. package/dist/providers/core/codemie-auth-helpers.js.map +1 -0
  36. package/dist/providers/core/index.d.ts +1 -0
  37. package/dist/providers/core/index.d.ts.map +1 -1
  38. package/dist/providers/core/index.js +1 -0
  39. package/dist/providers/core/index.js.map +1 -1
  40. package/dist/providers/core/types.d.ts +4 -0
  41. package/dist/providers/core/types.d.ts.map +1 -1
  42. package/dist/providers/core/types.js.map +1 -1
  43. package/dist/providers/index.d.ts +2 -0
  44. package/dist/providers/index.d.ts.map +1 -1
  45. package/dist/providers/index.js +2 -0
  46. package/dist/providers/index.js.map +1 -1
  47. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.auth.d.ts +11 -0
  48. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.auth.d.ts.map +1 -0
  49. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.auth.js +30 -0
  50. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.auth.js.map +1 -0
  51. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.setup-steps.d.ts +8 -0
  52. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.setup-steps.d.ts.map +1 -0
  53. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.setup-steps.js +88 -0
  54. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.setup-steps.js.map +1 -0
  55. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.template.d.ts +11 -0
  56. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.template.d.ts.map +1 -0
  57. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.template.js +119 -0
  58. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.template.js.map +1 -0
  59. package/dist/providers/plugins/anthropic-subscription/index.d.ts +9 -0
  60. package/dist/providers/plugins/anthropic-subscription/index.d.ts.map +1 -0
  61. package/dist/providers/plugins/anthropic-subscription/index.js +9 -0
  62. package/dist/providers/plugins/anthropic-subscription/index.js.map +1 -0
  63. package/dist/providers/plugins/jwt/jwt.setup-steps.js +1 -1
  64. package/dist/providers/plugins/jwt/jwt.setup-steps.js.map +1 -1
  65. package/dist/providers/plugins/sso/proxy/plugins/claude-thinking-transformer.plugin.d.ts +30 -0
  66. package/dist/providers/plugins/sso/proxy/plugins/claude-thinking-transformer.plugin.d.ts.map +1 -0
  67. package/dist/providers/plugins/sso/proxy/plugins/claude-thinking-transformer.plugin.js +111 -0
  68. package/dist/providers/plugins/sso/proxy/plugins/claude-thinking-transformer.plugin.js.map +1 -0
  69. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts +2 -1
  70. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
  71. package/dist/providers/plugins/sso/proxy/plugins/index.js +3 -1
  72. package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
  73. package/dist/providers/plugins/sso/proxy/plugins/sso.session-sync.plugin.d.ts.map +1 -1
  74. package/dist/providers/plugins/sso/proxy/plugins/sso.session-sync.plugin.js +9 -7
  75. package/dist/providers/plugins/sso/proxy/plugins/sso.session-sync.plugin.js.map +1 -1
  76. package/dist/providers/plugins/sso/proxy/plugins/types.d.ts +1 -0
  77. package/dist/providers/plugins/sso/proxy/plugins/types.d.ts.map +1 -1
  78. package/dist/providers/plugins/sso/proxy/proxy-types.d.ts +2 -0
  79. package/dist/providers/plugins/sso/proxy/proxy-types.d.ts.map +1 -1
  80. package/dist/providers/plugins/sso/proxy/sso.proxy.d.ts.map +1 -1
  81. package/dist/providers/plugins/sso/proxy/sso.proxy.js +10 -0
  82. package/dist/providers/plugins/sso/proxy/sso.proxy.js.map +1 -1
  83. package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.js +1 -1
  84. package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.js.map +1 -1
  85. package/dist/providers/plugins/sso/session/processors/metrics/metrics-api-client.d.ts +2 -2
  86. package/dist/providers/plugins/sso/session/processors/metrics/metrics-api-client.d.ts.map +1 -1
  87. package/dist/providers/plugins/sso/session/processors/metrics/metrics-api-client.js +4 -4
  88. package/dist/providers/plugins/sso/session/processors/metrics/metrics-api-client.js.map +1 -1
  89. package/dist/providers/plugins/sso/sso.auth.d.ts +0 -4
  90. package/dist/providers/plugins/sso/sso.auth.d.ts.map +1 -1
  91. package/dist/providers/plugins/sso/sso.auth.js +3 -13
  92. package/dist/providers/plugins/sso/sso.auth.js.map +1 -1
  93. package/dist/providers/plugins/sso/sso.http-client.d.ts +3 -42
  94. package/dist/providers/plugins/sso/sso.http-client.d.ts.map +1 -1
  95. package/dist/providers/plugins/sso/sso.http-client.js +4 -75
  96. package/dist/providers/plugins/sso/sso.http-client.js.map +1 -1
  97. package/dist/providers/plugins/sso/sso.setup-steps.d.ts.map +1 -1
  98. package/dist/providers/plugins/sso/sso.setup-steps.js +15 -66
  99. package/dist/providers/plugins/sso/sso.setup-steps.js.map +1 -1
  100. package/dist/providers/plugins/sso/sso.template.d.ts.map +1 -1
  101. package/dist/providers/plugins/sso/sso.template.js +2 -1
  102. package/dist/providers/plugins/sso/sso.template.js.map +1 -1
  103. package/dist/utils/config.d.ts.map +1 -1
  104. package/dist/utils/config.js +17 -0
  105. package/dist/utils/config.js.map +1 -1
  106. package/dist/utils/processes.d.ts +9 -0
  107. package/dist/utils/processes.d.ts.map +1 -1
  108. package/dist/utils/processes.js +21 -0
  109. package/dist/utils/processes.js.map +1 -1
  110. package/package.json +3 -3
@@ -0,0 +1,273 @@
1
+ ---
2
+ name: codemie-html-report
3
+ description: >
4
+ Build static HTML pages, reports, dashboards, and mockups that match the CodeMie UI design system.
5
+ Use this skill whenever the user asks to create an HTML report, dashboard, analytics page,
6
+ status page, data visualization page, or any static HTML document that should look like the
7
+ CodeMie/EPAM AI/Run product. Also use it when the user says "make it look like CodeMie",
8
+ "use the style guide", "dark-themed report", "CodeMie styles", or references the style-guide
9
+ directory. Trigger for any HTML output task in a project that includes the style-guide folder.
10
+ IMPORTANT: This skill MUST be used for ALL HTML generation requests — whenever a user asks
11
+ for an HTML report, HTML analysis output, HTML dashboard, HTML visualization, or any HTML
12
+ document. Claude must always use this skill to generate HTML in CodeMie styles to ensure
13
+ consistent, professional, branded output across all HTML artifacts.
14
+ ---
15
+
16
+ # CodeMie HTML Report Builder
17
+
18
+ You are building a standalone HTML page that visually matches the CodeMie (EPAM AI/Run) product UI. The design system is a dark-first, professional theme with Inter font, subtle borders, and semantic color tokens. Every page you produce should feel like a native screen of the CodeMie platform.
19
+
20
+ ## Step 1 — Read the CSS files
21
+
22
+ Read **all 8 CSS files** from `${CLAUDE_PLUGIN_ROOT}/skills/codemie-html-report/style-guide/css/` — you will inline them all:
23
+
24
+ | File | What it covers |
25
+ |------|---------------|
26
+ | `tokens.css` | All CSS custom properties (colors, spacing, radii, shadows, gradients) |
27
+ | `base.css` | Reset, body, scrollbar, code blocks, links, focus ring |
28
+ | `typography.css` | Headings h1-h6, text size/weight/color utilities |
29
+ | `buttons.css` | btn-primary, btn-secondary, btn-base, btn-delete, btn-tertiary, btn-magical, sizes |
30
+ | `forms.css` | input, textarea, select, checkbox, radio, switch |
31
+ | `components.css` | card, badge, tag, alert, avatar, spinner, progress, tooltip, stat-card, chip, empty-state |
32
+ | `layout.css` | table, tabs, pagination, modal, nav-sidebar, app-shell |
33
+ | `utilities.css` | flex, grid, gap, padding, margin, width, overflow, position, border, shadow |
34
+
35
+ All files are located at: `${CLAUDE_PLUGIN_ROOT}/skills/codemie-html-report/style-guide/css/<filename>`
36
+
37
+ ## Step 2 — Page skeleton (fully self-contained)
38
+
39
+ **CRITICAL: Every HTML file you produce must be a single self-contained file.** Do NOT use `<link>` tags pointing to external `.css` files. Instead, inline the entire CodeMie design system directly inside a `<style>` block.
40
+
41
+ Workflow:
42
+ 1. Read all 8 CSS files from `${CLAUDE_PLUGIN_ROOT}/skills/codemie-html-report/style-guide/css/`.
43
+ 2. Concatenate their contents in order: tokens → base → typography → buttons → forms → components → layout → utilities.
44
+ 3. Paste the full concatenated CSS into the `<style>` tag in `<head>`.
45
+ 4. Keep the `@import url('https://fonts.googleapis.com/...')` line from `tokens.css` at the very top of the `<style>` block (Google Fonts CDN is acceptable as an external dependency).
46
+
47
+ ```html
48
+ <!DOCTYPE html>
49
+ <html lang="en">
50
+ <head>
51
+ <meta charset="UTF-8">
52
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
53
+ <title>PAGE TITLE</title>
54
+ <style>
55
+ /* === CodeMie Design System — inlined for portability === */
56
+ @import url('https://fonts.googleapis.com/css2?family=Inter:ital,wght@0,400;0,500;0,600;0,700;1,400&family=JetBrains+Mono:wght@400;500&display=swap');
57
+
58
+ /* PASTE FULL CONTENTS OF: tokens.css, base.css, typography.css,
59
+ buttons.css, forms.css, components.css, layout.css, utilities.css */
60
+
61
+ /* === Page-specific styles (use CSS variables, not hex colors) === */
62
+ </style>
63
+ </head>
64
+ <body>
65
+ <!-- content -->
66
+ </body>
67
+ </html>
68
+ ```
69
+
70
+ For light theme, add `class="light"` to the `<html>` tag. Dark is the default.
71
+
72
+ The resulting file must open correctly when copied to any machine with no local dependencies other than internet access for fonts.
73
+
74
+ ## Step 3 — Pick a layout
75
+
76
+ Choose the layout that fits the content:
77
+
78
+ ### A) Report / Dashboard (most common)
79
+ Use a simple page with a container — no app shell needed:
80
+
81
+ ```html
82
+ <body class="p-6">
83
+ <div class="container">
84
+ <h1>Report Title</h1>
85
+ <p class="text-muted mb-4">Generated on 2024-03-15</p>
86
+ <!-- sections -->
87
+ </div>
88
+ </body>
89
+ ```
90
+
91
+ ### B) Full app mockup (sidebar + content)
92
+ Use the app-shell layout when simulating a full CodeMie screen:
93
+
94
+ ```html
95
+ <div class="app-shell">
96
+ <div class="app-navbar"><!-- 72px icon rail --></div>
97
+ <div class="app-sidebar"><!-- 308px sidebar --></div>
98
+ <div class="app-content">
99
+ <div class="app-header"><!-- 56px top bar --></div>
100
+ <main class="app-main"><!-- scrollable content --></main>
101
+ </div>
102
+ </div>
103
+ ```
104
+
105
+ ### C) Centered content (login, error, empty state)
106
+ ```html
107
+ <body class="flex items-center justify-center min-h-screen">
108
+ <div class="max-w-md w-full p-6"><!-- centered card --></div>
109
+ </body>
110
+ ```
111
+
112
+ ## Step 4 — Build with components
113
+
114
+ Use the library classes. Here are the most common patterns for reports:
115
+
116
+ ### Metric / KPI section
117
+ ```html
118
+ <div class="stat-grid">
119
+ <div class="stat-card">
120
+ <span class="stat-card-label">TOTAL USERS</span>
121
+ <span class="stat-card-value">10,761</span>
122
+ <span class="stat-card-desc">All registered accounts</span>
123
+ </div>
124
+ <!-- more stat-cards -->
125
+ </div>
126
+ ```
127
+
128
+ ### Data table
129
+ ```html
130
+ <div class="table-wrapper">
131
+ <table class="table">
132
+ <thead>
133
+ <tr>
134
+ <th>Name</th>
135
+ <th>Status</th>
136
+ <th class="td-number">Score</th>
137
+ </tr>
138
+ </thead>
139
+ <tbody>
140
+ <tr>
141
+ <td>John Doe</td>
142
+ <td><span class="badge badge-success"><span class="badge-dot"></span>Active</span></td>
143
+ <td class="td-number">92.5</td>
144
+ </tr>
145
+ </tbody>
146
+ </table>
147
+ </div>
148
+ ```
149
+
150
+ ### Section with card
151
+ ```html
152
+ <div class="card mt-4">
153
+ <div class="card-header">
154
+ <div class="card-title">Section Title</div>
155
+ <button class="btn btn-secondary btn-sm">Action</button>
156
+ </div>
157
+ <div class="card-body">
158
+ <!-- content -->
159
+ </div>
160
+ </div>
161
+ ```
162
+
163
+ ### Tabs for different views
164
+ ```html
165
+ <div class="tabs">
166
+ <div class="tabs-list">
167
+ <button class="tab-item active">Overview</button>
168
+ <button class="tab-item">Details</button>
169
+ <button class="tab-item">History</button>
170
+ </div>
171
+ <div class="tabs-panel">
172
+ <!-- active tab content -->
173
+ </div>
174
+ </div>
175
+ ```
176
+
177
+ ### Key-value details
178
+ ```html
179
+ <dl class="dl-grid">
180
+ <dt>Project</dt> <dd>CodeMie Platform</dd>
181
+ <dt>Status</dt> <dd><span class="badge badge-success"><span class="badge-dot"></span>Active</span></dd>
182
+ <dt>Owner</dt> <dd>Jane Smith</dd>
183
+ <dt>Created</dt> <dd>2024-01-15</dd>
184
+ </dl>
185
+ ```
186
+
187
+ ### Alert / info banner
188
+ ```html
189
+ <div class="alert alert-info">
190
+ This report was generated automatically. Data reflects the last 30 days.
191
+ </div>
192
+ ```
193
+
194
+ ### Pagination (below a table)
195
+ ```html
196
+ <div class="pagination">
197
+ <span class="pagination-info">Showing 1-20 of 84</span>
198
+ <button class="page-btn disabled">&laquo;</button>
199
+ <button class="page-btn active">1</button>
200
+ <button class="page-btn">2</button>
201
+ <button class="page-btn">3</button>
202
+ <button class="page-btn">&raquo;</button>
203
+ </div>
204
+ ```
205
+
206
+ ## Design rules
207
+
208
+ These rules ensure visual consistency with the CodeMie product:
209
+
210
+ 1. **Always use CSS variables for colors** — never hardcode hex values. This keeps the page compatible with both dark and light themes. Example: `color: var(--color-text-primary)` not `color: #FFFFFF`.
211
+
212
+ 2. **Use the provided component classes** — the library already handles border-radius, padding, font-size, hover states. Don't re-invent card or button styles with inline CSS.
213
+
214
+ 3. **Use semantic HTML** — `<table>` for data, `<button>` for actions, `<nav>` for navigation, `<label>` for form fields. Never use `<div>` where an interactive element belongs.
215
+
216
+ 4. **Font stack** — Inter is the primary font (loaded via Google Fonts in tokens.css). JetBrains Mono for code. These are included automatically through the stylesheet import.
217
+
218
+ 5. **Spacing** — Use utility classes (`p-4`, `mt-2`, `gap-3`, `mb-4`) or CSS variables (`var(--space-4)`) for custom spacing. The spacing scale is: 2px, 4px, 6px, 8px, 10px, 12px, 16px, 20px, 24px, 32px.
219
+
220
+ 6. **Border radius** — Cards use `--radius-xl` (12px). Inputs/buttons use `--radius-lg` (8px). Badges use `--radius-full`. Small elements use `--radius-sm` (4px) or `--radius-md` (6px).
221
+
222
+ 7. **Typography** — Body text is 14px (`--text-sm`). Small text is 12px (`--text-xs`). Headings: h1=32px, h2=24px, h3=16px, h4=14px. Always use the heading classes or elements.
223
+
224
+ 8. **Page background** — The main page background is `--color-bg-page` (#1A1A1A dark / #F9F9F9 light). Cards sit on `--color-bg-card` (#151515 dark / #FFFFFF light). These are handled by the body style and `.card` class automatically.
225
+
226
+ 9. **Borders** — Default border is `--color-border-structural` (#333436 dark / #E5E5E5 light). Use the `.border` utility class or `border: 1px solid var(--color-border-structural)`.
227
+
228
+ 10. **Status colors** — Use badge variants for status: `badge-success` (green), `badge-error` (red), `badge-warning` (yellow/orange), `badge-in-progress` (blue), `badge-pending` (cyan), `badge-advanced` (purple), `badge-not-started` (gray).
229
+
230
+ ## Charts and graphs
231
+
232
+ The style guide does not include a charting library. If the report needs charts:
233
+
234
+ - Use **Chart.js** (recommended) or any lightweight chart library via CDN
235
+ - Match the chart's color palette to the design tokens:
236
+ - Primary blue: `#2297F6`
237
+ - Purple: `#C084FC`
238
+ - Green: `#259F4C`
239
+ - Red: `#F9303C`
240
+ - Yellow: `#F5A534`
241
+ - Cyan: `#06B6D4`
242
+ - Set chart background to transparent
243
+ - Use `var(--color-text-muted)` for axis labels and grid lines
244
+ - Wrap charts in a `.card` for consistent framing
245
+
246
+ ## Putting it together — a typical report structure
247
+
248
+ ```
249
+ body.p-6 > .container
250
+ h1 (report title)
251
+ p.text-muted (subtitle / date)
252
+
253
+ .alert.alert-info (optional context banner)
254
+
255
+ .stat-grid (KPI summary cards)
256
+ .stat-card x N
257
+
258
+ .card.mt-4 (main data section)
259
+ .card-header > .card-title + action buttons
260
+ .card-body
261
+ .table-wrapper > table.table
262
+ .pagination
263
+
264
+ .card.mt-4 (another section)
265
+ .card-header > .card-title
266
+ .card-body
267
+ .tabs > .tabs-list + .tabs-panel
268
+
269
+ .card.mt-4 (details section)
270
+ .card-body > dl.dl-grid
271
+ ```
272
+
273
+ This pattern matches the analytics dashboard layout in the live CodeMie product and works for most reporting use cases.
@@ -0,0 +1,166 @@
1
+ /**
2
+ * CodeMie Base Styles
3
+ * Reset, body, scrollbar, and global base rules.
4
+ */
5
+
6
+ /* ============================================================
7
+ RESET
8
+ ============================================================ */
9
+ *, *::before, *::after {
10
+ box-sizing: border-box;
11
+ margin: 0;
12
+ padding: 0;
13
+ }
14
+
15
+ /* ============================================================
16
+ BODY
17
+ ============================================================ */
18
+ html {
19
+ font-size: 16px;
20
+ -webkit-text-size-adjust: 100%;
21
+ scroll-behavior: smooth;
22
+ }
23
+
24
+ body {
25
+ font-family: var(--font-sans);
26
+ font-size: var(--text-sm);
27
+ line-height: 1.5;
28
+ color: var(--color-text-primary);
29
+ background-color: var(--color-bg-page);
30
+ -webkit-font-smoothing: antialiased;
31
+ -moz-osx-font-smoothing: grayscale;
32
+ }
33
+
34
+ /* ============================================================
35
+ LINKS
36
+ ============================================================ */
37
+ a {
38
+ color: var(--color-text-link);
39
+ text-decoration: none;
40
+ transition: color var(--transition-fast);
41
+ }
42
+
43
+ a:hover {
44
+ color: var(--color-text-link-hover);
45
+ text-decoration: underline;
46
+ }
47
+
48
+ /* ============================================================
49
+ SCROLLBAR (WebKit)
50
+ ============================================================ */
51
+ ::-webkit-scrollbar {
52
+ width: 6px;
53
+ height: 6px;
54
+ }
55
+
56
+ ::-webkit-scrollbar-track {
57
+ background: transparent;
58
+ }
59
+
60
+ ::-webkit-scrollbar-thumb {
61
+ background: var(--color-border-subtle);
62
+ border-radius: var(--radius-full);
63
+ }
64
+
65
+ ::-webkit-scrollbar-thumb:hover {
66
+ background: var(--color-border-secondary);
67
+ }
68
+
69
+ /* ============================================================
70
+ SELECTION
71
+ ============================================================ */
72
+ ::selection {
73
+ background: rgba(34, 151, 246, 0.3);
74
+ color: var(--color-text-primary);
75
+ }
76
+
77
+ /* ============================================================
78
+ FOCUS RING
79
+ ============================================================ */
80
+ :focus-visible {
81
+ outline: 2px solid var(--color-border-focus);
82
+ outline-offset: 2px;
83
+ border-radius: var(--radius-sm);
84
+ }
85
+
86
+ /* ============================================================
87
+ IMAGES & MEDIA
88
+ ============================================================ */
89
+ img, svg, video {
90
+ display: block;
91
+ max-width: 100%;
92
+ }
93
+
94
+ /* ============================================================
95
+ LISTS
96
+ ============================================================ */
97
+ ul, ol {
98
+ list-style: none;
99
+ }
100
+
101
+ /* ============================================================
102
+ CODE
103
+ ============================================================ */
104
+ code, pre, kbd, samp {
105
+ font-family: var(--font-mono);
106
+ }
107
+
108
+ code {
109
+ font-size: 0.875em;
110
+ background: var(--color-bg-quaternary);
111
+ color: var(--color-text-secondary);
112
+ padding: 0.1em 0.4em;
113
+ border-radius: var(--radius-sm);
114
+ border: 1px solid var(--color-border-primary);
115
+ }
116
+
117
+ pre {
118
+ background: var(--color-bg-quaternary);
119
+ border: 1px solid var(--color-border-primary);
120
+ border-radius: var(--radius-lg);
121
+ padding: var(--space-4);
122
+ overflow-x: auto;
123
+ font-size: var(--text-xs);
124
+ line-height: 1.6;
125
+ color: var(--color-text-secondary);
126
+ }
127
+
128
+ pre code {
129
+ background: transparent;
130
+ border: none;
131
+ padding: 0;
132
+ font-size: inherit;
133
+ }
134
+
135
+ /* ============================================================
136
+ HR / DIVIDER
137
+ ============================================================ */
138
+ hr, .divider {
139
+ border: none;
140
+ border-top: 1px solid var(--color-border-structural);
141
+ margin: var(--space-4) 0;
142
+ }
143
+
144
+ /* ============================================================
145
+ LAYOUT HELPERS
146
+ ============================================================ */
147
+ .container {
148
+ width: 100%;
149
+ max-width: 1200px;
150
+ margin: 0 auto;
151
+ padding: 0 var(--space-4);
152
+ }
153
+
154
+ .section {
155
+ padding: var(--space-8) 0;
156
+ }
157
+
158
+ /* ============================================================
159
+ ICON (inline SVG sizing helpers)
160
+ ============================================================ */
161
+ .icon-xs { width: 12px; height: 12px; flex-shrink: 0; }
162
+ .icon-sm { width: 16px; height: 16px; flex-shrink: 0; }
163
+ .icon-md { width: 18px; height: 18px; flex-shrink: 0; }
164
+ .icon-lg { width: 20px; height: 20px; flex-shrink: 0; }
165
+ .icon-xl { width: 24px; height: 24px; flex-shrink: 0; }
166
+ .icon-2xl { width: 32px; height: 32px; flex-shrink: 0; }
@@ -0,0 +1,253 @@
1
+ /**
2
+ * CodeMie Button Components
3
+ * All button variants, sizes, and states.
4
+ *
5
+ * Usage: <button class="btn btn-primary btn-md">Label</button>
6
+ */
7
+
8
+ /* ============================================================
9
+ BASE BUTTON
10
+ ============================================================ */
11
+ .btn {
12
+ display: inline-flex;
13
+ align-items: center;
14
+ justify-content: center;
15
+ gap: var(--space-1-5);
16
+ font-family: var(--font-sans);
17
+ font-weight: 600;
18
+ white-space: nowrap;
19
+ border-radius: var(--radius-lg);
20
+ border: 1px solid transparent;
21
+ cursor: pointer;
22
+ transition:
23
+ background-color var(--transition-base),
24
+ border-color var(--transition-base),
25
+ color var(--transition-base),
26
+ opacity var(--transition-base);
27
+ text-decoration: none;
28
+ user-select: none;
29
+ outline: none;
30
+ position: relative;
31
+ overflow: hidden;
32
+ -webkit-font-smoothing: antialiased;
33
+ }
34
+
35
+ .btn:focus-visible {
36
+ outline: 2px solid var(--color-border-focus);
37
+ outline-offset: 2px;
38
+ }
39
+
40
+ .btn:disabled,
41
+ .btn[aria-disabled='true'] {
42
+ cursor: not-allowed;
43
+ opacity: 0.5;
44
+ pointer-events: none;
45
+ }
46
+
47
+ /* ============================================================
48
+ SIZES
49
+ ============================================================ */
50
+ /* Small — 24px height */
51
+ .btn-sm {
52
+ height: 24px;
53
+ padding: 0 var(--space-1-5);
54
+ gap: var(--space-1);
55
+ font-size: var(--text-xs);
56
+ line-height: 20px;
57
+ }
58
+
59
+ /* Medium — 28px height (default) */
60
+ .btn-md {
61
+ height: 28px;
62
+ padding: 0 var(--space-2);
63
+ gap: var(--space-1-5);
64
+ font-size: var(--text-xs);
65
+ line-height: 24px;
66
+ }
67
+
68
+ /* Large — 44px height */
69
+ .btn-lg {
70
+ height: 44px;
71
+ padding: 0 var(--space-4);
72
+ gap: var(--space-2-5);
73
+ font-size: var(--text-sm);
74
+ line-height: 28px;
75
+ }
76
+
77
+ /* ============================================================
78
+ VARIANTS
79
+ ============================================================ */
80
+
81
+ /* Primary — Navy/gradient background with gradient border */
82
+ .btn-primary {
83
+ background-color: var(--color-bg-btn-primary);
84
+ color: var(--color-text-secondary);
85
+ border: 1px solid transparent;
86
+ background-image:
87
+ linear-gradient(var(--color-bg-btn-primary), var(--color-bg-btn-primary)),
88
+ var(--gradient-primary-btn);
89
+ background-origin: border-box;
90
+ background-clip: padding-box, border-box;
91
+ }
92
+
93
+ .btn-primary:hover:not(:disabled) {
94
+ background-image:
95
+ linear-gradient(var(--color-bg-btn-primary-h), var(--color-bg-btn-primary-h)),
96
+ var(--gradient-primary-btn);
97
+ }
98
+
99
+ /* Secondary — Subtle bordered */
100
+ .btn-secondary {
101
+ background-color: var(--color-bg-secondary);
102
+ color: var(--color-text-secondary);
103
+ border-color: var(--color-border-btn-secondary);
104
+ }
105
+
106
+ .btn-secondary:hover:not(:disabled) {
107
+ background-color: var(--color-bg-hover-strong);
108
+ border-color: var(--color-border-btn-secondary-h);
109
+ }
110
+
111
+ /* Base — Standard outlined */
112
+ .btn-base {
113
+ background-color: var(--color-bg-secondary);
114
+ color: var(--color-text-primary);
115
+ border-color: var(--color-border-structural);
116
+ }
117
+
118
+ .btn-base:hover:not(:disabled) {
119
+ background-color: var(--color-border-structural);
120
+ }
121
+
122
+ /* Action — Accent highlighted (blue tint bg in dark) */
123
+ .btn-action {
124
+ background-color: var(--color-bg-btn-primary);
125
+ color: var(--color-text-secondary);
126
+ border-color: var(--color-bg-input-prefix);
127
+ }
128
+
129
+ .btn-action:hover:not(:disabled) {
130
+ border-color: var(--color-border-btn-secondary-h);
131
+ background-color: var(--color-bg-btn-primary-h);
132
+ }
133
+
134
+ /* Delete — Red destructive */
135
+ .btn-delete {
136
+ background-color: rgba(254, 59, 76, 0.1);
137
+ color: var(--color-error-text);
138
+ border-color: var(--color-error-border);
139
+ }
140
+
141
+ .btn-delete:hover:not(:disabled) {
142
+ background-color: rgba(254, 59, 76, 0.15);
143
+ border-color: var(--color-error);
144
+ }
145
+
146
+ /* Tertiary / Ghost — no background */
147
+ .btn-tertiary,
148
+ .btn-ghost {
149
+ background-color: transparent;
150
+ color: var(--color-text-primary);
151
+ border-color: transparent;
152
+ }
153
+
154
+ .btn-tertiary:hover:not(:disabled),
155
+ .btn-ghost:hover:not(:disabled) {
156
+ background-color: var(--color-border-structural);
157
+ }
158
+
159
+ /* Magical — Gradient fill, brand colors */
160
+ .btn-magical {
161
+ background: var(--gradient-magical);
162
+ color: var(--color-text-inverse);
163
+ border-color: var(--color-border-structural);
164
+ }
165
+
166
+ .btn-magical:hover:not(:disabled) {
167
+ filter: brightness(1.1);
168
+ }
169
+
170
+ /* Link — Plain text, no box */
171
+ .btn-link {
172
+ background: transparent;
173
+ border-color: transparent;
174
+ color: var(--color-text-link);
175
+ padding-left: 0;
176
+ padding-right: 0;
177
+ font-weight: 500;
178
+ height: auto;
179
+ }
180
+
181
+ .btn-link:hover:not(:disabled) {
182
+ text-decoration: underline;
183
+ }
184
+
185
+ /* ============================================================
186
+ ICON BUTTON (square)
187
+ ============================================================ */
188
+ .btn-icon {
189
+ padding: 0;
190
+ aspect-ratio: 1;
191
+ }
192
+
193
+ .btn-icon.btn-sm { width: 24px; }
194
+ .btn-icon.btn-md { width: 28px; }
195
+ .btn-icon.btn-lg { width: 44px; }
196
+
197
+ /* ============================================================
198
+ FULL WIDTH
199
+ ============================================================ */
200
+ .btn-full {
201
+ width: 100%;
202
+ }
203
+
204
+ /* ============================================================
205
+ LOADING STATE
206
+ ============================================================ */
207
+ .btn-loading {
208
+ cursor: wait;
209
+ pointer-events: none;
210
+ }
211
+
212
+ .btn-loading::after {
213
+ content: '';
214
+ position: absolute;
215
+ inset: 0;
216
+ background: linear-gradient(
217
+ 90deg,
218
+ transparent 0%,
219
+ rgba(255, 255, 255, 0.12) 50%,
220
+ transparent 100%
221
+ );
222
+ background-size: 200% 100%;
223
+ animation: btn-shimmer 1.5s infinite linear;
224
+ }
225
+
226
+ @keyframes btn-shimmer {
227
+ from { background-position: -200% 0; }
228
+ to { background-position: 200% 0; }
229
+ }
230
+
231
+ /* ============================================================
232
+ BUTTON GROUP
233
+ ============================================================ */
234
+ .btn-group {
235
+ display: inline-flex;
236
+ gap: 0;
237
+ }
238
+
239
+ .btn-group .btn {
240
+ border-radius: 0;
241
+ }
242
+
243
+ .btn-group .btn:first-child {
244
+ border-radius: var(--radius-lg) 0 0 var(--radius-lg);
245
+ }
246
+
247
+ .btn-group .btn:last-child {
248
+ border-radius: 0 var(--radius-lg) var(--radius-lg) 0;
249
+ }
250
+
251
+ .btn-group .btn:not(:first-child) {
252
+ margin-left: -1px;
253
+ }