@trishchuk/coolors-mcp 1.0.0 → 1.0.1

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 (66) hide show
  1. package/.claude/settings.local.json +2 -6
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +20 -8
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +22 -8
  4. package/.github/pull_request_template.md +33 -8
  5. package/.github/workflows/ci.yml +97 -97
  6. package/.github/workflows/deploy-docs.yml +9 -9
  7. package/.github/workflows/release.yml +15 -15
  8. package/README.md +26 -1
  9. package/TOOLS_UK.md +233 -0
  10. package/docs/.vitepress/cache/deps/@braintree_sanitize-url.js +30 -12
  11. package/docs/.vitepress/cache/deps/_metadata.json +1 -1
  12. package/docs/.vitepress/cache/deps/chunk-BUSYA2B4.js +9 -6
  13. package/docs/.vitepress/cache/deps/chunk-JD3CXNQ6.js +2543 -1612
  14. package/docs/.vitepress/cache/deps/chunk-SYPOPCWC.js +3508 -2529
  15. package/docs/.vitepress/cache/deps/cytoscape-cose-bilkent.js +1902 -1003
  16. package/docs/.vitepress/cache/deps/cytoscape.js +13303 -7347
  17. package/docs/.vitepress/cache/deps/dayjs.js +494 -272
  18. package/docs/.vitepress/cache/deps/debug.js +82 -38
  19. package/docs/.vitepress/cache/deps/prismjs.js +444 -272
  20. package/docs/.vitepress/cache/deps/prismjs_components_prism-bash.js +80 -73
  21. package/docs/.vitepress/cache/deps/prismjs_components_prism-javascript.js +93 -62
  22. package/docs/.vitepress/cache/deps/prismjs_components_prism-json.js +13 -13
  23. package/docs/.vitepress/cache/deps/prismjs_components_prism-python.js +34 -27
  24. package/docs/.vitepress/cache/deps/prismjs_components_prism-typescript.js +20 -17
  25. package/docs/.vitepress/cache/deps/prismjs_components_prism-yaml.js +75 -41
  26. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +2005 -1438
  27. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +2 -2
  28. package/docs/.vitepress/cache/deps/vitepress___@vueuse_integrations_useFocusTrap.js +566 -229
  29. package/docs/.vitepress/cache/deps/vitepress___mark__js_src_vanilla__js.js +382 -270
  30. package/docs/.vitepress/cache/deps/vitepress___minisearch.js +334 -125
  31. package/docs/.vitepress/cache/deps/vue.js +2 -2
  32. package/docs/.vitepress/components/ClientGrid.vue +9 -3
  33. package/docs/.vitepress/components/CodeBlock.vue +51 -44
  34. package/docs/.vitepress/components/ConfigModal.vue +151 -67
  35. package/docs/.vitepress/components/DiagramModal.vue +186 -154
  36. package/docs/.vitepress/components/TroubleshootingModal.vue +101 -96
  37. package/docs/.vitepress/config.js +171 -141
  38. package/docs/.vitepress/theme/FundingLayout.vue +65 -54
  39. package/docs/.vitepress/theme/Layout.vue +21 -21
  40. package/docs/.vitepress/theme/components/AdBanner.vue +73 -52
  41. package/docs/.vitepress/theme/components/AdPlaceholder.vue +3 -3
  42. package/docs/.vitepress/theme/components/FundingEffects.vue +77 -53
  43. package/docs/.vitepress/theme/components/FundingHero.vue +78 -63
  44. package/docs/.vitepress/theme/components/SupportSection.vue +106 -89
  45. package/docs/.vitepress/theme/custom-app.css +19 -12
  46. package/docs/.vitepress/theme/custom.css +33 -25
  47. package/docs/.vitepress/theme/index.js +19 -16
  48. package/docs/concepts/accessibility.md +59 -47
  49. package/docs/concepts/color-spaces.md +28 -6
  50. package/docs/concepts/distance-metrics.md +45 -30
  51. package/docs/concepts/hct.md +30 -27
  52. package/docs/concepts/image-analysis.md +52 -21
  53. package/docs/concepts/material-design.md +43 -17
  54. package/docs/concepts/theme-matching.md +64 -40
  55. package/docs/examples/basic-colors.md +92 -108
  56. package/docs/examples/creating-themes.md +104 -108
  57. package/docs/examples/css-refactoring.md +33 -29
  58. package/docs/examples/image-extraction.md +145 -138
  59. package/docs/getting-started.md +45 -34
  60. package/docs/index.md +5 -1
  61. package/docs/installation.md +15 -1
  62. package/docs/tools/accessibility.md +74 -68
  63. package/docs/tools/image-extraction.md +62 -54
  64. package/docs/tools/theme-matching.md +45 -42
  65. package/note.md +1 -2
  66. package/package.json +2 -2
