claude-code-workflow 6.3.28 → 6.3.30

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 (37) hide show
  1. package/.claude/commands/issue/execute.md +133 -18
  2. package/.claude/commands/workflow/debug.md +6 -0
  3. package/.claude/commands/workflow/execute.md +4 -0
  4. package/.claude/commands/workflow/lite-execute.md +4 -0
  5. package/.claude/commands/workflow/lite-lite-lite.md +179 -544
  6. package/.claude/commands/workflow/review-fix.md +4 -0
  7. package/.claude/commands/workflow/test-cycle-execute.md +4 -0
  8. package/.codex/prompts/issue-execute.md +72 -12
  9. package/README.md +3 -0
  10. package/ccw/dist/core/data-aggregator.js +20 -7
  11. package/ccw/dist/core/data-aggregator.js.map +1 -1
  12. package/ccw/dist/core/lite-scanner.d.ts.map +1 -1
  13. package/ccw/dist/core/lite-scanner.js +56 -3
  14. package/ccw/dist/core/lite-scanner.js.map +1 -1
  15. package/ccw/dist/core/routes/issue-routes.d.ts.map +1 -1
  16. package/ccw/dist/core/routes/issue-routes.js +249 -4
  17. package/ccw/dist/core/routes/issue-routes.js.map +1 -1
  18. package/ccw/dist/tools/memory-update-queue.d.ts.map +1 -1
  19. package/ccw/dist/tools/memory-update-queue.js +5 -11
  20. package/ccw/dist/tools/memory-update-queue.js.map +1 -1
  21. package/ccw/src/core/data-aggregator.ts +19 -7
  22. package/ccw/src/core/lite-scanner.ts +58 -3
  23. package/ccw/src/core/routes/issue-routes.ts +275 -4
  24. package/ccw/src/templates/dashboard-css/03-tasks.css +5 -0
  25. package/ccw/src/templates/dashboard-css/04-lite-tasks.css +630 -1
  26. package/ccw/src/templates/dashboard-css/32-issue-manager.css +435 -37
  27. package/ccw/src/templates/dashboard-js/components/hook-manager.js +30 -21
  28. package/ccw/src/templates/dashboard-js/i18n.js +118 -0
  29. package/ccw/src/templates/dashboard-js/views/codexlens-manager.js +5 -5
  30. package/ccw/src/templates/dashboard-js/views/issue-manager.js +744 -29
  31. package/ccw/src/templates/dashboard-js/views/lite-tasks.js +1138 -334
  32. package/ccw/src/templates/dashboard-js/views/skills-manager.js +2 -4
  33. package/ccw/src/tools/memory-update-queue.js +5 -11
  34. package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-312.pyc +0 -0
  35. package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-313.pyc +0 -0
  36. package/codex-lens/src/codexlens/cli/commands.py +78 -0
  37. package/package.json +1 -1
@@ -429,14 +429,16 @@
429
429
  border: 1px solid hsl(var(--border));
430
430
  border-radius: 0.75rem;
431
431
  overflow: hidden;
432
+ margin-bottom: 1rem;
433
+ box-shadow: 0 1px 3px hsl(var(--foreground) / 0.04);
432
434
  }
433
435
 
434
436
  .queue-group-header {
435
437
  display: flex;
436
438
  align-items: center;
437
439
  justify-content: space-between;
438
- padding: 0.75rem 1rem;
439
- background: hsl(var(--muted) / 0.5);
440
+ padding: 0.875rem 1.25rem;
441
+ background: hsl(var(--muted) / 0.3);
440
442
  border-bottom: 1px solid hsl(var(--border));
441
443
  }
442
444
 
@@ -1256,6 +1258,68 @@
1256
1258
  color: hsl(var(--destructive));
1257
1259
  }
1258
1260
 
