pilothub 0.0.1 → 0.0.2

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 (388) hide show
  1. package/LICENSE +1 -0
  2. package/README.md +36 -129
  3. package/dist/browserAuth.d.ts +20 -0
  4. package/dist/browserAuth.js +156 -0
  5. package/dist/browserAuth.js.map +1 -0
  6. package/dist/browserAuth.test.d.ts +1 -0
  7. package/dist/browserAuth.test.js +83 -0
  8. package/dist/browserAuth.test.js.map +1 -0
  9. package/dist/cli/buildInfo.d.ts +3 -0
  10. package/dist/cli/buildInfo.js +103 -0
  11. package/dist/cli/buildInfo.js.map +1 -0
  12. package/dist/cli/commands/auth.d.ts +9 -0
  13. package/dist/cli/commands/auth.js +75 -0
  14. package/dist/cli/commands/auth.js.map +1 -0
  15. package/dist/cli/commands/delete.d.ts +11 -0
  16. package/dist/cli/commands/delete.js +67 -0
  17. package/dist/cli/commands/delete.js.map +1 -0
  18. package/dist/cli/commands/delete.test.d.ts +1 -0
  19. package/dist/cli/commands/delete.test.js +52 -0
  20. package/dist/cli/commands/delete.test.js.map +1 -0
  21. package/dist/cli/commands/publish.d.ts +9 -0
  22. package/dist/cli/commands/publish.js +87 -0
  23. package/dist/cli/commands/publish.js.map +1 -0
  24. package/dist/cli/commands/publish.test.d.ts +1 -0
  25. package/dist/cli/commands/publish.test.js +104 -0
  26. package/dist/cli/commands/publish.test.js.map +1 -0
  27. package/dist/cli/commands/skills.d.ts +23 -0
  28. package/dist/cli/commands/skills.js +298 -0
  29. package/dist/cli/commands/skills.js.map +1 -0
  30. package/dist/cli/commands/skills.test.d.ts +1 -0
  31. package/dist/cli/commands/skills.test.js +156 -0
  32. package/dist/cli/commands/skills.test.js.map +1 -0
  33. package/dist/cli/commands/star.d.ts +8 -0
  34. package/dist/cli/commands/star.js +38 -0
  35. package/dist/cli/commands/star.js.map +1 -0
  36. package/dist/cli/commands/sync.d.ts +3 -0
  37. package/dist/cli/commands/sync.js +160 -0
  38. package/dist/cli/commands/sync.js.map +1 -0
  39. package/dist/cli/commands/sync.test.d.ts +1 -0
  40. package/dist/cli/commands/sync.test.js +277 -0
  41. package/dist/cli/commands/sync.test.js.map +1 -0
  42. package/dist/cli/commands/syncHelpers.d.ts +76 -0
  43. package/dist/cli/commands/syncHelpers.js +349 -0
  44. package/dist/cli/commands/syncHelpers.js.map +1 -0
  45. package/dist/cli/commands/syncHelpers.test.d.ts +1 -0
  46. package/dist/cli/commands/syncHelpers.test.js +22 -0
  47. package/dist/cli/commands/syncHelpers.test.js.map +1 -0
  48. package/dist/cli/commands/syncTypes.d.ts +24 -0
  49. package/dist/cli/commands/syncTypes.js +2 -0
  50. package/dist/cli/commands/syncTypes.js.map +1 -0
  51. package/dist/cli/commands/unstar.d.ts +8 -0
  52. package/dist/cli/commands/unstar.js +38 -0
  53. package/dist/cli/commands/unstar.js.map +1 -0
  54. package/dist/cli/helpStyle.d.ts +13 -0
  55. package/dist/cli/helpStyle.js +38 -0
  56. package/dist/cli/helpStyle.js.map +1 -0
  57. package/dist/cli/pilotbotConfig.d.ts +6 -0
  58. package/dist/cli/pilotbotConfig.js +110 -0
  59. package/dist/cli/pilotbotConfig.js.map +1 -0
  60. package/dist/cli/pilotbotConfig.test.d.ts +1 -0
  61. package/dist/cli/pilotbotConfig.test.js +133 -0
  62. package/dist/cli/pilotbotConfig.test.js.map +1 -0
  63. package/dist/cli/registry.d.ts +7 -0
  64. package/dist/cli/registry.js +42 -0
  65. package/dist/cli/registry.js.map +1 -0
  66. package/dist/cli/registry.test.d.ts +1 -0
  67. package/dist/cli/registry.test.js +48 -0
  68. package/dist/cli/registry.test.js.map +1 -0
  69. package/dist/cli/scanSkills.d.ts +7 -0
  70. package/dist/cli/scanSkills.js +75 -0
  71. package/dist/cli/scanSkills.js.map +1 -0
  72. package/dist/cli/scanSkills.test.d.ts +1 -0
  73. package/dist/cli/scanSkills.test.js +60 -0
  74. package/dist/cli/scanSkills.test.js.map +1 -0
  75. package/dist/cli/slug.d.ts +2 -0
  76. package/dist/cli/slug.js +16 -0
  77. package/dist/cli/slug.js.map +1 -0
  78. package/dist/cli/types.d.ts +15 -0
  79. package/dist/cli/types.js +2 -0
  80. package/dist/cli/types.js.map +1 -0
  81. package/dist/cli/ui.d.ts +7 -0
  82. package/dist/cli/ui.js +72 -0
  83. package/dist/cli/ui.js.map +1 -0
  84. package/dist/cli.d.ts +2 -0
  85. package/dist/cli.js +268 -0
  86. package/dist/cli.js.map +1 -0
  87. package/dist/config.d.ts +4 -0
  88. package/dist/config.js +38 -0
  89. package/dist/config.js.map +1 -0
  90. package/dist/discovery.d.ts +5 -0
  91. package/dist/discovery.js +21 -0
  92. package/dist/discovery.js.map +1 -0
  93. package/dist/discovery.test.d.ts +1 -0
  94. package/dist/discovery.test.js +46 -0
  95. package/dist/discovery.test.js.map +1 -0
  96. package/dist/http.d.ts +32 -0
  97. package/dist/http.js +261 -0
  98. package/dist/http.js.map +1 -0
  99. package/dist/http.test.d.ts +1 -0
  100. package/dist/http.test.js +135 -0
  101. package/dist/http.test.js.map +1 -0
  102. package/dist/schema/ark.js.map +1 -0
  103. package/dist/schema/index.js.map +1 -0
  104. package/dist/schema/routes.js.map +1 -0
  105. package/{packages/schema/dist → dist/schema}/schemas.d.ts +0 -39
  106. package/{packages/schema/dist → dist/schema}/schemas.js +0 -22
  107. package/dist/schema/schemas.js.map +1 -0
  108. package/dist/schema/textFiles.js.map +1 -0
  109. package/dist/schema/textFiles.test.d.ts +1 -0
  110. package/dist/schema/textFiles.test.js +20 -0
  111. package/dist/schema/textFiles.test.js.map +1 -0
  112. package/dist/skills.d.ts +43 -0
  113. package/dist/skills.js +163 -0
  114. package/dist/skills.js.map +1 -0
  115. package/dist/skills.test.d.ts +1 -0
  116. package/dist/skills.test.js +144 -0
  117. package/dist/skills.test.js.map +1 -0
  118. package/dist/types.d.ts +7 -0
  119. package/dist/types.js +2 -0
  120. package/dist/types.js.map +1 -0
  121. package/package.json +27 -70
  122. package/.env.local.example +0 -19
  123. package/.github/workflows/ci.yml +0 -40
  124. package/.oxlintrc.json +0 -3
  125. package/AGENTS.md +0 -45
  126. package/CHANGELOG.md +0 -138
  127. package/DEPRECATIONS.md +0 -7
  128. package/biome.json +0 -41
  129. package/convex/_generated/api.d.ts +0 -153
  130. package/convex/_generated/api.js +0 -23
  131. package/convex/_generated/dataModel.d.ts +0 -60
  132. package/convex/_generated/server.d.ts +0 -143
  133. package/convex/_generated/server.js +0 -93
  134. package/convex/auth.config.ts +0 -8
  135. package/convex/auth.ts +0 -19
  136. package/convex/comments.ts +0 -88
  137. package/convex/crons.ts +0 -34
  138. package/convex/devSeed.ts +0 -459
  139. package/convex/devSeedExtra.ts +0 -541
  140. package/convex/downloads.ts +0 -78
  141. package/convex/githubBackups.ts +0 -170
  142. package/convex/githubBackupsNode.ts +0 -183
  143. package/convex/githubImport.ts +0 -317
  144. package/convex/githubSoulBackups.ts +0 -170
  145. package/convex/githubSoulBackupsNode.ts +0 -186
  146. package/convex/http.ts +0 -194
  147. package/convex/httpApi.handlers.test.ts +0 -488
  148. package/convex/httpApi.test.ts +0 -70
  149. package/convex/httpApi.ts +0 -305
  150. package/convex/httpApiV1.handlers.test.ts +0 -584
  151. package/convex/httpApiV1.ts +0 -1172
  152. package/convex/leaderboards.ts +0 -39
  153. package/convex/lib/access.ts +0 -36
  154. package/convex/lib/apiTokenAuth.ts +0 -36
  155. package/convex/lib/badges.ts +0 -50
  156. package/convex/lib/changelog.test.ts +0 -34
  157. package/convex/lib/changelog.ts +0 -278
  158. package/convex/lib/embeddings.ts +0 -38
  159. package/convex/lib/githubBackup.ts +0 -443
  160. package/convex/lib/githubImport.test.ts +0 -247
  161. package/convex/lib/githubImport.ts +0 -425
  162. package/convex/lib/githubSoulBackup.ts +0 -443
  163. package/convex/lib/leaderboards.ts +0 -103
  164. package/convex/lib/moderation.ts +0 -42
  165. package/convex/lib/public.ts +0 -89
  166. package/convex/lib/searchText.test.ts +0 -46
  167. package/convex/lib/searchText.ts +0 -27
  168. package/convex/lib/skillBackfill.test.ts +0 -34
  169. package/convex/lib/skillBackfill.ts +0 -67
  170. package/convex/lib/skillPublish.test.ts +0 -28
  171. package/convex/lib/skillPublish.ts +0 -284
  172. package/convex/lib/skillStats.ts +0 -80
  173. package/convex/lib/skills.test.ts +0 -197
  174. package/convex/lib/skills.ts +0 -273
  175. package/convex/lib/soulChangelog.ts +0 -273
  176. package/convex/lib/soulPublish.ts +0 -236
  177. package/convex/lib/tokens.test.ts +0 -33
  178. package/convex/lib/tokens.ts +0 -51
  179. package/convex/lib/webhooks.test.ts +0 -91
  180. package/convex/lib/webhooks.ts +0 -112
  181. package/convex/maintenance.test.ts +0 -270
  182. package/convex/maintenance.ts +0 -840
  183. package/convex/rateLimits.ts +0 -50
  184. package/convex/schema.ts +0 -472
  185. package/convex/search.test.ts +0 -12
  186. package/convex/search.ts +0 -254
  187. package/convex/seed.test.ts +0 -37
  188. package/convex/seed.ts +0 -254
  189. package/convex/seedSouls.ts +0 -111
  190. package/convex/skillStatEvents.ts +0 -568
  191. package/convex/skills.ts +0 -1606
  192. package/convex/soulComments.ts +0 -88
  193. package/convex/soulDownloads.ts +0 -14
  194. package/convex/soulStars.ts +0 -71
  195. package/convex/souls.ts +0 -570
  196. package/convex/stars.ts +0 -108
  197. package/convex/statsMaintenance.ts +0 -205
  198. package/convex/telemetry.ts +0 -434
  199. package/convex/tokens.ts +0 -88
  200. package/convex/tsconfig.json +0 -7
  201. package/convex/uploads.ts +0 -20
  202. package/convex/users.ts +0 -122
  203. package/convex/webhooks.ts +0 -50
  204. package/convex.json +0 -3
  205. package/docs/README.md +0 -32
  206. package/docs/api.md +0 -51
  207. package/docs/architecture.md +0 -61
  208. package/docs/auth.md +0 -54
  209. package/docs/cli.md +0 -117
  210. package/docs/deploy.md +0 -78
  211. package/docs/diffing.md +0 -84
  212. package/docs/github-import.md +0 -171
  213. package/docs/http-api.md +0 -187
  214. package/docs/manual-testing.md +0 -64
  215. package/docs/mintlify.md +0 -43
  216. package/docs/quickstart.md +0 -120
  217. package/docs/skill-format.md +0 -58
  218. package/docs/soul-format.md +0 -37
  219. package/docs/spec.md +0 -177
  220. package/docs/telemetry.md +0 -91
  221. package/docs/troubleshooting.md +0 -49
  222. package/docs/webhook.md +0 -51
  223. package/e2e/menu-smoke.pw.test.ts +0 -49
  224. package/e2e/pilothub.e2e.test.ts +0 -494
  225. package/e2e/search-exact.pw.test.ts +0 -97
  226. package/packages/pilothub/LICENSE +0 -22
  227. package/packages/pilothub/README.md +0 -57
  228. package/packages/pilothub/package.json +0 -41
  229. package/packages/pilothub/src/browserAuth.test.ts +0 -96
  230. package/packages/pilothub/src/browserAuth.ts +0 -174
  231. package/packages/pilothub/src/cli/buildInfo.ts +0 -94
  232. package/packages/pilothub/src/cli/commands/auth.ts +0 -97
  233. package/packages/pilothub/src/cli/commands/delete.test.ts +0 -73
  234. package/packages/pilothub/src/cli/commands/delete.ts +0 -83
  235. package/packages/pilothub/src/cli/commands/publish.test.ts +0 -122
  236. package/packages/pilothub/src/cli/commands/publish.ts +0 -108
  237. package/packages/pilothub/src/cli/commands/skills.test.ts +0 -191
  238. package/packages/pilothub/src/cli/commands/skills.ts +0 -380
  239. package/packages/pilothub/src/cli/commands/star.ts +0 -46
  240. package/packages/pilothub/src/cli/commands/sync.test.ts +0 -310
  241. package/packages/pilothub/src/cli/commands/sync.ts +0 -200
  242. package/packages/pilothub/src/cli/commands/syncHelpers.test.ts +0 -26
  243. package/packages/pilothub/src/cli/commands/syncHelpers.ts +0 -427
  244. package/packages/pilothub/src/cli/commands/syncTypes.ts +0 -27
  245. package/packages/pilothub/src/cli/commands/unstar.ts +0 -48
  246. package/packages/pilothub/src/cli/helpStyle.ts +0 -45
  247. package/packages/pilothub/src/cli/pilotbotConfig.test.ts +0 -159
  248. package/packages/pilothub/src/cli/pilotbotConfig.ts +0 -147
  249. package/packages/pilothub/src/cli/registry.test.ts +0 -63
  250. package/packages/pilothub/src/cli/registry.ts +0 -43
  251. package/packages/pilothub/src/cli/scanSkills.test.ts +0 -64
  252. package/packages/pilothub/src/cli/scanSkills.ts +0 -84
  253. package/packages/pilothub/src/cli/slug.ts +0 -16
  254. package/packages/pilothub/src/cli/types.ts +0 -12
  255. package/packages/pilothub/src/cli/ui.ts +0 -75
  256. package/packages/pilothub/src/cli.ts +0 -311
  257. package/packages/pilothub/src/config.ts +0 -36
  258. package/packages/pilothub/src/discovery.test.ts +0 -75
  259. package/packages/pilothub/src/discovery.ts +0 -19
  260. package/packages/pilothub/src/http.test.ts +0 -156
  261. package/packages/pilothub/src/http.ts +0 -301
  262. package/packages/pilothub/src/schema/ark.ts +0 -29
  263. package/packages/pilothub/src/schema/index.ts +0 -5
  264. package/packages/pilothub/src/schema/routes.ts +0 -22
  265. package/packages/pilothub/src/schema/schemas.ts +0 -260
  266. package/packages/pilothub/src/schema/textFiles.test.ts +0 -23
  267. package/packages/pilothub/src/schema/textFiles.ts +0 -66
  268. package/packages/pilothub/src/skills.test.ts +0 -191
  269. package/packages/pilothub/src/skills.ts +0 -172
  270. package/packages/pilothub/src/types.ts +0 -10
  271. package/packages/pilothub/tsconfig.json +0 -14
  272. package/packages/schema/README.md +0 -3
  273. package/packages/schema/dist/ark.js.map +0 -1
  274. package/packages/schema/dist/index.js.map +0 -1
  275. package/packages/schema/dist/routes.js.map +0 -1
  276. package/packages/schema/dist/schemas.js.map +0 -1
  277. package/packages/schema/dist/textFiles.js.map +0 -1
  278. package/packages/schema/package.json +0 -26
  279. package/packages/schema/src/ark.ts +0 -29
  280. package/packages/schema/src/index.ts +0 -5
  281. package/packages/schema/src/routes.ts +0 -22
  282. package/packages/schema/src/schemas.test.ts +0 -123
  283. package/packages/schema/src/schemas.ts +0 -287
  284. package/packages/schema/src/textFiles.test.ts +0 -23
  285. package/packages/schema/src/textFiles.ts +0 -66
  286. package/packages/schema/tsconfig.json +0 -15
  287. package/pilothub +0 -46
  288. package/playwright.config.ts +0 -33
  289. package/public/.well-known/pilothub.json +0 -6
  290. package/public/api/v1/openapi.json +0 -379
  291. package/public/favicon.ico +0 -0
  292. package/public/logo192.png +0 -0
  293. package/public/logo512.png +0 -0
  294. package/public/manifest.json +0 -25
  295. package/public/og.png +0 -0
  296. package/public/og.svg +0 -98
  297. package/public/pilot-logo.png +0 -0
  298. package/public/pilot-mark.png +0 -0
  299. package/public/robots.txt +0 -3
  300. package/public/tanstack-circle-logo.png +0 -0
  301. package/public/tanstack-word-logo-white.svg +0 -1
  302. package/scripts/check-peer-deps.ts +0 -56
  303. package/scripts/docs-list.ts +0 -148
  304. package/scripts/run-playwright-local.sh +0 -14
  305. package/server/og/fetchSkillOgMeta.ts +0 -27
  306. package/server/og/fetchSoulOgMeta.ts +0 -27
  307. package/server/og/ogAssets.ts +0 -80
  308. package/server/og/skillOgSvg.test.ts +0 -59
  309. package/server/og/skillOgSvg.ts +0 -258
  310. package/server/og/soulOgSvg.ts +0 -209
  311. package/server/routes/og/skill.png.ts +0 -103
  312. package/server/routes/og/soul.png.ts +0 -111
  313. package/src/__tests__/skill-detail-page.test.tsx +0 -86
  314. package/src/__tests__/skills-index.test.tsx +0 -145
  315. package/src/__tests__/upload.route.test.tsx +0 -228
  316. package/src/components/AppProviders.tsx +0 -19
  317. package/src/components/ClientOnly.tsx +0 -18
  318. package/src/components/Footer.tsx +0 -29
  319. package/src/components/Header.tsx +0 -295
  320. package/src/components/InstallSwitcher.tsx +0 -53
  321. package/src/components/SkillCard.tsx +0 -36
  322. package/src/components/SkillDetailPage.tsx +0 -817
  323. package/src/components/SkillDiffCard.tsx +0 -485
  324. package/src/components/SoulCard.tsx +0 -19
  325. package/src/components/SoulDetailPage.tsx +0 -263
  326. package/src/components/UserBootstrap.tsx +0 -18
  327. package/src/components/ui/dropdown-menu.tsx +0 -67
  328. package/src/components/ui/toggle-group.tsx +0 -35
  329. package/src/convex/client.ts +0 -3
  330. package/src/lib/badges.ts +0 -29
  331. package/src/lib/diffing.test.ts +0 -163
  332. package/src/lib/diffing.ts +0 -106
  333. package/src/lib/gravatar.test.ts +0 -9
  334. package/src/lib/gravatar.ts +0 -158
  335. package/src/lib/og.test.ts +0 -142
  336. package/src/lib/og.ts +0 -156
  337. package/src/lib/publicUser.ts +0 -39
  338. package/src/lib/roles.ts +0 -19
  339. package/src/lib/site.test.ts +0 -130
  340. package/src/lib/site.ts +0 -84
  341. package/src/lib/theme-transition.test.ts +0 -134
  342. package/src/lib/theme-transition.ts +0 -134
  343. package/src/lib/theme.test.tsx +0 -88
  344. package/src/lib/theme.ts +0 -43
  345. package/src/lib/uploadFiles.jsdom.test.ts +0 -33
  346. package/src/lib/uploadFiles.test.ts +0 -123
  347. package/src/lib/uploadFiles.ts +0 -245
  348. package/src/lib/uploadUtils.test.ts +0 -78
  349. package/src/lib/uploadUtils.ts +0 -93
  350. package/src/lib/useAuthStatus.ts +0 -12
  351. package/src/lib/utils.test.ts +0 -9
  352. package/src/lib/utils.ts +0 -6
  353. package/src/logo.svg +0 -12
  354. package/src/routeTree.gen.ts +0 -345
  355. package/src/router.tsx +0 -17
  356. package/src/routes/$owner/$slug.tsx +0 -55
  357. package/src/routes/__root.tsx +0 -136
  358. package/src/routes/admin.tsx +0 -11
  359. package/src/routes/cli/auth.tsx +0 -168
  360. package/src/routes/dashboard.tsx +0 -97
  361. package/src/routes/import.tsx +0 -415
  362. package/src/routes/index.tsx +0 -252
  363. package/src/routes/management.tsx +0 -529
  364. package/src/routes/settings.tsx +0 -203
  365. package/src/routes/skills/index.tsx +0 -422
  366. package/src/routes/souls/$slug.tsx +0 -55
  367. package/src/routes/souls/index.tsx +0 -243
  368. package/src/routes/stars.tsx +0 -68
  369. package/src/routes/u/$handle.tsx +0 -307
  370. package/src/routes/upload/utils.ts +0 -81
  371. package/src/routes/upload.tsx +0 -499
  372. package/src/styles.css +0 -2718
  373. package/tsconfig.json +0 -24
  374. package/tsconfig.oxlint.json +0 -16
  375. package/vercel.json +0 -8
  376. package/vite.config.ts +0 -48
  377. package/vitest.config.ts +0 -47
  378. package/vitest.e2e.config.ts +0 -11
  379. package/vitest.setup.ts +0 -1
  380. /package/{packages/pilothub/bin → bin}/pilothub.js +0 -0
  381. /package/{packages/schema/dist → dist/schema}/ark.d.ts +0 -0
  382. /package/{packages/schema/dist → dist/schema}/ark.js +0 -0
  383. /package/{packages/schema/dist → dist/schema}/index.d.ts +0 -0
  384. /package/{packages/schema/dist → dist/schema}/index.js +0 -0
  385. /package/{packages/schema/dist → dist/schema}/routes.d.ts +0 -0
  386. /package/{packages/schema/dist → dist/schema}/routes.js +0 -0
  387. /package/{packages/schema/dist → dist/schema}/textFiles.d.ts +0 -0
  388. /package/{packages/schema/dist → dist/schema}/textFiles.js +0 -0