@@ -167,7 +167,7 @@ import {
167
167
  withKeys,
168
168
  withMemo,
169
169
  withModifiers,
170
- withScopeId
170
+ withScopeId,
171
171
  } from "./chunk-JD3CXNQ6.js";
172
172
  import "./chunk-BUSYA2B4.js";
173
173
  export {
@@ -339,6 +339,6 @@ export {
339
339
  withKeys,
340
340
  withMemo,
341
341
  withModifiers,
342
- withScopeId
342
+ withScopeId,
343
343
  };
344
344
  //# sourceMappingURL=vue.js.map
@@ -86,7 +86,9 @@ html:not(.dark) :deep(.client-button:hover) {
86
86
  background: var(--vp-c-brand-2);
87
87
  color: white;
88
88
  transform: translateY(-3px);
89
- box-shadow: 0 8px 20px rgba(66, 184, 131, 0.4), 0 4px 8px rgba(0, 0, 0, 0.15);
89
+ box-shadow:
90
+ 0 8px 20px rgba(66, 184, 131, 0.4),
91
+ 0 4px 8px rgba(0, 0, 0, 0.15);
90
92
  filter: brightness(1.1);
91
93
  }
92
94
 
@@ -100,7 +102,9 @@ html:not(.dark) :deep(.client-button:hover) {
100
102
  background: var(--vp-c-brand-2);
101
103
  color: white;
102
104
  transform: translateY(-3px);
103
- box-shadow: 0 8px 20px rgba(66, 184, 131, 0.6), 0 4px 8px rgba(66, 184, 131, 0.3);
105
+ box-shadow:
106
+ 0 8px 20px rgba(66, 184, 131, 0.6),
107
+ 0 4px 8px rgba(66, 184, 131, 0.3);
104
108
  filter: brightness(1.1);
105
109
  }
106
110
 
@@ -120,6 +124,8 @@ html:not(.dark) :deep(.client-button:hover) {
120
124
  }
121
125
 
122
126
  @keyframes spin {
123
- to { transform: rotate(360deg); }
127
+ to {
128
+ transform: rotate(360deg);
129
+ }
124
130
  }
125
131
  </style>
@@ -2,21 +2,21 @@
2
2
  <div class="code-block-container">
3
3
  <span class="language-indicator">{{ language }}</span>
4
4
  <div class="code-lines">
5
- <div
6
- v-for="(line, index) in lines"
5
+ <div
6
+ v-for="(line, index) in lines"
7
7
  :key="index"
8
8
  class="code-line"
9
9
  @mouseenter="hoveredLine = index"
10
10
  @mouseleave="hoveredLine = null"
11
11
  >
12
12
  <span class="line-number">{{ index + 1 }}</span>
13
- <button
13
+ <button
14
14
  v-show="hoveredLine === index"
15
15
  @click="copyLine(line, index)"
16
16
  class="copy-line-button"
17
17
  :title="`Copy line ${index + 1}`"
18
18
  >
19
- {{ copiedLine === index ? '' : '📋' }}
19
+ {{ copiedLine === index ? "" : "📋" }}
20
20
  </button>
21
21
  <span class="line-content" v-html="line || '\u00A0'"></span>
22
22
  </div>
@@ -25,73 +25,80 @@
25
25
  </template>
26
26
 
27
27
  <script setup>
28
- import { ref, computed, onMounted, watch } from 'vue'
28
+ import { ref, computed, onMounted, watch } from "vue";
29
29
  // Lazy-load Prism on client to avoid SSR/import issues
30
- let Prism = null
30
+ let Prism = null;
31
31
 
32
32
  const props = defineProps({
33
33
  code: {
34
34
  type: String,
35
- default: '// No code provided'
35
+ default: "// No code provided",
36
36
  },
37
37
  language: {
38
38
  type: String,
39
- default: 'javascript'
40
- }
41
- })
39
+ default: "javascript",
40
+ },
41
+ });
42
42
 