1261
+ /* Search Highlight */
1262
+ .search-highlight {
1263
+ background: hsl(45 93% 47% / 0.3);
1264
+ color: inherit;
1265
+ padding: 0 2px;
1266
+ border-radius: 2px;
1267
+ font-weight: 500;
1268
+ }
1269
+
1270
+ /* Search Suggestions Dropdown */
1271
+ .search-suggestions {
1272
+ position: absolute;
1273
+ top: 100%;
1274
+ left: 0;
1275
+ right: 0;
1276
+ margin-top: 0.25rem;
1277
+ background: hsl(var(--card));
1278
+ border: 1px solid hsl(var(--border));
1279
+ border-radius: 0.5rem;
1280
+ box-shadow: 0 4px 12px hsl(var(--foreground) / 0.1);
1281
+ max-height: 300px;
1282
+ overflow-y: auto;
1283
+ z-index: 50;
1284
+ display: none;
1285
+ }
1286
+
1287
+ .search-suggestions.show {
1288
+ display: block;
1289
+ }
1290
+
1291
+ .search-suggestion-item {
1292
+ padding: 0.625rem 0.875rem;
1293
+ cursor: pointer;
1294
+ border-bottom: 1px solid hsl(var(--border) / 0.5);
1295
+ transition: background 0.15s ease;
1296
+ }
1297
+
1298
+ .search-suggestion-item:hover,
1299
+ .search-suggestion-item.selected {
1300
+ background: hsl(var(--muted));
1301
+ }
1302
+
1303
+ .search-suggestion-item:last-child {
1304
+ border-bottom: none;
1305
+ }
1306
+
1307
+ .suggestion-id {
1308
+ font-family: var(--font-mono);
1309
+ font-size: 0.7rem;
1310
+ color: hsl(var(--muted-foreground));
1311
+ margin-bottom: 0.125rem;
1312
+ }
1313
+
1314
+ .suggestion-title {
1315
+ font-size: 0.8125rem;
1316
+ color: hsl(var(--foreground));
1317
+ line-height: 1.3;
1318
+ overflow: hidden;
1319
+ text-overflow: ellipsis;
1320
+ white-space: nowrap;
1321
+ }
1322
+
1259
1323
  /* ==========================================
1260
1324
  CREATE BUTTON
1261
1325
  ========================================== */
@@ -1780,61 +1844,147 @@
1780
1844
  }
1781
1845
 
1782
1846
  .queue-items {
1783
- padding: 0.75rem;
1847
+ padding: 1rem;
1784
1848
  display: flex;
1785
1849
  flex-direction: column;
1786
- gap: 0.5rem;
1850
+ gap: 0.75rem;
1787
1851
  }
1788
1852
 
1853
+ /* Parallel items use CSS Grid for uniform sizing */
1789
1854
  .queue-items.parallel {
1790
- flex-direction: row;
1791
- flex-wrap: wrap;
1855
+ display: grid;
1856
+ grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
1857
+ gap: 0.75rem;
1792
1858
  }
1793
1859
 
1794
1860
  .queue-items.parallel .queue-item {
1795
- flex: 1;
1796
- min-width: 200px;
1861
+ display: grid;
1862
+ grid-template-areas:
1863
+ "id id delete"
1864
+ "issue issue issue"
1865
+ "solution solution solution";
1866
+ grid-template-columns: 1fr 1fr auto;
1867
+ grid-template-rows: auto auto 1fr;
1868
+ align-items: start;
1869
+ padding: 0.75rem;
1870
+ min-height: 90px;
1871
+ gap: 0.25rem;
1797
1872
  }
1798
1873
 
