skywriter 1.0.0

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 (561) hide show
  1. package/LICENSE +16 -0
  2. package/README.md +852 -0
  3. package/dist/cli/commands/host.d.ts +6 -0
  4. package/dist/cli/commands/host.d.ts.map +1 -0
  5. package/dist/cli/commands/host.js +52 -0
  6. package/dist/cli/commands/host.js.map +1 -0
  7. package/dist/cli/commands/init.d.ts +15 -0
  8. package/dist/cli/commands/init.d.ts.map +1 -0
  9. package/dist/cli/commands/init.js +207 -0
  10. package/dist/cli/commands/init.js.map +1 -0
  11. package/dist/cli/commands/login.d.ts +18 -0
  12. package/dist/cli/commands/login.d.ts.map +1 -0
  13. package/dist/cli/commands/login.js +152 -0
  14. package/dist/cli/commands/login.js.map +1 -0
  15. package/dist/cli/commands/logout.d.ts +15 -0
  16. package/dist/cli/commands/logout.d.ts.map +1 -0
  17. package/dist/cli/commands/logout.js +62 -0
  18. package/dist/cli/commands/logout.js.map +1 -0
  19. package/dist/cli/commands/pull.d.ts +19 -0
  20. package/dist/cli/commands/pull.d.ts.map +1 -0
  21. package/dist/cli/commands/pull.js +44 -0
  22. package/dist/cli/commands/pull.js.map +1 -0
  23. package/dist/cli/commands/push.d.ts +9 -0
  24. package/dist/cli/commands/push.d.ts.map +1 -0
  25. package/dist/cli/commands/push.js +49 -0
  26. package/dist/cli/commands/push.js.map +1 -0
  27. package/dist/cli/commands/removeServer.d.ts +9 -0
  28. package/dist/cli/commands/removeServer.d.ts.map +1 -0
  29. package/dist/cli/commands/removeServer.js +55 -0
  30. package/dist/cli/commands/removeServer.js.map +1 -0
  31. package/dist/cli/commands/render.d.ts +6 -0
  32. package/dist/cli/commands/render.d.ts.map +1 -0
  33. package/dist/cli/commands/render.js +11 -0
  34. package/dist/cli/commands/render.js.map +1 -0
  35. package/dist/cli/commands/serve.d.ts +7 -0
  36. package/dist/cli/commands/serve.d.ts.map +1 -0
  37. package/dist/cli/commands/serve.js +55 -0
  38. package/dist/cli/commands/serve.js.map +1 -0
  39. package/dist/cli/commands/sessions.d.ts +6 -0
  40. package/dist/cli/commands/sessions.d.ts.map +1 -0
  41. package/dist/cli/commands/sessions.js +24 -0
  42. package/dist/cli/commands/sessions.js.map +1 -0
  43. package/dist/cli/commands/settings.d.ts +10 -0
  44. package/dist/cli/commands/settings.d.ts.map +1 -0
  45. package/dist/cli/commands/settings.js +69 -0
  46. package/dist/cli/commands/settings.js.map +1 -0
  47. package/dist/cli/commands/switchServer.d.ts +9 -0
  48. package/dist/cli/commands/switchServer.d.ts.map +1 -0
  49. package/dist/cli/commands/switchServer.js +52 -0
  50. package/dist/cli/commands/switchServer.js.map +1 -0
  51. package/dist/cli/commands/vscodeInit.d.ts +13 -0
  52. package/dist/cli/commands/vscodeInit.d.ts.map +1 -0
  53. package/dist/cli/commands/vscodeInit.js +152 -0
  54. package/dist/cli/commands/vscodeInit.js.map +1 -0
  55. package/dist/cli/commands/whoami.d.ts +6 -0
  56. package/dist/cli/commands/whoami.d.ts.map +1 -0
  57. package/dist/cli/commands/whoami.js +67 -0
  58. package/dist/cli/commands/whoami.js.map +1 -0
  59. package/dist/cli/index.d.ts +3 -0
  60. package/dist/cli/index.d.ts.map +1 -0
  61. package/dist/cli/index.js +5 -0
  62. package/dist/cli/index.js.map +1 -0
  63. package/dist/cli/middleware/checkDuplicatePath.d.ts +19 -0
  64. package/dist/cli/middleware/checkDuplicatePath.d.ts.map +1 -0
  65. package/dist/cli/middleware/checkDuplicatePath.js +45 -0
  66. package/dist/cli/middleware/checkDuplicatePath.js.map +1 -0
  67. package/dist/cli/middleware/redirectRoot.d.ts +18 -0
  68. package/dist/cli/middleware/redirectRoot.d.ts.map +1 -0
  69. package/dist/cli/middleware/redirectRoot.js +44 -0
  70. package/dist/cli/middleware/redirectRoot.js.map +1 -0
  71. package/dist/cli/middleware/serveDocument.d.ts +10 -0
  72. package/dist/cli/middleware/serveDocument.d.ts.map +1 -0
  73. package/dist/cli/middleware/serveDocument.js +104 -0
  74. package/dist/cli/middleware/serveDocument.js.map +1 -0
  75. package/dist/cli/middleware/serveUploads.d.ts +20 -0
  76. package/dist/cli/middleware/serveUploads.d.ts.map +1 -0
  77. package/dist/cli/middleware/serveUploads.js +93 -0
  78. package/dist/cli/middleware/serveUploads.js.map +1 -0
  79. package/dist/cli/middleware/types.d.ts +43 -0
  80. package/dist/cli/middleware/types.d.ts.map +1 -0
  81. package/dist/cli/middleware/types.js +2 -0
  82. package/dist/cli/middleware/types.js.map +1 -0
  83. package/dist/cli/pathOperations/deletePathUploads.d.ts +6 -0
  84. package/dist/cli/pathOperations/deletePathUploads.d.ts.map +1 -0
  85. package/dist/cli/pathOperations/deletePathUploads.js +68 -0
  86. package/dist/cli/pathOperations/deletePathUploads.js.map +1 -0
  87. package/dist/cli/pathOperations/downloadPathUploads.d.ts +6 -0
  88. package/dist/cli/pathOperations/downloadPathUploads.d.ts.map +1 -0
  89. package/dist/cli/pathOperations/downloadPathUploads.js +156 -0
  90. package/dist/cli/pathOperations/downloadPathUploads.js.map +1 -0
  91. package/dist/cli/pathOperations/pullPathViaGit.d.ts +9 -0
  92. package/dist/cli/pathOperations/pullPathViaGit.d.ts.map +1 -0
  93. package/dist/cli/pathOperations/pullPathViaGit.js +86 -0
  94. package/dist/cli/pathOperations/pullPathViaGit.js.map +1 -0
  95. package/dist/cli/pathOperations/pullPathViaTar.d.ts +14 -0
  96. package/dist/cli/pathOperations/pullPathViaTar.d.ts.map +1 -0
  97. package/dist/cli/pathOperations/pullPathViaTar.js +252 -0
  98. package/dist/cli/pathOperations/pullPathViaTar.js.map +1 -0
  99. package/dist/cli/pathOperations/pushPathViaGit.d.ts +9 -0
  100. package/dist/cli/pathOperations/pushPathViaGit.d.ts.map +1 -0
  101. package/dist/cli/pathOperations/pushPathViaGit.js +49 -0
  102. package/dist/cli/pathOperations/pushPathViaGit.js.map +1 -0
  103. package/dist/cli/pathOperations/pushPathViaTar.d.ts +6 -0
  104. package/dist/cli/pathOperations/pushPathViaTar.d.ts.map +1 -0
  105. package/dist/cli/pathOperations/pushPathViaTar.js +63 -0
  106. package/dist/cli/pathOperations/pushPathViaTar.js.map +1 -0
  107. package/dist/cli/pathOperations/uploadPathUploads.d.ts +6 -0
  108. package/dist/cli/pathOperations/uploadPathUploads.d.ts.map +1 -0
  109. package/dist/cli/pathOperations/uploadPathUploads.js +114 -0
  110. package/dist/cli/pathOperations/uploadPathUploads.js.map +1 -0
  111. package/dist/cli/pathOperations/validatePathSettings.d.ts +14 -0
  112. package/dist/cli/pathOperations/validatePathSettings.d.ts.map +1 -0
  113. package/dist/cli/pathOperations/validatePathSettings.js +191 -0
  114. package/dist/cli/pathOperations/validatePathSettings.js.map +1 -0
  115. package/dist/cli/utils/assemble.d.ts +22 -0
  116. package/dist/cli/utils/assemble.d.ts.map +1 -0
  117. package/dist/cli/utils/assemble.js +219 -0
  118. package/dist/cli/utils/assemble.js.map +1 -0
  119. package/dist/cli/utils/cliName.d.ts +3 -0
  120. package/dist/cli/utils/cliName.d.ts.map +1 -0
  121. package/dist/cli/utils/cliName.js +17 -0
  122. package/dist/cli/utils/cliName.js.map +1 -0
  123. package/dist/cli/utils/codeWorkspace.d.ts +13 -0
  124. package/dist/cli/utils/codeWorkspace.d.ts.map +1 -0
  125. package/dist/cli/utils/codeWorkspace.js +20 -0
  126. package/dist/cli/utils/codeWorkspace.js.map +1 -0
  127. package/dist/cli/utils/colors.d.ts +14 -0
  128. package/dist/cli/utils/colors.d.ts.map +1 -0
  129. package/dist/cli/utils/colors.js +22 -0
  130. package/dist/cli/utils/colors.js.map +1 -0
  131. package/dist/cli/utils/config.d.ts +35 -0
  132. package/dist/cli/utils/config.d.ts.map +1 -0
  133. package/dist/cli/utils/config.js +95 -0
  134. package/dist/cli/utils/config.js.map +1 -0
  135. package/dist/cli/utils/copilotInstructions.d.ts +5 -0
  136. package/dist/cli/utils/copilotInstructions.d.ts.map +1 -0
  137. package/dist/cli/utils/copilotInstructions.js +101 -0
  138. package/dist/cli/utils/copilotInstructions.js.map +1 -0
  139. package/dist/cli/utils/createLoggedFs.d.ts +17 -0
  140. package/dist/cli/utils/createLoggedFs.d.ts.map +1 -0
  141. package/dist/cli/utils/createLoggedFs.js +106 -0
  142. package/dist/cli/utils/createLoggedFs.js.map +1 -0
  143. package/dist/cli/utils/credentials.d.ts +38 -0
  144. package/dist/cli/utils/credentials.d.ts.map +1 -0
  145. package/dist/cli/utils/credentials.js +400 -0
  146. package/dist/cli/utils/credentials.js.map +1 -0
  147. package/dist/cli/utils/discover.d.ts +26 -0
  148. package/dist/cli/utils/discover.d.ts.map +1 -0
  149. package/dist/cli/utils/discover.js +209 -0
  150. package/dist/cli/utils/discover.js.map +1 -0
  151. package/dist/cli/utils/formatPlan.d.ts +40 -0
  152. package/dist/cli/utils/formatPlan.d.ts.map +1 -0
  153. package/dist/cli/utils/formatPlan.js +148 -0
  154. package/dist/cli/utils/formatPlan.js.map +1 -0
  155. package/dist/cli/utils/git.d.ts +17 -0
  156. package/dist/cli/utils/git.d.ts.map +1 -0
  157. package/dist/cli/utils/git.js +57 -0
  158. package/dist/cli/utils/git.js.map +1 -0
  159. package/dist/cli/utils/gitUrl.d.ts +7 -0
  160. package/dist/cli/utils/gitUrl.d.ts.map +1 -0
  161. package/dist/cli/utils/gitUrl.js +23 -0
  162. package/dist/cli/utils/gitUrl.js.map +1 -0
  163. package/dist/cli/utils/log.d.ts +22 -0
  164. package/dist/cli/utils/log.d.ts.map +1 -0
  165. package/dist/cli/utils/log.js +31 -0
  166. package/dist/cli/utils/log.js.map +1 -0
  167. package/dist/cli/utils/logData.d.ts +5 -0
  168. package/dist/cli/utils/logData.d.ts.map +1 -0
  169. package/dist/cli/utils/logData.js +65 -0
  170. package/dist/cli/utils/logData.js.map +1 -0
  171. package/dist/cli/utils/loggedFetch.d.ts +4 -0
  172. package/dist/cli/utils/loggedFetch.d.ts.map +1 -0
  173. package/dist/cli/utils/loggedFetch.js +15 -0
  174. package/dist/cli/utils/loggedFetch.js.map +1 -0
  175. package/dist/cli/utils/pageContext.d.ts +50 -0
  176. package/dist/cli/utils/pageContext.d.ts.map +1 -0
  177. package/dist/cli/utils/pageContext.js +86 -0
  178. package/dist/cli/utils/pageContext.js.map +1 -0
  179. package/dist/cli/utils/parseDocumentPath.d.ts +13 -0
  180. package/dist/cli/utils/parseDocumentPath.d.ts.map +1 -0
  181. package/dist/cli/utils/parseDocumentPath.js +35 -0
  182. package/dist/cli/utils/parseDocumentPath.js.map +1 -0
  183. package/dist/cli/utils/populateCache.d.ts +12 -0
  184. package/dist/cli/utils/populateCache.d.ts.map +1 -0
  185. package/dist/cli/utils/populateCache.js +21 -0
  186. package/dist/cli/utils/populateCache.js.map +1 -0
  187. package/dist/cli/utils/prefixLog.d.ts +21 -0
  188. package/dist/cli/utils/prefixLog.d.ts.map +1 -0
  189. package/dist/cli/utils/prefixLog.js +73 -0
  190. package/dist/cli/utils/prefixLog.js.map +1 -0
  191. package/dist/cli/utils/program.d.ts +7 -0
  192. package/dist/cli/utils/program.d.ts.map +1 -0
  193. package/dist/cli/utils/program.js +266 -0
  194. package/dist/cli/utils/program.js.map +1 -0
  195. package/dist/cli/utils/promptExec.d.ts +27 -0
  196. package/dist/cli/utils/promptExec.d.ts.map +1 -0
  197. package/dist/cli/utils/promptExec.js +47 -0
  198. package/dist/cli/utils/promptExec.js.map +1 -0
  199. package/dist/cli/utils/pullHarness.d.ts +15 -0
  200. package/dist/cli/utils/pullHarness.d.ts.map +1 -0
  201. package/dist/cli/utils/pullHarness.js +101 -0
  202. package/dist/cli/utils/pullHarness.js.map +1 -0
  203. package/dist/cli/utils/pullViaGit.d.ts +6 -0
  204. package/dist/cli/utils/pullViaGit.d.ts.map +1 -0
  205. package/dist/cli/utils/pullViaGit.js +13 -0
  206. package/dist/cli/utils/pullViaGit.js.map +1 -0
  207. package/dist/cli/utils/pullViaTar.d.ts +10 -0
  208. package/dist/cli/utils/pullViaTar.d.ts.map +1 -0
  209. package/dist/cli/utils/pullViaTar.js +15 -0
  210. package/dist/cli/utils/pullViaTar.js.map +1 -0
  211. package/dist/cli/utils/pushHarness.d.ts +24 -0
  212. package/dist/cli/utils/pushHarness.d.ts.map +1 -0
  213. package/dist/cli/utils/pushHarness.js +82 -0
  214. package/dist/cli/utils/pushHarness.js.map +1 -0
  215. package/dist/cli/utils/pushViaGit.d.ts +6 -0
  216. package/dist/cli/utils/pushViaGit.d.ts.map +1 -0
  217. package/dist/cli/utils/pushViaGit.js +16 -0
  218. package/dist/cli/utils/pushViaGit.js.map +1 -0
  219. package/dist/cli/utils/pushViaTar.d.ts +6 -0
  220. package/dist/cli/utils/pushViaTar.d.ts.map +1 -0
  221. package/dist/cli/utils/pushViaTar.js +9 -0
  222. package/dist/cli/utils/pushViaTar.js.map +1 -0
  223. package/dist/cli/utils/resolveTarget.d.ts +23 -0
  224. package/dist/cli/utils/resolveTarget.d.ts.map +1 -0
  225. package/dist/cli/utils/resolveTarget.js +43 -0
  226. package/dist/cli/utils/resolveTarget.js.map +1 -0
  227. package/dist/cli/utils/settingsValidation.d.ts +23 -0
  228. package/dist/cli/utils/settingsValidation.d.ts.map +1 -0
  229. package/dist/cli/utils/settingsValidation.js +176 -0
  230. package/dist/cli/utils/settingsValidation.js.map +1 -0
  231. package/dist/cli/utils/types.d.ts +33 -0
  232. package/dist/cli/utils/types.d.ts.map +1 -0
  233. package/dist/cli/utils/types.js +2 -0
  234. package/dist/cli/utils/types.js.map +1 -0
  235. package/dist/cli/utils/validateAndGetFilesFromDir.d.ts +10 -0
  236. package/dist/cli/utils/validateAndGetFilesFromDir.d.ts.map +1 -0
  237. package/dist/cli/utils/validateAndGetFilesFromDir.js +74 -0
  238. package/dist/cli/utils/validateAndGetFilesFromDir.js.map +1 -0
  239. package/dist/cli/utils/watchForChanges.d.ts +7 -0
  240. package/dist/cli/utils/watchForChanges.d.ts.map +1 -0
  241. package/dist/cli/utils/watchForChanges.js +44 -0
  242. package/dist/cli/utils/watchForChanges.js.map +1 -0
  243. package/dist/db/index.d.ts +5 -0
  244. package/dist/db/index.d.ts.map +1 -0
  245. package/dist/db/index.js +23 -0
  246. package/dist/db/index.js.map +1 -0
  247. package/dist/editor.bundle.dev.js +30823 -0
  248. package/dist/editor.bundle.dev.js.map +7 -0
  249. package/dist/editor.bundle.js +30347 -0
  250. package/dist/editor.bundle.js.map +7 -0
  251. package/dist/editor.bundle.prod.js +1373 -0
  252. package/dist/index.d.ts +5 -0
  253. package/dist/index.d.ts.map +1 -0
  254. package/dist/index.js +4 -0
  255. package/dist/index.js.map +1 -0
  256. package/dist/operations/addRedirect.d.ts +20 -0
  257. package/dist/operations/addRedirect.d.ts.map +1 -0
  258. package/dist/operations/addRedirect.js +46 -0
  259. package/dist/operations/addRedirect.js.map +1 -0
  260. package/dist/operations/addUpload.d.ts +29 -0
  261. package/dist/operations/addUpload.d.ts.map +1 -0
  262. package/dist/operations/addUpload.js +96 -0
  263. package/dist/operations/addUpload.js.map +1 -0
  264. package/dist/operations/addUploadsFromContent.d.ts +27 -0
  265. package/dist/operations/addUploadsFromContent.d.ts.map +1 -0
  266. package/dist/operations/addUploadsFromContent.js +311 -0
  267. package/dist/operations/addUploadsFromContent.js.map +1 -0
  268. package/dist/operations/clearDraft.d.ts +17 -0
  269. package/dist/operations/clearDraft.d.ts.map +1 -0
  270. package/dist/operations/clearDraft.js +56 -0
  271. package/dist/operations/clearDraft.js.map +1 -0
  272. package/dist/operations/createDocumentRecord.d.ts +11 -0
  273. package/dist/operations/createDocumentRecord.d.ts.map +1 -0
  274. package/dist/operations/createDocumentRecord.js +100 -0
  275. package/dist/operations/createDocumentRecord.js.map +1 -0
  276. package/dist/operations/createRoute.d.ts +6 -0
  277. package/dist/operations/createRoute.d.ts.map +1 -0
  278. package/dist/operations/createRoute.js +10 -0
  279. package/dist/operations/createRoute.js.map +1 -0
  280. package/dist/operations/createSession.d.ts +21 -0
  281. package/dist/operations/createSession.d.ts.map +1 -0
  282. package/dist/operations/createSession.js +27 -0
  283. package/dist/operations/createSession.js.map +1 -0
  284. package/dist/operations/deleteSession.d.ts +13 -0
  285. package/dist/operations/deleteSession.d.ts.map +1 -0
  286. package/dist/operations/deleteSession.js +15 -0
  287. package/dist/operations/deleteSession.js.map +1 -0
  288. package/dist/operations/findDocument.d.ts +18 -0
  289. package/dist/operations/findDocument.d.ts.map +1 -0
  290. package/dist/operations/findDocument.js +53 -0
  291. package/dist/operations/findDocument.js.map +1 -0
  292. package/dist/operations/getAllUploadsForDocument.d.ts +11 -0
  293. package/dist/operations/getAllUploadsForDocument.d.ts.map +1 -0
  294. package/dist/operations/getAllUploadsForDocument.js +15 -0
  295. package/dist/operations/getAllUploadsForDocument.js.map +1 -0
  296. package/dist/operations/getDocumentClientState.d.ts +30 -0
  297. package/dist/operations/getDocumentClientState.d.ts.map +1 -0
  298. package/dist/operations/getDocumentClientState.js +246 -0
  299. package/dist/operations/getDocumentClientState.js.map +1 -0
  300. package/dist/operations/getDocumentInstance.d.ts +7 -0
  301. package/dist/operations/getDocumentInstance.d.ts.map +1 -0
  302. package/dist/operations/getDocumentInstance.js +32 -0
  303. package/dist/operations/getDocumentInstance.js.map +1 -0
  304. package/dist/operations/getDocumentRecord.d.ts +6 -0
  305. package/dist/operations/getDocumentRecord.d.ts.map +1 -0
  306. package/dist/operations/getDocumentRecord.js +8 -0
  307. package/dist/operations/getDocumentRecord.js.map +1 -0
  308. package/dist/operations/getDualDocument.d.ts +28 -0
  309. package/dist/operations/getDualDocument.d.ts.map +1 -0
  310. package/dist/operations/getDualDocument.js +81 -0
  311. package/dist/operations/getDualDocument.js.map +1 -0
  312. package/dist/operations/getDualDocuments.d.ts +26 -0
  313. package/dist/operations/getDualDocuments.d.ts.map +1 -0
  314. package/dist/operations/getDualDocuments.js +130 -0
  315. package/dist/operations/getDualDocuments.js.map +1 -0
  316. package/dist/operations/getOptimisticDocument.d.ts +6 -0
  317. package/dist/operations/getOptimisticDocument.d.ts.map +1 -0
  318. package/dist/operations/getOptimisticDocument.js +30 -0
  319. package/dist/operations/getOptimisticDocument.js.map +1 -0
  320. package/dist/operations/getPage.d.ts +18 -0
  321. package/dist/operations/getPage.d.ts.map +1 -0
  322. package/dist/operations/getPage.js +31 -0
  323. package/dist/operations/getPage.js.map +1 -0
  324. package/dist/operations/getPages.d.ts +18 -0
  325. package/dist/operations/getPages.d.ts.map +1 -0
  326. package/dist/operations/getPages.js +30 -0
  327. package/dist/operations/getPages.js.map +1 -0
  328. package/dist/operations/getRedirects.d.ts +13 -0
  329. package/dist/operations/getRedirects.d.ts.map +1 -0
  330. package/dist/operations/getRedirects.js +30 -0
  331. package/dist/operations/getRedirects.js.map +1 -0
  332. package/dist/operations/getRenderDocument.d.ts +18 -0
  333. package/dist/operations/getRenderDocument.d.ts.map +1 -0
  334. package/dist/operations/getRenderDocument.js +27 -0
  335. package/dist/operations/getRenderDocument.js.map +1 -0
  336. package/dist/operations/getRenderDocumentWithAssociations.d.ts +15 -0
  337. package/dist/operations/getRenderDocumentWithAssociations.d.ts.map +1 -0
  338. package/dist/operations/getRenderDocumentWithAssociations.js +64 -0
  339. package/dist/operations/getRenderDocumentWithAssociations.js.map +1 -0
  340. package/dist/operations/getRenderDocuments.d.ts +16 -0
  341. package/dist/operations/getRenderDocuments.d.ts.map +1 -0
  342. package/dist/operations/getRenderDocuments.js +25 -0
  343. package/dist/operations/getRenderDocuments.js.map +1 -0
  344. package/dist/operations/getUpload.d.ts +25 -0
  345. package/dist/operations/getUpload.d.ts.map +1 -0
  346. package/dist/operations/getUpload.js +37 -0
  347. package/dist/operations/getUpload.js.map +1 -0
  348. package/dist/operations/getUploads.d.ts +25 -0
  349. package/dist/operations/getUploads.d.ts.map +1 -0
  350. package/dist/operations/getUploads.js +76 -0
  351. package/dist/operations/getUploads.js.map +1 -0
  352. package/dist/operations/getUsersCount.d.ts +12 -0
  353. package/dist/operations/getUsersCount.d.ts.map +1 -0
  354. package/dist/operations/getUsersCount.js +12 -0
  355. package/dist/operations/getUsersCount.js.map +1 -0
  356. package/dist/operations/login.d.ts +20 -0
  357. package/dist/operations/login.d.ts.map +1 -0
  358. package/dist/operations/login.js +38 -0
  359. package/dist/operations/login.js.map +1 -0
  360. package/dist/operations/removeDocument.d.ts +19 -0
  361. package/dist/operations/removeDocument.d.ts.map +1 -0
  362. package/dist/operations/removeDocument.js +54 -0
  363. package/dist/operations/removeDocument.js.map +1 -0
  364. package/dist/operations/removeRedirect.d.ts +15 -0
  365. package/dist/operations/removeRedirect.d.ts.map +1 -0
  366. package/dist/operations/removeRedirect.js +71 -0
  367. package/dist/operations/removeRedirect.js.map +1 -0
  368. package/dist/operations/removeUpload.d.ts +21 -0
  369. package/dist/operations/removeUpload.d.ts.map +1 -0
  370. package/dist/operations/removeUpload.js +49 -0
  371. package/dist/operations/removeUpload.js.map +1 -0
  372. package/dist/operations/search.d.ts +19 -0
  373. package/dist/operations/search.d.ts.map +1 -0
  374. package/dist/operations/search.js +109 -0
  375. package/dist/operations/search.js.map +1 -0
  376. package/dist/operations/seedIfEmpty.d.ts +7 -0
  377. package/dist/operations/seedIfEmpty.d.ts.map +1 -0
  378. package/dist/operations/seedIfEmpty.js +100 -0
  379. package/dist/operations/seedIfEmpty.js.map +1 -0
  380. package/dist/operations/signup.d.ts +21 -0
  381. package/dist/operations/signup.d.ts.map +1 -0
  382. package/dist/operations/signup.js +45 -0
  383. package/dist/operations/signup.js.map +1 -0
  384. package/dist/operations/types.d.ts +223 -0
  385. package/dist/operations/types.d.ts.map +1 -0
  386. package/dist/operations/types.js +2 -0
  387. package/dist/operations/types.js.map +1 -0
  388. package/dist/operations/updateUpload.d.ts +27 -0
  389. package/dist/operations/updateUpload.d.ts.map +1 -0
  390. package/dist/operations/updateUpload.js +78 -0
  391. package/dist/operations/updateUpload.js.map +1 -0
  392. package/dist/operations/updateViaArchive.d.ts +23 -0
  393. package/dist/operations/updateViaArchive.d.ts.map +1 -0
  394. package/dist/operations/updateViaArchive.js +229 -0
  395. package/dist/operations/updateViaArchive.js.map +1 -0
  396. package/dist/operations/upsert.d.ts +26 -0
  397. package/dist/operations/upsert.d.ts.map +1 -0
  398. package/dist/operations/upsert.js +257 -0
  399. package/dist/operations/upsert.js.map +1 -0
  400. package/dist/operations/utils/common.d.ts +2 -0
  401. package/dist/operations/utils/common.d.ts.map +1 -0
  402. package/dist/operations/utils/common.js +2 -0
  403. package/dist/operations/utils/common.js.map +1 -0
  404. package/dist/operations/utils/contentType.d.ts +2 -0
  405. package/dist/operations/utils/contentType.d.ts.map +1 -0
  406. package/dist/operations/utils/contentType.js +66 -0
  407. package/dist/operations/utils/contentType.js.map +1 -0
  408. package/dist/operations/utils/dataType.d.ts +7 -0
  409. package/dist/operations/utils/dataType.d.ts.map +1 -0
  410. package/dist/operations/utils/dataType.js +35 -0
  411. package/dist/operations/utils/dataType.js.map +1 -0
  412. package/dist/operations/utils/generateUniqueFilename.d.ts +7 -0
  413. package/dist/operations/utils/generateUniqueFilename.d.ts.map +1 -0
  414. package/dist/operations/utils/generateUniqueFilename.js +38 -0
  415. package/dist/operations/utils/generateUniqueFilename.js.map +1 -0
  416. package/dist/operations/utils/hasEtaTemplates.d.ts +2 -0
  417. package/dist/operations/utils/hasEtaTemplates.d.ts.map +1 -0
  418. package/dist/operations/utils/hasEtaTemplates.js +10 -0
  419. package/dist/operations/utils/hasEtaTemplates.js.map +1 -0
  420. package/dist/operations/utils/normalizeDocumentQuery.d.ts +12 -0
  421. package/dist/operations/utils/normalizeDocumentQuery.d.ts.map +1 -0
  422. package/dist/operations/utils/normalizeDocumentQuery.js +45 -0
  423. package/dist/operations/utils/normalizeDocumentQuery.js.map +1 -0
  424. package/dist/operations/utils/utils.d.ts +4 -0
  425. package/dist/operations/utils/utils.d.ts.map +1 -0
  426. package/dist/operations/utils/utils.js +4 -0
  427. package/dist/operations/utils/utils.js.map +1 -0
  428. package/dist/operations/validateSession.d.ts +17 -0
  429. package/dist/operations/validateSession.d.ts.map +1 -0
  430. package/dist/operations/validateSession.js +27 -0
  431. package/dist/operations/validateSession.js.map +1 -0
  432. package/dist/render/index.d.ts +9 -0
  433. package/dist/render/index.d.ts.map +1 -0
  434. package/dist/render/index.js +347 -0
  435. package/dist/render/index.js.map +1 -0
  436. package/dist/render/utils/base.d.ts +74 -0
  437. package/dist/render/utils/base.d.ts.map +1 -0
  438. package/dist/render/utils/base.js +290 -0
  439. package/dist/render/utils/base.js.map +1 -0
  440. package/dist/render/utils/extractRawBlocks.d.ts +10 -0
  441. package/dist/render/utils/extractRawBlocks.d.ts.map +1 -0
  442. package/dist/render/utils/extractRawBlocks.js +28 -0
  443. package/dist/render/utils/extractRawBlocks.js.map +1 -0
  444. package/dist/render/utils/rawBlocks.d.ts +10 -0
  445. package/dist/render/utils/rawBlocks.d.ts.map +1 -0
  446. package/dist/render/utils/rawBlocks.js +28 -0
  447. package/dist/render/utils/rawBlocks.js.map +1 -0
  448. package/dist/render/utils/usageTracker.d.ts +10 -0
  449. package/dist/render/utils/usageTracker.d.ts.map +1 -0
  450. package/dist/render/utils/usageTracker.js +87 -0
  451. package/dist/render/utils/usageTracker.js.map +1 -0
  452. package/dist/responder/index.d.ts +34 -0
  453. package/dist/responder/index.d.ts.map +1 -0
  454. package/dist/responder/index.js +546 -0
  455. package/dist/responder/index.js.map +1 -0
  456. package/dist/server/index.d.ts +7 -0
  457. package/dist/server/index.d.ts.map +1 -0
  458. package/dist/server/index.js +54 -0
  459. package/dist/server/index.js.map +1 -0
  460. package/dist/server/middleware/authorize.d.ts +3 -0
  461. package/dist/server/middleware/authorize.d.ts.map +1 -0
  462. package/dist/server/middleware/authorize.js +15 -0
  463. package/dist/server/middleware/authorize.js.map +1 -0
  464. package/dist/server/middleware/establishAuth.d.ts +3 -0
  465. package/dist/server/middleware/establishAuth.d.ts.map +1 -0
  466. package/dist/server/middleware/establishAuth.js +45 -0
  467. package/dist/server/middleware/establishAuth.js.map +1 -0
  468. package/dist/server/middleware/log.d.ts +3 -0
  469. package/dist/server/middleware/log.d.ts.map +1 -0
  470. package/dist/server/middleware/log.js +12 -0
  471. package/dist/server/middleware/log.js.map +1 -0
  472. package/dist/server/middleware/requirePathMatch.d.ts +3 -0
  473. package/dist/server/middleware/requirePathMatch.d.ts.map +1 -0
  474. package/dist/server/middleware/requirePathMatch.js +25 -0
  475. package/dist/server/middleware/requirePathMatch.js.map +1 -0
  476. package/dist/server/middleware/requireQuery.d.ts +3 -0
  477. package/dist/server/middleware/requireQuery.d.ts.map +1 -0
  478. package/dist/server/middleware/requireQuery.js +24 -0
  479. package/dist/server/middleware/requireQuery.js.map +1 -0
  480. package/dist/server/middleware/withDb.d.ts +4 -0
  481. package/dist/server/middleware/withDb.d.ts.map +1 -0
  482. package/dist/server/middleware/withDb.js +7 -0
  483. package/dist/server/middleware/withDb.js.map +1 -0
  484. package/dist/server/routes/assets.d.ts +4 -0
  485. package/dist/server/routes/assets.d.ts.map +1 -0
  486. package/dist/server/routes/assets.js +178 -0
  487. package/dist/server/routes/assets.js.map +1 -0
  488. package/dist/server/routes/documents.d.ts +4 -0
  489. package/dist/server/routes/documents.d.ts.map +1 -0
  490. package/dist/server/routes/documents.js +40 -0
  491. package/dist/server/routes/documents.js.map +1 -0
  492. package/dist/server/routes/edit.d.ts +22 -0
  493. package/dist/server/routes/edit.d.ts.map +1 -0
  494. package/dist/server/routes/edit.js +494 -0
  495. package/dist/server/routes/edit.js.map +1 -0
  496. package/dist/server/routes/git.d.ts +4 -0
  497. package/dist/server/routes/git.d.ts.map +1 -0
  498. package/dist/server/routes/git.js +612 -0
  499. package/dist/server/routes/git.js.map +1 -0
  500. package/dist/server/routes/readUpload.d.ts +4 -0
  501. package/dist/server/routes/readUpload.d.ts.map +1 -0
  502. package/dist/server/routes/readUpload.js +57 -0
  503. package/dist/server/routes/readUpload.js.map +1 -0
  504. package/dist/server/utils/NotFoundError.d.ts +9 -0
  505. package/dist/server/utils/NotFoundError.d.ts.map +1 -0
  506. package/dist/server/utils/NotFoundError.js +16 -0
  507. package/dist/server/utils/NotFoundError.js.map +1 -0
  508. package/dist/server/utils/editor.css +1535 -0
  509. package/dist/server/utils/htmlEditorPage.d.ts +6 -0
  510. package/dist/server/utils/htmlEditorPage.d.ts.map +1 -0
  511. package/dist/server/utils/htmlEditorPage.js +518 -0
  512. package/dist/server/utils/htmlEditorPage.js.map +1 -0
  513. package/dist/server/utils/htmlLoginPage.d.ts +6 -0
  514. package/dist/server/utils/htmlLoginPage.d.ts.map +1 -0
  515. package/dist/server/utils/htmlLoginPage.js +134 -0
  516. package/dist/server/utils/htmlLoginPage.js.map +1 -0
  517. package/dist/server/utils/layout.css +153 -0
  518. package/dist/server/utils/types.d.ts +18 -0
  519. package/dist/server/utils/types.d.ts.map +1 -0
  520. package/dist/server/utils/types.js +2 -0
  521. package/dist/server/utils/types.js.map +1 -0
  522. package/dist/server-bin/index.d.ts +2 -0
  523. package/dist/server-bin/index.d.ts.map +1 -0
  524. package/dist/server-bin/index.js +26 -0
  525. package/dist/server-bin/index.js.map +1 -0
  526. package/dist/utils/functionContext.d.ts +12 -0
  527. package/dist/utils/functionContext.d.ts.map +1 -0
  528. package/dist/utils/functionContext.js +19 -0
  529. package/dist/utils/functionContext.js.map +1 -0
  530. package/dist/utils/functionContextClient.d.ts +23 -0
  531. package/dist/utils/functionContextClient.d.ts.map +1 -0
  532. package/dist/utils/functionContextClient.js +93 -0
  533. package/dist/utils/functionContextClient.js.map +1 -0
  534. package/dist/utils/stringifyData.d.ts +2 -0
  535. package/dist/utils/stringifyData.d.ts.map +1 -0
  536. package/dist/utils/stringifyData.js +23 -0
  537. package/dist/utils/stringifyData.js.map +1 -0
  538. package/dist/utils/stripImageExif.d.ts +14 -0
  539. package/dist/utils/stripImageExif.d.ts.map +1 -0
  540. package/dist/utils/stripImageExif.js +112 -0
  541. package/dist/utils/stripImageExif.js.map +1 -0
  542. package/dist/utils/types.d.ts +81 -0
  543. package/dist/utils/types.d.ts.map +1 -0
  544. package/dist/utils/types.js +2 -0
  545. package/dist/utils/types.js.map +1 -0
  546. package/migrations/1770796673000_initial-schema.js +178 -0
  547. package/package.json +97 -0
  548. package/pages/skywriter/.github/copilot-instructions.md +94 -0
  549. package/pages/skywriter/content.md +862 -0
  550. package/pages/skywriter/data.json +1 -0
  551. package/pages/skywriter/doc.code-workspace +15 -0
  552. package/pages/skywriter/script.js +1 -0
  553. package/pages/skywriter/server.js +1 -0
  554. package/pages/skywriter/settings.json +11 -0
  555. package/pages/skywriter/style.css +167 -0
  556. package/pages/skywriter/template/content.eta +55 -0
  557. package/pages/skywriter/template/data.json +1 -0
  558. package/pages/skywriter/template/script.js +512 -0
  559. package/pages/skywriter/template/server.js +27 -0
  560. package/pages/skywriter/template/settings.json +11 -0
  561. package/pages/skywriter/template/style.css +447 -0