43
- const hoveredLine = ref(null)
44
- const copiedLine = ref(null)
43
+ const hoveredLine = ref(null);
44
+ const copiedLine = ref(null);
45
45
 
46
- const highlightedCode = ref('')
46
+ const highlightedCode = ref("");
47
47
 
48
48
  const lines = computed(() => {
49
- return highlightedCode.value.split('\n')
50
- })
49
+ return highlightedCode.value.split("\n");
50
+ });
51
51
 
52
52
  const ensurePrism = async () => {
53
- if (typeof window === 'undefined') return
53
+ if (typeof window === "undefined") return;
54
54
  if (!Prism) {
55
- const mod = await import('prismjs')
55
+ const mod = await import("prismjs");
56
56
  // Load languages and theme
57
57
  await Promise.all([
58
- import('prismjs/components/prism-bash'),
59
- import('prismjs/components/prism-python'),
60
- import('prismjs/components/prism-typescript'),
61
- import('prismjs/components/prism-javascript'),
62
- import('prismjs/components/prism-json'),
63
- import('prismjs/components/prism-yaml'),
64
- import('prismjs/themes/prism-tomorrow.css')
65
- ])
66
- Prism = (mod && 'default' in mod) ? mod.default : mod
58
+ import("prismjs/components/prism-bash"),
59
+ import("prismjs/components/prism-python"),
60
+ import("prismjs/components/prism-typescript"),
61
+ import("prismjs/components/prism-javascript"),
62
+ import("prismjs/components/prism-json"),
63
+ import("prismjs/components/prism-yaml"),
64
+ import("prismjs/themes/prism-tomorrow.css"),
65
+ ]);
66
+ Prism = mod && "default" in mod ? mod.default : mod;
67
67
  }
68
- }
68
+ };
69
69
 
70
70
  const highlightCode = async () => {
71
- await ensurePrism()
71
+ await ensurePrism();
72
72
  if (!Prism) {
73
- highlightedCode.value = props.code
74
- return
73
+ highlightedCode.value = props.code;
74
+ return;
75
75
  }
76
- const grammar = Prism.languages[props.language] || Prism.languages.plaintext
77
- highlightedCode.value = Prism.highlight(props.code, grammar, props.language)
78
- }
79
-
80
- onMounted(() => { highlightCode() })
81
- watch(() => [props.code, props.language], () => { highlightCode() })
76
+ const grammar = Prism.languages[props.language] || Prism.languages.plaintext;
77
+ highlightedCode.value = Prism.highlight(props.code, grammar, props.language);
78
+ };
79
+
80
+ onMounted(() => {
81
+ highlightCode();
82
+ });
83
+ watch(
84
+ () => [props.code, props.language],
85
+ () => {
86
+ highlightCode();
87
+ },
88
+ );
82
89
 
83
90
  const copyLine = async (line, index) => {
84
91
  try {
85
- const plainLine = props.code.split('\n')[index]
86
- await navigator.clipboard.writeText(plainLine)
87
- copiedLine.value = index
92
+ const plainLine = props.code.split("\n")[index];
93
+ await navigator.clipboard.writeText(plainLine);
94
+ copiedLine.value = index;
88
95
  setTimeout(() => {
89
- copiedLine.value = null
90
- }, 1500)
96
+ copiedLine.value = null;
97
+ }, 1500);
91
98
  } catch (err) {
92
- console.error('Failed to copy line:', err)
99
+ console.error("Failed to copy line:", err);
93
100
  }