1799
- .queue-group-type {
1874
+ /* Card content layout */
1875
+ .queue-items.parallel .queue-item .queue-item-id {
1876
+ grid-area: id;
1877
+ font-size: 0.875rem;
1878
+ font-weight: 700;
1879
+ color: hsl(var(--foreground));
1880
+ }
1881
+
1882
+ .queue-items.parallel .queue-item .queue-item-issue {
1883
+ grid-area: issue;
1884
+ font-size: 0.6875rem;
1885
+ color: hsl(var(--muted-foreground));
1886
+ white-space: nowrap;
1887
+ overflow: hidden;
1888
+ text-overflow: ellipsis;
1889
+ line-height: 1.3;
1890
+ }
1891
+
1892
+ .queue-items.parallel .queue-item .queue-item-solution {
1893
+ grid-area: solution;
1800
1894
  display: flex;
1801
1895
  align-items: center;
1896
+ gap: 0.25rem;
1897
+ font-size: 0.75rem;
1898
+ font-weight: 500;
1899
+ color: hsl(var(--foreground));
1900
+ align-self: end;
1901
+ }
1902
+
1903
+ /* Hide extra elements in parallel view */
1904
+ .queue-items.parallel .queue-item .queue-item-files,
1905
+ .queue-items.parallel .queue-item .queue-item-priority,
1906
+ .queue-items.parallel .queue-item .queue-item-deps,
1907
+ .queue-items.parallel .queue-item .queue-item-task {
1908
+ display: none;
1909
+ }
1910
+
1911
+ /* Delete button positioned in corner */
1912
+ .queue-items.parallel .queue-item .queue-item-delete {
1913
+ grid-area: delete;
1914
+ justify-self: end;
1915
+ padding: 0.125rem;
1916
+ opacity: 0;
1917
+ }
1918
+
1919
+ .queue-group-type {
1920
+ display: inline-flex;
1921
+ align-items: center;
1802
1922
  gap: 0.375rem;
1803
1923
  font-size: 0.875rem;
1804
1924
  font-weight: 600;
1925
+ padding: 0.25rem 0.625rem;
1926
+ border-radius: 0.375rem;
1805
1927
  }
1806
1928
 
1807
1929
  .queue-group-type.parallel {
1808
- color: hsl(142 71% 45%);
1930
+ color: hsl(142 71% 40%);
1931
+ background: hsl(142 71% 45% / 0.1);
1809
1932
  }
1810
1933
 
1811
1934
  .queue-group-type.sequential {
1812
- color: hsl(262 83% 58%);
1935
+ color: hsl(262 83% 50%);
1936
+ background: hsl(262 83% 58% / 0.1);
1813
1937
  }
1814
1938
 
1815
- /* Queue Item Status Colors */
1939
+ /* Queue Item Status Colors - Enhanced visual distinction */
1940
+
1941
+ /* Pending - Default subtle state */
1942
+ .queue-item.pending,
1943
+ .queue-item:not(.ready):not(.executing):not(.completed):not(.failed):not(.blocked) {
1944
+ border-color: hsl(var(--border));
1945
+ background: hsl(var(--card));
1946
+ }
1947
+
1948
+ /* Ready - Blue tint, ready to execute */
1816
1949
  .queue-item.ready {
1817
1950
  border-color: hsl(199 89% 48%);
1951
+ background: hsl(199 89% 48% / 0.06);
1952
+ border-left: 3px solid hsl(199 89% 48%);
1818
1953
  }
1819
1954
 
1955
+ /* Executing - Amber with pulse animation */
1820
1956
  .queue-item.executing {
1821
- border-color: hsl(45 93% 47%);
1822
- background: hsl(45 93% 47% / 0.05);
1957
+ border-color: hsl(38 92% 50%);
1958
+ background: hsl(38 92% 50% / 0.08);
1959
+ border-left: 3px solid hsl(38 92% 50%);
1960
+ animation: executing-pulse 2s ease-in-out infinite;
1961
+ }
1962
+
1963
+ @keyframes executing-pulse {
1964
+ 0%, 100% { box-shadow: 0 0 0 0 hsl(38 92% 50% / 0.3); }
1965
+ 50% { box-shadow: 0 0 8px 2px hsl(38 92% 50% / 0.2); }
1823
1966
  }
1824
1967
 
1968
+ /* Completed - Green success state */
1825
1969
  .queue-item.completed {
1826
- border-color: hsl(var(--success));
1827
- background: hsl(var(--success) / 0.05);
1970
+ border-color: hsl(142 71% 45%);
1971
+ background: hsl(142 71% 45% / 0.06);
1972
+ border-left: 3px solid hsl(142 71% 45%);
1828
1973
  }
1829
1974
 
1975
+ /* Failed - Red error state */
1830
1976
  .queue-item.failed {
1831
- border-color: hsl(var(--destructive));
1832
- background: hsl(var(--destructive) / 0.05);
1977
+ border-color: hsl(0 84% 60%);
1978
+ background: hsl(0 84% 60% / 0.06);
1979
+ border-left: 3px solid hsl(0 84% 60%);
1833
1980
  }
1834
1981
 
1982
+ /* Blocked - Purple/violet blocked state */
1835
1983
  .queue-item.blocked {
1836
1984
  border-color: hsl(262 83% 58%);
1837
- opacity: 0.7;
1985
+ background: hsl(262 83% 58% / 0.05);
1986
+ border-left: 3px solid hsl(262 83% 58%);
1987
+ opacity: 0.8;
1838
1988
  }
1839
1989
 
1840
1990
  /* Priority indicator */
@@ -2236,61 +2386,89 @@
2236
2386
  flex-direction: column;
2237
2387
  align-items: center;
2238
2388
  justify-content: center;
2239
- padding: 0.75rem 1rem;
2240
- background: hsl(var(--muted) / 0.3);
2389
+ padding: 1rem 1.25rem;
2390
+ background: hsl(var(--card));
2241
2391
  border: 1px solid hsl(var(--border));
2242
- border-radius: 0.5rem;
2392
+ border-radius: 0.75rem;
2243
2393
  text-align: center;
2394
+ transition: all 0.2s ease;
2395
+ }
2396
+
2397
+ .queue-stat-card:hover {
2398
+ transform: translateY(-1px);
2399
+ box-shadow: 0 2px 8px hsl(var(--foreground) / 0.06);
2244
2400
  }