package/src/styles.css DELETED
@@ -1,2718 +0,0 @@
1
- @import "tailwindcss";
2
- @import "@fontsource/bricolage-grotesque/latin.css";
3
- @import "@fontsource/manrope/latin.css";
4
- @import "@fontsource/ibm-plex-mono/latin.css";
5
-
6
- :root {
7
- color-scheme: light dark;
8
- --bg: #f8f5ef;
9
- --bg-soft: #fdfaf4;
10
- --bg-glow-1: #fff1d8;
11
- --bg-glow-2: #ffe8e0;
12
- --surface: #ffffff;
13
- --surface-muted: #fff6f1;
14
- --nav-bg: rgba(248, 245, 239, 0.85);
15
- --ink: #1d1a17;
16
- --ink-soft: #4c463f;
17
- --accent: #ff6b4a;
18
- --accent-deep: #e54f31;
19
- --seafoam: #2bc6a4;
20
- --gold: #f0c46a;
21
- --line: rgba(29, 26, 23, 0.12);
22
- --shadow: 0 24px 60px rgba(29, 26, 23, 0.1);
23
- --radius-lg: 28px;
24
- --radius-md: 18px;
25
- --radius-sm: 12px;
26
- --font-display: "Bricolage Grotesque", "Manrope", sans-serif;
27
- --font-body: "Manrope", "Bricolage Grotesque", sans-serif;
28
- --font-mono:
29
- "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
30
- "Courier New", monospace;
31
- }
32
-
33
- [data-theme="dark"] {
34
- color-scheme: dark;
35
- --bg: #14110f;
36
- --bg-soft: #1d1916;
37
- --bg-glow-1: #2b1a15;
38
- --bg-glow-2: #231713;
39
- --surface: #201b18;
40
- --surface-muted: #241f1b;
41
- --nav-bg: rgba(20, 17, 15, 0.85);
42
- --ink: #f6efe4;
43
- --ink-soft: #c6b8a8;
44
- --accent: #e86a47;
45
- --accent-deep: #c24a2f;
46
- --seafoam: #4ad8b7;
47
- --gold: #f3c97a;
48
- --line: rgba(255, 255, 255, 0.12);
49
- --shadow: 0 24px 60px rgba(0, 0, 0, 0.5);
50
- }
51
-
52
- * {
53
- box-sizing: border-box;
54
- }
55
-
56
- body {
57
- margin: 0;
58
- font-family: var(--font-body);
59
- color: var(--ink);
60
- background:
61
- radial-gradient(1200px 800px at 20% -10%, var(--bg-glow-1) 0%, transparent 60%),
62
- radial-gradient(900px 600px at 90% 10%, var(--bg-glow-2) 0%, transparent 60%), var(--bg);
63
- min-height: 100vh;
64
- -webkit-font-smoothing: antialiased;
65
- -moz-osx-font-smoothing: grayscale;
66
- }
67
-
68
- a {
69
- color: inherit;
70
- text-decoration: none;
71
- }
72
-
73
- code {
74
- font-family: var(--font-mono);
75
- }
76
-
77
- .app-shell {
78
- min-height: 100vh;
79
- display: flex;
80
- flex-direction: column;
81
- }
82
-
83
- .app-shell main {
84
- flex: 1;
85
- }
86
-
87
- .site-footer {
88
- padding: 0 24px 40px;
89
- }
90
-
91
- .site-footer-inner {
92
- max-width: 1200px;
93
- margin: 0 auto;
94
- }
95
-
96
- .site-footer-divider {
97
- height: 1px;
98
- background: var(--line);
99
- opacity: 0.6;
100
- margin: 18px 0 16px;
101
- }
102
-
103
- .site-footer-row {
104
- display: flex;
105
- align-items: center;
106
- justify-content: center;
107
- gap: 16px;
108
- }
109
-
110
- .site-footer-copy {
111
- font-size: 0.85rem;
112
- color: var(--ink-soft);
113
- opacity: 0.72;
114
- text-align: center;
115
- max-width: 720px;
116
- }
117
-
118
- .site-footer-copy a {
119
- color: inherit;
120
- text-decoration: underline;
121
- text-decoration-color: rgba(255, 107, 74, 0.32);
122
- text-underline-offset: 3px;
123
- transition:
124
- color 0.2s ease,
125
- text-decoration-color 0.2s ease;
126
- }
127
-
128
- .site-footer-copy a:hover {
129
- color: var(--ink);
130
- text-decoration-color: rgba(255, 107, 74, 0.6);
131
- }
132
-
133
- .section-cta {
134
- display: flex;
135
- justify-content: flex-end;
136
- margin-top: 18px;
137
- }
138
-
139
- .navbar {
140
- position: sticky;
141
- top: 0;
142
- z-index: 10;
143
- background: var(--nav-bg);
144
- backdrop-filter: blur(18px);
145
- border-bottom: 1px solid var(--line);
146
- }
147
-
148
- .navbar-inner {
149
- max-width: 1200px;
150
- margin: 0 auto;
151
- padding: 20px 24px;
152
- display: flex;
153
- align-items: center;
154
- gap: 20px;
155
- }
156
-
157
- .brand {
158
- font-family: var(--font-display);
159
- font-size: 1.4rem;
160
- letter-spacing: -0.03em;
161
- display: flex;
162
- align-items: center;
163
- gap: 10px;
164
- }
165
-
166
- .brand-name {
167
- display: inline-flex;
168
- }
169
-
170
- .brand-mark {
171
- width: 36px;
172
- height: 36px;
173
- border-radius: 50%;
174
- background: radial-gradient(circle at 30% 30%, #ffd3c2 0%, #ff6b4a 60%, #d1492f 100%);
175
- box-shadow: inset 0 0 0 4px rgba(255, 255, 255, 0.5);
176
- display: grid;
177
- place-items: center;
178
- overflow: hidden;
179
- }
180
-
181
- .brand-mark img {
182
- width: 70%;
183
- height: 70%;
184
- object-fit: cover;
185
- border-radius: 50%;
186
- }
187
-
188
- .nav-links {
189
- display: flex;
190
- gap: 16px;
191
- font-size: 0.95rem;
192
- color: var(--ink-soft);
193
- }
194
-
195
- .nav-mobile {
196
- display: none;
197
- }
198
-
199
- .nav-mobile-trigger {
200
- width: 40px;
201
- height: 40px;
202
- border-radius: 999px;
203
- border: 1px solid var(--line);
204
- background: var(--surface);
205
- display: grid;
206
- place-items: center;
207
- cursor: pointer;
208
- transition:
209
- transform 0.2s ease,
210
- box-shadow 0.2s ease;
211
- }
212
-
213
- .nav-mobile-trigger:hover {
214
- transform: translateY(-1px);
215
- box-shadow: 0 10px 18px rgba(255, 107, 74, 0.18);
216
- }
217
-
218
- .nav-mobile-trigger:focus-visible {
219
- outline: 3px solid rgba(255, 107, 74, 0.35);
220
- outline-offset: 3px;
221
- }
222
-
223
- .nav-actions {
224
- margin-left: auto;
225
- display: flex;
226
- gap: 12px;
227
- align-items: center;
228
- }
229
-
230
- .theme-toggle {
231
- display: inline-flex;
232
- }
233
-
234
- .user-trigger {
235
- display: inline-flex;
236
- align-items: center;
237
- gap: 10px;
238
- border: 1px solid var(--line);
239
- background: var(--surface);
240
- padding: 6px 12px 6px 6px;
241
- border-radius: 999px;
242
- cursor: pointer;
243
- }
244
-
245
- .user-trigger img,
246
- .user-menu-fallback {
247
- width: 34px;
248
- height: 34px;
249
- border-radius: 50%;
250
- display: grid;
251
- place-items: center;
252
- background: rgba(255, 107, 74, 0.2);
253
- color: var(--accent-deep);
254
- font-weight: 700;
255
- font-size: 0.9rem;
256
- }
257
-
258
- .user-menu-chevron {
259
- font-size: 0.8rem;
260
- color: var(--ink-soft);
261
- }
262
-
263
- .btn {
264
- border: 1px solid var(--line);
265
- padding: 10px 16px;
266
- border-radius: 999px;
267
- background: var(--surface);
268
- font-weight: 600;
269
- display: inline-flex;
270
- align-items: center;
271
- gap: 8px;
272
- transition:
273
- transform 0.2s ease,
274
- box-shadow 0.2s ease,
275
- border 0.2s ease;
276
- }
277
-
278
- .btn:hover {
279
- transform: translateY(-1px);
280
- box-shadow: 0 10px 20px rgba(29, 26, 23, 0.12);
281
- }
282
-
283
- .btn:disabled {
284
- cursor: not-allowed;
285
- opacity: 0.6;
286
- box-shadow: none;
287
- transform: none;
288
- }
289
-
290
- .btn-primary {
291
- background: linear-gradient(135deg, var(--accent), var(--accent-deep));
292
- color: white;
293
- border: none;
294
- }
295
-
296
- .hero {
297
- position: relative;
298
- overflow: hidden;
299
- padding: 80px 24px 60px;
300
- }
301
-
302
- .hero-inner {
303
- max-width: 1200px;
304
- margin: 0 auto;
305
- display: grid;
306
- grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr);
307
- gap: 40px;
308
- align-items: center;
309
- transition:
310
- grid-template-columns 0.45s cubic-bezier(0.2, 0.9, 0.2, 1),
311
- gap 0.45s cubic-bezier(0.2, 0.9, 0.2, 1);
312
- }
313
-
314
- .hero-copy {
315
- max-height: 640px;
316
- overflow: hidden;
317
- min-width: 0;
318
- transition:
319
- opacity 0.35s ease,
320
- transform 0.35s ease,
321
- max-height 0.35s ease;
322
- }
323
-
324
- .hero.search-mode .hero-inner {
325
- grid-template-columns: 0fr minmax(0, 1fr);
326
- gap: 0px;
327
- }
328
-
329
- .hero.search-mode .hero-copy {
330
- opacity: 0;
331
- transform: translateY(-12px);
332
- max-height: 0;
333
- pointer-events: none;
334
- }
335
-
336
- .hero-title {
337
- font-family: var(--font-display);
338
- font-size: clamp(2.6rem, 4vw, 4rem);
339
- letter-spacing: -0.03em;
340
- margin-bottom: 16px;
341
- }
342
-
343
- .hero-subtitle {
344
- font-size: 1.1rem;
345
- color: var(--ink-soft);
346
- line-height: 1.6;
347
- }
348
-
349
- .hero-card {
350
- background: var(--bg-soft);
351
- border-radius: var(--radius-lg);
352
- padding: 28px;
353
- box-shadow: var(--shadow);
354
- border: 1px solid rgba(255, 107, 74, 0.15);
355
- }
356
-
357
- .hero-search-card {
358
- transition:
359
- transform 0.35s ease,
360
- box-shadow 0.35s ease;
361
- }
362
-
363
- .hero.search-mode .hero-search-card {
364
- transform: scale(1.01);
365
- box-shadow: 0 22px 46px rgba(29, 26, 23, 0.16);
366
- }
367
-
368
- .hero-badge {
369
- display: inline-flex;
370
- align-items: center;
371
- gap: 8px;
372
- background: rgba(255, 107, 74, 0.12);
373
- color: var(--accent-deep);
374
- border-radius: 999px;
375
- padding: 6px 14px;
376
- font-weight: 600;
377
- font-size: 0.85rem;
378
- }
379
-
380
- .section {
381
- width: 100%;
382
- max-width: 1200px;
383
- margin: 0 auto;
384
- padding: 32px 24px 72px;
385
- box-sizing: border-box;
386
- }
387
-
388
- .upload-shell {
389
- position: relative;
390
- }
391
-
392
- .upload-header {
393
- display: flex;
394
- align-items: flex-end;
395
- justify-content: space-between;
396
- gap: 24px;
397
- margin-bottom: 28px;
398
- }
399
-
400
- .upload-kicker {
401
- display: inline-flex;
402
- align-items: center;
403
- gap: 8px;
404
- font-weight: 600;
405
- color: var(--accent-deep);
406
- text-transform: uppercase;
407
- letter-spacing: 0.16em;
408
- font-size: 0.7rem;
409
- }
410
-
411
- .upload-title {
412
- font-family: var(--font-display);
413
- font-size: clamp(2.2rem, 3.5vw, 3rem);
414
- letter-spacing: -0.03em;
415
- margin: 8px 0 10px;
416
- }
417
-
418
- .upload-subtitle {
419
- color: var(--ink-soft);
420
- max-width: 560px;
421
- line-height: 1.6;
422
- margin: 0;
423
- }
424
-
425
- .upload-badge {
426
- background: linear-gradient(140deg, #ffddc9, #ffe9df);
427
- color: #9a3a24;
428
- border-radius: 999px;
429
- padding: 12px 18px;
430
- font-weight: 700;
431
- box-shadow: 0 12px 24px rgba(255, 107, 74, 0.18);
432
- text-align: center;
433
- display: flex;
434
- flex-direction: column;
435
- gap: 4px;
436
- }
437
-
438
- .upload-badge-sub {
439
- font-size: 0.7rem;
440
- letter-spacing: 0.08em;
441
- text-transform: uppercase;
442
- }
443
-
444
- .upload-card {
445
- background: linear-gradient(180deg, var(--surface) 0%, var(--surface-muted) 100%);
446
- border-radius: calc(var(--radius-lg) + 6px);
447
- border: 1px solid rgba(255, 107, 74, 0.18);
448
- padding: 28px;
449
- box-shadow: 0 24px 60px rgba(29, 26, 23, 0.12);
450
- display: flex;
451
- flex-direction: column;
452
- gap: 24px;
453
- }
454
-
455
- .upload-grid {
456
- display: grid;
457
- grid-template-columns: minmax(0, 1.1fr) minmax(260px, 0.7fr);
458
- gap: 28px;
459
- }
460
-
461
- .upload-fields {
462
- display: grid;
463
- gap: 14px;
464
- }
465
-
466
- .upload-field {
467
- display: grid;
468
- gap: 10px;
469
- font-weight: 600;
470
- }
471
-
472
- .upload-field-header {
473
- display: flex;
474
- align-items: baseline;
475
- justify-content: space-between;
476
- gap: 12px;
477
- }
478
-
479
- .upload-field span {
480
- font-size: 0.9rem;
481
- color: var(--ink-soft);
482
- }
483
-
484
- .upload-field-hint {
485
- font-size: 0.82rem;
486
- color: rgba(92, 85, 78, 0.8);
487
- font-weight: 500;
488
- }
489
-
490
- [data-theme="dark"] .upload-field-hint {
491
- color: rgba(198, 184, 168, 0.72);
492
- }
493
-
494
- .upload-input {
495
- border: 1px solid rgba(29, 26, 23, 0.18);
496
- border-radius: 14px;
497
- padding: 12px 14px;
498
- background: #fffdf9;
499
- box-shadow:
500
- inset 0 0 0 1px rgba(255, 255, 255, 0.85),
501
- inset 0 1px 6px rgba(255, 107, 74, 0.08);
502
- }
503
-
504
- [data-theme="dark"] .upload-input {
505
- background: rgba(28, 23, 20, 0.95);
506
- border-color: rgba(255, 255, 255, 0.12);
507
- color: var(--ink);
508
- box-shadow:
509
- inset 0 0 0 1px rgba(255, 255, 255, 0.05),
510
- inset 0 1px 6px rgba(0, 0, 0, 0.2);
511
- }
512
-
513
- [data-theme="dark"] .upload-input::placeholder {
514
- color: rgba(198, 184, 168, 0.7);
515
- }
516
-
517
- .upload-input:focus {
518
- border-color: rgba(255, 107, 74, 0.6);
519
- box-shadow:
520
- 0 0 0 2px rgba(255, 107, 74, 0.2),
521
- inset 0 0 0 1px rgba(255, 255, 255, 0.8);
522
- }
523
-
524
- .upload-row {
525
- display: grid;
526
- grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
527
- gap: 16px;
528
- }
529
-
530
- .upload-side {
531
- display: grid;
532
- gap: 16px;
533
- align-content: start;
534
- }
535
-
536
- .dropzone {
537
- border: 2px dashed rgba(255, 107, 74, 0.5);
538
- border-radius: 24px;
539
- padding: 20px;
540
- background: radial-gradient(circle at top, #fff3ec 0%, #ffffff 65%);
541
- display: grid;
542
- gap: 12px;
543
- text-align: center;
544
- cursor: pointer;
545
- transition:
546
- transform 0.2s ease,
547
- box-shadow 0.2s ease,
548
- border-color 0.2s ease;
549
- }
550
-
551
- [data-theme="dark"] .dropzone {
552
- background: radial-gradient(circle at top, rgba(35, 26, 22, 0.9) 0%, rgba(20, 17, 15, 0.9) 70%);
553
- border-color: rgba(255, 131, 95, 0.5);
554
- color: var(--ink);
555
- }
556
-
557
- .dropzone:hover {
558
- transform: translateY(-2px);
559
- box-shadow: 0 18px 30px rgba(255, 107, 74, 0.15);
560
- }
561
-
562
- [data-theme="dark"] .dropzone:hover {
563
- box-shadow: 0 20px 36px rgba(0, 0, 0, 0.45);
564
- }
565
-
566
- .dropzone.is-dragging {
567
- border-color: var(--accent);
568
- box-shadow: 0 20px 40px rgba(255, 107, 74, 0.25);
569
- background: radial-gradient(circle at top, #ffe1d3 0%, #fff6f1 70%);
570
- }
571
-
572
- [data-theme="dark"] .dropzone.is-dragging {
573
- box-shadow: 0 20px 40px rgba(255, 131, 95, 0.25);
574
- background: radial-gradient(circle at top, rgba(66, 35, 28, 0.9) 0%, rgba(24, 19, 16, 0.9) 70%);
575
- }
576
-
577
- .dropzone-icon {
578
- width: 54px;
579
- height: 54px;
580
- border-radius: 16px;
581
- margin: 0 auto;
582
- display: grid;
583
- place-items: center;
584
- font-size: 1.4rem;
585
- background: linear-gradient(160deg, #ff6b4a, #f08b5f);
586
- color: white;
587
- box-shadow: inset 0 0 0 3px rgba(255, 255, 255, 0.4);
588
- }
589
-
590
- [data-theme="dark"] .dropzone-icon {
591
- box-shadow: inset 0 0 0 3px rgba(255, 255, 255, 0.12);
592
- }
593
-
594
- .dropzone-input {
595
- display: none;
596
- }
597
-
598
- .dropzone-button {
599
- all: unset;
600
- display: grid;
601
- gap: 12px;
602
- text-align: center;
603
- cursor: pointer;
604
- width: 100%;
605
- height: 100%;
606
- }
607
-
608
- .dropzone-button:focus-visible {
609
- outline: 3px solid rgba(255, 107, 74, 0.35);
610
- outline-offset: 6px;
611
- border-radius: 18px;
612
- }
613
-
614
- .upload-summary {
615
- border-radius: 20px;
616
- background: rgba(255, 255, 255, 0.7);
617
- border: 1px solid rgba(29, 26, 23, 0.08);
618
- padding: 16px;
619
- display: grid;
620
- gap: 10px;
621
- font-size: 0.9rem;
622
- }
623
-
624
- [data-theme="dark"] .upload-summary {
625
- background: rgba(20, 17, 15, 0.7);
626
- border-color: rgba(255, 255, 255, 0.08);
627
- }
628
-
629
- .upload-requirement {
630
- padding: 6px 12px;
631
- border-radius: 999px;
632
- background: rgba(255, 107, 74, 0.12);
633
- color: #9a3a24;
634
- font-weight: 600;
635
- width: fit-content;
636
- }
637
-
638
- .upload-requirement.ok {
639
- background: rgba(43, 198, 164, 0.18);
640
- color: #1a6b5b;
641
- }
642
-
643
- .upload-filelist {
644
- display: grid;
645
- gap: 6px;
646
- max-height: 220px;
647
- overflow: auto;
648
- }
649
-
650
- .upload-filelist .upload-file {
651
- display: flex;
652
- align-items: center;
653
- gap: 12px;
654
- font-size: 0.85rem;
655
- color: var(--ink-soft);
656
- }
657
-
658
- .upload-file span:first-child {
659
- flex: 1;
660
- overflow: hidden;
661
- text-overflow: ellipsis;
662
- white-space: nowrap;
663
- }
664
-
665
- .upload-remove {
666
- border: none;
667
- background: transparent;
668
- color: var(--accent-deep);
669
- font-weight: 600;
670
- cursor: pointer;
671
- }
672
-
673
- .upload-remove:hover {
674
- text-decoration: underline;
675
- }
676
-
677
- .upload-more {
678
- font-size: 0.8rem;
679
- color: var(--ink-soft);
680
- }
681
-
682
- .upload-muted {
683
- color: var(--ink-soft);
684
- margin: 0;
685
- }
686
-
687
- .upload-notes {
688
- background: #fff8f3;
689
- border: 1px solid rgba(255, 107, 74, 0.12);
690
- border-radius: 18px;
691
- padding: 16px;
692
- font-size: 0.85rem;
693
- color: var(--ink-soft);
694
- }
695
-
696
- [data-theme="dark"] .upload-notes {
697
- background: rgba(32, 27, 24, 0.6);
698
- }
699
-
700
- .upload-notes ul {
701
- padding-left: 18px;
702
- margin: 8px 0 0;
703
- display: grid;
704
- gap: 6px;
705
- }
706
-
707
- .upload-footer {
708
- display: flex;
709
- align-items: center;
710
- gap: 16px;
711
- flex-wrap: wrap;
712
- }
713
-
714
- .upload-validation {
715
- display: grid;
716
- gap: 6px;
717
- font-size: 0.85rem;
718
- color: #9a3a24;
719
- }
720
-
721
- .upload-validation-item {
722
- display: flex;
723
- align-items: center;
724
- gap: 8px;
725
- }
726
-
727
- .upload-validation-item::before {
728
- content: "•";
729
- }
730
-
731
- .upload-ready {
732
- font-size: 0.9rem;
733
- font-weight: 600;
734
- color: #1a6b5b;
735
- }
736
-
737
- .upload-error {
738
- color: #b84a3a;
739
- }
740
-
741
- .section-title {
742
- font-family: var(--font-display);
743
- font-size: 1.8rem;
744
- letter-spacing: -0.02em;
745
- margin-bottom: 10px;
746
- }
747
-
748
- .section-subtitle {
749
- color: var(--ink-soft);
750
- margin-bottom: 24px;
751
- }
752
-
753
- .grid {
754
- display: grid;
755
- grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
756
- gap: 20px;
757
- }
758
-
759
- .skills-header {
760
- display: flex;
761
- align-items: flex-end;
762
- justify-content: space-between;
763
- gap: 14px;
764
- flex-wrap: wrap;
765
- margin-bottom: 22px;
766
- }
767
-
768
- .skills-toolbar {
769
- display: grid;
770
- gap: 10px;
771
- padding: 14px 16px;
772
- border-radius: 18px;
773
- border: 1px solid rgba(255, 107, 74, 0.18);
774
- background: linear-gradient(135deg, var(--surface), var(--surface-muted));
775
- min-width: min(520px, 100%);
776
- }
777
-
778
- .skills-search {
779
- display: flex;
780
- align-items: center;
781
- border-radius: 999px;
782
- border: 1px solid rgba(255, 107, 74, 0.2);
783
- background: rgba(255, 255, 255, 0.45);
784
- padding: 10px 14px;
785
- }
786
-
787
- [data-theme="dark"] .skills-search {
788
- background: rgba(24, 19, 16, 0.55);
789
- border-color: rgba(255, 131, 95, 0.35);
790
- }
791
-
792
- .skills-search-input {
793
- border: none;
794
- outline: none;
795
- width: 100%;
796
- font-size: 0.95rem;
797
- background: transparent;
798
- }
799
-
800
- .skills-toolbar-row {
801
- display: flex;
802
- align-items: center;
803
- justify-content: flex-end;
804
- gap: 10px;
805
- flex-wrap: wrap;
806
- }
807
-
808
- .skills-sort {
809
- appearance: none;
810
- border: 1px solid rgba(255, 107, 74, 0.2);
811
- border-radius: 999px;
812
- padding: 10px 14px;
813
- background: rgba(255, 255, 255, 0.45);
814
- color: var(--ink);
815
- font-weight: 650;
816
- font-size: 0.9rem;
817
- cursor: pointer;
818
- }
819
-
820
- [data-theme="dark"] .skills-sort {
821
- background: rgba(24, 19, 16, 0.55);
822
- border-color: rgba(255, 131, 95, 0.35);
823
- }
824
-
825
- .skills-dir,
826
- .skills-view {
827
- border: 1px solid rgba(255, 107, 74, 0.2);
828
- border-radius: 999px;
829
- padding: 10px 12px;
830
- background: rgba(255, 255, 255, 0.45);
831
- color: var(--ink);
832
- font-weight: 700;
833
- cursor: pointer;
834
- }
835
-
836
- [data-theme="dark"] .skills-dir,
837
- [data-theme="dark"] .skills-view {
838
- background: rgba(24, 19, 16, 0.55);
839
- border-color: rgba(255, 131, 95, 0.35);
840
- }
841
-
842
- .skills-view.is-active {
843
- background: rgba(255, 107, 74, 0.16);
844
- border-color: rgba(255, 107, 74, 0.32);
845
- color: var(--accent-deep);
846
- }
847
-
848
- .skills-list {
849
- display: grid;
850
- gap: 0;
851
- border-radius: var(--radius-md);
852
- border: 1px solid var(--line);
853
- overflow: hidden;
854
- background: var(--surface);
855
- }
856
-
857
- .skills-row {
858
- display: grid;
859
- grid-template-columns: minmax(0, 1fr) auto;
860
- gap: 14px;
861
- padding: 14px 18px;
862
- text-decoration: none;
863
- color: inherit;
864
- border-bottom: 1px solid var(--line);
865
- transition: background 0.15s ease;
866
- }
867
-
868
- .skills-row:last-child {
869
- border-bottom: none;
870
- }
871
-
872
- .skills-row:hover {
873
- background: rgba(255, 107, 74, 0.07);
874
- }
875
-
876
- [data-theme="dark"] .skills-row:hover {
877
- background: rgba(232, 106, 71, 0.11);
878
- }
879
-
880
- .skills-row-main {
881
- display: grid;
882
- gap: 6px;
883
- min-width: 0;
884
- }
885
-
886
- .skills-row-title {
887
- display: flex;
888
- align-items: baseline;
889
- gap: 10px;
890
- flex-wrap: wrap;
891
- font-family: var(--font-display);
892
- font-size: 1.1rem;
893
- letter-spacing: -0.02em;
894
- }
895
-
896
- .skills-row-slug {
897
- font-family: var(--font-mono);
898
- font-size: 0.85rem;
899
- color: var(--ink-soft);
900
- }
901
-
902
- .skills-row-summary {
903
- color: var(--ink-soft);
904
- font-size: 0.95rem;
905
- line-height: 1.45;
906
- overflow: hidden;
907
- text-overflow: ellipsis;
908
- display: -webkit-box;
909
- -webkit-line-clamp: 2;
910
- -webkit-box-orient: vertical;
911
- }
912
-
913
- .skills-row-metrics {
914
- display: flex;
915
- align-items: center;
916
- justify-content: flex-end;
917
- gap: 14px;
918
- font-family: var(--font-mono);
919
- font-size: 0.85rem;
920
- color: var(--ink-soft);
921
- white-space: nowrap;
922
- }
923
-
924
- .skills-row-metrics span {
925
- display: inline-flex;
926
- gap: 6px;
927
- align-items: center;
928
- }
929
-
930
- .card {
931
- width: 100%;
932
- background: var(--surface);
933
- border-radius: var(--radius-md);
934
- border: 1px solid var(--line);
935
- padding: 20px;
936
- display: flex;
937
- flex-direction: column;
938
- gap: 12px;
939
- box-sizing: border-box;
940
- transition:
941
- transform 0.2s ease,
942
- box-shadow 0.2s ease;
943
- }
944
-
945
- .loading-indicator {
946
- display: inline-flex;
947
- align-items: center;
948
- gap: 10px;
949
- font-weight: 650;
950
- color: var(--ink-soft);
951
- }
952
-
953
- .loading-indicator::before {
954
- content: "";
955
- width: 14px;
956
- height: 14px;
957
- border-radius: 999px;
958
- border: 2px solid rgba(255, 107, 74, 0.25);
959
- border-top-color: var(--accent);
960
- animation: spin 0.9s linear infinite;
961
- }
962
-
963
- .skill-card {
964
- min-height: 176px;
965
- }
966
-
967
- .skill-card-tags {
968
- display: flex;
969
- flex-wrap: wrap;
970
- gap: 6px;
971
- }
972
-
973
- .tag-compact {
974
- padding: 3px 10px;
975
- font-size: 0.72rem;
976
- }
977
-
978
- .skills-row-meta {
979
- font-size: 0.82rem;
980
- color: var(--ink-soft);
981
- }
982
-
983
- .skill-card-title {
984
- font-family: var(--font-display);
985
- font-size: 1.2rem;
986
- letter-spacing: -0.02em;
987
- margin: 0;
988
- display: -webkit-box;
989
- -webkit-line-clamp: 2;
990
- -webkit-box-orient: vertical;
991
- overflow: hidden;
992
- }
993
-
994
- .skill-card-summary {
995
- margin: 0;
996
- color: var(--ink-soft);
997
- font-size: 0.95rem;
998
- line-height: 1.45;
999
- display: -webkit-box;
1000
- -webkit-line-clamp: 3;
1001
- -webkit-box-orient: vertical;
1002
- overflow: hidden;
1003
- }
1004
-
1005
- .skill-card-footer {
1006
- margin-top: auto;
1007
- }
1008
-
1009
- .skill-card-footer-inline {
1010
- display: flex;
1011
- align-items: center;
1012
- justify-content: space-between;
1013
- gap: 12px;
1014
- }
1015
-
1016
- .hero-install {
1017
- display: grid;
1018
- gap: 10px;
1019
- }
1020
-
1021
- .install-switcher {
1022
- display: grid;
1023
- gap: 10px;
1024
- }
1025
-
1026
- .install-switcher-row {
1027
- display: flex;
1028
- align-items: center;
1029
- justify-content: space-between;
1030
- gap: 14px;
1031
- flex-wrap: wrap;
1032
- }
1033
-
1034
- .install-switcher-toggle {
1035
- display: inline-flex;
1036
- border-radius: 999px;
1037
- padding: 4px;
1038
- border: 1px solid rgba(255, 107, 74, 0.22);
1039
- background: rgba(255, 107, 74, 0.06);
1040
- }
1041
-
1042
- [data-theme="dark"] .install-switcher-toggle {
1043
- border-color: rgba(232, 106, 71, 0.32);
1044
- background: rgba(232, 106, 71, 0.12);
1045
- }
1046
-
1047
- .install-switcher-pill {
1048
- appearance: none;
1049
- border: none;
1050
- background: transparent;
1051
- color: var(--ink-soft);
1052
- font: inherit;
1053
- font-weight: 650;
1054
- font-size: 0.85rem;
1055
- padding: 6px 10px;
1056
- border-radius: 999px;
1057
- cursor: pointer;
1058
- transition:
1059
- background 0.18s ease,
1060
- color 0.18s ease,
1061
- transform 0.18s ease;
1062
- }
1063
-
1064
- .install-switcher-pill:hover {
1065
- color: var(--ink);
1066
- transform: translateY(-1px);
1067
- }
1068
-
1069
- .install-switcher-pill.is-active {
1070
- background: rgba(255, 107, 74, 0.18);
1071
- color: var(--accent-deep);
1072
- }
1073
-
1074
- [data-theme="dark"] .install-switcher-pill.is-active {
1075
- background: rgba(232, 106, 71, 0.22);
1076
- color: #ffd0bf;
1077
- }
1078
-
1079
- .hero-install-code {
1080
- border: 1px solid rgba(255, 107, 74, 0.2);
1081
- border-left: 3px solid var(--accent-deep);
1082
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.92), rgba(255, 250, 247, 0.9));
1083
- border-radius: 12px;
1084
- padding: 12px 14px;
1085
- font-size: 0.9rem;
1086
- line-height: 1.55;
1087
- color: var(--ink);
1088
- font-family: var(--font-mono);
1089
- overflow-x: auto;
1090
- -webkit-overflow-scrolling: touch;
1091
- margin: 0;
1092
- text-align: left;
1093
- font-variant-ligatures: none;
1094
- font-feature-settings:
1095
- "liga" 0,
1096
- "calt" 0;
1097
- white-space: pre;
1098
- tab-size: 2;
1099
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.7);
1100
- }
1101
-
1102
- [data-theme="dark"] .hero-install-code {
1103
- border-color: rgba(232, 106, 71, 0.35);
1104
- background: linear-gradient(180deg, rgba(26, 20, 18, 0.9), rgba(20, 16, 14, 0.85));
1105
- color: #f5e9e3;
1106
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05);
1107
- }
1108
-
1109
- .tag {
1110
- display: inline-flex;
1111
- align-items: center;
1112
- gap: 6px;
1113
- padding: 4px 12px;
1114
- border-radius: 999px;
1115
- background: rgba(43, 198, 164, 0.16);
1116
- color: #1a6b5b;
1117
- font-size: 0.8rem;
1118
- font-weight: 600;
1119
- }
1120
-
1121
- [data-theme="dark"] .tag {
1122
- background: rgba(232, 106, 71, 0.2);
1123
- color: #ffd0bf;
1124
- }
1125
-
1126
- .skill-actions {
1127
- display: flex;
1128
- gap: 10px;
1129
- flex-wrap: wrap;
1130
- align-items: center;
1131
- }
1132
-
1133
- .star-toggle {
1134
- width: 36px;
1135
- height: 36px;
1136
- border-radius: 50%;
1137
- border: 1px solid rgba(255, 107, 74, 0.35);
1138
- background: rgba(255, 107, 74, 0.12);
1139
- color: var(--accent-deep);
1140
- display: grid;
1141
- place-items: center;
1142
- cursor: pointer;
1143
- transition:
1144
- transform 0.2s ease,
1145
- box-shadow 0.2s ease,
1146
- background 0.2s ease;
1147
- }
1148
-
1149
- .star-toggle span {
1150
- font-size: 1.1rem;
1151
- }
1152
-
1153
- .star-toggle:hover {
1154
- transform: translateY(-1px);
1155
- box-shadow: 0 10px 18px rgba(255, 107, 74, 0.2);
1156
- }
1157
-
1158
- .star-toggle.is-active {
1159
- background: var(--accent);
1160
- color: white;
1161
- border-color: var(--accent-deep);
1162
- }
1163
-
1164
- .star-toggle:focus-visible {
1165
- outline: 3px solid rgba(255, 107, 74, 0.35);
1166
- outline-offset: 3px;
1167
- }
1168
-
1169
- [data-theme="dark"] .star-toggle {
1170
- border-color: rgba(232, 106, 71, 0.45);
1171
- background: rgba(232, 106, 71, 0.16);
1172
- color: #ffd0bf;
1173
- }
1174
-
1175
- .highlight-toggle {
1176
- width: 36px;
1177
- height: 36px;
1178
- border-radius: 50%;
1179
- border: 1px solid rgba(43, 198, 164, 0.45);
1180
- background: rgba(43, 198, 164, 0.14);
1181
- color: #1a6b5b;
1182
- display: grid;
1183
- place-items: center;
1184
- cursor: pointer;
1185
- transition:
1186
- transform 0.2s ease,
1187
- box-shadow 0.2s ease,
1188
- background 0.2s ease;
1189
- }
1190
-
1191
- .highlight-toggle span {
1192
- font-size: 1.05rem;
1193
- }
1194
-
1195
- .highlight-toggle:hover {
1196
- transform: translateY(-1px);
1197
- box-shadow: 0 10px 18px rgba(43, 198, 164, 0.2);
1198
- }
1199
-
1200
- .highlight-toggle.is-active {
1201
- background: rgba(43, 198, 164, 0.28);
1202
- border-color: rgba(43, 198, 164, 0.7);
1203
- }
1204
-
1205
- .highlight-toggle:focus-visible {
1206
- outline: 3px solid rgba(43, 198, 164, 0.3);
1207
- outline-offset: 3px;
1208
- }
1209
-
1210
- [data-theme="dark"] .highlight-toggle {
1211
- border-color: rgba(255, 131, 95, 0.45);
1212
- background: rgba(255, 131, 95, 0.12);
1213
- color: #ffd0bf;
1214
- }
1215
-
1216
- [data-theme="dark"] .highlight-toggle.is-active {
1217
- background: rgba(255, 131, 95, 0.22);
1218
- border-color: rgba(255, 131, 95, 0.55);
1219
- }
1220
-
1221
- .stat {
1222
- display: flex;
1223
- gap: 10px;
1224
- align-items: center;
1225
- font-size: 0.9rem;
1226
- color: var(--ink-soft);
1227
- }
1228
-
1229
- .search-bar {
1230
- display: flex;
1231
- gap: 12px;
1232
- padding: 14px 16px;
1233
- border-radius: 16px;
1234
- border: 1px solid var(--line);
1235
- background: var(--surface);
1236
- align-items: center;
1237
- }
1238
-
1239
- .hero.search-mode .search-bar {
1240
- padding: 18px 20px;
1241
- }
1242
-
1243
- .hero.search-mode .search-input {
1244
- font-size: 1.1rem;
1245
- }
1246
-
1247
- @media (max-width: 860px) {
1248
- .hero-inner {
1249
- grid-template-columns: 1fr;
1250
- transition: none;
1251
- }
1252
-
1253
- .hero.search-mode .hero-inner {
1254
- grid-template-columns: 1fr;
1255
- gap: 24px;
1256
- }
1257
- }
1258
-
1259
- .skill-detail-stack {
1260
- display: grid;
1261
- gap: 16px;
1262
- }
1263
-
1264
- .skill-hero {
1265
- gap: 14px;
1266
- }
1267
-
1268
- .skill-hero-header {
1269
- display: flex;
1270
- flex-wrap: wrap;
1271
- align-items: flex-start;
1272
- justify-content: space-between;
1273
- gap: 24px;
1274
- }
1275
-
1276
- @media (max-width: 960px) {
1277
- .skill-hero-top.has-plugin {
1278
- grid-template-columns: 1fr;
1279
- }
1280
- }
1281
-
1282
- .skill-hero-title {
1283
- display: grid;
1284
- gap: 10px;
1285
- min-width: min(100%, 320px);
1286
- flex: 1 1 360px;
1287
- }
1288
-
1289
- .skill-hero-title-row {
1290
- display: flex;
1291
- align-items: baseline;
1292
- gap: 12px;
1293
- flex-wrap: wrap;
1294
- }
1295
-
1296
- .skill-hero-note {
1297
- font-size: 0.9rem;
1298
- color: var(--ink);
1299
- max-width: 560px;
1300
- padding: 8px 12px;
1301
- border-radius: 12px;
1302
- background: rgba(255, 107, 74, 0.08);
1303
- border: 1px solid rgba(255, 107, 74, 0.18);
1304
- }
1305
-
1306
- [data-theme="dark"] .skill-hero-note {
1307
- background: rgba(232, 106, 71, 0.16);
1308
- border-color: rgba(232, 106, 71, 0.3);
1309
- }
1310
-
1311
- .tag-accent {
1312
- background: rgba(255, 107, 74, 0.16);
1313
- color: var(--accent-deep);
1314
- }
1315
-
1316
- .skill-hero-top {
1317
- display: grid;
1318
- gap: 16px;
1319
- }
1320
-
1321
- .skill-hero-top.has-plugin {
1322
- grid-template-columns: minmax(0, 1fr) minmax(320px, 420px);
1323
- align-items: start;
1324
- }
1325
-
1326
- .skill-hero-content {
1327
- display: grid;
1328
- gap: 16px;
1329
- }
1330
-
1331
- .bundle-card {
1332
- border: 1px solid rgba(255, 107, 74, 0.35);
1333
- border-radius: 18px;
1334
- padding: 18px;
1335
- background: linear-gradient(135deg, rgba(255, 107, 74, 0.1), rgba(255, 255, 255, 0.7));
1336
- box-shadow: 0 18px 30px rgba(37, 31, 26, 0.08);
1337
- }
1338
-
1339
- [data-theme="dark"] .bundle-card {
1340
- background: linear-gradient(135deg, rgba(232, 106, 71, 0.2), rgba(24, 19, 16, 0.7));
1341
- border-color: rgba(232, 106, 71, 0.5);
1342
- box-shadow: 0 18px 30px rgba(0, 0, 0, 0.35);
1343
- }
1344
-
1345
- [data-theme="dark"] .tag-accent {
1346
- background: rgba(232, 106, 71, 0.24);
1347
- color: #ffd0bf;
1348
- }
1349
-
1350
- .bundle-header {
1351
- display: grid;
1352
- gap: 6px;
1353
- }
1354
-
1355
- .bundle-title {
1356
- font-family: var(--font-display);
1357
- font-size: 1.05rem;
1358
- letter-spacing: -0.015em;
1359
- }
1360
-
1361
- .bundle-subtitle {
1362
- font-size: 0.88rem;
1363
- color: var(--ink-soft);
1364
- }
1365
-
1366
- .bundle-includes {
1367
- display: flex;
1368
- flex-wrap: wrap;
1369
- gap: 8px;
1370
- }
1371
-
1372
- .bundle-includes span {
1373
- padding: 6px 12px;
1374
- border-radius: 999px;
1375
- background: rgba(255, 107, 74, 0.16);
1376
- color: var(--accent-deep);
1377
- font-size: 0.76rem;
1378
- font-weight: 650;
1379
- letter-spacing: 0.01em;
1380
- }
1381
-
1382
- [data-theme="dark"] .bundle-includes span {
1383
- background: rgba(232, 106, 71, 0.22);
1384
- color: #ffd0bf;
1385
- }
1386
-
1387
- .bundle-section {
1388
- display: grid;
1389
- gap: 8px;
1390
- padding: 10px 12px;
1391
- border-radius: 14px;
1392
- background: rgba(255, 255, 255, 0.6);
1393
- border: 1px solid rgba(255, 107, 74, 0.12);
1394
- }
1395
-
1396
- .bundle-card .hero-install-code {
1397
- white-space: pre-wrap;
1398
- overflow-wrap: anywhere;
1399
- word-break: break-word;
1400
- text-align: left;
1401
- font-variant-ligatures: none;
1402
- font-feature-settings:
1403
- "liga" 0,
1404
- "calt" 0;
1405
- }
1406
-
1407
- [data-theme="dark"] .bundle-section {
1408
- background: rgba(30, 24, 20, 0.6);
1409
- border-color: rgba(232, 106, 71, 0.2);
1410
- }
1411
-
1412
- .bundle-section-title {
1413
- font-size: 0.9rem;
1414
- font-weight: 650;
1415
- }
1416
-
1417
- .bundle-meta {
1418
- display: grid;
1419
- gap: 6px;
1420
- }
1421
-
1422
- .bundle-details summary {
1423
- cursor: pointer;
1424
- font-weight: 650;
1425
- list-style: none;
1426
- }
1427
-
1428
- .bundle-details summary::-webkit-details-marker {
1429
- display: none;
1430
- }
1431
-
1432
- .bundle-details summary::before {
1433
- content: "▸";
1434
- display: inline-block;
1435
- margin-right: 8px;
1436
- color: var(--accent-deep);
1437
- }
1438
-
1439
- .bundle-details[open] summary::before {
1440
- content: "▾";
1441
- }
1442
-
1443
- .skill-hero-cta {
1444
- display: flex;
1445
- flex-direction: column;
1446
- align-items: flex-end;
1447
- gap: 10px;
1448
- }
1449
-
1450
- .skill-version-pill {
1451
- display: grid;
1452
- gap: 4px;
1453
- padding: 10px 14px;
1454
- border-radius: 16px;
1455
- border: 1px solid var(--line);
1456
- background: var(--surface-muted);
1457
- text-align: right;
1458
- min-width: 150px;
1459
- }
1460
-
1461
- .skill-version-label {
1462
- font-size: 0.68rem;
1463
- letter-spacing: 0.12em;
1464
- text-transform: uppercase;
1465
- color: var(--ink-soft);
1466
- }
1467
-
1468
- .skill-tag-row {
1469
- display: flex;
1470
- flex-wrap: wrap;
1471
- gap: 8px;
1472
- align-items: center;
1473
- }
1474
-
1475
- .tag-meta {
1476
- font-size: 0.72rem;
1477
- font-weight: 600;
1478
- color: inherit;
1479
- opacity: 0.7;
1480
- }
1481
-
1482
- .tag-form {
1483
- display: grid;
1484
- grid-template-columns: minmax(140px, 1fr) minmax(160px, 1fr) auto;
1485
- gap: 10px;
1486
- align-items: center;
1487
- }
1488
-
1489
- .skill-hero-panels {
1490
- display: grid;
1491
- gap: 14px;
1492
- grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
1493
- }
1494
-
1495
- .skill-panel {
1496
- display: grid;
1497
- gap: 10px;
1498
- padding: 14px;
1499
- border-radius: 16px;
1500
- border: 1px solid var(--line);
1501
- background: var(--surface-muted);
1502
- }
1503
-
1504
- .skill-panel-body {
1505
- display: grid;
1506
- gap: 8px;
1507
- }
1508
-
1509
- .diff-card {
1510
- gap: 16px;
1511
- }
1512
-
1513
- .diff-card-embedded {
1514
- padding: 0;
1515
- background: transparent;
1516
- border: none;
1517
- }
1518
-
1519
- .diff-header {
1520
- display: flex;
1521
- justify-content: space-between;
1522
- align-items: center;
1523
- gap: 16px;
1524
- flex-wrap: wrap;
1525
- }
1526
-
1527
- .diff-toggle-group {
1528
- display: inline-flex;
1529
- align-items: center;
1530
- gap: 6px;
1531
- padding: 4px;
1532
- border-radius: 999px;
1533
- border: 1px solid var(--line);
1534
- background: var(--surface-muted);
1535
- margin: 0;
1536
- min-inline-size: 0;
1537
- }
1538
-
1539
- .diff-toggle {
1540
- border: none;
1541
- background: transparent;
1542
- padding: 8px 14px;
1543
- border-radius: 999px;
1544
- font-weight: 600;
1545
- color: var(--ink-soft);
1546
- cursor: pointer;
1547
- }
1548
-
1549
- .diff-toggle.is-active {
1550
- background: var(--surface);
1551
- color: var(--ink);
1552
- box-shadow: 0 8px 18px rgba(29, 26, 23, 0.12);
1553
- }
1554
-
1555
- .diff-controls {
1556
- display: grid;
1557
- grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
1558
- gap: 12px;
1559
- align-items: end;
1560
- }
1561
-
1562
- .diff-select {
1563
- display: grid;
1564
- gap: 6px;
1565
- }
1566
-
1567
- .diff-select label {
1568
- font-size: 0.7rem;
1569
- text-transform: uppercase;
1570
- letter-spacing: 0.08em;
1571
- color: var(--ink-soft);
1572
- }
1573
-
1574
- .diff-swap {
1575
- align-self: end;
1576
- }
1577
-
1578
- .diff-meta {
1579
- display: flex;
1580
- justify-content: space-between;
1581
- gap: 12px;
1582
- color: var(--ink-soft);
1583
- font-size: 0.85rem;
1584
- flex-wrap: wrap;
1585
- }
1586
-
1587
- .diff-layout {
1588
- display: grid;
1589
- grid-template-columns: minmax(180px, 240px) minmax(0, 1fr);
1590
- gap: 16px;
1591
- align-items: start;
1592
- }
1593
-
1594
- .diff-files {
1595
- display: grid;
1596
- gap: 8px;
1597
- max-height: 420px;
1598
- overflow: auto;
1599
- padding-right: 4px;
1600
- }
1601
-
1602
- .diff-file {
1603
- border: 1px solid var(--line);
1604
- background: var(--surface-muted);
1605
- border-radius: 14px;
1606
- padding: 10px 12px;
1607
- text-align: left;
1608
- display: grid;
1609
- gap: 6px;
1610
- transition:
1611
- transform 0.2s ease,
1612
- box-shadow 0.2s ease,
1613
- border 0.2s ease;
1614
- }
1615
-
1616
- .diff-file:hover {
1617
- transform: translateY(-1px);
1618
- box-shadow: 0 10px 20px rgba(29, 26, 23, 0.12);
1619
- }
1620
-
1621
- .diff-file.is-active {
1622
- border-color: rgba(255, 107, 74, 0.45);
1623
- box-shadow: 0 12px 24px rgba(255, 107, 74, 0.2);
1624
- }
1625
-
1626
- .diff-file-name {
1627
- font-size: 0.9rem;
1628
- color: var(--ink);
1629
- font-family: var(--font-mono);
1630
- word-break: break-all;
1631
- }
1632
-
1633
- .diff-pill {
1634
- display: inline-flex;
1635
- align-items: center;
1636
- gap: 6px;
1637
- font-size: 0.7rem;
1638
- text-transform: uppercase;
1639
- letter-spacing: 0.08em;
1640
- font-weight: 700;
1641
- padding: 4px 8px;
1642
- border-radius: 999px;
1643
- align-self: start;
1644
- }
1645
-
1646
- .diff-pill-added {
1647
- background: rgba(43, 198, 164, 0.18);
1648
- color: #0b6b58;
1649
- }
1650
-
1651
- .diff-pill-removed {
1652
- background: rgba(255, 107, 74, 0.18);
1653
- color: #9b3a25;
1654
- }
1655
-
1656
- .diff-pill-changed {
1657
- background: rgba(240, 196, 106, 0.22);
1658
- color: #8a5b14;
1659
- }
1660
-
1661
- .diff-pill-same {
1662
- background: rgba(29, 26, 23, 0.08);
1663
- color: var(--ink-soft);
1664
- }
1665
-
1666
- .diff-view {
1667
- position: relative;
1668
- min-height: 360px;
1669
- }
1670
-
1671
- .diff-monaco {
1672
- height: 420px;
1673
- border-radius: 18px;
1674
- border: 1px solid var(--line);
1675
- overflow: hidden;
1676
- background: var(--surface);
1677
- }
1678
-
1679
- .diff-empty {
1680
- border-radius: 16px;
1681
- border: 1px dashed var(--line);
1682
- padding: 20px;
1683
- color: var(--ink-soft);
1684
- background: var(--surface-muted);
1685
- font-size: 0.9rem;
1686
- }
1687
-
1688
- .diff-loading {
1689
- position: absolute;
1690
- bottom: 12px;
1691
- right: 16px;
1692
- font-size: 0.8rem;
1693
- color: var(--ink-soft);
1694
- background: rgba(255, 255, 255, 0.8);
1695
- border-radius: 999px;
1696
- padding: 6px 10px;
1697
- border: 1px solid var(--line);
1698
- }
1699
-
1700
- .tab-card {
1701
- gap: 14px;
1702
- }
1703
-
1704
- .tab-header {
1705
- display: inline-flex;
1706
- align-items: center;
1707
- gap: 6px;
1708
- padding: 4px;
1709
- border-radius: 999px;
1710
- border: 1px solid var(--line);
1711
- background: var(--surface-muted);
1712
- align-self: flex-start;
1713
- }
1714
-
1715
- .tab-button {
1716
- border: none;
1717
- background: transparent;
1718
- padding: 8px 16px;
1719
- border-radius: 999px;
1720
- font-weight: 650;
1721
- color: var(--ink-soft);
1722
- cursor: pointer;
1723
- }
1724
-
1725
- .tab-button.is-active {
1726
- background: var(--surface);
1727
- color: var(--ink);
1728
- box-shadow: 0 8px 18px rgba(29, 26, 23, 0.12);
1729
- }
1730
-
1731
- .tab-body {
1732
- display: grid;
1733
- gap: 20px;
1734
- }
1735
-
1736
- .file-list {
1737
- display: grid;
1738
- gap: 12px;
1739
- padding-top: 8px;
1740
- border-top: 1px solid var(--line);
1741
- }
1742
-
1743
- .file-list-header {
1744
- display: flex;
1745
- align-items: baseline;
1746
- justify-content: space-between;
1747
- gap: 10px;
1748
- }
1749
-
1750
- .file-list-body {
1751
- display: grid;
1752
- gap: 8px;
1753
- max-height: 260px;
1754
- overflow: auto;
1755
- padding-right: 4px;
1756
- }
1757
-
1758
- .version-scroll {
1759
- max-height: 320px;
1760
- overflow: auto;
1761
- padding-right: 4px;
1762
- }
1763
-
1764
- .file-row {
1765
- display: flex;
1766
- align-items: center;
1767
- justify-content: space-between;
1768
- gap: 12px;
1769
- padding: 10px 12px;
1770
- border-radius: 12px;
1771
- border: 1px solid var(--line);
1772
- background: var(--surface-muted);
1773
- }
1774
-
1775
- .file-path {
1776
- font-family: var(--font-mono);
1777
- font-size: 0.9rem;
1778
- color: var(--ink);
1779
- word-break: break-all;
1780
- }
1781
-
1782
- .file-meta {
1783
- font-size: 0.8rem;
1784
- color: var(--ink-soft);
1785
- white-space: nowrap;
1786
- }
1787
-
1788
- .comment-form {
1789
- display: grid;
1790
- gap: 12px;
1791
- margin-top: 12px;
1792
- }
1793
-
1794
- .comment-input {
1795
- border-radius: 16px;
1796
- border: 1px solid var(--line);
1797
- padding: 14px 16px;
1798
- font-size: 1rem;
1799
- background: var(--surface-muted);
1800
- color: var(--ink);
1801
- font-family: var(--font-body);
1802
- min-height: 120px;
1803
- resize: vertical;
1804
- }
1805
-
1806
- .comment-input:focus-visible {
1807
- outline: 3px solid rgba(255, 107, 74, 0.25);
1808
- outline-offset: 3px;
1809
- }
1810
-
1811
- .comment-submit {
1812
- justify-self: start;
1813
- padding: 8px 14px;
1814
- font-size: 0.9rem;
1815
- }
1816
-
1817
- .sidebar-card {
1818
- gap: 20px;
1819
- }
1820
-
1821
- .sidebar-section {
1822
- display: grid;
1823
- gap: 12px;
1824
- }
1825
-
1826
- .sidebar-stack {
1827
- display: grid;
1828
- gap: 8px;
1829
- }
1830
-
1831
- .sidebar-divider {
1832
- height: 1px;
1833
- background: var(--line);
1834
- opacity: 0.6;
1835
- }
1836
-
1837
- .sidebar-scroll {
1838
- max-height: 260px;
1839
- overflow: auto;
1840
- padding-right: 4px;
1841
- }
1842
-
1843
- .sidebar-form {
1844
- display: grid;
1845
- gap: 10px;
1846
- margin-top: 12px;
1847
- }
1848
-
1849
- .version-list {
1850
- display: grid;
1851
- gap: 14px;
1852
- }
1853
-
1854
- .version-row {
1855
- display: grid;
1856
- grid-template-columns: minmax(0, 1fr) auto;
1857
- gap: 16px;
1858
- align-items: center;
1859
- padding: 6px 0;
1860
- }
1861
-
1862
- .version-info {
1863
- display: grid;
1864
- gap: 6px;
1865
- color: var(--ink-soft);
1866
- font-size: 0.9rem;
1867
- }
1868
-
1869
- .version-actions {
1870
- display: grid;
1871
- align-items: center;
1872
- }
1873
-
1874
- .version-zip {
1875
- justify-self: end;
1876
- }
1877
-
1878
- [data-theme="dark"] .diff-pill-added {
1879
- color: #72f0d3;
1880
- }
1881
-
1882
- [data-theme="dark"] .diff-pill-removed {
1883
- color: #ffc1b1;
1884
- }
1885
-
1886
- [data-theme="dark"] .diff-pill-changed {
1887
- color: #ffd494;
1888
- }
1889
-
1890
- [data-theme="dark"] .diff-loading {
1891
- background: rgba(32, 27, 24, 0.85);
1892
- }
1893
-
1894
- @media (max-width: 760px) {
1895
- .navbar-inner {
1896
- padding: 16px 16px;
1897
- gap: 14px;
1898
- }
1899
-
1900
- .nav-links {
1901
- display: none;
1902
- }
1903
-
1904
- .nav-mobile {
1905
- display: inline-flex;
1906
- }
1907
-
1908
- .theme-toggle {
1909
- display: none;
1910
- }
1911
-
1912
- .hero {
1913
- padding: 64px 18px 46px;
1914
- }
1915
-
1916
- .section {
1917
- padding: 28px 18px 64px;
1918
- }
1919
-
1920
- .section-cta {
1921
- justify-content: flex-start;
1922
- }
1923
-
1924
- .skill-hero-header {
1925
- flex-direction: column;
1926
- align-items: stretch;
1927
- }
1928
-
1929
- .skill-hero-cta {
1930
- align-items: flex-start;
1931
- }
1932
-
1933
- .tag-form {
1934
- grid-template-columns: 1fr;
1935
- align-items: stretch;
1936
- }
1937
-
1938
- .diff-controls {
1939
- grid-template-columns: 1fr;
1940
- }
1941
-
1942
- .diff-layout {
1943
- grid-template-columns: 1fr;
1944
- }
1945
-
1946
- .diff-files {
1947
- grid-auto-flow: column;
1948
- grid-auto-columns: minmax(180px, 1fr);
1949
- overflow-x: auto;
1950
- padding-bottom: 6px;
1951
- max-height: none;
1952
- }
1953
-
1954
- .skills-row {
1955
- grid-template-columns: 1fr;
1956
- gap: 10px;
1957
- }
1958
-
1959
- .skills-row-metrics {
1960
- justify-content: flex-start;
1961
- white-space: normal;
1962
- flex-wrap: wrap;
1963
- row-gap: 8px;
1964
- }
1965
- }
1966
-
1967
- @media (max-width: 520px) {
1968
- .brand {
1969
- font-size: 1.25rem;
1970
- }
1971
-
1972
- .nav-actions {
1973
- gap: 10px;
1974
- }
1975
-
1976
- .navbar .btn {
1977
- padding: 9px 12px;
1978
- font-size: 0.95rem;
1979
- }
1980
-
1981
- .sign-in-provider {
1982
- display: none;
1983
- }
1984
-
1985
- .user-trigger .mono,
1986
- .user-menu-chevron {
1987
- display: none;
1988
- }
1989
-
1990
- .search-bar {
1991
- flex-wrap: wrap;
1992
- gap: 10px;
1993
- }
1994
-
1995
- .search-bar > .mono {
1996
- display: none;
1997
- }
1998
-
1999
- .search-input {
2000
- flex: 1 1 180px;
2001
- min-width: 0;
2002
- }
2003
-
2004
- .search-filter-button {
2005
- width: 100%;
2006
- justify-content: center;
2007
- }
2008
-
2009
- .install-switcher-row {
2010
- align-items: flex-start;
2011
- flex-direction: column;
2012
- gap: 10px;
2013
- }
2014
-
2015
- .site-footer {
2016
- padding: 0 18px 36px;
2017
- }
2018
- }
2019
-
2020
- .search-filter-button {
2021
- border-radius: 999px;
2022
- border: 1px solid rgba(255, 107, 74, 0.3);
2023
- padding: 10px 14px;
2024
- background: var(--surface-muted);
2025
- color: var(--ink);
2026
- font-weight: 600;
2027
- cursor: pointer;
2028
- transition:
2029
- border 0.2s ease,
2030
- box-shadow 0.2s ease,
2031
- background 0.2s ease,
2032
- color 0.2s ease;
2033
- }
2034
-
2035
- .search-filter-button[aria-pressed="true"] {
2036
- background: var(--accent);
2037
- border-color: var(--accent-deep);
2038
- color: white;
2039
- box-shadow: 0 10px 20px rgba(255, 107, 74, 0.3);
2040
- }
2041
-
2042
- .search-filter-button:focus-visible {
2043
- outline: 3px solid rgba(255, 107, 74, 0.3);
2044
- outline-offset: 3px;
2045
- }
2046
-
2047
- .search-filter {
2048
- display: inline-flex;
2049
- align-items: center;
2050
- gap: 12px;
2051
- padding: 10px 14px;
2052
- border-radius: 999px;
2053
- border: 1px solid rgba(255, 107, 74, 0.2);
2054
- background: var(--surface-muted);
2055
- color: var(--ink);
2056
- font-weight: 600;
2057
- }
2058
-
2059
- .search-filter-input {
2060
- appearance: none;
2061
- width: 20px;
2062
- height: 20px;
2063
- border-radius: 6px;
2064
- border: 2px solid rgba(255, 107, 74, 0.4);
2065
- display: grid;
2066
- place-items: center;
2067
- background: transparent;
2068
- transition:
2069
- border 0.2s ease,
2070
- box-shadow 0.2s ease,
2071
- background 0.2s ease;
2072
- }
2073
-
2074
- .search-filter-input::after {
2075
- content: "";
2076
- width: 10px;
2077
- height: 10px;
2078
- border-radius: 3px;
2079
- background: white;
2080
- transform: scale(0);
2081
- transition: transform 0.15s ease;
2082
- }
2083
-
2084
- .search-filter-input:checked {
2085
- background: var(--accent);
2086
- border-color: var(--accent-deep);
2087
- box-shadow: 0 8px 16px rgba(255, 107, 74, 0.3);
2088
- }
2089
-
2090
- .search-filter-input:checked::after {
2091
- transform: scale(1);
2092
- }
2093
-
2094
- .search-filter-input:focus-visible {
2095
- outline: 3px solid rgba(255, 107, 74, 0.3);
2096
- outline-offset: 3px;
2097
- }
2098
-
2099
- [data-theme="dark"] .search-filter {
2100
- background: rgba(36, 31, 27, 0.9);
2101
- border-color: rgba(255, 131, 95, 0.35);
2102
- }
2103
-
2104
- [data-theme="dark"] .search-filter-button {
2105
- background: rgba(36, 31, 27, 0.9);
2106
- border-color: rgba(255, 131, 95, 0.35);
2107
- }
2108
-
2109
- [data-theme="dark"] .search-filter-input {
2110
- border-color: rgba(255, 131, 95, 0.6);
2111
- }
2112
-
2113
- .search-input {
2114
- border: none;
2115
- outline: none;
2116
- flex: 1;
2117
- font-size: 1rem;
2118
- background: transparent;
2119
- }
2120
-
2121
- .settings-shell {
2122
- display: grid;
2123
- gap: 20px;
2124
- }
2125
-
2126
- .settings-profile {
2127
- display: flex;
2128
- align-items: center;
2129
- gap: 14px;
2130
- background: linear-gradient(135deg, var(--surface), var(--surface-muted));
2131
- }
2132
-
2133
- .settings-avatar {
2134
- width: 72px;
2135
- height: 72px;
2136
- border-radius: 22px;
2137
- background: rgba(255, 107, 74, 0.14);
2138
- border: 1px solid rgba(255, 107, 74, 0.3);
2139
- display: grid;
2140
- place-items: center;
2141
- font-weight: 700;
2142
- color: var(--accent-deep);
2143
- overflow: hidden;
2144
- }
2145
-
2146
- .settings-avatar img {
2147
- width: 100%;
2148
- height: 100%;
2149
- object-fit: cover;
2150
- }
2151
-
2152
- .settings-profile-body {
2153
- display: grid;
2154
- gap: 4px;
2155
- }
2156
-
2157
- .settings-name {
2158
- font-size: 1.25rem;
2159
- font-weight: 700;
2160
- }
2161
-
2162
- .settings-handle {
2163
- color: var(--ink-soft);
2164
- }
2165
-
2166
- .settings-email {
2167
- font-size: 0.95rem;
2168
- color: var(--ink-soft);
2169
- }
2170
-
2171
- .profile-tabs {
2172
- display: flex;
2173
- align-items: center;
2174
- gap: 10px;
2175
- flex-wrap: wrap;
2176
- margin: 0 0 18px;
2177
- }
2178
-
2179
- .profile-tab {
2180
- border: 1px solid rgba(255, 107, 74, 0.2);
2181
- background: rgba(255, 255, 255, 0.45);
2182
- color: var(--ink-soft);
2183
- padding: 10px 14px;
2184
- border-radius: 999px;
2185
- font-weight: 650;
2186
- cursor: pointer;
2187
- transition:
2188
- transform 0.18s ease,
2189
- background 0.18s ease,
2190
- border-color 0.18s ease,
2191
- color 0.18s ease;
2192
- }
2193
-
2194
- [data-theme="dark"] .profile-tab {
2195
- background: rgba(24, 19, 16, 0.55);
2196
- border-color: rgba(255, 131, 95, 0.35);
2197
- }
2198
-
2199
- .profile-tab:hover {
2200
- transform: translateY(-1px);
2201
- color: var(--ink);
2202
- }
2203
-
2204
- .profile-tab.is-active {
2205
- background: rgba(255, 107, 74, 0.16);
2206
- border-color: rgba(255, 107, 74, 0.32);
2207
- color: var(--accent-deep);
2208
- }
2209
-
2210
- .profile-actions {
2211
- display: flex;
2212
- align-items: center;
2213
- gap: 10px;
2214
- flex-wrap: wrap;
2215
- margin-bottom: 18px;
2216
- }
2217
-
2218
- .telemetry-root-header {
2219
- display: flex;
2220
- align-items: flex-start;
2221
- justify-content: space-between;
2222
- gap: 12px;
2223
- flex-wrap: wrap;
2224
- }
2225
-
2226
- .telemetry-root-title {
2227
- font-weight: 750;
2228
- letter-spacing: -0.01em;
2229
- }
2230
-
2231
- .telemetry-root-meta {
2232
- font-size: 0.9rem;
2233
- color: var(--ink-soft);
2234
- margin-top: 4px;
2235
- }
2236
-
2237
- .telemetry-skill-list {
2238
- display: grid;
2239
- gap: 10px;
2240
- margin-top: 10px;
2241
- }
2242
-
2243
- .telemetry-skill-row {
2244
- display: flex;
2245
- align-items: baseline;
2246
- justify-content: space-between;
2247
- gap: 12px;
2248
- flex-wrap: wrap;
2249
- }
2250
-
2251
- .telemetry-skill-link {
2252
- display: inline-flex;
2253
- align-items: baseline;
2254
- gap: 10px;
2255
- min-width: 0;
2256
- }
2257
-
2258
- .telemetry-skill-slug {
2259
- font-family: var(--font-mono);
2260
- font-size: 0.85rem;
2261
- color: var(--ink-soft);
2262
- }
2263
-
2264
- .telemetry-skill-meta {
2265
- color: var(--ink-soft);
2266
- white-space: nowrap;
2267
- }
2268
-
2269
- .settings-card {
2270
- display: grid;
2271
- gap: 16px;
2272
- }
2273
-
2274
- .settings-field {
2275
- display: grid;
2276
- gap: 8px;
2277
- font-weight: 600;
2278
- color: var(--ink);
2279
- }
2280
-
2281
- .settings-input {
2282
- width: 100%;
2283
- border-radius: 14px;
2284
- border: 1px solid rgba(255, 107, 74, 0.2);
2285
- background: var(--surface-muted);
2286
- padding: 12px 14px;
2287
- font-size: 1rem;
2288
- color: var(--ink);
2289
- outline: none;
2290
- transition:
2291
- border 0.2s ease,
2292
- box-shadow 0.2s ease;
2293
- }
2294
-
2295
- .settings-input:focus {
2296
- border-color: rgba(255, 107, 74, 0.5);
2297
- box-shadow: 0 0 0 3px rgba(255, 107, 74, 0.15);
2298
- }
2299
-
2300
- .settings-actions {
2301
- display: flex;
2302
- align-items: center;
2303
- gap: 12px;
2304
- }
2305
-
2306
- .settings-save {
2307
- padding: 10px 22px;
2308
- }
2309
-
2310
- .danger-card {
2311
- margin-top: 8px;
2312
- border: 1px solid rgba(255, 107, 74, 0.28);
2313
- background: linear-gradient(135deg, rgba(255, 107, 74, 0.08), transparent);
2314
- }
2315
-
2316
- .danger-title {
2317
- margin: 0 0 6px;
2318
- font-size: 1.2rem;
2319
- }
2320
-
2321
- .btn-danger {
2322
- background: linear-gradient(135deg, #ff5b5b, #d62a2a);
2323
- border: none;
2324
- color: #fff;
2325
- }
2326
-
2327
- [data-theme="dark"] .settings-input {
2328
- background: #251f1b;
2329
- border-color: rgba(255, 131, 95, 0.25);
2330
- }
2331
-
2332
- [data-theme="dark"] .settings-input:focus {
2333
- box-shadow: 0 0 0 3px rgba(255, 131, 95, 0.2);
2334
- }
2335
-
2336
- @media (max-width: 900px) {
2337
- .upload-header {
2338
- flex-direction: column;
2339
- align-items: flex-start;
2340
- }
2341
-
2342
- .upload-grid {
2343
- grid-template-columns: 1fr;
2344
- }
2345
- }
2346
-
2347
- .mono {
2348
- font-family: var(--font-mono);
2349
- }
2350
-
2351
- .markdown {
2352
- line-height: 1.7;
2353
- color: #3f3a34;
2354
- }
2355
-
2356
- [data-theme="dark"] .markdown {
2357
- color: rgba(246, 239, 228, 0.9);
2358
- }
2359
-
2360
- .markdown h1,
2361
- .markdown h2,
2362
- .markdown h3 {
2363
- font-family: var(--font-display);
2364
- margin-top: 1.4rem;
2365
- }
2366
-
2367
- .markdown a {
2368
- color: var(--accent-deep);
2369
- }
2370
-
2371
- .markdown :not(pre) > code {
2372
- background: rgba(255, 107, 74, 0.12);
2373
- padding: 2px 6px;
2374
- border-radius: 8px;
2375
- }
2376
-
2377
- .markdown pre {
2378
- white-space: pre;
2379
- overflow-x: auto;
2380
- -webkit-overflow-scrolling: touch;
2381
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.9), rgba(255, 250, 247, 0.88));
2382
- border: 1px solid rgba(255, 107, 74, 0.18);
2383
- border-left: 3px solid var(--accent-deep);
2384
- border-radius: 12px;
2385
- padding: 14px 16px;
2386
- font-family: var(--font-mono);
2387
- font-size: 0.9rem;
2388
- line-height: 1.55;
2389
- tab-size: 2;
2390
- color: var(--ink);
2391
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.7);
2392
- }
2393
-
2394
- .markdown pre code {
2395
- background: transparent;
2396
- padding: 0;
2397
- border-radius: 0;
2398
- white-space: inherit;
2399
- font-family: inherit;
2400
- color: inherit;
2401
- }
2402
-
2403
- [data-theme="dark"] .markdown pre {
2404
- background: linear-gradient(180deg, rgba(26, 20, 18, 0.9), rgba(20, 16, 14, 0.85));
2405
- border: 1px solid rgba(232, 106, 71, 0.28);
2406
- border-left-color: rgba(232, 106, 71, 0.8);
2407
- color: #f5e9e3;
2408
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05);
2409
- }
2410
-
2411
- [data-theme="dark"] .markdown :not(pre) > code {
2412
- background: rgba(255, 131, 95, 0.2);
2413
- color: #ffe9de;
2414
- }
2415
-
2416
- [data-theme="dark"] .markdown pre code {
2417
- background: transparent;
2418
- color: inherit;
2419
- }
2420
-
2421
- .fade-up {
2422
- animation: fadeUp 0.6s ease forwards;
2423
- opacity: 0;
2424
- transform: translateY(12px);
2425
- }
2426
-
2427
- .fade-up[data-delay="1"] {
2428
- animation-delay: 0.1s;
2429
- }
2430
-
2431
- .fade-up[data-delay="2"] {
2432
- animation-delay: 0.2s;
2433
- }
2434
-
2435
- .fade-up[data-delay="3"] {
2436
- animation-delay: 0.3s;
2437
- }
2438
-
2439
- @keyframes fadeUp {
2440
- to {
2441
- opacity: 1;
2442
- transform: translateY(0);
2443
- }
2444
- }
2445
-
2446
- @keyframes spin {
2447
- to {
2448
- transform: rotate(360deg);
2449
- }
2450
- }
2451
-
2452
- @keyframes theme-circle-transition {
2453
- 0% {
2454
- clip-path: circle(0% at var(--theme-switch-x, 50%) var(--theme-switch-y, 50%));
2455
- }
2456
- 100% {
2457
- clip-path: circle(150% at var(--theme-switch-x, 50%) var(--theme-switch-y, 50%));
2458
- }
2459
- }
2460
-
2461
- html.theme-transition {
2462
- view-transition-name: theme;
2463
- }
2464
-
2465
- /* biome-ignore lint/correctness/noUnknownTypeSelector: Custom view-transition pseudo-element for theme switch. */
2466
- html.theme-transition::view-transition-old(theme) {
2467
- mix-blend-mode: normal;
2468
- animation: none;
2469
- z-index: 1;
2470
- }
2471
-
2472
- /* biome-ignore lint/correctness/noUnknownTypeSelector: Custom view-transition pseudo-element for theme switch. */
2473
- html.theme-transition::view-transition-new(theme) {
2474
- mix-blend-mode: normal;
2475
- z-index: 2;
2476
- animation: theme-circle-transition 0.45s ease-out forwards;
2477
- }
2478
-
2479
- @media (prefers-reduced-motion: reduce) {
2480
- /* biome-ignore lint/correctness/noUnknownTypeSelector: Custom view-transition pseudo-element for theme switch. */
2481
- html.theme-transition::view-transition-old(theme) {
2482
- /* biome-ignore lint/complexity/noImportantStyles: reduce-motion override */
2483
- animation: none !important;
2484
- }
2485
-
2486
- /* biome-ignore lint/correctness/noUnknownTypeSelector: Custom view-transition pseudo-element for theme switch. */
2487
- html.theme-transition::view-transition-new(theme) {
2488
- /* biome-ignore lint/complexity/noImportantStyles: reduce-motion override */
2489
- animation: none !important;
2490
- }
2491
- }
2492
-
2493
- /* Dashboard styles */
2494
- .dashboard-header {
2495
- display: flex;
2496
- justify-content: space-between;
2497
- align-items: center;
2498
- margin-bottom: 24px;
2499
- }
2500
-
2501
- .dashboard-header h1 {
2502
- font-size: 1.5rem;
2503
- font-weight: 600;
2504
- margin: 0;
2505
- }
2506
-
2507
- .dashboard-empty {
2508
- display: flex;
2509
- flex-direction: column;
2510
- align-items: center;
2511
- justify-content: center;
2512
- text-align: center;
2513
- padding: 48px 24px;
2514
- gap: 16px;
2515
- }
2516
-
2517
- .dashboard-empty h2 {
2518
- font-size: 1.25rem;
2519
- font-weight: 600;
2520
- margin: 0;
2521
- }
2522
-
2523
- .dashboard-empty p {
2524
- color: var(--color-muted);
2525
- margin: 0;
2526
- }
2527
-
2528
- .dashboard-grid {
2529
- display: flex;
2530
- flex-direction: column;
2531
- gap: 12px;
2532
- }
2533
-
2534
- .dashboard-skill-card {
2535
- display: flex;
2536
- justify-content: space-between;
2537
- align-items: flex-start;
2538
- gap: 16px;
2539
- padding: 16px 20px;
2540
- background: var(--card-bg);
2541
- border: 1px solid var(--card-border);
2542
- border-radius: 12px;
2543
- transition: border-color 0.15s ease;
2544
- }
2545
-
2546
- .dashboard-skill-card:hover {
2547
- border-color: var(--color-accent);
2548
- }
2549
-
2550
- .dashboard-skill-info {
2551
- flex: 1;
2552
- min-width: 0;
2553
- }
2554
-
2555
- .dashboard-skill-name {
2556
- font-weight: 600;
2557
- font-size: 1.1rem;
2558
- color: var(--color-text);
2559
- text-decoration: none;
2560
- }
2561
-
2562
- .dashboard-skill-name:hover {
2563
- color: var(--color-accent);
2564
- }
2565
-
2566
- .dashboard-skill-slug {
2567
- font-family: var(--font-mono);
2568
- font-size: 0.85rem;
2569
- color: var(--color-muted);
2570
- margin-left: 8px;
2571
- }
2572
-
2573
- .dashboard-skill-description {
2574
- font-size: 0.9rem;
2575
- color: var(--color-muted);
2576
- margin: 8px 0 0;
2577
- line-height: 1.4;
2578
- display: -webkit-box;
2579
- -webkit-line-clamp: 2;
2580
- -webkit-box-orient: vertical;
2581
- overflow: hidden;
2582
- }
2583
-
2584
- .dashboard-skill-stats {
2585
- display: flex;
2586
- gap: 12px;
2587
- margin-top: 8px;
2588
- font-size: 0.8rem;
2589
- color: var(--color-muted);
2590
- }
2591
-
2592
- .dashboard-skill-actions {
2593
- display: flex;
2594
- gap: 8px;
2595
- flex-shrink: 0;
2596
- }
2597
-
2598
- .btn-sm {
2599
- padding: 6px 12px;
2600
- font-size: 0.85rem;
2601
- gap: 4px;
2602
- }
2603
-
2604
- .btn-ghost {
2605
- background: transparent;
2606
- border: 1px solid var(--card-border);
2607
- color: var(--color-text);
2608
- }
2609
-
2610
- .btn-ghost:hover {
2611
- background: var(--card-bg);
2612
- border-color: var(--color-accent);
2613
- }
2614
-
2615
- @media (max-width: 640px) {
2616
- .dashboard-skill-card {
2617
- flex-direction: column;
2618
- gap: 12px;
2619
- }
2620
-
2621
- .dashboard-skill-actions {
2622
- width: 100%;
2623
- }
2624
-
2625
- .dashboard-skill-actions .btn {
2626
- flex: 1;
2627
- justify-content: center;
2628
- }
2629
- }
2630
-
2631
- .management-list {
2632
- display: grid;
2633
- gap: 16px;
2634
- margin-top: 12px;
2635
- }
2636
-
2637
- .management-item {
2638
- display: grid;
2639
- gap: 16px;
2640
- padding: 16px;
2641
- border-radius: 16px;
2642
- border: 1px solid var(--line);
2643
- background: var(--surface);
2644
- grid-template-columns: minmax(0, 1fr) auto;
2645
- align-items: start;
2646
- }
2647
-
2648
- .management-item-main {
2649
- display: grid;
2650
- gap: 6px;
2651
- min-width: 0;
2652
- }
2653
-
2654
- .management-actions {
2655
- display: flex;
2656
- flex-wrap: wrap;
2657
- gap: 10px;
2658
- justify-content: flex-end;
2659
- }
2660
-
2661
- .management-tags {
2662
- display: flex;
2663
- flex-wrap: wrap;
2664
- gap: 6px;
2665
- }
2666
-
2667
- .management-controls {
2668
- display: flex;
2669
- flex-wrap: wrap;
2670
- gap: 10px;
2671
- align-items: center;
2672
- }
2673
-
2674
- .management-control {
2675
- display: flex;
2676
- flex-wrap: wrap;
2677
- gap: 8px;
2678
- align-items: center;
2679
- }
2680
-
2681
- .management-control .mono {
2682
- font-size: 12px;
2683
- color: var(--ink-soft);
2684
- }
2685
-
2686
- .management-control input {
2687
- min-width: 180px;
2688
- }
2689
-
2690
- .management-sublist {
2691
- display: grid;
2692
- gap: 8px;
2693
- margin-top: 10px;
2694
- padding-left: 12px;
2695
- border-left: 1px solid var(--line);
2696
- }
2697
-
2698
- .management-subitem {
2699
- display: flex;
2700
- flex-wrap: wrap;
2701
- gap: 10px;
2702
- align-items: center;
2703
- justify-content: space-between;
2704
- }
2705
-
2706
- @media (max-width: 900px) {
2707
- .management-item {
2708
- grid-template-columns: 1fr;
2709
- }
2710
-
2711
- .management-actions {
2712
- justify-content: flex-start;
2713
- }
2714
-
2715
- .management-subitem {
2716
- justify-content: flex-start;
2717
- }
2718
- }