94
- }
101
+ };
95
102
  </script>
96
103
 
97
104
  <style scoped>
@@ -100,7 +107,7 @@ const copyLine = async (line, index) => {
100
107
  border-radius: 6px;
101
108
  overflow: hidden;
102
109
  margin: 16px 0;
103
- font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
110
+ font-family: "Monaco", "Menlo", "Ubuntu Mono", monospace;
104
111
  position: relative;
105
112
  }
106
113
 
@@ -17,9 +17,11 @@
17
17
  <span class="config-badge">Config Files</span>
18
18
  <h2>Claude Desktop Configuration</h2>
19
19
  </div>
20
- <button @click="closeModal" class="close-btn" title="Close">&times;</button>
20
+ <button @click="closeModal" class="close-btn" title="Close">
21
+ &times;
22
+ </button>
21
23
  </div>
22
-
24
+
23
25
  <div class="modal-body">
24
26
  <div class="config-section">
25
27
  <h3 class="section-title">
@@ -31,40 +33,107 @@
31
33
  <strong>🍎 macOS</strong>
32
34
  </div>
33
35
  <div class="file-path">
34
- <code>~/Library/Application Support/Claude/claude_desktop_config.json</code>
35
- <button class="copy-path-btn" @click="copyPath('~/Library/Application Support/Claude/claude_desktop_config.json')" title="Copy path">
36
- <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
37
- <rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect>
38
- <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path>
36
+ <code
37
+ >~/Library/Application
38
+ Support/Claude/claude_desktop_config.json</code
39
+ >
40
+ <button
41
+ class="copy-path-btn"
42
+ @click="
43
+ copyPath(
44
+ '~/Library/Application Support/Claude/claude_desktop_config.json',
45
+ )
46
+ "
47
+ title="Copy path"
48
+ >
49
+ <svg
50
+ width="14"
51
+ height="14"
52
+ viewBox="0 0 24 24"
53
+ fill="none"
54
+ stroke="currentColor"
55
+ stroke-width="1.5"
56
+ >
57
+ <rect
58
+ x="9"
59
+ y="9"
60
+ width="13"
61
+ height="13"
62
+ rx="2"
63
+ ry="2"
64
+ ></rect>
65
+ <path
66
+ d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"
67
+ ></path>
39
68
  </svg>
40
69
  </button>
41
70
  </div>
42
71
  </div>
43
-
72
+
44
73
  <div class="location-item">
45
74
  <div class="platform-name">
46
75
  <strong>🪟 Windows</strong>
47
76
  </div>
48
77
  <div class="file-path">
49
78
  <code>%APPDATA%\Claude\claude_desktop_config.json</code>
50
- <button class="copy-path-btn" @click="copyPath('%APPDATA%\\Claude\\claude_desktop_config.json')" title="Copy path">
51
- <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
52
- <rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect>
79
+ <button
80
+ class="copy-path-btn"
81
+ @click="
82
+ copyPath('%APPDATA%\\Claude\\claude_desktop_config.json')
83
+ "
84
+ title="Copy path"
85
+ >
86
+ <svg
87
+ width="14"
88
+ height="14"
89
+ viewBox="0 0 24 24"
90
+ fill="none"
91
+ stroke="currentColor"
92
+ stroke-width="1.5"
93
+ >
94
+ <rect
95
+ x="9"
96
+ y="9"
97
+ width="13"
98
+ height="13"
99
+ rx="2"
100
+ ry="2"
101
+ ></rect>
53
102
  <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2 2v1"></path>
54
103
  </svg>
55
104
  </button>
56
105
  </div>
57
106
  </div>
58
-
107
+
59
108
  <div class="location-item">
60
109
  <div class="platform-name">
61
110
  <strong>🐧 Linux</strong>
62
111
  </div>
63
112
  <div class="file-path">
64
113
  <code>~/.config/claude/claude_desktop_config.json</code>