2245
2401
 
2246
2402
  .queue-stat-card .queue-stat-value {
2247
- font-size: 1.5rem;
2403
+ font-size: 1.75rem;
2248
2404
  font-weight: 700;
2249
2405
  color: hsl(var(--foreground));
2250
2406
  line-height: 1.2;
2251
2407
  }
2252
2408
 
2253
2409
  .queue-stat-card .queue-stat-label {
2254
- font-size: 0.75rem;
2410
+ font-size: 0.6875rem;
2255
2411
  color: hsl(var(--muted-foreground));
2256
2412
  text-transform: uppercase;
2257
- letter-spacing: 0.025em;
2258
- margin-top: 0.25rem;
2413
+ letter-spacing: 0.05em;
2414
+ margin-top: 0.375rem;
2415
+ font-weight: 500;
2259
2416
  }
2260
2417
 
2418
+ /* Pending - Slate/Gray with subtle blue tint */
2261
2419
  .queue-stat-card.pending {
2262
- border-color: hsl(var(--muted-foreground) / 0.3);
2420
+ border-color: hsl(215 20% 65% / 0.4);
2421
+ background: linear-gradient(135deg, hsl(215 20% 95%) 0%, hsl(var(--card)) 100%);
2263
2422
  }
2264
2423
 
2265
2424
  .queue-stat-card.pending .queue-stat-value {
2266
- color: hsl(var(--muted-foreground));
2425
+ color: hsl(215 20% 45%);
2267
2426
  }
2268
2427
 
2428
+ .queue-stat-card.pending .queue-stat-label {
2429
+ color: hsl(215 20% 55%);
2430
+ }
2431
+
2432
+ /* Executing - Amber/Orange - attention-grabbing */
2269
2433
  .queue-stat-card.executing {
2270
- border-color: hsl(45 93% 47% / 0.5);
2271
- background: hsl(45 93% 47% / 0.05);
2434
+ border-color: hsl(38 92% 50% / 0.5);
2435
+ background: linear-gradient(135deg, hsl(38 92% 95%) 0%, hsl(45 93% 97%) 100%);
2272
2436
  }
2273
2437
 
2274
2438
  .queue-stat-card.executing .queue-stat-value {
2275
- color: hsl(45 93% 47%);
2439
+ color: hsl(38 92% 40%);
2440
+ }
2441
+
2442
+ .queue-stat-card.executing .queue-stat-label {
2443
+ color: hsl(38 70% 45%);
2276
2444
  }
2277
2445
 
2446
+ /* Completed - Green - success indicator */
2278
2447
  .queue-stat-card.completed {
2279
- border-color: hsl(var(--success) / 0.5);
2280
- background: hsl(var(--success) / 0.05);
2448
+ border-color: hsl(142 71% 45% / 0.5);
2449
+ background: linear-gradient(135deg, hsl(142 71% 95%) 0%, hsl(142 50% 97%) 100%);
2281
2450
  }
2282
2451
 
2283
2452
  .queue-stat-card.completed .queue-stat-value {
2284
- color: hsl(var(--success));
2453
+ color: hsl(142 71% 35%);
2454
+ }
2455
+
2456
+ .queue-stat-card.completed .queue-stat-label {
2457
+ color: hsl(142 50% 40%);
2285
2458
  }
