openship 0.1.1 → 0.1.7

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 (607) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.js +5786 -0
  3. package/dist/server/index.js +324319 -0
  4. package/dist/server/migrations/0000_init.sql +666 -0
  5. package/dist/server/migrations/0001_brief_tomorrow_man.sql +47 -0
  6. package/dist/server/migrations/0002_funny_dazzler.sql +2 -0
  7. package/dist/server/migrations/0003_third_killer_shrike.sql +1 -0
  8. package/dist/server/migrations/0004_session_active_org_not_null.sql +10 -0
  9. package/dist/server/migrations/0005_warm_amazoness.sql +3 -0
  10. package/dist/server/migrations/0006_lumpy_joystick.sql +1 -0
  11. package/dist/server/migrations/0007_outgoing_maginty.sql +2 -0
  12. package/dist/server/migrations/0008_frozen_cutover.sql +3 -0
  13. package/dist/server/migrations/0009_credits_billing.sql +142 -0
  14. package/dist/server/migrations/0010_credit_grant_dedupe.sql +14 -0
  15. package/dist/server/migrations/0011_remove_credit_ledger.sql +23 -0
  16. package/dist/server/migrations/0012_smart_deploys_and_git_rollback.sql +81 -0
  17. package/dist/server/migrations/0013_fix_check_run_rollup_unique.sql +38 -0
  18. package/dist/server/migrations/0014_default_rollback_git.sql +9 -0
  19. package/dist/server/migrations/0015_billing_idempotency_grants.sql +41 -0
  20. package/dist/server/migrations/0016_github_auth_high_findings.sql +30 -0
  21. package/dist/server/migrations/0017_spooky_rumiko_fujikawa.sql +6 -0
  22. package/dist/server/migrations/0018_calm_shatterstar.sql +1 -0
  23. package/dist/server/migrations/0019_rename_workspace_install_to_prepare.sql +1 -0
  24. package/dist/server/migrations/0020_uneven_the_renegades.sql +13 -0
  25. package/dist/server/migrations/0021_shiny_firestar.sql +2 -0
  26. package/dist/server/migrations/0022_version_on_success_backfill.sql +6 -0
  27. package/dist/server/migrations/0023_productive_gorilla_man.sql +17 -0
  28. package/dist/server/migrations/0024_sleepy_peter_quill.sql +2 -0
  29. package/dist/server/migrations/0025_smooth_blue_shield.sql +1 -0
  30. package/dist/server/migrations/0026_mail_backup_source.sql +11 -0
  31. package/dist/server/migrations/0027_opposite_anthem.sql +6 -0
  32. package/dist/server/migrations/0028_stale_rogue.sql +18 -0
  33. package/dist/server/migrations/0029_bouncy_loners.sql +16 -0
  34. package/dist/server/migrations/0030_bright_darkstar.sql +6 -0
  35. package/dist/server/migrations/0031_conscious_catseye.sql +13 -0
  36. package/dist/server/migrations/0032_wet_mimic.sql +51 -0
  37. package/dist/server/migrations/0033_eminent_molly_hayes.sql +2 -0
  38. package/dist/server/migrations/meta/0000_snapshot.json +5110 -0
  39. package/dist/server/migrations/meta/0001_snapshot.json +5257 -0
  40. package/dist/server/migrations/meta/0002_snapshot.json +5279 -0
  41. package/dist/server/migrations/meta/0003_snapshot.json +5286 -0
  42. package/dist/server/migrations/meta/0004_snapshot.json +5286 -0
  43. package/dist/server/migrations/meta/0005_snapshot.json +5305 -0
  44. package/dist/server/migrations/meta/0006_snapshot.json +5311 -0
  45. package/dist/server/migrations/meta/0007_snapshot.json +5323 -0
  46. package/dist/server/migrations/meta/0016_snapshot.json +6345 -0
  47. package/dist/server/migrations/meta/0017_snapshot.json +6383 -0
  48. package/dist/server/migrations/meta/0018_snapshot.json +6390 -0
  49. package/dist/server/migrations/meta/0019_snapshot.json +6390 -0
  50. package/dist/server/migrations/meta/0020_snapshot.json +6497 -0
  51. package/dist/server/migrations/meta/0021_snapshot.json +6509 -0
  52. package/dist/server/migrations/meta/0022_snapshot.json +6509 -0
  53. package/dist/server/migrations/meta/0023_snapshot.json +6629 -0
  54. package/dist/server/migrations/meta/0024_snapshot.json +6641 -0
  55. package/dist/server/migrations/meta/0025_snapshot.json +6648 -0
  56. package/dist/server/migrations/meta/0026_snapshot.json +6750 -0
  57. package/dist/server/migrations/meta/0027_snapshot.json +6757 -0
  58. package/dist/server/migrations/meta/0028_snapshot.json +6895 -0
  59. package/dist/server/migrations/meta/0029_snapshot.json +7028 -0
  60. package/dist/server/migrations/meta/0030_snapshot.json +7066 -0
  61. package/dist/server/migrations/meta/0031_snapshot.json +7181 -0
  62. package/dist/server/migrations/meta/0032_snapshot.json +7570 -0
  63. package/dist/server/migrations/meta/0033_snapshot.json +7597 -0
  64. package/dist/server/migrations/meta/_journal.json +244 -0
  65. package/dist/server/pglite/pglite.data +0 -0
  66. package/dist/server/pglite/pglite.wasm +0 -0
  67. package/package.json +31 -33
  68. package/.env.example +0 -38
  69. package/.nvmrc +0 -1
  70. package/.prettierrc +0 -7
  71. package/CONTRIBUTING.md +0 -90
  72. package/LICENSE +0 -661
  73. package/README.md +0 -360
  74. package/apps/api/.env.example +0 -30
  75. package/apps/api/Dockerfile +0 -22
  76. package/apps/api/package.json +0 -41
  77. package/apps/api/src/app.ts +0 -69
  78. package/apps/api/src/config/env.ts +0 -113
  79. package/apps/api/src/config/index.ts +0 -1
  80. package/apps/api/src/index.ts +0 -8
  81. package/apps/api/src/lib/auth-mode.ts +0 -42
  82. package/apps/api/src/lib/auth.ts +0 -105
  83. package/apps/api/src/lib/cache.ts +0 -128
  84. package/apps/api/src/lib/cloud-auth-proxy.ts +0 -310
  85. package/apps/api/src/lib/cloud-client.ts +0 -103
  86. package/apps/api/src/lib/compose-parser.ts +0 -138
  87. package/apps/api/src/lib/controller-helpers.ts +0 -90
  88. package/apps/api/src/lib/email-templates.ts +0 -94
  89. package/apps/api/src/lib/encryption.ts +0 -102
  90. package/apps/api/src/lib/local-user.ts +0 -65
  91. package/apps/api/src/lib/mail.ts +0 -48
  92. package/apps/api/src/lib/notifications.ts +0 -195
  93. package/apps/api/src/lib/openship-cloud.ts +0 -101
  94. package/apps/api/src/lib/resources.ts +0 -96
  95. package/apps/api/src/lib/screenshots.ts +0 -189
  96. package/apps/api/src/lib/ssh-manager.ts +0 -369
  97. package/apps/api/src/lib/ssl-scheduler.ts +0 -109
  98. package/apps/api/src/lib/stack-detector.ts +0 -708
  99. package/apps/api/src/lib/system-debug.ts +0 -10
  100. package/apps/api/src/middleware/auth.ts +0 -60
  101. package/apps/api/src/middleware/error-handler.ts +0 -41
  102. package/apps/api/src/middleware/index.ts +0 -5
  103. package/apps/api/src/middleware/internal-auth.ts +0 -40
  104. package/apps/api/src/middleware/local-only.ts +0 -20
  105. package/apps/api/src/middleware/rate-limiter.ts +0 -35
  106. package/apps/api/src/modules/analytics/analytics.controller.ts +0 -111
  107. package/apps/api/src/modules/analytics/analytics.routes.ts +0 -29
  108. package/apps/api/src/modules/analytics/analytics.schema.ts +0 -37
  109. package/apps/api/src/modules/analytics/analytics.service.ts +0 -264
  110. package/apps/api/src/modules/auth/auth.routes.ts +0 -237
  111. package/apps/api/src/modules/billing/billing.controller.ts +0 -60
  112. package/apps/api/src/modules/billing/billing.routes.ts +0 -34
  113. package/apps/api/src/modules/billing/billing.schema.ts +0 -9
  114. package/apps/api/src/modules/billing/billing.service.ts +0 -33
  115. package/apps/api/src/modules/cloud/cloud.controller.ts +0 -225
  116. package/apps/api/src/modules/cloud/cloud.routes.ts +0 -40
  117. package/apps/api/src/modules/deployments/build.service.ts +0 -791
  118. package/apps/api/src/modules/deployments/deployment-lifecycle.ts +0 -138
  119. package/apps/api/src/modules/deployments/deployment.controller.ts +0 -343
  120. package/apps/api/src/modules/deployments/deployment.routes.ts +0 -37
  121. package/apps/api/src/modules/deployments/deployment.schema.ts +0 -39
  122. package/apps/api/src/modules/deployments/deployment.service.ts +0 -190
  123. package/apps/api/src/modules/deployments/preflight.ts +0 -280
  124. package/apps/api/src/modules/deployments/prepare.service.ts +0 -252
  125. package/apps/api/src/modules/deployments/session-manager.ts +0 -283
  126. package/apps/api/src/modules/deployments/ssl.service.ts +0 -73
  127. package/apps/api/src/modules/domains/domain.controller.ts +0 -73
  128. package/apps/api/src/modules/domains/domain.routes.ts +0 -24
  129. package/apps/api/src/modules/domains/domain.schema.ts +0 -35
  130. package/apps/api/src/modules/domains/domain.service.ts +0 -385
  131. package/apps/api/src/modules/github/github.auth.ts +0 -397
  132. package/apps/api/src/modules/github/github.controller.ts +0 -387
  133. package/apps/api/src/modules/github/github.local-auth.ts +0 -251
  134. package/apps/api/src/modules/github/github.routes.ts +0 -50
  135. package/apps/api/src/modules/github/github.schema.ts +0 -52
  136. package/apps/api/src/modules/github/github.service.ts +0 -592
  137. package/apps/api/src/modules/github/github.types.ts +0 -158
  138. package/apps/api/src/modules/github/github.webhook.ts +0 -186
  139. package/apps/api/src/modules/github/index.ts +0 -16
  140. package/apps/api/src/modules/health/health.routes.ts +0 -45
  141. package/apps/api/src/modules/projects/project.controller.ts +0 -498
  142. package/apps/api/src/modules/projects/project.routes.ts +0 -67
  143. package/apps/api/src/modules/projects/project.schema.ts +0 -107
  144. package/apps/api/src/modules/projects/project.service.ts +0 -514
  145. package/apps/api/src/modules/settings/settings.controller.ts +0 -55
  146. package/apps/api/src/modules/settings/settings.routes.ts +0 -25
  147. package/apps/api/src/modules/settings/settings.service.ts +0 -49
  148. package/apps/api/src/modules/system/filesystem.controller.ts +0 -66
  149. package/apps/api/src/modules/system/index.ts +0 -1
  150. package/apps/api/src/modules/system/server-check.controller.ts +0 -475
  151. package/apps/api/src/modules/system/setup-session.ts +0 -255
  152. package/apps/api/src/modules/system/setup.controller.ts +0 -128
  153. package/apps/api/src/modules/system/system.routes.ts +0 -42
  154. package/apps/api/src/modules/webhooks/webhook.controller.ts +0 -64
  155. package/apps/api/src/modules/webhooks/webhook.routes.ts +0 -15
  156. package/apps/api/src/modules/webhooks/webhook.service.ts +0 -52
  157. package/apps/api/src/modules/webhooks/webhook.types.ts +0 -35
  158. package/apps/api/tsconfig.json +0 -14
  159. package/apps/cli/package.json +0 -26
  160. package/apps/cli/src/commands/deploy.ts +0 -11
  161. package/apps/cli/src/commands/init.ts +0 -8
  162. package/apps/cli/src/commands/login.ts +0 -8
  163. package/apps/cli/src/commands/logs.ts +0 -9
  164. package/apps/cli/src/index.ts +0 -21
  165. package/apps/cli/src/lib/api-client.ts +0 -35
  166. package/apps/cli/tsconfig.json +0 -13
  167. package/apps/dashboard/Dockerfile +0 -22
  168. package/apps/dashboard/components.json +0 -20
  169. package/apps/dashboard/next-env.d.ts +0 -6
  170. package/apps/dashboard/next.config.mjs +0 -16
  171. package/apps/dashboard/package.json +0 -40
  172. package/apps/dashboard/postcss.config.mjs +0 -5
  173. package/apps/dashboard/public/android-chrome-192x192.png +0 -0
  174. package/apps/dashboard/public/android-chrome-512x512.png +0 -0
  175. package/apps/dashboard/public/apple-touch-icon.png +0 -0
  176. package/apps/dashboard/public/favicon-16x16.png +0 -0
  177. package/apps/dashboard/public/favicon-32x32.png +0 -0
  178. package/apps/dashboard/public/favicon.ico +0 -0
  179. package/apps/dashboard/public/site.webmanifest +0 -19
  180. package/apps/dashboard/src/app/(auth)/forgot-password/page.tsx +0 -114
  181. package/apps/dashboard/src/app/(auth)/layout.tsx +0 -21
  182. package/apps/dashboard/src/app/(auth)/login/page.tsx +0 -220
  183. package/apps/dashboard/src/app/(auth)/providers.tsx +0 -34
  184. package/apps/dashboard/src/app/(auth)/register/page.tsx +0 -176
  185. package/apps/dashboard/src/app/(auth)/reset-password/page.tsx +0 -172
  186. package/apps/dashboard/src/app/(auth)/verify-email/page.tsx +0 -190
  187. package/apps/dashboard/src/app/(dashboard)/(deployment)/build/[id]/page.tsx +0 -162
  188. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/BuildSummary.tsx +0 -166
  189. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/DnsConfiguration.tsx +0 -119
  190. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/DomainSettings.tsx +0 -291
  191. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/Header.tsx +0 -71
  192. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/Sidebar.tsx +0 -270
  193. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/SkeletonLoader.tsx +0 -87
  194. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/page.tsx +0 -169
  195. package/apps/dashboard/src/app/(dashboard)/(deployment)/layout.tsx +0 -7
  196. package/apps/dashboard/src/app/(dashboard)/billing/page.tsx +0 -3
  197. package/apps/dashboard/src/app/(dashboard)/deployments/components/CommitDetailsModal.tsx +0 -240
  198. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentCard.tsx +0 -121
  199. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentHeader.tsx +0 -89
  200. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentMenu.tsx +0 -182
  201. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentsContent.tsx +0 -324
  202. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentsFilters.tsx +0 -99
  203. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentsList.tsx +0 -31
  204. package/apps/dashboard/src/app/(dashboard)/deployments/components/EmptyState.tsx +0 -101
  205. package/apps/dashboard/src/app/(dashboard)/deployments/components/LoadingSkeleton.tsx +0 -57
  206. package/apps/dashboard/src/app/(dashboard)/deployments/components/ProjectFilter.tsx +0 -109
  207. package/apps/dashboard/src/app/(dashboard)/deployments/components/index.ts +0 -9
  208. package/apps/dashboard/src/app/(dashboard)/deployments/page.tsx +0 -14
  209. package/apps/dashboard/src/app/(dashboard)/deployments/types.ts +0 -44
  210. package/apps/dashboard/src/app/(dashboard)/deployments/utils.ts +0 -176
  211. package/apps/dashboard/src/app/(dashboard)/domains/page.tsx +0 -3
  212. package/apps/dashboard/src/app/(dashboard)/integrations/page.tsx +0 -321
  213. package/apps/dashboard/src/app/(dashboard)/layout.tsx +0 -27
  214. package/apps/dashboard/src/app/(dashboard)/library/components/ConnectPrompt.tsx +0 -187
  215. package/apps/dashboard/src/app/(dashboard)/library/components/LibrarySidebar.tsx +0 -147
  216. package/apps/dashboard/src/app/(dashboard)/library/components/LoadingSkeleton.tsx +0 -39
  217. package/apps/dashboard/src/app/(dashboard)/library/components/LocalProjects.tsx +0 -548
  218. package/apps/dashboard/src/app/(dashboard)/library/components/RepositoryList.tsx +0 -292
  219. package/apps/dashboard/src/app/(dashboard)/library/components/TemplateGrid.tsx +0 -36
  220. package/apps/dashboard/src/app/(dashboard)/library/components/UrlImport.tsx +0 -74
  221. package/apps/dashboard/src/app/(dashboard)/library/page.tsx +0 -121
  222. package/apps/dashboard/src/app/(dashboard)/library/types.ts +0 -26
  223. package/apps/dashboard/src/app/(dashboard)/monitoring/page.tsx +0 -3
  224. package/apps/dashboard/src/app/(dashboard)/page.tsx +0 -485
  225. package/apps/dashboard/src/app/(dashboard)/projects/[id]/[[...slug]]/layout.tsx +0 -22
  226. package/apps/dashboard/src/app/(dashboard)/projects/[id]/[[...slug]]/page.tsx +0 -286
  227. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/AdvancedSettings.tsx +0 -235
  228. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/BuildSettings.tsx +0 -174
  229. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/DeleteConfirmationDialog.tsx +0 -45
  230. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/DeletionModal.tsx +0 -95
  231. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/Deployments.tsx +0 -11
  232. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/DomainSettings.tsx +0 -523
  233. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/EnvironmentSettings.tsx +0 -246
  234. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/GeneralSettings.tsx +0 -93
  235. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/GitInfo.tsx +0 -261
  236. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/GitSettings.tsx +0 -391
  237. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/LogsSettings.tsx +0 -133
  238. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/ProjectNotFound.tsx +0 -95
  239. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/ProjectsBottomNavigation.tsx +0 -62
  240. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/ResourceSettings.tsx +0 -333
  241. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/SettingSection.tsx +0 -66
  242. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/SettingsNavigation.tsx +0 -27
  243. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/SleepModeSettings.tsx +0 -134
  244. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/ProductionUrl.tsx +0 -25
  245. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/ProjectIdentity.tsx +0 -159
  246. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/ProjectInfo.tsx +0 -58
  247. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/SkeletonLoader.tsx +0 -170
  248. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/StatsCards.tsx +0 -33
  249. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/TopPaths.tsx +0 -56
  250. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/TrafficChart.tsx +0 -157
  251. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/index.ts +0 -14
  252. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/LogsActions.tsx +0 -52
  253. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/ServerLogs.tsx +0 -249
  254. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/TerminalLogs.tsx +0 -682
  255. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/logs.css +0 -127
  256. package/apps/dashboard/src/app/(dashboard)/projects/components/DeploymentCard.tsx +0 -73
  257. package/apps/dashboard/src/app/(dashboard)/projects/components/ProjectCard.tsx +0 -330
  258. package/apps/dashboard/src/app/(dashboard)/projects/page.tsx +0 -330
  259. package/apps/dashboard/src/app/(dashboard)/providers.tsx +0 -23
  260. package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/_components/components-tab.tsx +0 -329
  261. package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/_components/overview-tab.tsx +0 -229
  262. package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/_components/terminal-tab.tsx +0 -38
  263. package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/page.tsx +0 -437
  264. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/checking-state.tsx +0 -15
  265. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/choose-mode.tsx +0 -54
  266. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/component-row.tsx +0 -65
  267. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/error-banner.tsx +0 -13
  268. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/installing-panel.tsx +0 -227
  269. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/results-panel.tsx +0 -90
  270. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/setup-header.tsx +0 -56
  271. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/types.ts +0 -13
  272. package/apps/dashboard/src/app/(dashboard)/servers/new/page.tsx +0 -666
  273. package/apps/dashboard/src/app/(dashboard)/servers/page.tsx +0 -283
  274. package/apps/dashboard/src/app/(dashboard)/settings/_components/BuildPreferences.tsx +0 -110
  275. package/apps/dashboard/src/app/(dashboard)/settings/_components/CloudConnection.tsx +0 -147
  276. package/apps/dashboard/src/app/(dashboard)/settings/_components/InstanceInfo.tsx +0 -54
  277. package/apps/dashboard/src/app/(dashboard)/settings/_components/ServerConnection.tsx +0 -407
  278. package/apps/dashboard/src/app/(dashboard)/settings/_components/SettingsSection.tsx +0 -32
  279. package/apps/dashboard/src/app/(dashboard)/settings/page.tsx +0 -67
  280. package/apps/dashboard/src/app/auth/callback/close/page.tsx +0 -23
  281. package/apps/dashboard/src/app/auth/callback/install/page.tsx +0 -40
  282. package/apps/dashboard/src/app/authorize/page.tsx +0 -137
  283. package/apps/dashboard/src/app/globals.css +0 -57
  284. package/apps/dashboard/src/app/layout.tsx +0 -55
  285. package/apps/dashboard/src/components/auth-shell.tsx +0 -66
  286. package/apps/dashboard/src/components/deployments/types.ts +0 -44
  287. package/apps/dashboard/src/components/global-deployments/index.ts +0 -17
  288. package/apps/dashboard/src/components/i18n-provider.tsx +0 -100
  289. package/apps/dashboard/src/components/import-project/BuildSettings.tsx +0 -376
  290. package/apps/dashboard/src/components/import-project/BuildSkeleton.tsx +0 -161
  291. package/apps/dashboard/src/components/import-project/BuildTerminal.tsx +0 -358
  292. package/apps/dashboard/src/components/import-project/ComposeServices.tsx +0 -455
  293. package/apps/dashboard/src/components/import-project/DeploymentProcessing.tsx +0 -510
  294. package/apps/dashboard/src/components/import-project/DockerSettings.tsx +0 -64
  295. package/apps/dashboard/src/components/import-project/EnvironmentVariables.tsx +0 -481
  296. package/apps/dashboard/src/components/import-project/Frameworks.tsx +0 -90
  297. package/apps/dashboard/src/components/import-project/ProjectSettings.tsx +0 -160
  298. package/apps/dashboard/src/components/import-project/types.ts +0 -82
  299. package/apps/dashboard/src/components/integrations/GithubPermissionModal.tsx +0 -173
  300. package/apps/dashboard/src/components/language-switcher.tsx +0 -36
  301. package/apps/dashboard/src/components/logo.tsx +0 -13
  302. package/apps/dashboard/src/components/network-error-handler.tsx +0 -27
  303. package/apps/dashboard/src/components/oauth-buttons.tsx +0 -81
  304. package/apps/dashboard/src/components/overview/ActivityChart.tsx +0 -247
  305. package/apps/dashboard/src/components/overview/ApiRequestsCard.tsx +0 -111
  306. package/apps/dashboard/src/components/overview/CreditsCard.tsx +0 -137
  307. package/apps/dashboard/src/components/overview/DeploymentsChart.tsx +0 -195
  308. package/apps/dashboard/src/components/overview/EmptyState.tsx +0 -126
  309. package/apps/dashboard/src/components/overview/LoadingSkeleton.tsx +0 -92
  310. package/apps/dashboard/src/components/overview/OverviewHeader.tsx +0 -74
  311. package/apps/dashboard/src/components/overview/OverviewHeroChart.tsx +0 -344
  312. package/apps/dashboard/src/components/overview/ProjectsCard.tsx +0 -134
  313. package/apps/dashboard/src/components/overview/QuickLinks.tsx +0 -119
  314. package/apps/dashboard/src/components/overview/SandboxesCard.tsx +0 -150
  315. package/apps/dashboard/src/components/overview/StatsGrid.tsx +0 -166
  316. package/apps/dashboard/src/components/overview/TokenUsageChart.tsx +0 -206
  317. package/apps/dashboard/src/components/overview/UsageStats.tsx +0 -79
  318. package/apps/dashboard/src/components/overview/index.ts +0 -30
  319. package/apps/dashboard/src/components/overview/types.ts +0 -116
  320. package/apps/dashboard/src/components/page-header.tsx +0 -25
  321. package/apps/dashboard/src/components/project-settings/ServerSideSwitch.jsx +0 -60
  322. package/apps/dashboard/src/components/shared/AlertBox.tsx +0 -39
  323. package/apps/dashboard/src/components/shared/CTASection.tsx +0 -45
  324. package/apps/dashboard/src/components/shared/ErrorState.tsx +0 -176
  325. package/apps/dashboard/src/components/shared/FeatureCard.tsx +0 -20
  326. package/apps/dashboard/src/components/shared/MDXComponents.tsx +0 -24
  327. package/apps/dashboard/src/components/shared/MachineSettingsModal.tsx +0 -286
  328. package/apps/dashboard/src/components/shared/Modal.tsx +0 -39
  329. package/apps/dashboard/src/components/shared/OTPInput.tsx +0 -122
  330. package/apps/dashboard/src/components/shared/PageHero.tsx +0 -21
  331. package/apps/dashboard/src/components/shared/PlatformFeatureCard.tsx +0 -27
  332. package/apps/dashboard/src/components/shared/StatCard.tsx +0 -14
  333. package/apps/dashboard/src/components/shared/ValueCard.tsx +0 -20
  334. package/apps/dashboard/src/components/shared/index.ts +0 -8
  335. package/apps/dashboard/src/components/sidebar.tsx +0 -282
  336. package/apps/dashboard/src/components/theme-provider.tsx +0 -96
  337. package/apps/dashboard/src/components/toast.tsx +0 -106
  338. package/apps/dashboard/src/components/ui/CustomCursor.tsx +0 -107
  339. package/apps/dashboard/src/components/ui/CustomSelect.tsx +0 -126
  340. package/apps/dashboard/src/components/ui/DropdownMenu.tsx +0 -174
  341. package/apps/dashboard/src/components/ui/FileIcon.jsx +0 -59
  342. package/apps/dashboard/src/components/ui/IconPickerModal.tsx +0 -273
  343. package/apps/dashboard/src/components/ui/InfoBanner.jsx +0 -39
  344. package/apps/dashboard/src/components/ui/Logo.tsx +0 -14
  345. package/apps/dashboard/src/components/ui/Modal.tsx +0 -117
  346. package/apps/dashboard/src/components/ui/PageContainer.tsx +0 -12
  347. package/apps/dashboard/src/components/ui/SectionContainer.jsx +0 -7
  348. package/apps/dashboard/src/components/ui/SlidingToggle.tsx +0 -128
  349. package/apps/dashboard/src/components/ui/Toast.tsx +0 -29
  350. package/apps/dashboard/src/components/ui/button.tsx +0 -58
  351. package/apps/dashboard/src/components/ui/card.tsx +0 -60
  352. package/apps/dashboard/src/components/ui/input.tsx +0 -20
  353. package/apps/dashboard/src/components/ui/label.tsx +0 -19
  354. package/apps/dashboard/src/components/ui/select.tsx +0 -10
  355. package/apps/dashboard/src/components/ui/textarea.tsx +0 -9
  356. package/apps/dashboard/src/constants/lang-colors.ts +0 -25
  357. package/apps/dashboard/src/constants/mock.ts +0 -38
  358. package/apps/dashboard/src/context/AuthContext.tsx +0 -91
  359. package/apps/dashboard/src/context/CloudContext.tsx +0 -275
  360. package/apps/dashboard/src/context/DeploymentContext.tsx +0 -71
  361. package/apps/dashboard/src/context/GitHubContext.tsx +0 -288
  362. package/apps/dashboard/src/context/ModalContext.tsx +0 -300
  363. package/apps/dashboard/src/context/NetworkContext.tsx +0 -32
  364. package/apps/dashboard/src/context/ProjectSettingsContext.tsx +0 -727
  365. package/apps/dashboard/src/context/ToastContext.tsx +0 -129
  366. package/apps/dashboard/src/context/deployment/index.ts +0 -3
  367. package/apps/dashboard/src/context/deployment/types.ts +0 -183
  368. package/apps/dashboard/src/context/deployment/useDeploymentBuild.ts +0 -547
  369. package/apps/dashboard/src/context/deployment/useDeploymentConfig.ts +0 -176
  370. package/apps/dashboard/src/hooks/useBuildConnection.ts +0 -334
  371. package/apps/dashboard/src/hooks/useMonitorStream.ts +0 -146
  372. package/apps/dashboard/src/hooks/useProjectData.ts +0 -110
  373. package/apps/dashboard/src/hooks/useSSEConnection.ts +0 -465
  374. package/apps/dashboard/src/hooks/useSSEStream.ts +0 -309
  375. package/apps/dashboard/src/hooks/useSessions.ts +0 -104
  376. package/apps/dashboard/src/hooks/useSetupStream.ts +0 -223
  377. package/apps/dashboard/src/i18n/dictionaries/ar.json +0 -218
  378. package/apps/dashboard/src/i18n/dictionaries/en.json +0 -218
  379. package/apps/dashboard/src/i18n/index.ts +0 -16
  380. package/apps/dashboard/src/lib/api/ai.ts +0 -22
  381. package/apps/dashboard/src/lib/api/auth.ts +0 -13
  382. package/apps/dashboard/src/lib/api/client.ts +0 -199
  383. package/apps/dashboard/src/lib/api/cloud.ts +0 -15
  384. package/apps/dashboard/src/lib/api/deploy.ts +0 -58
  385. package/apps/dashboard/src/lib/api/domains.ts +0 -13
  386. package/apps/dashboard/src/lib/api/endpoints.ts +0 -129
  387. package/apps/dashboard/src/lib/api/github.ts +0 -31
  388. package/apps/dashboard/src/lib/api/icons.ts +0 -12
  389. package/apps/dashboard/src/lib/api/index.ts +0 -41
  390. package/apps/dashboard/src/lib/api/projects.ts +0 -153
  391. package/apps/dashboard/src/lib/api/sandbox.ts +0 -14
  392. package/apps/dashboard/src/lib/api/settings.ts +0 -21
  393. package/apps/dashboard/src/lib/api/system.ts +0 -159
  394. package/apps/dashboard/src/lib/auth-client.ts +0 -54
  395. package/apps/dashboard/src/lib/country.ts +0 -25
  396. package/apps/dashboard/src/lib/server/api.ts +0 -140
  397. package/apps/dashboard/src/lib/server/session.ts +0 -103
  398. package/apps/dashboard/src/lib/sseClient.ts +0 -241
  399. package/apps/dashboard/src/lib/sseMessageProcessors.ts +0 -323
  400. package/apps/dashboard/src/lib/utils.ts +0 -6
  401. package/apps/dashboard/src/proxy.ts +0 -46
  402. package/apps/dashboard/src/styles/Toast.module.css +0 -92
  403. package/apps/dashboard/src/styles/fonts.css +0 -93
  404. package/apps/dashboard/src/styles/theme.css +0 -336
  405. package/apps/dashboard/src/types/research.ts +0 -42
  406. package/apps/dashboard/src/utils/SSEParser.js +0 -150
  407. package/apps/dashboard/src/utils/authWindow.ts +0 -143
  408. package/apps/dashboard/src/utils/codeTheme.ts +0 -127
  409. package/apps/dashboard/src/utils/colors.json +0 -2810
  410. package/apps/dashboard/src/utils/date.ts +0 -121
  411. package/apps/dashboard/src/utils/deployment.ts +0 -128
  412. package/apps/dashboard/src/utils/deploymentPhaseDetector.ts +0 -232
  413. package/apps/dashboard/src/utils/extToLang.js +0 -103
  414. package/apps/dashboard/src/utils/github.ts +0 -62
  415. package/apps/dashboard/src/utils/icons.js +0 -46
  416. package/apps/dashboard/src/utils/repoSlug.ts +0 -110
  417. package/apps/dashboard/src/utils/research-api.ts +0 -163
  418. package/apps/dashboard/src/utils/suggestions.ts +0 -84
  419. package/apps/dashboard/src/utils/theme.js +0 -1
  420. package/apps/dashboard/src/utils/ui-helpers.tsx +0 -30
  421. package/apps/dashboard/src/utils/upload.js +0 -12
  422. package/apps/dashboard/tsconfig.json +0 -33
  423. package/apps/desktop/forge.config.json +0 -36
  424. package/apps/desktop/package.json +0 -26
  425. package/apps/desktop/scripts/dev.mjs +0 -58
  426. package/apps/desktop/src/main/index.ts +0 -675
  427. package/apps/desktop/src/main/types/desktop.d.ts +0 -33
  428. package/apps/desktop/src/preload/index.ts +0 -88
  429. package/apps/desktop/src/renderer/index.html +0 -462
  430. package/apps/desktop/src/renderer/onboarding.js +0 -511
  431. package/apps/desktop/src/renderer/styles.css +0 -1139
  432. package/apps/desktop/tsconfig.json +0 -17
  433. package/apps/web/.source/browser.ts +0 -13
  434. package/apps/web/.source/dynamic.ts +0 -8
  435. package/apps/web/.source/server.ts +0 -22
  436. package/apps/web/.source/source.config.mjs +0 -20
  437. package/apps/web/Dockerfile +0 -22
  438. package/apps/web/content/blog/how-ai-builds-work.mdx +0 -55
  439. package/apps/web/content/blog/introducing-openship.mdx +0 -46
  440. package/apps/web/content/blog/self-hosting-cost-breakdown.mdx +0 -59
  441. package/apps/web/content/docs/_meta.json +0 -14
  442. package/apps/web/content/docs/api.mdx +0 -98
  443. package/apps/web/content/docs/cli.mdx +0 -80
  444. package/apps/web/content/docs/first-deployment.mdx +0 -56
  445. package/apps/web/content/docs/index.mdx +0 -27
  446. package/apps/web/content/docs/installation.mdx +0 -65
  447. package/apps/web/content/docs/quickstart.mdx +0 -45
  448. package/apps/web/next-env.d.ts +0 -6
  449. package/apps/web/next.config.mjs +0 -20
  450. package/apps/web/package.json +0 -33
  451. package/apps/web/postcss.config.mjs +0 -5
  452. package/apps/web/public/android-chrome-192x192.png +0 -0
  453. package/apps/web/public/android-chrome-512x512.png +0 -0
  454. package/apps/web/public/apple-touch-icon.png +0 -0
  455. package/apps/web/public/favicon-16x16.png +0 -0
  456. package/apps/web/public/favicon-32x32.png +0 -0
  457. package/apps/web/public/favicon.ico +0 -0
  458. package/apps/web/public/site.webmanifest +0 -1
  459. package/apps/web/source.config.ts +0 -17
  460. package/apps/web/src/app/(marketing)/layout.tsx +0 -9
  461. package/apps/web/src/app/(marketing)/page.tsx +0 -2
  462. package/apps/web/src/app/(marketing)/pricing/page.tsx +0 -10
  463. package/apps/web/src/app/blog/[...slug]/page.tsx +0 -247
  464. package/apps/web/src/app/blog/blog.css +0 -575
  465. package/apps/web/src/app/blog/layout.tsx +0 -50
  466. package/apps/web/src/app/blog/page.tsx +0 -235
  467. package/apps/web/src/app/docs/[[...slug]]/page.tsx +0 -67
  468. package/apps/web/src/app/docs/layout.tsx +0 -62
  469. package/apps/web/src/app/docs/toc-theme.css +0 -71
  470. package/apps/web/src/app/download/page.tsx +0 -396
  471. package/apps/web/src/app/globals.css +0 -20
  472. package/apps/web/src/app/layout.tsx +0 -70
  473. package/apps/web/src/app/page.tsx +0 -51
  474. package/apps/web/src/app/robots.ts +0 -15
  475. package/apps/web/src/app/sitemap.ts +0 -35
  476. package/apps/web/src/components/blog/share-sidebar.tsx +0 -81
  477. package/apps/web/src/components/blog/writer-sidebar.tsx +0 -81
  478. package/apps/web/src/components/landing/ai-native.tsx +0 -169
  479. package/apps/web/src/components/landing/backups.tsx +0 -139
  480. package/apps/web/src/components/landing/cdn.tsx +0 -109
  481. package/apps/web/src/components/landing/coming-soon.tsx +0 -180
  482. package/apps/web/src/components/landing/dark-section.tsx +0 -166
  483. package/apps/web/src/components/landing/dashboard.tsx +0 -407
  484. package/apps/web/src/components/landing/developer-experience.tsx +0 -224
  485. package/apps/web/src/components/landing/dns-domains.tsx +0 -146
  486. package/apps/web/src/components/landing/download-button.tsx +0 -151
  487. package/apps/web/src/components/landing/features/ai-visual.tsx +0 -48
  488. package/apps/web/src/components/landing/features/cloud-visual.tsx +0 -44
  489. package/apps/web/src/components/landing/features/git-visual.tsx +0 -61
  490. package/apps/web/src/components/landing/features/index.tsx +0 -642
  491. package/apps/web/src/components/landing/features/infra-visual.tsx +0 -69
  492. package/apps/web/src/components/landing/features/rollback-visual.tsx +0 -42
  493. package/apps/web/src/components/landing/features/ssl-visual.tsx +0 -41
  494. package/apps/web/src/components/landing/features/stacks-visual.tsx +0 -54
  495. package/apps/web/src/components/landing/final-cta.tsx +0 -116
  496. package/apps/web/src/components/landing/footer.tsx +0 -145
  497. package/apps/web/src/components/landing/hero.tsx +0 -110
  498. package/apps/web/src/components/landing/how-it-works.tsx +0 -210
  499. package/apps/web/src/components/landing/index.ts +0 -21
  500. package/apps/web/src/components/landing/mail-server.tsx +0 -122
  501. package/apps/web/src/components/landing/navbar.tsx +0 -199
  502. package/apps/web/src/components/landing/no-lockin.tsx +0 -185
  503. package/apps/web/src/components/landing/open-source-cta.tsx +0 -151
  504. package/apps/web/src/components/landing/portability.tsx +0 -190
  505. package/apps/web/src/components/landing/pricing.tsx +0 -263
  506. package/apps/web/src/components/landing/scaling.tsx +0 -209
  507. package/apps/web/src/components/landing/why-openship.tsx +0 -291
  508. package/apps/web/src/hooks/use-gsap-scroll.ts +0 -158
  509. package/apps/web/src/hooks/use-platform.ts +0 -86
  510. package/apps/web/src/lib/source.ts +0 -12
  511. package/apps/web/src/styles/fonts.css +0 -84
  512. package/apps/web/src/styles/landing.css +0 -951
  513. package/apps/web/src/styles/theme.css +0 -227
  514. package/apps/web/tsconfig.json +0 -16
  515. package/bun.lock +0 -3260
  516. package/docker-compose.yml +0 -90
  517. package/docs/screenshots/.gitkeep +0 -0
  518. package/docs/screenshots/screen.png +0 -0
  519. package/openship.code-workspace +0 -7
  520. package/packages/adapters/docs/ARCHITECTURE.md +0 -160
  521. package/packages/adapters/docs/BUILD-PIPELINE.md +0 -171
  522. package/packages/adapters/docs/CLOUD.md +0 -239
  523. package/packages/adapters/docs/EXECUTOR.md +0 -174
  524. package/packages/adapters/docs/LOG-STREAMING.md +0 -175
  525. package/packages/adapters/docs/SYSTEM.md +0 -191
  526. package/packages/adapters/package.json +0 -32
  527. package/packages/adapters/src/index.ts +0 -144
  528. package/packages/adapters/src/infra/cloud.ts +0 -42
  529. package/packages/adapters/src/infra/index.ts +0 -9
  530. package/packages/adapters/src/infra/noop.ts +0 -27
  531. package/packages/adapters/src/infra/traefik.ts +0 -297
  532. package/packages/adapters/src/infra/types.ts +0 -36
  533. package/packages/adapters/src/platform.ts +0 -255
  534. package/packages/adapters/src/runtime/bare.ts +0 -567
  535. package/packages/adapters/src/runtime/build-pipeline.ts +0 -237
  536. package/packages/adapters/src/runtime/cloud.ts +0 -791
  537. package/packages/adapters/src/runtime/deploy-pipeline.ts +0 -146
  538. package/packages/adapters/src/runtime/docker.ts +0 -443
  539. package/packages/adapters/src/runtime/index.ts +0 -69
  540. package/packages/adapters/src/runtime/local-build.ts +0 -112
  541. package/packages/adapters/src/runtime/transfer.ts +0 -82
  542. package/packages/adapters/src/runtime/types.ts +0 -138
  543. package/packages/adapters/src/system/catalog.ts +0 -188
  544. package/packages/adapters/src/system/checks.ts +0 -228
  545. package/packages/adapters/src/system/components.ts +0 -45
  546. package/packages/adapters/src/system/debug.ts +0 -18
  547. package/packages/adapters/src/system/environment.ts +0 -168
  548. package/packages/adapters/src/system/errors.ts +0 -34
  549. package/packages/adapters/src/system/executor.ts +0 -600
  550. package/packages/adapters/src/system/index.ts +0 -58
  551. package/packages/adapters/src/system/installer.ts +0 -310
  552. package/packages/adapters/src/system/setup.ts +0 -442
  553. package/packages/adapters/src/system/state.ts +0 -96
  554. package/packages/adapters/src/system/types.ts +0 -116
  555. package/packages/adapters/src/toolchain/catalog.ts +0 -439
  556. package/packages/adapters/src/toolchain/checks.ts +0 -181
  557. package/packages/adapters/src/toolchain/index.ts +0 -38
  558. package/packages/adapters/src/toolchain/installer.ts +0 -189
  559. package/packages/adapters/src/toolchain/types.ts +0 -84
  560. package/packages/adapters/src/types.ts +0 -277
  561. package/packages/adapters/tsconfig.json +0 -11
  562. package/packages/core/package.json +0 -27
  563. package/packages/core/src/constants.ts +0 -71
  564. package/packages/core/src/errors.ts +0 -49
  565. package/packages/core/src/index.ts +0 -6
  566. package/packages/core/src/stacks.ts +0 -778
  567. package/packages/core/src/system.ts +0 -111
  568. package/packages/core/src/types.ts +0 -68
  569. package/packages/core/src/utils.ts +0 -43
  570. package/packages/core/tsconfig.json +0 -11
  571. package/packages/db/drizzle/0000_init.sql +0 -231
  572. package/packages/db/drizzle/0001_add_server_name.sql +0 -1
  573. package/packages/db/drizzle/meta/_journal.json +0 -20
  574. package/packages/db/drizzle.config.ts +0 -10
  575. package/packages/db/package.json +0 -44
  576. package/packages/db/src/client.ts +0 -119
  577. package/packages/db/src/index.ts +0 -60
  578. package/packages/db/src/repos/account.repo.ts +0 -92
  579. package/packages/db/src/repos/deployment.repo.ts +0 -168
  580. package/packages/db/src/repos/domain.repo.ts +0 -102
  581. package/packages/db/src/repos/git-installation.repo.ts +0 -95
  582. package/packages/db/src/repos/index.ts +0 -43
  583. package/packages/db/src/repos/instance-settings.repo.ts +0 -43
  584. package/packages/db/src/repos/project.repo.ts +0 -159
  585. package/packages/db/src/repos/session.repo.ts +0 -82
  586. package/packages/db/src/repos/settings.repo.ts +0 -51
  587. package/packages/db/src/repos/user.repo.ts +0 -94
  588. package/packages/db/src/schema/auth.ts +0 -56
  589. package/packages/db/src/schema/deployment.ts +0 -87
  590. package/packages/db/src/schema/domain.ts +0 -46
  591. package/packages/db/src/schema/github.ts +0 -24
  592. package/packages/db/src/schema/index.ts +0 -6
  593. package/packages/db/src/schema/project.ts +0 -117
  594. package/packages/db/src/schema/settings.ts +0 -103
  595. package/packages/db/tsconfig.json +0 -11
  596. package/packages/ui/package.json +0 -38
  597. package/packages/ui/src/components/badge.tsx +0 -29
  598. package/packages/ui/src/components/button.tsx +0 -44
  599. package/packages/ui/src/components/card.tsx +0 -26
  600. package/packages/ui/src/components/status-dot.tsx +0 -25
  601. package/packages/ui/src/globals.css +0 -18
  602. package/packages/ui/src/index.tsx +0 -8
  603. package/packages/ui/src/lib/cn.ts +0 -7
  604. package/packages/ui/tsconfig.json +0 -14
  605. package/pnpm-workspace.yaml +0 -3
  606. package/tsconfig.base.json +0 -18
  607. package/turbo.json +0 -36