65
- <button class="copy-path-btn" @click="copyPath('~/.config/claude/claude_desktop_config.json')" title="Copy path">
66
- <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
67
- <rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect>
114
+ <button
115
+ class="copy-path-btn"
116
+ @click="
117
+ copyPath('~/.config/claude/claude_desktop_config.json')
118
+ "
119
+ title="Copy path"
120
+ >
121
+ <svg
122
+ width="14"
123
+ height="14"
124
+ viewBox="0 0 24 24"
125
+ fill="none"
126
+ stroke="currentColor"
127
+ stroke-width="1.5"
128
+ >
129
+ <rect
130
+ x="9"
131
+ y="9"
132
+ width="13"
133
+ height="13"
134
+ rx="2"
135
+ ry="2"
136
+ ></rect>
68
137
  <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2 2v1"></path>
69
138
  </svg>
70
139
  </button>
@@ -78,72 +147,72 @@
78
147
  </template>
79
148
 
80
149
  <script setup>
81
- import { ref, onMounted, onUnmounted } from 'vue'
150
+ import { ref, onMounted, onUnmounted } from "vue";
82
151
 
83
- const isOpen = ref(false)
152
+ const isOpen = ref(false);
84
153
 
85
154
  const openModal = () => {
86
- isOpen.value = true
87
- document.body.style.overflow = 'hidden'
88
- }
155
+ isOpen.value = true;
156
+ document.body.style.overflow = "hidden";
157
+ };
89
158
 
90
159
  const closeModal = () => {
91
- isOpen.value = false
92
- document.body.style.overflow = ''
93
- }
160
+ isOpen.value = false;
161
+ document.body.style.overflow = "";
162
+ };
94
163
 