2286
2459
 
2460
+ /* Failed - Red - error indicator */
2287
2461
  .queue-stat-card.failed {
2288
- border-color: hsl(var(--destructive) / 0.5);
2289
- background: hsl(var(--destructive) / 0.05);
2462
+ border-color: hsl(0 84% 60% / 0.5);
2463
+ background: linear-gradient(135deg, hsl(0 84% 95%) 0%, hsl(0 70% 97%) 100%);
2290
2464
  }
2291
2465
 
2292
2466
  .queue-stat-card.failed .queue-stat-value {
2293
- color: hsl(var(--destructive));
2467
+ color: hsl(0 84% 45%);
2468
+ }
2469
+
2470
+ .queue-stat-card.failed .queue-stat-label {
2471
+ color: hsl(0 60% 50%);
2294
2472
  }
2295
2473
 
2296
2474
  /* ==========================================
@@ -2874,3 +3052,223 @@
2874
3052
  gap: 0.25rem;
2875
3053
  }
2876
3054
  }
3055
+
3056
+ /* ==========================================
3057
+ MULTI-QUEUE CARDS VIEW
3058
+ ========================================== */
3059
+
3060
+ /* Queue Cards Header */
3061
+ .queue-cards-header {
3062
+ display: flex;
3063
+ align-items: center;
3064
+ justify-content: space-between;
3065
+ flex-wrap: wrap;
3066
+ gap: 1rem;
3067
+ }
3068
+
3069
+ /* Queue Cards Grid */
3070
+ .queue-cards-grid {
3071
+ display: grid;
3072
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
3073
+ gap: 1rem;
3074
+ margin-bottom: 1.5rem;
3075
+ }
3076
+
3077
+ /* Individual Queue Card */
3078
+ .queue-card {
3079
+ position: relative;
3080
+ background: hsl(var(--card));
3081
+ border: 1px solid hsl(var(--border));
3082
+ border-radius: 0.75rem;
3083
+ padding: 1rem;
3084
+ cursor: pointer;
3085
+ transition: all 0.2s ease;
3086
+ }
3087
+
3088
+ .queue-card:hover {
3089
+ border-color: hsl(var(--primary) / 0.5);
3090
+ transform: translateY(-2px);
3091
+ box-shadow: 0 4px 12px hsl(var(--foreground) / 0.08);
3092
+ }
3093
+
3094
+ .queue-card.active {
3095
+ border-color: hsl(var(--primary));
3096
+ background: hsl(var(--primary) / 0.05);
3097
+ }
3098
+
3099
+ .queue-card.merged {
3100
+ opacity: 0.6;
3101
+ border-style: dashed;
3102
+ }
3103
+
3104
+ .queue-card.merged:hover {
3105
+ opacity: 0.8;
3106
+ }
3107
+
3108
+ /* Queue Card Header */
3109
+ .queue-card-header {
3110
+ display: flex;
3111
+ align-items: center;
3112
+ justify-content: space-between;
3113
+ margin-bottom: 0.75rem;
3114
+ }
3115
+
3116
+ .queue-card-id {
3117
+ font-size: 0.875rem;
3118
+ font-weight: 600;
3119
+ color: hsl(var(--foreground));
3120
+ }
3121
+
3122
+ .queue-card-badges {
3123
+ display: flex;
3124
+ align-items: center;
3125
+ gap: 0.5rem;
3126
+ }
3127
+
3128
+ /* Queue Card Stats - Progress Bar */
3129
+ .queue-card-stats {
3130
+ margin-bottom: 0.75rem;
3131
+ }
3132
+
3133
+ .queue-card-stats .progress-bar {
3134
+ height: 6px;
3135
+ background: hsl(var(--muted));
3136
+ border-radius: 3px;
3137
+ overflow: hidden;
3138
+ margin-bottom: 0.5rem;
3139
+ }
3140
+
3141
+ .queue-card-stats .progress-fill {
3142
+ height: 100%;
3143
+ background: hsl(var(--primary));
3144
+ border-radius: 3px;
3145
+ transition: width 0.3s ease;
3146
+ }
3147
+
3148
+ .queue-card-stats .progress-fill.completed {
3149
+ background: hsl(var(--success, 142 76% 36%));
3150
+ }
3151
+
3152
+ .queue-card-progress {
3153
+ display: flex;
3154
+ justify-content: space-between;
3155
+ font-size: 0.75rem;
3156
+ color: hsl(var(--foreground));
3157
+ }
3158
+
3159
+ /* Queue Card Meta */
3160
+ .queue-card-meta {
3161
+ display: flex;
3162
+ gap: 1rem;
3163
+ font-size: 0.75rem;
3164
+ color: hsl(var(--muted-foreground));
3165
+ margin-bottom: 0.75rem;
3166
+ }
3167
+
3168
+ /* Queue Card Actions */
3169
+ .queue-card-actions {
3170
+ display: flex;
3171
+ gap: 0.5rem;
3172
+ padding-top: 0.75rem;
3173
+ border-top: 1px solid hsl(var(--border));
3174
+ }
3175
+
3176
+ /* Queue Detail Header */
3177
+ .queue-detail-header {
3178
+ display: flex;
3179
+ align-items: center;
3180
+ gap: 1rem;
3181
+ flex-wrap: wrap;
3182
+ }
3183
+
3184
+ .queue-detail-title {
3185
+ flex: 1;
3186
+ display: flex;
3187
+ align-items: center;
3188
+ gap: 1rem;
3189
+ }
3190
+
3191
+ .queue-detail-actions {
3192
+ display: flex;
3193
+ gap: 0.5rem;
3194
+ }
3195
+
3196
+ /* Queue Item Delete Button */
3197
+ .queue-item-delete {
3198
+ margin-left: auto;
3199
+ padding: 0.25rem;
3200
+ opacity: 0;
3201
+ transition: opacity 0.15s ease;
3202
+ color: hsl(var(--muted-foreground));
3203
+ border-radius: 0.25rem;
3204
+ }
3205
+
3206
+ .queue-item:hover .queue-item-delete {
3207
+ opacity: 1;
3208
+ }
3209
+
3210
+ .queue-item-delete:hover {
3211
+ color: hsl(var(--destructive, 0 84% 60%));
3212
+ background: hsl(var(--destructive, 0 84% 60%) / 0.1);
3213
+ }
3214
+
3215
+ /* Queue Error State */
3216
+ .queue-error {
3217
+ padding: 2rem;
3218
+ text-align: center;
3219
+ }
3220
+
3221
+ /* Responsive adjustments for queue cards */
3222
+ @media (max-width: 640px) {
3223
+ .queue-cards-grid {
3224
+ grid-template-columns: 1fr;
3225
+ }
3226
+
3227
+ .queue-cards-header {
3228
+ flex-direction: column;
3229
+ align-items: flex-start;
3230
+ }
3231
+
3232
+ .queue-detail-header {
3233
+ flex-direction: column;
3234
+ align-items: flex-start;
3235
+ }
3236
+
3237
+ .queue-detail-title {
3238
+ flex-direction: column;
3239
+ align-items: flex-start;
3240
+ gap: 0.5rem;
3241
+ }
3242
+ }
3243
+
3244
+ /* ==========================================
3245
+ WARNING BUTTON STYLE
3246
+ ========================================== */
3247
+
3248
+ .btn-warning,
3249
+ .btn-secondary.btn-warning {
3250
+ color: hsl(38 92% 40%);
3251
+ border-color: hsl(38 92% 50% / 0.5);
3252
+ background: hsl(38 92% 50% / 0.08);
3253
+ }
3254
+
3255
+ .btn-warning:hover,
3256
+ .btn-secondary.btn-warning:hover {
3257
+ background: hsl(38 92% 50% / 0.15);
3258
+ border-color: hsl(38 92% 50%);
3259
+ }
3260
+
3261
+ /* Active queue badge enhancement */
3262
+ .queue-active-badge {
3263
+ display: inline-flex;
3264
+ align-items: center;
3265
+ padding: 0.125rem 0.5rem;
3266
+ font-size: 0.6875rem;
3267
+ font-weight: 600;
3268
+ color: hsl(142 71% 35%);
3269
+ background: hsl(142 71% 45% / 0.15);
3270
+ border: 1px solid hsl(142 71% 45% / 0.3);
3271
+ border-radius: 9999px;
3272
+ text-transform: uppercase;
3273
+ letter-spacing: 0.025em;
3274
+ }