@@ -1,1139 +0,0 @@
1
- /* ═══════════════════════════════════════════════════════════════════════════
2
- Openship Desktop — Onboarding styles
3
- Aligned with dashboard & web design language
4
- ═══════════════════════════════════════════════════════════════════════════ */
5
- /* ── Fonts (same as dashboard: individual woff2 per weight) ── */
6
- @font-face {
7
- font-family: 'Gellix';
8
- src: url('https://cdn.oblien.com/fonts/Gellix-Regular.woff2') format('woff2');
9
- font-weight: 400;
10
- font-style: normal;
11
- font-display: swap;
12
- }
13
-
14
- @font-face {
15
- font-family: 'Gellix';
16
- src: url('https://cdn.oblien.com/fonts/Gellix-Medium.woff2') format('woff2');
17
- font-weight: 500;
18
- font-style: normal;
19
- font-display: swap;
20
- }
21
-
22
- @font-face {
23
- font-family: 'Gellix';
24
- src: url('https://cdn.oblien.com/fonts/Gellix-SemiBold.woff2') format('woff2');
25
- font-weight: 600;
26
- font-style: normal;
27
- font-display: swap;
28
- }
29
-
30
- @font-face {
31
- font-family: 'SF Arabic';
32
- src: local('SF Arabic'), local('SFArabic-Regular'),
33
- url('https://cdn.oblien.com/fonts/SFArabic-Regular.ttf') format('truetype');
34
- font-weight: normal;
35
- font-style: normal;
36
- font-display: swap;
37
- }
38
- :root {
39
- /* ─ Theme tokens (light) ─ */
40
- --th-bg-page: #ffffff;
41
- --th-bg-card: #fafafa;
42
- --th-card-bg: #ffffff;
43
- --th-text-heading: rgba(0,0,0,1);
44
- --th-text-body: rgba(0,0,0,.60);
45
- --th-text-muted: rgba(0,0,0,.42);
46
- --th-btn-bg: rgba(0,0,0,.92);
47
- --th-btn-text: #ffffff;
48
- --th-card-bd: #efefef;
49
- --th-bd-default: #e8e8e8;
50
-
51
- /* Foreground opacity scale */
52
- --th-on-05: rgba(0,0,0,.05);
53
- --th-on-06: rgba(0,0,0,.06);
54
- --th-on-08: rgba(0,0,0,.08);
55
- --th-on-10: rgba(0,0,0,.10);
56
- --th-on-12: rgba(0,0,0,.12);
57
- --th-on-14: rgba(0,0,0,.14);
58
- --th-on-16: rgba(0,0,0,.16);
59
- --th-on-20: rgba(0,0,0,.20);
60
- --th-on-40: rgba(0,0,0,.40);
61
-
62
- /* Surface fills */
63
- --th-sf-03: rgba(0,0,0,.03);
64
- --th-sf-04: rgba(0,0,0,.04);
65
- --th-sf-05: rgba(0,0,0,.05);
66
-
67
- /* Accent */
68
- --accent: #7c3aed;
69
- --accent-hover: #6d28d9;
70
- --accent-soft: rgba(124, 58, 237, 0.08);
71
- --accent-glow: rgba(124, 58, 237, 0.12);
72
-
73
- /* Named accents for blobs */
74
- --th-clr-plum: rgba(108,92,231,.07);
75
- --th-clr-sea: rgba(0,184,148,.07);
76
- --th-clr-terra: rgba(224,88,116,.06);
77
-
78
- /* Status */
79
- --danger: #ef4444;
80
- --success: #22c55e;
81
-
82
- /* Layout */
83
- --font: 'Gellix', 'SF Arabic', system-ui, -apple-system, sans-serif;
84
- }
85
-
86
- *,
87
- *::before,
88
- *::after {
89
- box-sizing: border-box;
90
- margin: 0;
91
- padding: 0;
92
- }
93
-
94
- html, body {
95
- height: 100%;
96
- font-family: var(--font);
97
- background: var(--th-bg-page);
98
- color: var(--th-text-body);
99
- -webkit-font-smoothing: antialiased;
100
- -moz-osx-font-smoothing: grayscale;
101
- }
102
-
103
- /* ─── Aurora background ─── */
104
- .aurora {
105
- position: fixed;
106
- inset: 0;
107
- pointer-events: none;
108
- z-index: 0;
109
- overflow: hidden;
110
- }
111
-
112
- .aurora-blob {
113
- position: absolute;
114
- border-radius: 50%;
115
- }
116
-
117
- .aurora-core {
118
- width: 420px;
119
- height: 420px;
120
- bottom: -120px;
121
- left: 50%;
122
- transform: translateX(-50%);
123
- background: radial-gradient(circle, rgba(139,92,246,.18) 0%, rgba(124,58,237,.08) 50%, transparent 70%);
124
- filter: blur(45px);
125
- animation: aurora-breathe 16s ease-in-out infinite;
126
- }
127
-
128
- .aurora-left {
129
- width: 320px;
130
- height: 320px;
131
- bottom: -80px;
132
- left: 10%;
133
- background: radial-gradient(circle, rgba(245,158,11,.12) 0%, rgba(251,146,60,.06) 60%, transparent 70%);
134
- filter: blur(55px);
135
- animation: aurora-sway-left 20s ease-in-out infinite;
136
- }
137
-
138
- .aurora-right {
139
- width: 320px;
140
- height: 320px;
141
- bottom: -80px;
142
- right: 10%;
143
- background: radial-gradient(circle, rgba(251,191,36,.10) 0%, rgba(196,181,253,.06) 60%, transparent 70%);
144
- filter: blur(55px);
145
- animation: aurora-sway-right 22s ease-in-out infinite;
146
- }
147
-
148
- @keyframes aurora-breathe {
149
- 0%, 100% { transform: translateX(-50%) scale(1); }
150
- 50% { transform: translateX(-50%) scale(1.12); }
151
- }
152
-
153
- @keyframes aurora-sway-left {
154
- 0%, 100% { transform: translate(0, 0) scale(1); }
155
- 50% { transform: translate(30px, -20px) scale(1.08); }
156
- }
157
-
158
- @keyframes aurora-sway-right {
159
- 0%, 100% { transform: translate(0, 0) scale(1); }
160
- 50% { transform: translate(-25px, -15px) scale(1.06); }
161
- }
162
-
163
- /* ─── Top bar ─── */
164
- .top-bar {
165
- position: fixed;
166
- top: 0;
167
- left: 0;
168
- right: 0;
169
- z-index: 100;
170
- display: flex;
171
- align-items: center;
172
- justify-content: space-between;
173
- padding: 14px 24px 0;
174
- -webkit-app-region: drag;
175
- }
176
-
177
- .top-bar-links {
178
- display: flex;
179
- align-items: center;
180
- gap: 4px;
181
- -webkit-app-region: no-drag;
182
- }
183
-
184
- .top-bar-link {
185
- display: flex;
186
- align-items: center;
187
- justify-content: center;
188
- width: 34px;
189
- height: 34px;
190
- border-radius: 10px;
191
- border: none;
192
- background: transparent;
193
- color: var(--th-text-muted);
194
- cursor: pointer;
195
- transition: color 0.15s, background 0.15s;
196
- }
197
-
198
- .top-bar-link:hover {
199
- color: var(--th-text-heading);
200
- background: var(--th-sf-05);
201
- }
202
-
203
- /* ─── App container ─── */
204
- #app {
205
- position: relative;
206
- z-index: 1;
207
- display: flex;
208
- align-items: center;
209
- justify-content: center;
210
- min-height: 100vh;
211
- padding: 48px 32px;
212
- }
213
-
214
- /* ─── Screen management ─── */
215
- .screen {
216
- display: none;
217
- width: 100%;
218
- max-width: 480px;
219
- }
220
-
221
- .screen.active {
222
- display: block;
223
- }
224
-
225
- .screen-inner {
226
- position: relative;
227
- text-align: center;
228
- }
229
-
230
- .screen-inner--wide {
231
- max-width: 820px;
232
- margin: 0 auto;
233
- }
234
-
235
- #screen-choose {
236
- max-width: 860px;
237
- }
238
-
239
- /* ─── Staggered fade-in ─── */
240
- .anim-fade {
241
- opacity: 0;
242
- transform: translateY(12px);
243
- animation: fadeInUp 0.65s cubic-bezier(.16,1,.3,1) forwards;
244
- }
245
-
246
- .anim-d1 { animation-delay: 0s; }
247
- .anim-d2 { animation-delay: 0.1s; }
248
- .anim-d3 { animation-delay: 0.2s; }
249
-
250
- @keyframes fadeInUp {
251
- to { opacity: 1; transform: translateY(0); }
252
- }
253
-
254
- /* ─── Choose header ─── */
255
- .choose-header {
256
- margin-bottom: 8px;
257
- }
258
-
259
- .logo {
260
- display: inline-flex;
261
- align-items: center;
262
- gap: 10px;
263
- }
264
-
265
- .logo-circle {
266
- width: 30px;
267
- height: 30px;
268
- border-radius: 50%;
269
- border: 2.5px solid var(--th-text-heading);
270
- flex-shrink: 0;
271
- }
272
-
273
- .logo-text {
274
- font-size: 18px;
275
- font-weight: 600;
276
- color: var(--th-text-heading);
277
- letter-spacing: -0.3px;
278
- }
279
-
280
- /* ─── Typography ─── */
281
- h1 {
282
- font-size: 26px;
283
- font-weight: 600;
284
- color: var(--th-text-heading);
285
- letter-spacing: -0.3px;
286
- line-height: 1.2;
287
- }
288
-
289
- h2 {
290
- font-size: 21px;
291
- font-weight: 600;
292
- color: var(--th-text-heading);
293
- letter-spacing: -0.2px;
294
- line-height: 1.2;
295
- margin-bottom: 4px;
296
- }
297
-
298
- h3 {
299
- font-size: 16px;
300
- font-weight: 600;
301
- color: var(--th-text-heading);
302
- margin-bottom: 6px;
303
- }
304
-
305
- .subtitle {
306
- margin-top: 10px;
307
- font-size: 15px;
308
- line-height: 1.65;
309
- color: var(--th-text-muted);
310
- }
311
-
312
- .version-text {
313
- margin-top: 16px;
314
- font-size: 11px;
315
- color: var(--th-text-muted);
316
- opacity: .7;
317
- }
318
-
319
- /* ─── Cards row ─── */
320
- .cards-row {
321
- display: flex;
322
- align-items: stretch;
323
- gap: 0;
324
- margin-top: 28px;
325
- }
326
-
327
- .choice-card {
328
- flex: 1;
329
- position: relative;
330
- overflow: hidden;
331
- background: var(--th-card-bg);
332
- border: 1px solid var(--th-card-bd);
333
- border-radius: 24px;
334
- padding: 28px 28px 24px;
335
- text-align: left;
336
- display: flex;
337
- flex-direction: column;
338
- transition: border-color 0.25s, box-shadow 0.25s;
339
- }
340
-
341
- .choice-card:hover {
342
- border-color: rgba(124, 58, 237, .25);
343
- box-shadow: 0 8px 40px rgba(124, 58, 237, .08), 0 1px 3px rgba(0,0,0,.04);
344
- }
345
-
346
- /* Card icon badge */
347
- .card-icon {
348
- width: 44px;
349
- height: 44px;
350
- background: var(--accent-soft);
351
- border-radius: 14px;
352
- display: flex;
353
- align-items: center;
354
- justify-content: center;
355
- margin-bottom: 14px;
356
- color: var(--accent);
357
- position: relative;
358
- }
359
-
360
- .card-icon--center {
361
- margin: 0 auto 16px;
362
- }
363
-
364
- .card-desc {
365
- font-size: 13.5px;
366
- line-height: 1.6;
367
- color: var(--th-text-body);
368
- margin-bottom: 18px;
369
- }
370
-
371
- .card-perks {
372
- list-style: none;
373
- margin: 0 0 20px;
374
- padding: 0;
375
- flex: 1;
376
- }
377
-
378
- .card-perks li {
379
- font-size: 13px;
380
- color: var(--th-text-body);
381
- padding: 4px 0 4px 20px;
382
- position: relative;
383
- line-height: 1.5;
384
- }
385
-
386
- .card-perks li::before {
387
- content: "";
388
- position: absolute;
389
- left: 0;
390
- top: 10px;
391
- width: 6px;
392
- height: 6px;
393
- border-radius: 50%;
394
- background: var(--accent);
395
- opacity: .6;
396
- }
397
-
398
- /* Card button — shared base */
399
- .btn-card {
400
- display: inline-flex;
401
- align-items: center;
402
- justify-content: center;
403
- gap: 8px;
404
- width: 100%;
405
- padding: 12px 20px;
406
- font-size: 14px;
407
- font-weight: 600;
408
- font-family: var(--font);
409
- border: none;
410
- border-radius: 14px;
411
- cursor: pointer;
412
- transition: background 0.2s, transform 0.1s, box-shadow 0.25s, border-color 0.2s;
413
- margin-top: auto;
414
- position: relative;
415
- overflow: hidden;
416
- }
417
-
418
- .btn-card:active {
419
- transform: scale(0.97);
420
- }
421
-
422
- .choice-card .btn-card svg {
423
- transition: transform 0.2s;
424
- }
425
-
426
- .choice-card:hover .btn-card svg {
427
- transform: translateX(3px);
428
- }
429
-
430
- /* Accent variant — gradient, glow */
431
- .btn-card--accent {
432
- color: #fff;
433
- background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 50%, #5b21b6 100%);
434
- box-shadow: 0 2px 12px rgba(124, 58, 237, .25);
435
- }
436
-
437
- .btn-card--accent:hover {
438
- background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 50%, #6d28d9 100%);
439
- box-shadow: 0 4px 24px rgba(124, 58, 237, .35);
440
- }
441
-
442
- /* Outline variant — ghost, border */
443
- .btn-card--outline {
444
- color: var(--th-text-heading);
445
- background: transparent;
446
- border: 1.5px solid var(--th-card-bd);
447
- }
448
-
449
- .btn-card--outline:hover {
450
- border-color: var(--th-on-20);
451
- background: var(--th-sf-03);
452
- box-shadow: 0 2px 12px rgba(0,0,0,.04);
453
- }
454
-
455
- /* ─── Vertical divider ─── */
456
- .cards-divider {
457
- display: flex;
458
- flex-direction: column;
459
- align-items: center;
460
- justify-content: center;
461
- padding: 0 20px;
462
- flex-shrink: 0;
463
- }
464
-
465
- .divider-line {
466
- width: 1px;
467
- flex: 1;
468
- background: var(--th-bd-default);
469
- }
470
-
471
- .divider-label {
472
- font-size: 11px;
473
- font-weight: 600;
474
- color: var(--th-text-muted);
475
- text-transform: uppercase;
476
- letter-spacing: 0.1em;
477
- padding: 10px 0;
478
- }
479
-
480
- /* ─── Migration note ─── */
481
- .migrate-note {
482
- margin-top: 24px;
483
- display: inline-flex;
484
- align-items: center;
485
- gap: 8px;
486
- font-size: 13px;
487
- color: var(--th-text-muted);
488
- background: var(--accent-soft);
489
- padding: 10px 20px;
490
- border-radius: 999px;
491
- }
492
-
493
- .migrate-note svg {
494
- flex-shrink: 0;
495
- color: var(--accent);
496
- }
497
-
498
- /* ─── Auth toggle tabs ─── */
499
- .auth-toggle {
500
- display: flex;
501
- gap: 4px;
502
- margin-top: 18px;
503
- background: var(--th-sf-04);
504
- border-radius: 10px;
505
- padding: 3px;
506
- }
507
-
508
- .auth-tab {
509
- flex: 1;
510
- padding: 8px 12px;
511
- font-size: 13px;
512
- font-weight: 500;
513
- font-family: var(--font);
514
- color: var(--th-text-muted);
515
- background: transparent;
516
- border: none;
517
- border-radius: 8px;
518
- cursor: pointer;
519
- transition: color 0.15s, background 0.15s, box-shadow 0.15s;
520
- }
521
-
522
- .auth-tab.active {
523
- color: var(--th-text-heading);
524
- background: var(--th-card-bg);
525
- box-shadow: 0 1px 3px rgba(0,0,0,.06);
526
- }
527
-
528
- .auth-tab:hover:not(.active) {
529
- color: var(--th-text-body);
530
- }
531
-
532
- .auth-panel {
533
- display: none;
534
- }
535
-
536
- .auth-panel.active {
537
- display: block;
538
- }
539
-
540
- /* Input with inline button */
541
- .input-with-btn {
542
- display: flex;
543
- gap: 6px;
544
- }
545
-
546
- .input-with-btn input {
547
- flex: 1;
548
- }
549
-
550
- .btn-browse {
551
- padding: 0 14px;
552
- font-size: 13px;
553
- font-weight: 500;
554
- font-family: var(--font);
555
- color: var(--th-text-body);
556
- background: var(--th-sf-04);
557
- border: 1px solid var(--th-card-bd);
558
- border-radius: 12px;
559
- cursor: pointer;
560
- white-space: nowrap;
561
- transition: border-color 0.15s, background 0.15s;
562
- }
563
-
564
- .btn-browse:hover {
565
- border-color: var(--accent);
566
- background: var(--accent-soft);
567
- color: var(--accent);
568
- }
569
-
570
- .label-hint {
571
- font-weight: 400;
572
- color: var(--th-text-muted);
573
- font-size: 12px;
574
- }
575
-
576
- /* ─── Advanced toggle ─── */
577
- .btn-advanced {
578
- display: inline-flex;
579
- align-items: center;
580
- gap: 6px;
581
- margin-top: 18px;
582
- padding: 6px 0;
583
- font-size: 13px;
584
- font-weight: 500;
585
- font-family: var(--font);
586
- color: var(--th-text-muted);
587
- background: none;
588
- border: none;
589
- cursor: pointer;
590
- transition: color 0.15s;
591
- }
592
-
593
- .btn-advanced:hover {
594
- color: var(--th-text-body);
595
- }
596
-
597
- .btn-advanced .chevron {
598
- transition: transform 0.2s ease;
599
- }
600
-
601
- .btn-advanced.open .chevron {
602
- transform: rotate(180deg);
603
- }
604
-
605
- .advanced-panel {
606
- display: none;
607
- margin-top: 4px;
608
- padding: 16px;
609
- background: var(--th-sf-03);
610
- border: 1px solid var(--th-card-bd);
611
- border-radius: 14px;
612
- }
613
-
614
- .advanced-panel.open {
615
- display: block;
616
- }
617
-
618
- .advanced-grid {
619
- display: grid;
620
- grid-template-columns: 1fr 1fr;
621
- gap: 12px;
622
- }
623
-
624
- .advanced-grid .form-group {
625
- margin-top: 0;
626
- }
627
-
628
- .advanced-panel > .form-group {
629
- margin-top: 12px;
630
- }
631
-
632
- /* ─── Buttons ─── */
633
- .btn-primary {
634
- display: inline-flex;
635
- align-items: center;
636
- justify-content: center;
637
- margin-top: 24px;
638
- width: 100%;
639
- padding: 13px 24px;
640
- font-size: 14px;
641
- font-weight: 600;
642
- font-family: var(--font);
643
- color: var(--th-btn-text);
644
- background: var(--th-btn-bg);
645
- border: none;
646
- border-radius: 14px;
647
- cursor: pointer;
648
- transition: background 0.15s, transform 0.1s;
649
- }
650
-
651
- .btn-primary:hover {
652
- background: var(--th-text-heading);
653
- }
654
-
655
- .btn-primary:active {
656
- transform: scale(0.98);
657
- }
658
-
659
- .btn-back {
660
- position: absolute;
661
- top: 2px;
662
- left: -52px;
663
- width: 38px;
664
- height: 38px;
665
- display: flex;
666
- align-items: center;
667
- justify-content: center;
668
- border-radius: 14px;
669
- border: 1px solid var(--th-card-bd);
670
- background: var(--th-card-bg);
671
- color: var(--th-text-body);
672
- cursor: pointer;
673
- transition: border-color 0.15s, color 0.15s;
674
- }
675
-
676
- .btn-back:hover {
677
- border-color: var(--accent);
678
- color: var(--accent);
679
- }
680
-
681
- /* ─── Form ─── */
682
- .form-group {
683
- text-align: left;
684
- margin-top: 18px;
685
- }
686
-
687
- .form-group label {
688
- display: block;
689
- font-size: 13px;
690
- font-weight: 500;
691
- color: var(--th-text-heading);
692
- margin-bottom: 6px;
693
- }
694
-
695
- .form-group input {
696
- width: 100%;
697
- padding: 11px 14px;
698
- font-size: 14px;
699
- font-family: var(--font);
700
- color: var(--th-text-heading);
701
- background: var(--th-card-bg);
702
- border: 1px solid var(--th-card-bd);
703
- border-radius: 12px;
704
- outline: none;
705
- transition: border-color 0.15s, box-shadow 0.15s;
706
- }
707
-
708
- .form-group input:focus {
709
- border-color: var(--accent);
710
- box-shadow: 0 0 0 3px var(--accent-soft);
711
- }
712
-
713
- .form-group input::placeholder {
714
- color: var(--th-text-muted);
715
- }
716
-
717
- /* ─── Status messages ─── */
718
- .status-message {
719
- display: none;
720
- margin-top: 14px;
721
- padding: 10px 14px;
722
- font-size: 13px;
723
- font-weight: 500;
724
- border-radius: 12px;
725
- text-align: left;
726
- }
727
-
728
- .status-message.error {
729
- color: var(--danger);
730
- background: rgba(239, 68, 68, 0.06);
731
- border: 1px solid rgba(239, 68, 68, 0.12);
732
- }
733
-
734
- .status-message.success {
735
- color: var(--success);
736
- background: rgba(34, 197, 94, 0.06);
737
- border: 1px solid rgba(34, 197, 94, 0.12);
738
- }
739
-
740
- /* ─── Tutorial link ─── */
741
- .tutorial-link {
742
- display: inline-flex;
743
- align-items: center;
744
- gap: 6px;
745
- margin-top: 20px;
746
- font-size: 13px;
747
- color: var(--accent);
748
- text-decoration: none;
749
- transition: opacity 0.15s;
750
- }
751
-
752
- .tutorial-link:hover {
753
- opacity: .75;
754
- }
755
-
756
- /* ─── Spinner ─── */
757
- .spinner {
758
- width: 36px;
759
- height: 36px;
760
- margin: 0 auto 20px;
761
- border: 3px solid var(--th-on-10);
762
- border-top-color: var(--accent);
763
- border-radius: 50%;
764
- animation: spin 0.7s linear infinite;
765
- }
766
-
767
- @keyframes spin {
768
- to { transform: rotate(360deg); }
769
- }
770
-
771
- /* ─── Loading screen action buttons ─── */
772
- .loading-actions {
773
- display: none;
774
- flex-direction: column;
775
- align-items: center;
776
- gap: 10px;
777
- margin-top: 24px;
778
- }
779
-
780
- .loading-actions.visible {
781
- display: flex;
782
- }
783
-
784
- .loading-btn {
785
- display: none;
786
- align-items: center;
787
- justify-content: center;
788
- min-width: 220px;
789
- padding: 12px 24px;
790
- font-size: 14px;
791
- font-weight: 600;
792
- font-family: var(--font);
793
- border: none;
794
- border-radius: 14px;
795
- cursor: pointer;
796
- transition: background 0.2s, transform 0.1s, box-shadow 0.25s, border-color 0.2s;
797
- }
798
-
799
- .loading-btn.visible {
800
- display: inline-flex;
801
- }
802
-
803
- .loading-btn:active {
804
- transform: scale(0.97);
805
- }
806
-
807
- .loading-btn--accent {
808
- color: #fff;
809
- background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 50%, #5b21b6 100%);
810
- box-shadow: 0 2px 12px rgba(124, 58, 237, .25);
811
- }
812
-
813
- .loading-btn--accent:hover {
814
- background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 50%, #6d28d9 100%);
815
- box-shadow: 0 4px 24px rgba(124, 58, 237, .35);
816
- }
817
-
818
- .loading-btn--outline {
819
- color: var(--th-text-heading);
820
- background: transparent;
821
- border: 1.5px solid var(--th-card-bd);
822
- }
823
-
824
- .loading-btn--outline:hover {
825
- border-color: var(--th-on-20);
826
- background: var(--th-sf-03);
827
- box-shadow: 0 2px 12px rgba(0,0,0,.04);
828
- }
829
-
830
- .loading-btn--text {
831
- color: var(--th-text-muted);
832
- background: transparent;
833
- min-width: auto;
834
- padding: 8px 16px;
835
- font-weight: 500;
836
- }
837
-
838
- .loading-btn--text:hover {
839
- color: var(--th-text-body);
840
- }
841
-
842
- /* ─── Self-host sub-choice screen ─── */
843
- .selfhost-choices {
844
- display: flex;
845
- flex-direction: column;
846
- gap: 12px;
847
- margin: 24px 0 8px;
848
- }
849
-
850
- .selfhost-choice-card {
851
- display: flex;
852
- align-items: center;
853
- gap: 16px;
854
- padding: 18px 20px;
855
- background: var(--th-card-bg);
856
- border: 1.5px solid var(--th-card-bd);
857
- border-radius: 14px;
858
- cursor: pointer;
859
- transition: border-color 0.15s, background 0.15s, box-shadow 0.15s;
860
- text-align: left;
861
- font-family: inherit;
862
- color: inherit;
863
- font-size: inherit;
864
- }
865
-
866
- .selfhost-choice-card:hover {
867
- border-color: var(--accent);
868
- background: var(--accent-soft);
869
- box-shadow: 0 0 0 3px var(--accent-glow);
870
- }
871
-
872
- .selfhost-choice-icon {
873
- display: flex;
874
- align-items: center;
875
- justify-content: center;
876
- width: 44px;
877
- height: 44px;
878
- border-radius: 12px;
879
- background: var(--th-sf-05);
880
- color: var(--th-text-heading);
881
- flex-shrink: 0;
882
- }
883
-
884
- .selfhost-choice-card:hover .selfhost-choice-icon {
885
- background: var(--accent-soft);
886
- color: var(--accent);
887
- }
888
-
889
- .selfhost-choice-content {
890
- flex: 1;
891
- display: flex;
892
- flex-direction: column;
893
- gap: 3px;
894
- }
895
-
896
- .selfhost-choice-title {
897
- font-weight: 600;
898
- font-size: 14.5px;
899
- color: var(--th-text-heading);
900
- }
901
-
902
- .badge-beta {
903
- font-size: 10.5px;
904
- font-weight: 600;
905
- color: var(--accent);
906
- background: var(--accent-soft);
907
- padding: 2px 8px;
908
- border-radius: 999px;
909
- letter-spacing: 0.02em;
910
- vertical-align: middle;
911
- margin-left: 4px;
912
- }
913
-
914
- .selfhost-choice-desc {
915
- font-size: 12.5px;
916
- color: var(--th-text-muted);
917
- line-height: 1.45;
918
- }
919
-
920
- .selfhost-choice-arrow {
921
- flex-shrink: 0;
922
- color: var(--th-on-20);
923
- transition: color 0.15s, transform 0.15s;
924
- }
925
-
926
- .selfhost-choice-card:hover .selfhost-choice-arrow {
927
- color: var(--accent);
928
- transform: translateX(2px);
929
- }
930
-
931
- /* ─── Preferences screen ─── */
932
- .pref-cards {
933
- display: flex;
934
- flex-direction: column;
935
- gap: 10px;
936
- margin: 24px 0 28px;
937
- }
938
-
939
- .pref-card {
940
- display: flex;
941
- align-items: center;
942
- gap: 14px;
943
- padding: 16px 18px;
944
- background: var(--th-card-bg);
945
- border: 1.5px solid var(--th-card-bd);
946
- border-radius: 14px;
947
- cursor: pointer;
948
- transition: border-color 0.15s, background 0.15s, box-shadow 0.15s;
949
- text-align: left;
950
- font-family: inherit;
951
- color: inherit;
952
- font-size: inherit;
953
- }
954
-
955
- .pref-card:hover {
956
- border-color: var(--th-on-16);
957
- background: var(--th-sf-03);
958
- }
959
-
960
- .pref-card.active {
961
- border-color: var(--accent);
962
- background: var(--accent-soft);
963
- box-shadow: 0 0 0 3px var(--accent-glow);
964
- }
965
-
966
- .pref-card-icon {
967
- display: flex;
968
- align-items: center;
969
- justify-content: center;
970
- width: 40px;
971
- height: 40px;
972
- border-radius: 10px;
973
- background: var(--th-sf-05);
974
- color: var(--th-text-heading);
975
- flex-shrink: 0;
976
- }
977
-
978
- .pref-card.active .pref-card-icon {
979
- background: var(--accent-soft);
980
- color: var(--accent);
981
- }
982
-
983
- .pref-card-content {
984
- flex: 1;
985
- display: flex;
986
- flex-direction: column;
987
- gap: 2px;
988
- }
989
-
990
- .pref-card-title {
991
- font-weight: 600;
992
- font-size: 14px;
993
- color: var(--th-text-heading);
994
- }
995
-
996
- .pref-card-desc {
997
- font-size: 12.5px;
998
- color: var(--th-text-muted);
999
- line-height: 1.4;
1000
- }
1001
-
1002
- .pref-card-check {
1003
- display: flex;
1004
- align-items: center;
1005
- justify-content: center;
1006
- width: 24px;
1007
- height: 24px;
1008
- border-radius: 50%;
1009
- border: 1.5px solid var(--th-on-14);
1010
- flex-shrink: 0;
1011
- color: transparent;
1012
- transition: all 0.15s;
1013
- }
1014
-
1015
- .pref-card.active .pref-card-check {
1016
- background: var(--accent);
1017
- border-color: var(--accent);
1018
- color: #fff;
1019
- }
1020
-
1021
- .pref-hint {
1022
- display: inline-flex;
1023
- align-items: center;
1024
- gap: 7px;
1025
- font-size: 12.5px;
1026
- color: var(--th-text-muted);
1027
- margin: 16px 0 0;
1028
- opacity: 0.7;
1029
- }
1030
-
1031
- .pref-hint svg {
1032
- flex-shrink: 0;
1033
- }
1034
-
1035
- /* ─── Tunnel choice screen ─── */
1036
- .tunnel-choices {
1037
- display: flex;
1038
- flex-direction: column;
1039
- gap: 10px;
1040
- margin: 24px 0 0;
1041
- }
1042
-
1043
- .tunnel-card {
1044
- display: flex;
1045
- align-items: center;
1046
- gap: 14px;
1047
- padding: 16px 18px;
1048
- background: var(--th-card-bg);
1049
- border: 1.5px solid var(--th-card-bd);
1050
- border-radius: 14px;
1051
- cursor: pointer;
1052
- transition: border-color 0.15s, background 0.15s, box-shadow 0.15s;
1053
- text-align: left;
1054
- font-family: inherit;
1055
- color: inherit;
1056
- font-size: inherit;
1057
- }
1058
-
1059
- .tunnel-card:hover {
1060
- border-color: var(--th-on-16);
1061
- background: var(--th-sf-03);
1062
- }
1063
-
1064
- .tunnel-card.active {
1065
- border-color: var(--accent);
1066
- background: var(--accent-soft);
1067
- box-shadow: 0 0 0 3px var(--accent-glow);
1068
- }
1069
-
1070
- .tunnel-card-icon {
1071
- display: flex;
1072
- align-items: center;
1073
- justify-content: center;
1074
- width: 40px;
1075
- height: 40px;
1076
- border-radius: 10px;
1077
- background: var(--th-sf-05);
1078
- color: var(--th-text-heading);
1079
- flex-shrink: 0;
1080
- }
1081
-
1082
- .tunnel-card.active .tunnel-card-icon {
1083
- background: var(--accent-soft);
1084
- color: var(--accent);
1085
- }
1086
-
1087
- .tunnel-card-content {
1088
- flex: 1;
1089
- display: flex;
1090
- flex-direction: column;
1091
- gap: 3px;
1092
- }
1093
-
1094
- .tunnel-card-header {
1095
- display: flex;
1096
- align-items: center;
1097
- gap: 8px;
1098
- }
1099
-
1100
- .tunnel-card-title {
1101
- font-weight: 600;
1102
- font-size: 14px;
1103
- color: var(--th-text-heading);
1104
- }
1105
-
1106
- .tunnel-card-badge {
1107
- font-size: 10.5px;
1108
- font-weight: 600;
1109
- color: var(--accent);
1110
- background: var(--accent-soft);
1111
- padding: 2px 8px;
1112
- border-radius: 999px;
1113
- letter-spacing: 0.02em;
1114
- }
1115
-
1116
- .tunnel-card-desc {
1117
- font-size: 12.5px;
1118
- color: var(--th-text-muted);
1119
- line-height: 1.45;
1120
- }
1121
-
1122
- .tunnel-card-check {
1123
- display: flex;
1124
- align-items: center;
1125
- justify-content: center;
1126
- width: 24px;
1127
- height: 24px;
1128
- border-radius: 50%;
1129
- border: 1.5px solid var(--th-on-14);
1130
- flex-shrink: 0;
1131
- color: transparent;
1132
- transition: all 0.15s;
1133
- }
1134
-
1135
- .tunnel-card.active .tunnel-card-check {
1136
- background: var(--accent);
1137
- border-color: var(--accent);
1138
- color: #fff;
1139
- }