95
164
  const copyPath = async (path) => {
96
165
  try {
97
166
  if (navigator.clipboard && navigator.clipboard.writeText) {
98
- await navigator.clipboard.writeText(path)
167
+ await navigator.clipboard.writeText(path);
99
168
  } else {
100
169
  // Fallback for older browsers
101
- const textArea = document.createElement('textarea')
102
- textArea.value = path
103
- textArea.style.position = 'fixed'
104
- textArea.style.left = '-9999px'
105
- document.body.appendChild(textArea)
106
- textArea.select()
107
- document.execCommand('copy')
108
- document.body.removeChild(textArea)
170
+ const textArea = document.createElement("textarea");
171
+ textArea.value = path;
172
+ textArea.style.position = "fixed";
173
+ textArea.style.left = "-9999px";
174
+ document.body.appendChild(textArea);
175
+ textArea.select();
176
+ document.execCommand("copy");
177
+ document.body.removeChild(textArea);
109
178
  }
110
-
179
+
111
180
  // Visual feedback - find the button that was clicked
112
- const button = event.target.closest('.copy-path-btn')
181
+ const button = event.target.closest(".copy-path-btn");
113
182
  if (button) {
114
- const originalContent = button.innerHTML
115
- button.classList.add('copied')
183
+ const originalContent = button.innerHTML;
184
+ button.classList.add("copied");
116
185
  button.innerHTML = `
117
186
  <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
118
187
  <polyline points="20,6 9,17 4,12"></polyline>
119
188
  </svg>
120
- `
121
-
189
+ `;
190
+
122
191
  // Reset after 2 seconds
123
192
  setTimeout(() => {
124
- button.classList.remove('copied')
125
- button.innerHTML = originalContent
126
- }, 2000)
193
+ button.classList.remove("copied");
194
+ button.innerHTML = originalContent;
195
+ }, 2000);
127
196
  }
128
197
  } catch (err) {
129
- console.error('Failed to copy path:', err)
198
+ console.error("Failed to copy path:", err);
130
199
  }
131
- }
200
+ };
132
201
 
133
202
  const handleKeydown = (e) => {
134
- if (e.key === 'Escape' && isOpen.value) {
135
- closeModal()
203
+ if (e.key === "Escape" && isOpen.value) {
204
+ closeModal();
136
205
  }
137
- }
206
+ };
138
207
 
139
208
  onMounted(() => {
140
- document.addEventListener('keydown', handleKeydown)
141
- })
209
+ document.addEventListener("keydown", handleKeydown);
210
+ });
142
211
 
143
212
  onUnmounted(() => {
144
- document.removeEventListener('keydown', handleKeydown)
145
- document.body.style.overflow = ''
146
- })
213
+ document.removeEventListener("keydown", handleKeydown);
214
+ document.body.style.overflow = "";
215
+ });
147
216
  </script>
148
217
 
149
218
  <style scoped>
@@ -154,7 +223,11 @@ onUnmounted(() => {
154
223
  margin: 16px 0;
155
224
  cursor: pointer;
156
225
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
157
- background: linear-gradient(135deg, var(--vp-c-bg-soft) 0%, var(--vp-c-bg-alt) 100%);
226
+ background: linear-gradient(
227
+ 135deg,
228
+ var(--vp-c-bg-soft) 0%,
229
+ var(--vp-c-bg-alt) 100%
230
+ );
158
231
  border-left: 4px solid var(--vp-c-brand);
159
232
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
160
233
  position: relative;
@@ -164,18 +237,29 @@ onUnmounted(() => {
164
237
  .config-card:hover {
165
238
  border-color: var(--vp-c-brand);
166
239
  transform: translateY(-8px) scale(1.02);
167
- box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15), 0 0 0 1px var(--vp-c-brand-light);
168
- background: linear-gradient(135deg, var(--vp-c-bg) 0%, var(--vp-c-bg-soft) 100%);
240
+ box-shadow:
241
+ 0 20px 40px rgba(0, 0, 0, 0.15),
242
+ 0 0 0 1px var(--vp-c-brand-light);
243
+ background: linear-gradient(
244
+ 135deg,
245
+ var(--vp-c-bg) 0%,
246
+ var(--vp-c-bg-soft) 100%
247
+ );
169
248
  }
170
249
 
171
250
  .config-card::before {
172
- content: '';
251
+ content: "";
173
252
  position: absolute;
174
253
  top: -2px;
175
254
  left: -2px;
176
255
  right: -2px;
177
256
  bottom: -2px;
178
- background: linear-gradient(45deg, var(--vp-c-brand), transparent, var(--vp-c-brand));
257
+ background: linear-gradient(
258
+ 45deg,
259
+ var(--vp-c-brand),
260
+ transparent,
261
+ var(--vp-c-brand)
262
+ );
179
263
  border-radius: 12px;
180
264
  opacity: 0;
181
265
  transition: opacity 0.3s ease;
@@ -187,7 +271,7 @@ onUnmounted(() => {
187
271
  }
188
272
 
189
273
  .config-card::after {
190
- content: '';
274
+ content: "";
191
275
  position: absolute;
192
276
  top: 10px;
193
277
  right: 15px;
@@ -430,48 +514,48 @@ onUnmounted(() => {
430
514
  width: 95vw;
431
515
  max-height: 90vh;
432
516
  }
433
-
517
+
434
518
  .modal-header {
435
519
  padding: 16px 20px;
436
520
  }
437
-
521
+
438
522
  .modal-title h2 {
439
523
  font-size: 18px;
440
524
  }
441
-
525
+
442
526
  .modal-body {
443
527
  padding: 20px;
444
528
  }
445
-
529
+
446
530
  .config-card {
447
531
  padding: 14px;
448
532
  }
449
-
533
+
450
534
  .config-header {
451
535
  flex-direction: column;
452
536
  align-items: flex-start;
453
537
  gap: 4px;
454
538
  }
455
-
539
+
456
540
  .expand-hint {
457
541
  opacity: 1;
458
542
  font-size: 11px;
459
543
  }
460
-
544
+
461
545
  .location-item {
462
546
  padding: 12px;
463
547
  }
464
-
548
+
465
549
  .file-path {
466
550
  flex-direction: column;
467
551
  align-items: stretch;
468
552
  gap: 8px;
469
553
  }
470
-
554
+
471
555
  .copy-path-btn {
472
556
  align-self: flex-end;
473
557
  width: 32px;
474
558
  height: 32px;
475
559
  }
476
560
  }
477
- </style>
561
+ </style>