@@ -0,0 +1,1535 @@
1
+ * {
2
+ box-sizing: border-box;
3
+ }
4
+
5
+ body {
6
+ margin: 0;
7
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
8
+ overflow: hidden;
9
+ height: 100vh;
10
+ height: 100dvh;
11
+ display: flex;
12
+ flex-direction: column;
13
+ }
14
+
15
+ header {
16
+ background: #333;
17
+ color: white;
18
+ padding: 0.75rem 1.5rem;
19
+ flex-shrink: 0;
20
+ border-bottom: 1px solid #222;
21
+ }
22
+
23
+ .header-content {
24
+ display: flex;
25
+ align-items: center;
26
+ gap: 1rem;
27
+ }
28
+
29
+ .logo {
30
+ color: white;
31
+ text-decoration: none;
32
+ font-weight: 600;
33
+ font-size: 1.1rem;
34
+ white-space: nowrap;
35
+ }
36
+
37
+ .header-slug {
38
+ flex: 1;
39
+ max-width: 600px;
40
+ display: flex;
41
+ align-items: center;
42
+ gap: 0.5rem;
43
+ }
44
+
45
+ .header-slug label {
46
+ color: #ccc;
47
+ font-size: 0.9rem;
48
+ white-space: nowrap;
49
+ }
50
+
51
+ .header-slug input {
52
+ flex: 1;
53
+ background: #444;
54
+ border: 1px solid #555;
55
+ color: white;
56
+ padding: 0.5rem 0.75rem;
57
+ border-radius: 4px;
58
+ font-size: 0.9rem;
59
+ font-family: 'Monaco', 'Menlo', 'Courier New', monospace;
60
+ outline: none;
61
+ }
62
+
63
+ .header-slug input:focus-visible {
64
+ outline: 2px solid #528bff;
65
+ outline-offset: 1px;
66
+ }
67
+
68
+ .header-slug input:focus {
69
+ background: #555;
70
+ border-color: #666;
71
+ }
72
+
73
+ .header-slug input::placeholder {
74
+ color: #888;
75
+ font-style: italic;
76
+ }
77
+
78
+ .header-actions {
79
+ display: flex;
80
+ align-items: center;
81
+ gap: 0.75rem;
82
+ }
83
+
84
+ .btn-save,
85
+ .btn-cancel,
86
+ .btn-revert,
87
+ .btn-view,
88
+ .btn-publish {
89
+ padding: 0.5rem 1rem;
90
+ border-radius: 4px;
91
+ font-size: 0.9rem;
92
+ cursor: pointer;
93
+ text-decoration: none;
94
+ border: none;
95
+ white-space: nowrap;
96
+ }
97
+
98
+ .btn-publish {
99
+ background: #6b46c1;
100
+ color: white;
101
+ }
102
+
103
+ .btn-publish:hover:not(:disabled) {
104
+ background: #805ad5;
105
+ }
106
+
107
+ .btn-publish[data-published='false'] {
108
+ background: #4a5568;
109
+ }
110
+
111
+ .btn-publish[data-published='false']:hover:not(:disabled) {
112
+ background: #718096;
113
+ }
114
+
115
+ .btn-publish:disabled {
116
+ background: #555;
117
+ cursor: not-allowed;
118
+ opacity: 0.5;
119
+ color: #999;
120
+ }
121
+
122
+ .btn-save {
123
+ background: #4caf50;
124
+ color: white;
125
+ }
126
+
127
+ .btn-save:hover:not(:disabled) {
128
+ background: #45a049;
129
+ }
130
+
131
+ .btn-save:disabled {
132
+ background: #555;
133
+ cursor: not-allowed;
134
+ opacity: 0.5;
135
+ color: #999;
136
+ }
137
+
138
+ .btn-cancel {
139
+ background: #666;
140
+ color: white;
141
+ display: inline-block;
142
+ }
143
+
144
+ .btn-cancel:hover {
145
+ background: #777;
146
+ }
147
+
148
+ .btn-revert {
149
+ background: #ff9800;
150
+ color: white;
151
+ }
152
+
153
+ .btn-revert:hover:not(:disabled) {
154
+ background: #f57c00;
155
+ }
156
+
157
+ .btn-revert:disabled {
158
+ background: #555;
159
+ cursor: not-allowed;
160
+ opacity: 0.5;
161
+ color: #999;
162
+ }
163
+
164
+ .btn-view {
165
+ background: #2196f3;
166
+ color: white;
167
+ }
168
+
169
+ .btn-view:hover:not(:disabled) {
170
+ background: #1976d2;
171
+ }
172
+
173
+ .btn-view:disabled {
174
+ background: #555;
175
+ cursor: not-allowed;
176
+ opacity: 0.5;
177
+ color: #999;
178
+ }
179
+
180
+ .btn-secondary {
181
+ padding: 0.5rem 1rem;
182
+ border-radius: 4px;
183
+ font-size: 0.9rem;
184
+ cursor: pointer;
185
+ text-decoration: none;
186
+ border: 1px solid #3e4451;
187
+ white-space: nowrap;
188
+ background: #282c34;
189
+ color: #abb2bf;
190
+ transition: all 0.2s;
191
+ }
192
+
193
+ .btn-secondary:hover {
194
+ background: #2c313a;
195
+ border-color: #528bff;
196
+ color: #ffffff;
197
+ }
198
+
199
+ .btn-secondary:active {
200
+ background: #21252b;
201
+ }
202
+
203
+ .draft-status {
204
+ color: #666;
205
+ font-size: 0.85rem;
206
+ font-style: italic;
207
+ }
208
+
209
+ .user-name {
210
+ color: #ccc;
211
+ font-size: 0.9rem;
212
+ }
213
+
214
+ .dev-badge {
215
+ background: #ffc107;
216
+ color: #000;
217
+ padding: 0.5rem 0.75rem;
218
+ border-radius: 4px;
219
+ font-size: 0.75rem;
220
+ font-weight: 600;
221
+ letter-spacing: 0.5px;
222
+ }
223
+
224
+ form {
225
+ display: flex;
226
+ flex: 1;
227
+ overflow: hidden;
228
+ }
229
+
230
+ .editor-container {
231
+ display: flex;
232
+ flex-direction: column;
233
+ width: 100%;
234
+ height: 100%;
235
+ overflow: hidden;
236
+ background: #282c34;
237
+ }
238
+
239
+ .editor-tabs {
240
+ display: flex;
241
+ gap: 0.5rem;
242
+ padding: 0.5rem 1rem;
243
+ background: #1e1e1e;
244
+ border-bottom: 1px solid #333;
245
+ }
246
+
247
+ .tab-button {
248
+ padding: 0.5rem 1rem;
249
+ background: transparent;
250
+ border: none;
251
+ color: #888;
252
+ cursor: pointer;
253
+ font-size: 0.9rem;
254
+ border-radius: 4px 4px 0 0;
255
+ transition: all 0.2s;
256
+ }
257
+
258
+ .tab-button:hover {
259
+ background: #2a2a2a;
260
+ color: #ccc;
261
+ }
262
+
263
+ .tab-button.active {
264
+ background: #282828;
265
+ color: white;
266
+ border-bottom: 2px solid #4caf50;
267
+ }
268
+
269
+ .tab-button.has-draft {
270
+ font-style: italic;
271
+ }
272
+
273
+ .tab-button.is-empty {
274
+ color: #666;
275
+ }
276
+
277
+ .tab-button.has-content {
278
+ font-weight: 600;
279
+ }
280
+
281
+ .tab-button.active.is-empty {
282
+ color: #aaa;
283
+ }
284
+
285
+ .tab-button.active.has-content {
286
+ color: white;
287
+ }
288
+
289
+ .tab-content {
290
+ display: none;
291
+ flex: 1;
292
+ overflow: hidden;
293
+ }
294
+
295
+ .tab-content.active {
296
+ display: flex;
297
+ width: 100%;
298
+ }
299
+
300
+ .tab-content[data-tab-content='content'] {
301
+ flex-direction: row;
302
+ }
303
+
304
+ #content-editor-panel {
305
+ width: 50%;
306
+ display: flex;
307
+ flex-direction: column;
308
+ overflow: hidden;
309
+ flex-shrink: 0;
310
+ }
311
+ .preview-panel {
312
+ flex: 1;
313
+ display: flex;
314
+ flex-direction: column;
315
+ overflow: hidden;
316
+ min-width: 0;
317
+ }
318
+
319
+ #data-editor-panel,
320
+ #style-editor-panel,
321
+ #script-editor-panel,
322
+ #server-editor-panel {
323
+ flex: 1;
324
+ display: flex;
325
+ flex-direction: column;
326
+ overflow: hidden;
327
+ }
328
+
329
+ #data-editor-panel,
330
+ #style-editor-panel,
331
+ #script-editor-panel,
332
+ #server-editor-panel {
333
+ flex: 1;
334
+ }
335
+
336
+ #content-editor-panel {
337
+ position: relative;
338
+ }
339
+
340
+ #content-editor-panel .cm-editor,
341
+ #data-editor-panel .cm-editor,
342
+ #style-editor-panel .cm-editor,
343
+ #script-editor-panel .cm-editor,
344
+ #server-editor-panel .cm-editor {
345
+ height: 100%;
346
+ font-size: 0.95rem;
347
+ outline: none;
348
+ }
349
+
350
+ #content-editor-panel .cm-scroller,
351
+ #data-editor-panel .cm-scroller,
352
+ #style-editor-panel .cm-scroller,
353
+ #script-editor-panel .cm-scroller,
354
+ #server-editor-panel .cm-scroller {
355
+ overflow: auto;
356
+ font-family: 'Monaco', 'Menlo', 'Courier New', monospace;
357
+ }
358
+
359
+ #content-editor-panel .cm-content,
360
+ #data-editor-panel .cm-content,
361
+ #style-editor-panel .cm-content,
362
+ #script-editor-panel .cm-content,
363
+ #server-editor-panel .cm-content {
364
+ padding: 1.5rem;
365
+ }
366
+
367
+ #content-editor-panel .cm-line,
368
+ #data-editor-panel .cm-line,
369
+ #style-editor-panel .cm-line,
370
+ #script-editor-panel .cm-line,
371
+ #server-editor-panel .cm-line {
372
+ padding: 0;
373
+ }
374
+
375
+ /* Handlebars highlighting in markdown editor */
376
+ #content-editor-panel .cm-handlebars {
377
+ color: #ce9178;
378
+ font-weight: 500;
379
+ }
380
+
381
+ .resizer {
382
+ width: 6px;
383
+ background: #ddd;
384
+ cursor: col-resize;
385
+ flex-shrink: 0;
386
+ transition: background 0.2s;
387
+ user-select: none;
388
+ }
389
+
390
+ .resizer:hover {
391
+ background: #4caf50;
392
+ }
393
+
394
+ .resizer:active {
395
+ background: #4caf50;
396
+ }
397
+
398
+ .preview-iframe {
399
+ width: 100%;
400
+ height: 100%;
401
+ border: none;
402
+ background: white;
403
+ }
404
+
405
+ /* Drag-over visual indicator */
406
+ #content-editor-panel.drag-over,
407
+ #data-editor-panel.drag-over,
408
+ #style-editor-panel.drag-over,
409
+ #script-editor-panel.drag-over,
410
+ #server-editor-panel.drag-over {
411
+ outline: 2px dashed #4caf50;
412
+ background: #222 !important;
413
+ }
414
+
415
+ .preview-content {
416
+ padding: 1.5rem;
417
+ height: 100%;
418
+ background: white;
419
+ overflow-y: auto;
420
+ line-height: 1.8;
421
+ }
422
+
423
+ .preview-content img {
424
+ max-width: 100%;
425
+ height: auto;
426
+ }
427
+
428
+ .preview-content pre {
429
+ background: #f5f5f5;
430
+ padding: 1rem;
431
+ border-radius: 4px;
432
+ overflow-x: auto;
433
+ }
434
+
435
+ .preview-content code {
436
+ background: #f5f5f5;
437
+ padding: 0.2rem 0.4rem;
438
+ border-radius: 3px;
439
+ font-size: 0.9em;
440
+ }
441
+
442
+ .preview-content pre code {
443
+ background: none;
444
+ padding: 0;
445
+ }
446
+
447
+ .preview-content h1,
448
+ .preview-content h2,
449
+ .preview-content h3 {
450
+ margin-top: 1.5em;
451
+ margin-bottom: 0.5em;
452
+ }
453
+
454
+ .preview-content h1:first-child,
455
+ .preview-content h2:first-child,
456
+ .preview-content h3:first-child {
457
+ margin-top: 0;
458
+ }
459
+
460
+ .preview-content p {
461
+ margin: 1em 0;
462
+ }
463
+
464
+ .preview-content blockquote {
465
+ border-left: 4px solid #ddd;
466
+ margin: 1em 0;
467
+ padding-left: 1em;
468
+ color: #666;
469
+ }
470
+
471
+ /* Settings panel styles */
472
+ .settings-panel {
473
+ display: flex;
474
+ background: #282c34;
475
+ overflow-y: auto;
476
+ position: relative;
477
+ width: 100%;
478
+ justify-content: center;
479
+ }
480
+
481
+ .settings-inner {
482
+ display: flex;
483
+ width: 100%;
484
+ max-width: 1000px;
485
+ margin: 0 auto;
486
+ min-height: min-content;
487
+ }
488
+
489
+ .settings-sidebar {
490
+ width: 200px;
491
+ min-width: 200px;
492
+ background: #282c34;
493
+ overflow-y: auto;
494
+ padding: 2rem 1rem;
495
+ }
496
+
497
+ .settings-nav {
498
+ list-style: none;
499
+ margin: 0;
500
+ padding: 0;
501
+ }
502
+
503
+ .settings-nav li {
504
+ margin-bottom: 0.25rem;
505
+ }
506
+
507
+ .settings-nav-link {
508
+ display: block;
509
+ padding: 0.5rem 0.75rem;
510
+ color: #abb2bf;
511
+ text-decoration: none;
512
+ border-radius: 6px;
513
+ font-size: 0.95rem;
514
+ transition:
515
+ background-color 0.2s,
516
+ color 0.2s;
517
+ }
518
+
519
+ .settings-nav-link:hover {
520
+ background: #21252b;
521
+ color: #ffffff;
522
+ }
523
+
524
+ .settings-content {
525
+ flex: 1;
526
+ padding: 2rem;
527
+ scroll-behavior: smooth;
528
+ background: #282c34;
529
+ }
530
+
531
+ .settings-section {
532
+ margin-bottom: 3rem;
533
+ padding-bottom: 2rem;
534
+ border-bottom: 1px solid #3e4451;
535
+ scroll-margin-top: 1rem;
536
+ }
537
+
538
+ .settings-section:last-child {
539
+ border-bottom: none;
540
+ }
541
+
542
+ .settings-section-title {
543
+ color: #ffffff;
544
+ font-size: 1.5rem;
545
+ font-weight: 600;
546
+ margin: 0 0 1.5rem 0;
547
+ }
548
+
549
+ .settings-section-body {
550
+ max-width: 100%;
551
+ }
552
+
553
+ /* Responsive: stack sidebar on smaller screens */
554
+ @media (max-width: 1024px) {
555
+ .settings-inner {
556
+ flex-direction: column;
557
+ width: 100%;
558
+ max-width: 100%;
559
+ }
560
+
561
+ .settings-sidebar {
562
+ width: 100%;
563
+ min-width: auto;
564
+ border-right: none;
565
+ border-bottom: 1px solid #3e4451;
566
+ padding: 1rem;
567
+ }
568
+
569
+ .settings-nav {
570
+ display: flex;
571
+ gap: 0.5rem;
572
+ overflow-x: auto;
573
+ }
574
+
575
+ .settings-nav li {
576
+ margin-bottom: 0;
577
+ }
578
+
579
+ .settings-content {
580
+ padding: 1.5rem 1rem;
581
+ }
582
+ }
583
+
584
+ .settings-form {
585
+ padding: 2rem;
586
+ max-width: 1400px;
587
+ margin: 0 auto;
588
+ }
589
+
590
+ .settings-grid {
591
+ display: grid;
592
+ grid-template-columns: 1fr 1fr;
593
+ gap: 3rem;
594
+ margin-bottom: 2rem;
595
+ }
596
+
597
+ .settings-column-main {
598
+ min-width: 0;
599
+ }
600
+
601
+ .settings-column-side {
602
+ min-width: 0;
603
+ }
604
+
605
+ /* Stack on smaller screens */
606
+ @media (max-width: 1024px) {
607
+ .settings-grid {
608
+ grid-template-columns: 1fr;
609
+ gap: 1.5rem;
610
+ }
611
+ }
612
+
613
+ .form-group {
614
+ margin-bottom: 1.5rem;
615
+ }
616
+
617
+ .form-group label {
618
+ display: block;
619
+ color: #abb2bf;
620
+ font-size: 0.9rem;
621
+ font-weight: 500;
622
+ margin-bottom: 0.5rem;
623
+ }
624
+
625
+ .form-group input[type='text'] {
626
+ width: 100%;
627
+ background: #21252b;
628
+ border: 1px solid #3e4451;
629
+ color: #abb2bf;
630
+ padding: 0.75rem;
631
+ border-radius: 4px;
632
+ font-size: 0.95rem;
633
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
634
+ outline: none;
635
+ transition:
636
+ border-color 0.2s,
637
+ background-color 0.2s;
638
+ }
639
+
640
+ .form-group input[type='text']:focus-visible {
641
+ outline: 2px solid #528bff;
642
+ outline-offset: 1px;
643
+ }
644
+
645
+ .form-group input[type='text']:focus {
646
+ background: #282c34;
647
+ border-color: #528bff;
648
+ }
649
+
650
+ .form-group input[type='text']::placeholder {
651
+ color: #5c6370;
652
+ }
653
+
654
+ .form-group input[type='checkbox'] {
655
+ margin-right: 0.5rem;
656
+ width: 18px;
657
+ height: 18px;
658
+ cursor: pointer;
659
+ vertical-align: middle;
660
+ }
661
+
662
+ .form-group label:has(input[type='checkbox']) {
663
+ display: flex;
664
+ align-items: center;
665
+ cursor: pointer;
666
+ font-size: 1rem;
667
+ }
668
+
669
+ .help-text {
670
+ color: #5c6370;
671
+ font-size: 0.85rem;
672
+ margin: 0.5rem 0 0 0;
673
+ font-style: italic;
674
+ }
675
+
676
+ .selected-item {
677
+ display: flex;
678
+ align-items: center;
679
+ gap: 0.75rem;
680
+ padding: 0.75rem;
681
+ background: #2c313c;
682
+ border: 1px solid #3e4451;
683
+ border-radius: 4px;
684
+ margin-bottom: 0.5rem;
685
+ }
686
+
687
+ .selected-item .selected-link {
688
+ display: flex;
689
+ align-items: center;
690
+ gap: 0.75rem;
691
+ flex: 1;
692
+ text-decoration: none;
693
+ color: inherit;
694
+ transition: opacity 0.2s;
695
+ }
696
+
697
+ .selected-item .selected-link:hover {
698
+ opacity: 0.8;
699
+ }
700
+
701
+ .selected-item strong {
702
+ color: #abb2bf;
703
+ font-size: 0.95rem;
704
+ }
705
+
706
+ .selected-item .selected-path {
707
+ color: #61afef;
708
+ font-size: 0.85rem;
709
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', monospace;
710
+ flex: 1;
711
+ }
712
+
713
+ .selected-item .clear-selection {
714
+ background: transparent;
715
+ border: none;
716
+ color: #e06c75;
717
+ cursor: pointer;
718
+ font-size: 1.2rem;
719
+ padding: 0 0.5rem;
720
+ line-height: 1;
721
+ transition: color 0.2s;
722
+ }
723
+
724
+ .selected-item .clear-selection:hover {
725
+ color: #ff6b7a;
726
+ }
727
+
728
+ .no-uploads {
729
+ color: #5c6370;
730
+ font-style: italic;
731
+ margin: 0;
732
+ }
733
+
734
+ .uploads-table {
735
+ width: 100%;
736
+ border-collapse: collapse;
737
+ background: #21252b;
738
+ border: 1px solid #3e4451;
739
+ border-radius: 4px;
740
+ overflow: hidden;
741
+ }
742
+
743
+ .uploads-table th {
744
+ background: #2c313c;
745
+ color: #abb2bf;
746
+ text-align: left;
747
+ padding: 0.75rem;
748
+ font-size: 0.85rem;
749
+ font-weight: 600;
750
+ border-bottom: 1px solid #3e4451;
751
+ }
752
+
753
+ .uploads-table td {
754
+ padding: 0.75rem;
755
+ color: #abb2bf;
756
+ border-bottom: 1px solid #3e4451;
757
+ }
758
+
759
+ .uploads-table tr:last-child td {
760
+ border-bottom: none;
761
+ }
762
+
763
+ .uploads-table tr:hover {
764
+ background: #282c34;
765
+ }
766
+
767
+ /* Hidden uploads styling */
768
+ .upload-hidden {
769
+ opacity: 0.5;
770
+ }
771
+
772
+ .upload-hidden:hover {
773
+ opacity: 0.8;
774
+ }
775
+
776
+ .hidden-toggle {
777
+ display: inline-flex;
778
+ align-items: center;
779
+ cursor: pointer;
780
+ font-size: 0.85rem;
781
+ color: #5c6370;
782
+ gap: 0.25rem;
783
+ }
784
+
785
+ .hidden-checkbox {
786
+ cursor: pointer;
787
+ }
788
+
789
+ .delete-upload-btn {
790
+ color: #e06c75 !important;
791
+ font-weight: bold;
792
+ }
793
+
794
+ .delete-upload-btn:hover {
795
+ color: #ff8b94 !important;
796
+ }
797
+
798
+ .filename-display {
799
+ cursor: pointer;
800
+ display: inline-block;
801
+ padding: 0.25rem 0;
802
+ }
803
+
804
+ .filename-display:hover {
805
+ color: #61afef;
806
+ text-decoration: underline;
807
+ }
808
+
809
+ .filename-input {
810
+ background: #282c34;
811
+ border: 1px solid #528bff;
812
+ color: #abb2bf;
813
+ padding: 0.25rem 0.5rem;
814
+ border-radius: 3px;
815
+ font-size: 0.9rem;
816
+ font-family: inherit;
817
+ outline: none;
818
+ width: 100%;
819
+ }
820
+
821
+ .date-header {
822
+ text-align: right !important;
823
+ width: 90px;
824
+ }
825
+
826
+ .upload-date {
827
+ color: #5c6370;
828
+ font-size: 0.85rem;
829
+ text-align: right;
830
+ width: 90px;
831
+ }
832
+
833
+ .upload-actions {
834
+ text-align: right;
835
+ width: 80px;
836
+ white-space: nowrap;
837
+ }
838
+
839
+ .icon-btn {
840
+ background: transparent;
841
+ border: none;
842
+ cursor: pointer;
843
+ font-size: 1.1rem;
844
+ padding: 0.25rem 0.5rem;
845
+ opacity: 0.7;
846
+ transition: opacity 0.2s;
847
+ display: inline-block;
848
+ text-decoration: none;
849
+ }
850
+
851
+ .icon-btn:hover {
852
+ opacity: 1;
853
+ }
854
+
855
+ .filename-link {
856
+ color: #61afef;
857
+ text-decoration: none;
858
+ transition: color 0.2s;
859
+ }
860
+
861
+ .filename-link:hover {
862
+ color: #7bc3ff;
863
+ text-decoration: underline;
864
+ }
865
+
866
+ .delete-upload-btn {
867
+ background: transparent;
868
+ border: none;
869
+ color: #e06c75;
870
+ cursor: pointer;
871
+ font-size: 1.2rem;
872
+ padding: 0 0.5rem;
873
+ line-height: 1;
874
+ transition: color 0.2s;
875
+ }
876
+
877
+ .delete-upload-btn:hover {
878
+ color: #ff6b7a;
879
+ }
880
+
881
+ /* Redirects table styles (similar to uploads) */
882
+ .redirects-table {
883
+ width: 100%;
884
+ border-collapse: collapse;
885
+ background: #21252b;
886
+ border: 1px solid #3e4451;
887
+ border-radius: 4px;
888
+ overflow: hidden;
889
+ }
890
+
891
+ .redirects-table th {
892
+ background: #2c313c;
893
+ color: #abb2bf;
894
+ text-align: left;
895
+ padding: 0.75rem;
896
+ font-size: 0.85rem;
897
+ font-weight: 600;
898
+ border-bottom: 1px solid #3e4451;
899
+ }
900
+
901
+ .redirects-table td {
902
+ padding: 0.75rem;
903
+ color: #abb2bf;
904
+ border-bottom: 1px solid #3e4451;
905
+ }
906
+
907
+ .redirects-table tr:last-child td {
908
+ border-bottom: none;
909
+ }
910
+
911
+ .redirects-table tr:hover {
912
+ background: #282c34;
913
+ }
914
+
915
+ .redirect-path {
916
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
917
+ }
918
+
919
+ .redirect-link {
920
+ color: #61afef;
921
+ text-decoration: none;
922
+ transition: color 0.2s;
923
+ }
924
+
925
+ .redirect-link:hover {
926
+ color: #7bc3ff;
927
+ text-decoration: underline;
928
+ }
929
+
930
+ .redirect-date {
931
+ color: #5c6370;
932
+ font-size: 0.85rem;
933
+ text-align: right;
934
+ width: 90px;
935
+ }
936
+
937
+ .redirect-actions {
938
+ text-align: right;
939
+ width: 50px;
940
+ }
941
+
942
+ .delete-redirect-btn {
943
+ background: transparent;
944
+ border: none;
945
+ color: #e06c75;
946
+ cursor: pointer;
947
+ font-size: 1.2rem;
948
+ padding: 0 0.5rem;
949
+ line-height: 1;
950
+ transition: color 0.2s;
951
+ }
952
+
953
+ .delete-redirect-btn:hover {
954
+ color: #ff6b7a;
955
+ }
956
+
957
+ .no-redirects {
958
+ color: #5c6370;
959
+ font-style: italic;
960
+ margin: 0;
961
+ padding: 1rem;
962
+ text-align: center;
963
+ }
964
+
965
+ .no-uploads {
966
+ color: #5c6370;
967
+ font-style: italic;
968
+ margin: 0;
969
+ padding: 1rem;
970
+ text-align: center;
971
+ }
972
+
973
+ /* Upload and redirect controls */
974
+ .upload-controls,
975
+ .redirect-controls {
976
+ margin-top: 1rem;
977
+ padding: 1rem;
978
+ background: #21252b;
979
+ border-radius: 4px;
980
+ border: 1px solid #3e4451;
981
+ }
982
+
983
+ .upload-controls {
984
+ display: flex;
985
+ flex-direction: column;
986
+ gap: 0.5rem;
987
+ }
988
+
989
+ .redirect-controls {
990
+ display: flex;
991
+ gap: 0.5rem;
992
+ align-items: center;
993
+ }
994
+
995
+ .redirect-controls input[type='text'] {
996
+ flex: 1;
997
+ padding: 0.5rem;
998
+ background: #282c34;
999
+ border: 1px solid #3e4451;
1000
+ border-radius: 4px;
1001
+ color: #abb2bf;
1002
+ font-family: 'Menlo', 'Monaco', 'Courier New', monospace;
1003
+ }
1004
+
1005
+ .redirect-controls input[type='text']:focus {
1006
+ outline: none;
1007
+ border-color: #528bff;
1008
+ }
1009
+
1010
+ .uploads-section,
1011
+ .redirects-section {
1012
+ width: 100%;
1013
+ }
1014
+
1015
+ /* API Links Section */
1016
+ .api-links-list {
1017
+ background: #282c34;
1018
+ border: 1px solid #3e4451;
1019
+ border-radius: 4px;
1020
+ padding: 1rem;
1021
+ margin-top: 0.5rem;
1022
+ }
1023
+
1024
+ .api-link-item {
1025
+ padding: 0.5rem 0;
1026
+ border-bottom: 1px solid #3e4451;
1027
+ overflow: hidden;
1028
+ }
1029
+
1030
+ .api-link-item:last-child {
1031
+ border-bottom: none;
1032
+ }
1033
+
1034
+ .api-link-item a {
1035
+ display: block;
1036
+ max-width: 100%;
1037
+ overflow: hidden;
1038
+ text-overflow: ellipsis;
1039
+ white-space: nowrap !important;
1040
+ overflow-wrap: normal !important;
1041
+ word-break: normal !important;
1042
+ color: #61afef;
1043
+ text-decoration: none;
1044
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
1045
+ font-size: 0.9rem;
1046
+ transition: color 0.2s;
1047
+ }
1048
+
1049
+ .api-link-item a:hover {
1050
+ color: #98c379;
1051
+ text-decoration: underline;
1052
+ }
1053
+
1054
+ /* Settings divider */
1055
+ .settings-divider {
1056
+ border: none;
1057
+ border-top: 1px solid #3e4451;
1058
+ margin: 2rem 0;
1059
+ }
1060
+
1061
+ /* Global Operations Section */
1062
+ .global-operations {
1063
+ margin-top: 1rem;
1064
+ }
1065
+
1066
+ .global-operations-buttons {
1067
+ display: flex;
1068
+ gap: 1rem;
1069
+ margin-top: 0.5rem;
1070
+ }
1071
+
1072
+ /* Danger Zone (GitHub-like) */
1073
+ .danger-zone-panel {
1074
+ border: 1px solid #3e4451;
1075
+ border-radius: 6px;
1076
+ background: transparent;
1077
+ padding: 0;
1078
+ }
1079
+
1080
+ .danger-zone-row {
1081
+ display: flex;
1082
+ align-items: flex-start;
1083
+ justify-content: space-between;
1084
+ gap: 2rem;
1085
+ padding: 1.5rem;
1086
+ }
1087
+
1088
+ .danger-zone-row + .danger-zone-row {
1089
+ border-top: 1px solid #3e4451;
1090
+ }
1091
+
1092
+ .danger-zone-row:first-child {
1093
+ border-top-left-radius: 6px;
1094
+ border-top-right-radius: 6px;
1095
+ }
1096
+
1097
+ .danger-zone-row:last-child {
1098
+ border-bottom-left-radius: 6px;
1099
+ border-bottom-right-radius: 6px;
1100
+ }
1101
+
1102
+ .danger-zone-row-text {
1103
+ flex: 1;
1104
+ min-width: 0;
1105
+ }
1106
+
1107
+ .danger-zone-row-title {
1108
+ color: #ffffff;
1109
+ font-weight: 600;
1110
+ margin: 0 0 0.25rem 0;
1111
+ font-size: 0.95rem;
1112
+ }
1113
+
1114
+ .danger-zone-row-description {
1115
+ color: #abb2bf;
1116
+ font-size: 0.875rem;
1117
+ line-height: 1.5;
1118
+ margin: 0;
1119
+ }
1120
+
1121
+ .danger-zone-row-action {
1122
+ flex: 0 0 auto;
1123
+ }
1124
+
1125
+ /* Override global `form { flex: 1; }` within danger zone */
1126
+ .danger-zone-row-action form {
1127
+ flex: 0 0 auto;
1128
+ display: block;
1129
+ overflow: visible;
1130
+ }
1131
+
1132
+ .btn-delete,
1133
+ .btn-logout {
1134
+ display: inline-flex;
1135
+ align-items: center;
1136
+ justify-content: center;
1137
+ gap: 0.5rem;
1138
+ padding: 0.5rem 1rem;
1139
+ background: transparent;
1140
+ color: #dc3545;
1141
+ text-decoration: none;
1142
+ border-radius: 6px;
1143
+ font-weight: 500;
1144
+ transition: all 0.2s;
1145
+ border: 1px solid #dc3545;
1146
+ cursor: pointer;
1147
+ font-size: 0.875rem;
1148
+ font-family: inherit;
1149
+ white-space: nowrap;
1150
+ }
1151
+
1152
+ .btn-delete:hover:not(:disabled),
1153
+ .btn-logout:hover:not(:disabled) {
1154
+ background: #dc3545;
1155
+ color: #ffffff;
1156
+ }
1157
+
1158
+ .btn-delete:disabled,
1159
+ .btn-logout:disabled {
1160
+ opacity: 0.5;
1161
+ cursor: not-allowed;
1162
+ }
1163
+
1164
+ /* Drag and drop styling for settings panel */
1165
+ .settings-panel.drag-over {
1166
+ background: #2c313a;
1167
+ border: 2px dashed rgba(82, 139, 255, 0.15);
1168
+ border-radius: 8px;
1169
+ }
1170
+
1171
+ .settings-panel.drag-over::before {
1172
+ content: 'Drop files to upload';
1173
+ position: absolute;
1174
+ top: 50%;
1175
+ left: 50%;
1176
+ transform: translate(-50%, -50%);
1177
+ font-size: 1.5rem;
1178
+ color: #5c6370;
1179
+ font-weight: bold;
1180
+ pointer-events: none;
1181
+ z-index: 10;
1182
+ }
1183
+
1184
+ /* Autocomplete dropdown styles */
1185
+ .autocomplete-dropdown {
1186
+ position: absolute;
1187
+ width: 100%;
1188
+ max-height: 300px;
1189
+ overflow-y: auto;
1190
+ background: #21252b;
1191
+ border: 1px solid #3e4451;
1192
+ border-top: none;
1193
+ border-radius: 0 0 4px 4px;
1194
+ z-index: 1000;
1195
+ display: none;
1196
+ }
1197
+
1198
+ .autocomplete-dropdown.show {
1199
+ display: block;
1200
+ }
1201
+
1202
+ .dropdown-item {
1203
+ padding: 0.75rem;
1204
+ cursor: pointer;
1205
+ color: #abb2bf !important;
1206
+ border-bottom: 1px solid #282c34;
1207
+ transition: background-color 0.15s;
1208
+ }
1209
+
1210
+ .dropdown-item:last-child {
1211
+ border-bottom: none;
1212
+ }
1213
+
1214
+ .dropdown-item:hover {
1215
+ background: #2c313a;
1216
+ }
1217
+
1218
+ .dropdown-item.no-results {
1219
+ color: #5c6370 !important;
1220
+ cursor: default;
1221
+ font-style: italic;
1222
+ }
1223
+
1224
+ .dropdown-title {
1225
+ font-size: 0.9rem;
1226
+ color: #abb2bf !important;
1227
+ font-weight: 500;
1228
+ }
1229
+
1230
+ .dropdown-path {
1231
+ font-size: 0.8rem;
1232
+ color: #61afef !important;
1233
+ margin-top: 0.2rem;
1234
+ }
1235
+
1236
+ .autocomplete-item {
1237
+ padding: 0.75rem;
1238
+ cursor: pointer;
1239
+ color: #abb2bf !important;
1240
+ border-bottom: 1px solid #282c34;
1241
+ transition: background-color 0.15s;
1242
+ }
1243
+
1244
+ .autocomplete-item:last-child {
1245
+ border-bottom: none;
1246
+ }
1247
+
1248
+ .autocomplete-item:hover,
1249
+ .autocomplete-item.selected {
1250
+ background: #2c313a;
1251
+ }
1252
+
1253
+ .autocomplete-item-path {
1254
+ font-size: 0.9rem;
1255
+ color: #61afef !important;
1256
+ font-weight: 500;
1257
+ }
1258
+
1259
+ .autocomplete-item-title {
1260
+ font-size: 0.85rem;
1261
+ color: #98c379 !important;
1262
+ margin-top: 0.2rem;
1263
+ }
1264
+
1265
+ .form-group {
1266
+ position: relative;
1267
+ }
1268
+
1269
+ /* Status indicator in header */
1270
+ .status-indicator {
1271
+ display: flex;
1272
+ align-items: center;
1273
+ gap: 0.5rem;
1274
+ opacity: 0;
1275
+ transition: opacity 0.2s ease-in-out;
1276
+ margin-right: 1rem;
1277
+ min-width: 150px;
1278
+ }
1279
+
1280
+ .status-indicator.visible {
1281
+ opacity: 1;
1282
+ }
1283
+
1284
+ .status-text {
1285
+ font-size: 0.85rem;
1286
+ color: #98c379;
1287
+ font-weight: 500;
1288
+ }
1289
+ /* Toast notification system */
1290
+ .toast-container {
1291
+ position: fixed;
1292
+ bottom: 20px;
1293
+ right: 20px;
1294
+ z-index: 10000;
1295
+ display: flex;
1296
+ flex-direction: column;
1297
+ gap: 10px;
1298
+ pointer-events: none;
1299
+ }
1300
+
1301
+ .toast {
1302
+ background: #333;
1303
+ color: white;
1304
+ padding: 12px 20px;
1305
+ border-radius: 6px;
1306
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
1307
+ font-size: 0.9rem;
1308
+ max-width: 400px;
1309
+ opacity: 0;
1310
+ transform: translateX(100px);
1311
+ transition: all 0.3s ease-out;
1312
+ pointer-events: auto;
1313
+ word-wrap: break-word;
1314
+ }
1315
+
1316
+ .toast.show {
1317
+ opacity: 1;
1318
+ transform: translateX(0);
1319
+ }
1320
+
1321
+ .toast-error {
1322
+ background: #e06c75;
1323
+ color: white;
1324
+ }
1325
+
1326
+ .toast-success {
1327
+ background: #98c379;
1328
+ color: #282c34;
1329
+ }
1330
+
1331
+ .toast-info {
1332
+ background: #61afef;
1333
+ color: #282c34;
1334
+ }
1335
+
1336
+ /* ========================================
1337
+ Accessibility utilities
1338
+ ======================================== */
1339
+
1340
+ /* Screen-reader only content */
1341
+ .sr-only {
1342
+ position: absolute;
1343
+ width: 1px;
1344
+ height: 1px;
1345
+ padding: 0;
1346
+ margin: -1px;
1347
+ overflow: hidden;
1348
+ clip: rect(0, 0, 0, 0);
1349
+ white-space: nowrap;
1350
+ border: 0;
1351
+ }
1352
+
1353
+ /* Skip navigation link */
1354
+ .skip-link {
1355
+ position: absolute;
1356
+ top: -100%;
1357
+ left: 0;
1358
+ z-index: 100000;
1359
+ padding: 0.75rem 1.5rem;
1360
+ background: #528bff;
1361
+ color: #fff;
1362
+ text-decoration: none;
1363
+ font-weight: 600;
1364
+ border-radius: 0 0 4px 0;
1365
+ }
1366
+
1367
+ .skip-link:focus {
1368
+ top: 0;
1369
+ }
1370
+
1371
+ /* Focus-visible for buttons */
1372
+ .btn-save:focus-visible,
1373
+ .btn-cancel:focus-visible,
1374
+ .btn-revert:focus-visible,
1375
+ .btn-view:focus-visible,
1376
+ .btn-publish:focus-visible,
1377
+ .btn-secondary:focus-visible,
1378
+ .btn-delete:focus-visible,
1379
+ .btn-logout:focus-visible,
1380
+ .tab-button:focus-visible,
1381
+ .icon-btn:focus-visible,
1382
+ .delete-upload-btn:focus-visible,
1383
+ .delete-redirect-btn:focus-visible,
1384
+ .settings-nav-link:focus-visible {
1385
+ outline: 2px solid #528bff;
1386
+ outline-offset: 2px;
1387
+ }
1388
+
1389
+ /* Focus-visible for resizer */
1390
+ .resizer:focus-visible {
1391
+ outline: 2px solid #528bff;
1392
+ background: #4caf50;
1393
+ }
1394
+
1395
+ /* ========================================
1396
+ Mobile responsive layout (≤768px)
1397
+ ======================================== */
1398
+
1399
+ @media (max-width: 768px) {
1400
+ /* Header: stack slug and actions vertically */
1401
+ header {
1402
+ padding: 0.5rem 0.75rem;
1403
+ }
1404
+
1405
+ .header-content {
1406
+ flex-wrap: wrap;
1407
+ gap: 0.5rem;
1408
+ }
1409
+
1410
+ .header-slug {
1411
+ flex: 1 1 100%;
1412
+ max-width: 100%;
1413
+ order: 1;
1414
+ }
1415
+
1416
+ .status-indicator {
1417
+ order: 2;
1418
+ min-width: auto;
1419
+ margin-right: 0;
1420
+ }
1421
+
1422
+ .header-actions {
1423
+ order: 3;
1424
+ flex-wrap: wrap;
1425
+ gap: 0.5rem !important;
1426
+ margin-left: 0 !important;
1427
+ width: 100%;
1428
+ }
1429
+
1430
+ /* Make header buttons minimum touch target size */
1431
+ .btn-save,
1432
+ .btn-cancel,
1433
+ .btn-revert,
1434
+ .btn-view,
1435
+ .btn-publish {
1436
+ min-height: 44px;
1437
+ min-width: 44px;
1438
+ padding: 0.5rem 0.75rem;
1439
+ font-size: 0.85rem;
1440
+ }
1441
+
1442
+ /* Editor tabs: horizontal scroll */
1443
+ .editor-tabs {
1444
+ overflow-x: auto;
1445
+ -webkit-overflow-scrolling: touch;
1446
+ scrollbar-width: none;
1447
+ padding: 0.5rem 0.5rem;
1448
+ gap: 0.25rem;
1449
+ }
1450
+
1451
+ .editor-tabs::-webkit-scrollbar {
1452
+ display: none;
1453
+ }
1454
+
1455
+ .tab-button {
1456
+ flex-shrink: 0;
1457
+ min-height: 44px;
1458
+ padding: 0.5rem 0.75rem;
1459
+ font-size: 0.8rem;
1460
+ }
1461
+
1462
+ /* Content tab: stack editor and preview vertically */
1463
+ .tab-content[data-tab-content='content'] {
1464
+ flex-direction: column;
1465
+ }
1466
+
1467
+ #content-editor-panel {
1468
+ width: 100% !important;
1469
+ height: 50%;
1470
+ flex-shrink: 0;
1471
+ }
1472
+
1473
+ /* Hide resizer on mobile — panels stack vertically */
1474
+ .resizer {
1475
+ display: none;
1476
+ }
1477
+
1478
+ .preview-panel {
1479
+ min-height: 0;
1480
+ flex: 1;
1481
+ }
1482
+
1483
+ /* Touch targets for icon buttons */
1484
+ .icon-btn,
1485
+ .delete-upload-btn,
1486
+ .delete-redirect-btn {
1487
+ min-height: 44px;
1488
+ min-width: 44px;
1489
+ display: inline-flex;
1490
+ align-items: center;
1491
+ justify-content: center;
1492
+ }
1493
+
1494
+ /* Settings panel adjustments */
1495
+ .settings-content {
1496
+ padding: 1rem 0.75rem;
1497
+ }
1498
+
1499
+ .settings-section-title {
1500
+ font-size: 1.25rem;
1501
+ }
1502
+
1503
+ /* Danger zone: stack on mobile */
1504
+ .danger-zone-row {
1505
+ flex-direction: column;
1506
+ gap: 1rem;
1507
+ padding: 1rem;
1508
+ }
1509
+
1510
+ /* Redirect controls: stack on mobile */
1511
+ .redirect-controls {
1512
+ flex-direction: column;
1513
+ }
1514
+
1515
+ .redirect-controls .btn-secondary {
1516
+ min-height: 44px;
1517
+ width: 100%;
1518
+ }
1519
+
1520
+ /* Toast: full width on mobile */
1521
+ .toast-container {
1522
+ left: 10px;
1523
+ right: 10px;
1524
+ bottom: 10px;
1525
+ }
1526
+
1527
+ .toast {
1528
+ max-width: 100%;
1529
+ }
1530
+
1531
+ /* Autocomplete dropdown: full width */
1532
+ .autocomplete-dropdown {
1533
+ max-height: 200px;
1534
+ }
1535
+ }