failproofai 0.0.10-beta.8 → 0.0.10

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 (174) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +7 -7
  3. package/.next/standalone/.next/prerender-manifest.json +3 -3
  4. package/.next/standalone/.next/required-server-files.json +1 -1
  5. package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +4 -4
  6. package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  7. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  8. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
  11. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  12. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  13. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
  14. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  15. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +4 -4
  17. package/.next/standalone/.next/server/app/_not-found/page/next-font-manifest.json +6 -2
  18. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  19. package/.next/standalone/.next/server/app/_not-found/page.js +2 -2
  20. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/.next/server/app/_not-found.html +1 -30
  23. package/.next/standalone/.next/server/app/_not-found.rsc +21 -26
  24. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +21 -26
  25. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  26. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +10 -11
  27. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  28. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  29. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  30. package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js +1 -1
  31. package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/index.html +1 -1
  33. package/.next/standalone/.next/server/app/index.rsc +21 -21
  34. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  35. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +21 -21
  36. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
  37. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +10 -11
  38. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +3 -2
  39. package/.next/standalone/.next/server/app/page/build-manifest.json +4 -4
  40. package/.next/standalone/.next/server/app/page/next-font-manifest.json +6 -2
  41. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  42. package/.next/standalone/.next/server/app/page.js +2 -2
  43. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/policies/page/build-manifest.json +4 -4
  46. package/.next/standalone/.next/server/app/policies/page/next-font-manifest.json +6 -2
  47. package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +8 -8
  48. package/.next/standalone/.next/server/app/policies/page.js +2 -2
  49. package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
  50. package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
  51. package/.next/standalone/.next/server/app/project/[name]/page/build-manifest.json +4 -4
  52. package/.next/standalone/.next/server/app/project/[name]/page/next-font-manifest.json +6 -2
  53. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  54. package/.next/standalone/.next/server/app/project/[name]/page.js +3 -3
  55. package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
  56. package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/build-manifest.json +4 -4
  58. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/next-font-manifest.json +6 -2
  59. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  60. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  61. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js +3 -3
  62. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
  63. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
  64. package/.next/standalone/.next/server/app/projects/page/build-manifest.json +4 -4
  65. package/.next/standalone/.next/server/app/projects/page/next-font-manifest.json +6 -2
  66. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  67. package/.next/standalone/.next/server/app/projects/page.js +3 -3
  68. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  69. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0fjhqi9._.js → [root-of-the-server]__044xt9.._.js} +2 -2
  71. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0d_ob4n._.js +1 -1
  72. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fe7_q_._.js +1 -1
  73. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0vlhtkc._.js +1 -1
  74. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0yfq1yr._.js +1 -1
  75. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_0z7w.hh._.js +1 -1
  76. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0370~qj._.js +3 -0
  77. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0mup1hi._.js → [root-of-the-server]__0609ezh._.js} +1 -1
  78. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__07_-mkc._.js +3 -0
  79. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0e9o9ri._.js +4 -0
  80. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0og6yo7._.js → [root-of-the-server]__0l6swv1._.js} +2 -2
  81. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0logebz._.js +3 -0
  82. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0mi5ejy._.js +2 -2
  83. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0joez.y._.js → [root-of-the-server]__0podumr._.js} +3 -3
  84. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rkxer-._.js +3 -0
  85. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rl2kwi._.js +4 -0
  86. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0t5l7a5._.js +1 -1
  87. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0vg0uey._.js +4 -0
  88. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ye1w50._.js +4 -0
  89. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ymlddl._.js +32 -7
  90. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__10._f0s._.js +4 -0
  91. package/.next/standalone/.next/server/chunks/ssr/_03d7qyt._.js +1 -1
  92. package/.next/standalone/.next/server/chunks/ssr/_0xb8ngh._.js +3 -0
  93. package/.next/standalone/.next/server/chunks/ssr/app_0cdqd9w._.js +1 -1
  94. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_0xerkr6._.js +1 -1
  95. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_0q-m0y-._.js +2 -2
  96. package/.next/standalone/.next/server/chunks/ssr/lib_gemini-projects_ts_0sl~yqr._.js +1 -1
  97. package/.next/standalone/.next/server/chunks/ssr/lib_opencode-projects_ts_0op9gyp._.js +1 -1
  98. package/.next/standalone/.next/server/middleware-build-manifest.js +7 -7
  99. package/.next/standalone/.next/server/next-font-manifest.js +1 -1
  100. package/.next/standalone/.next/server/next-font-manifest.json +21 -2
  101. package/.next/standalone/.next/server/pages/404.html +1 -30
  102. package/.next/standalone/.next/server/pages/500.html +1 -1
  103. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/server-reference-manifest.json +9 -9
  105. package/.next/standalone/.next/static/chunks/{0k2yq8zevk9bl.js → 0j171xiqge4rv.js} +1 -1
  106. package/.next/standalone/.next/static/chunks/0kqar56yl~41o.js +6 -0
  107. package/.next/standalone/.next/static/chunks/{07i9r0t6n4cpy.js → 0lt8ko3lw.5yt.js} +1 -1
  108. package/.next/standalone/.next/static/chunks/0ml1.ck_5t36i.js +1 -0
  109. package/.next/standalone/.next/static/chunks/{0km4.rc8uvt_t.js → 0pkl..xgo-qox.js} +1 -1
  110. package/.next/standalone/.next/static/chunks/{12simlrcfk3g2.js → 0rnqmir4cd5p9.js} +2 -2
  111. package/.next/standalone/.next/static/chunks/{0bi2r.m~yokoo.js → 0w6fzf.07a24u.js} +1 -1
  112. package/.next/standalone/.next/static/chunks/0xbo5nl6w4lka.js +1 -0
  113. package/.next/standalone/.next/static/chunks/12l2t63hkyo2q.js +1 -0
  114. package/.next/standalone/.next/static/chunks/{0tyw4u3~2isbh.js → 12pt~2f.c1sha.js} +1 -1
  115. package/.next/standalone/.next/static/chunks/{0by8zx1no6kt4.js → 14lii11wmo450.js} +1 -1
  116. package/.next/standalone/.next/static/chunks/179yytvmam0ug.js +1 -0
  117. package/.next/standalone/.next/static/chunks/17rm86uz2nd5a.css +2 -0
  118. package/.next/standalone/.next/static/chunks/{turbopack-0o7k.hakttp4k.js → turbopack-05z7a19q43zfq.js} +1 -1
  119. package/.next/standalone/.next/static/media/4fa387ec64143e14-s.0q3udbd2bu5yp.woff2 +0 -0
  120. package/.next/standalone/.next/static/media/797e433ab948586e-s.p.0.q-h669a_dqa.woff2 +0 -0
  121. package/.next/standalone/.next/static/media/bbc41e54d2fcbd21-s.0gw~uztddq1df.woff2 +0 -0
  122. package/.next/standalone/.opencode/plugins/failproofai.mjs +75 -15
  123. package/.next/standalone/app/actions/get-hooks-config.ts +25 -1
  124. package/.next/standalone/app/components/cli-badge.tsx +1 -1
  125. package/.next/standalone/app/globals.css +68 -111
  126. package/.next/standalone/app/layout.tsx +16 -56
  127. package/.next/standalone/app/policies/hooks-client.tsx +228 -44
  128. package/.next/standalone/components/navbar.tsx +16 -15
  129. package/.next/standalone/components/ui/button.tsx +4 -4
  130. package/.next/standalone/lib/gemini-projects.ts +64 -24
  131. package/.next/standalone/lib/opencode-projects.ts +9 -7
  132. package/.next/standalone/package.json +2 -2
  133. package/.next/standalone/pi-extension/index.ts +113 -12
  134. package/.next/standalone/readme-arch-hq.gif +0 -0
  135. package/.next/standalone/server.js +1 -1
  136. package/README.md +54 -241
  137. package/dist/cli.mjs +195 -75
  138. package/lib/gemini-projects.ts +64 -24
  139. package/lib/opencode-projects.ts +9 -7
  140. package/package.json +2 -2
  141. package/pi-extension/index.ts +113 -12
  142. package/scripts/launch.ts +6 -22
  143. package/scripts/parse-script-args.ts +1 -11
  144. package/scripts/translate-docs/config.ts +0 -1
  145. package/src/hooks/handler.ts +63 -6
  146. package/src/hooks/integrations.ts +31 -6
  147. package/src/hooks/policy-evaluator.ts +34 -2
  148. package/src/hooks/types.ts +52 -0
  149. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01hj~sd._.js +0 -4
  150. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__02r6nu-._.js +0 -3
  151. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__04dywib._.js +0 -4
  152. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__06sb2gn._.js +0 -4
  153. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09jpajs._.js +0 -4
  154. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0jm6jnh._.js +0 -3
  155. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0t2k4c5._.js +0 -3
  156. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0u1i~9~._.js +0 -4
  157. package/.next/standalone/.next/server/chunks/ssr/_02_tcps._.js +0 -32
  158. package/.next/standalone/.next/server/chunks/ssr/_10lm7or._.js +0 -5
  159. package/.next/standalone/.next/server/chunks/ssr/_11rg2a_._.js +0 -3
  160. package/.next/standalone/.next/static/chunks/0gq8kvc3blri~.js +0 -1
  161. package/.next/standalone/.next/static/chunks/0q5bmqop--9yk.js +0 -1
  162. package/.next/standalone/.next/static/chunks/0s41ggdsb2alw.js +0 -3
  163. package/.next/standalone/.next/static/chunks/0t_7i~pqwbcww.js +0 -6
  164. package/.next/standalone/.next/static/chunks/0xr8w5io1-kb9.css +0 -1
  165. package/.next/standalone/.next/static/chunks/164g0yuhpb2pi.js +0 -1
  166. package/.next/standalone/components/logo.tsx +0 -36
  167. package/.next/standalone/components/theme-toggle.tsx +0 -37
  168. package/.next/standalone/contexts/ThemeContext.tsx +0 -69
  169. package/.next/standalone/failproofai-hq.gif +0 -0
  170. package/.next/standalone/public/exospheresmall-dark.png +0 -0
  171. package/.next/standalone/public/exospheresmall.png +0 -0
  172. /package/.next/standalone/.next/static/{0PSH56_4bbPBaHiyPkthl → dAuQps6jUwCz9X1Q5FFOO}/_buildManifest.js +0 -0
  173. /package/.next/standalone/.next/static/{0PSH56_4bbPBaHiyPkthl → dAuQps6jUwCz9X1Q5FFOO}/_clientMiddlewareManifest.js +0 -0
  174. /package/.next/standalone/.next/static/{0PSH56_4bbPBaHiyPkthl → dAuQps6jUwCz9X1Q5FFOO}/_ssgManifest.js +0 -0
@@ -3,81 +3,45 @@
3
3
  @custom-variant dark (&:is(.dark *));
4
4
 
5
5
  :root {
6
- --accent: #031035;
7
- --accent-light: #0a1a4a;
8
- --accent-lighter: #1a2a5a;
9
- --accent-lightest: #2a3a6a;
10
- --radius: 0.625rem;
11
-
12
- /* Updated Color Palette based on #031035 and accents */
13
- --background: #031035; /* Deep navy primary */
14
- --foreground: #f8fafc; /* Light text */
15
- --card: #0a1a4a; /* Slightly lighter navy for cards */
16
- --card-foreground: #f8fafc;
17
- --popover: #0a1a4a;
18
- --popover-foreground: #f8fafc;
19
- --primary: #87ceeb; /* Sky blue accent */
20
- --primary-foreground: #031035;
21
- --secondary: #1a2a5a; /* Medium navy */
22
- --secondary-foreground: #f8fafc;
23
- --muted: #2a3a6a; /* Muted navy */
24
- --muted-foreground: #94a3b8; /* Light gray text */
25
- --accent-foreground: #f8fafc;
26
- --destructive: #ff6b8a; /* Pink accent for errors */
27
- --border: #1a2a5a; /* Navy border */
28
- --input: #1a2a5a; /* Navy input background */
29
- --ring: #87ceeb; /* Sky blue focus ring */
30
- --chart-1: #87ceeb; /* Sky blue */
31
- --chart-2: #66d1b5; /* Green accent */
32
- --chart-3: #ffed9e; /* Yellow accent */
33
- --chart-4: #ff6b8a; /* Pink accent */
34
- --chart-5: #a78bfa; /* Purple accent */
35
- --sidebar: #0a1a4a;
36
- --sidebar-foreground: #f8fafc;
37
- --sidebar-primary: #87ceeb;
38
- --sidebar-primary-foreground: #031035;
39
- --sidebar-accent: #1a2a5a;
40
- --sidebar-accent-foreground: #f8fafc;
41
- --sidebar-border: #1a2a5a;
42
- --sidebar-ring: #87ceeb;
43
- }
44
-
45
- /* Light Mode Variables */
46
- .light {
47
- --background: #ffffff; /* White background */
48
- --foreground: #031035; /* Dark navy text */
49
- --card: #f2f7fb; /* Light card background */
50
- --card-foreground: #031035;
51
- --popover: #ffffff;
52
- --popover-foreground: #031035;
53
- --primary: #031035; /* Dark navy primary (keeping dark blue accent) */
54
- --primary-foreground: #ffffff;
55
- --secondary: #f1f5f9; /* Light gray secondary */
56
- --secondary-foreground: #031035;
57
- --muted: #f1f5f9; /* Light muted background */
58
- --muted-foreground: #64748b; /* Medium gray text */
59
- --accent: #031035; /* Keep dark blue accent */
60
- --accent-light: #0a1a4a; /* Keep dark blue accent */
61
- --accent-lighter: #1a2a5a; /* Keep dark blue accent */
62
- --accent-lightest: #2a3a6a; /* Keep dark blue accent */
63
- --accent-foreground: #ffffff;
64
- --destructive: #dc2626; /* Red for errors in light mode */
65
- --border: #e2e8f0; /* Light border */
66
- --input: #ffffff; /* White input background */
67
- --ring: #87ceeb; /* Keep sky blue focus ring */
68
- --chart-1: #87ceeb; /* Sky blue */
69
- --chart-2: #4ade80; /* Green accent */
70
- --chart-3: #cca301; /* Yellow accent */
71
- --chart-4: #ff6b8a; /* Pink accent */
72
- --chart-5: #a78bfa; /* Purple accent */
73
- --sidebar: #f8fafc;
74
- --sidebar-foreground: #031035;
75
- --sidebar-primary: #031035; /* Dark navy for sidebar primary in light mode */
76
- --sidebar-primary-foreground: #ffffff;
77
- --sidebar-accent: #f1f5f9;
78
- --sidebar-accent-foreground: #031035;
79
- --sidebar-border: #e2e8f0;
80
- --sidebar-ring: #87ceeb;
6
+ --radius: 0.5rem;
7
+
8
+ /* Near-black canvas + brand pink accent — failproofai brand: pink primary
9
+ (#e4587d, from docs/docs.json colors.light) with green status reserved
10
+ for chart-2 / success indicators (the leaf gradient family). */
11
+ --background: #0a0a0a;
12
+ --foreground: #fafafa;
13
+ --card: #141416;
14
+ --card-foreground: #fafafa;
15
+ --popover: #141416;
16
+ --popover-foreground: #fafafa;
17
+ --primary: #e4587d;
18
+ --primary-foreground: #0a0a0a;
19
+ --secondary: #1f1f22;
20
+ --secondary-foreground: #fafafa;
21
+ --muted: #1f1f22;
22
+ --muted-foreground: #a1a1aa;
23
+ --accent: #e4587d;
24
+ --accent-light: #f08aa6;
25
+ --accent-lighter: #f7b3c5;
26
+ --accent-lightest: #fbd5de;
27
+ --accent-foreground: #0a0a0a;
28
+ --destructive: #ef4444;
29
+ --border: #27272a;
30
+ --input: #27272a;
31
+ --ring: #e4587d;
32
+ --chart-1: #e4587d;
33
+ --chart-2: #4ade80;
34
+ --chart-3: #fbbf24;
35
+ --chart-4: #f87171;
36
+ --chart-5: #a78bfa;
37
+ --sidebar: #141416;
38
+ --sidebar-foreground: #fafafa;
39
+ --sidebar-primary: #e4587d;
40
+ --sidebar-primary-foreground: #0a0a0a;
41
+ --sidebar-accent: #1f1f22;
42
+ --sidebar-accent-foreground: #fafafa;
43
+ --sidebar-border: #27272a;
44
+ --sidebar-ring: #e4587d;
81
45
  }
82
46
 
83
47
  /* Custom Scrollbar Styling */
@@ -92,13 +56,13 @@
92
56
  }
93
57
 
94
58
  ::-webkit-scrollbar-thumb {
95
- background: var(--chart-1);
59
+ background: var(--border);
96
60
  border-radius: var(--radius);
97
61
  transition: background 0.2s ease;
98
62
  }
99
63
 
100
64
  ::-webkit-scrollbar-thumb:hover {
101
- background: var(--accent-lightest);
65
+ background: var(--primary);
102
66
  }
103
67
 
104
68
  ::-webkit-scrollbar-corner {
@@ -118,8 +82,8 @@
118
82
  --color-accent-light: var(--accent-light);
119
83
  --color-accent-lighter: var(--accent-lighter);
120
84
  --color-accent-lightest: var(--accent-lightest);
121
- --font-sans: system-ui, -apple-system, sans-serif;
122
- --font-mono: ui-monospace, monospace;
85
+ --font-sans: var(--font-sans, system-ui, -apple-system, sans-serif);
86
+ --font-mono: var(--font-mono, ui-monospace, monospace);
123
87
  --color-sidebar-ring: var(--sidebar-ring);
124
88
  --color-sidebar-border: var(--sidebar-border);
125
89
  --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
@@ -159,24 +123,35 @@
159
123
  @apply border-border outline-ring/50;
160
124
  }
161
125
  html {
162
- font-size: 120%; /* Increased from default 16px */
126
+ font-size: 120%;
163
127
  }
164
128
  body {
165
129
  @apply bg-background text-foreground font-sans;
130
+
131
+ position: relative;
132
+ }
133
+ /* Faint pink vignette at the top — atmosphere without ornament. */
134
+ body::before {
135
+ content: "";
136
+ position: fixed;
137
+ inset: 0;
138
+ pointer-events: none;
139
+ z-index: 0;
140
+ background:
141
+ radial-gradient(ellipse 90% 60% at 50% -10%, rgba(228, 88, 125, 0.07), transparent 65%);
142
+ }
143
+ body > * {
144
+ position: relative;
145
+ z-index: 1;
166
146
  }
167
147
  input[type="checkbox"] {
168
148
  accent-color: var(--primary);
169
149
  }
170
-
171
- /* Custom select dropdown styling for better theme support */
150
+
172
151
  select {
173
- color-scheme: light dark;
174
- }
175
-
176
- .light select {
177
- color-scheme: light;
152
+ color-scheme: dark;
178
153
  }
179
-
154
+
180
155
  select option {
181
156
  background-color: var(--popover);
182
157
  color: var(--popover-foreground);
@@ -186,6 +161,7 @@
186
161
  input[type="date"] {
187
162
  position: relative;
188
163
  overflow: visible;
164
+ color-scheme: dark;
189
165
  }
190
166
 
191
167
  input[type="date"]::-webkit-calendar-picker-indicator {
@@ -198,7 +174,6 @@
198
174
  cursor: pointer;
199
175
  }
200
176
 
201
- /* Custom date picker calendar styling */
202
177
  input[type="date"]::-webkit-datetime-edit {
203
178
  display: inline-flex;
204
179
  align-items: center;
@@ -212,13 +187,7 @@
212
187
  padding: 0 0.2rem;
213
188
  }
214
189
 
215
- input[type="date"]::-webkit-datetime-edit-month-field {
216
- color: var(--foreground);
217
- padding: 0 0.15rem;
218
- width: 2.5ch;
219
- min-width: 2.5ch;
220
- }
221
-
190
+ input[type="date"]::-webkit-datetime-edit-month-field,
222
191
  input[type="date"]::-webkit-datetime-edit-day-field {
223
192
  color: var(--foreground);
224
193
  padding: 0 0.15rem;
@@ -242,29 +211,17 @@
242
211
  color: var(--foreground);
243
212
  border-radius: 0.25rem;
244
213
  }
245
-
246
- /* Firefox date input styling */
247
- input[type="date"] {
248
- color-scheme: dark;
249
- }
250
-
251
- .light input[type="date"] {
252
- color-scheme: light;
253
- }
254
-
255
- #__loading { display: none !important; }
256
- body > * { opacity: 1 !important; }
257
214
  }
258
215
 
259
216
  @keyframes entry-highlight {
260
- 0% { background-color: hsl(var(--primary) / 0.15); }
217
+ 0% { background-color: color-mix(in oklch, var(--primary), transparent 82%); }
261
218
  100% { background-color: transparent; }
262
219
  }
263
220
  .entry-highlighted {
264
221
  animation: entry-highlight 3s ease-out forwards;
265
- outline: 2px solid hsl(var(--primary) / 0.4);
222
+ outline: 1px solid color-mix(in oklch, var(--primary), transparent 55%);
266
223
  outline-offset: -1px;
267
- border-radius: 0.5rem;
224
+ border-radius: var(--radius);
268
225
  }
269
226
 
270
227
  @keyframes expand-in {
@@ -1,20 +1,24 @@
1
1
  /**
2
- * Root layout — wraps every page with the theme provider and navbar.
2
+ * Root layout — single dark theme, no toggle.
3
3
  *
4
- * An inline `<script>` in `<head>` reads the user's theme preference
5
- * from `localStorage` (or falls back to `prefers-color-scheme`) and
6
- * applies the `light`/`dark` class to `<html>` *before* first paint,
7
- * preventing a flash of the wrong theme.
4
+ * Light mode was removed in #332. The `dark` class is rendered statically on
5
+ * `<html>` so there's no theme indeterminacy and no inline script is needed.
8
6
  */
9
7
  import type { Metadata } from "next";
8
+ import { Geist_Mono } from "next/font/google";
10
9
  import { PostHogProvider } from "@/contexts/PostHogContext";
11
10
  import { GlobalErrorListeners } from "@/app/components/global-error-listeners";
12
- import { ThemeProvider } from "@/contexts/ThemeContext";
13
11
  import { AutoRefreshProvider } from "@/contexts/AutoRefreshContext";
14
12
  import { Navbar } from "@/components/navbar";
15
13
  import { Toaster } from "@/app/components/toast";
16
14
  import "./globals.css";
17
15
 
16
+ const geistMono = Geist_Mono({
17
+ subsets: ["latin"],
18
+ variable: "--font-mono",
19
+ display: "swap",
20
+ });
21
+
18
22
  export const metadata: Metadata = {
19
23
  title: "Failproof AI - Hooks & Project Monitor",
20
24
  description: "Open-source hooks, policies, and project visualization for Claude Code & Agents SDK",
@@ -31,59 +35,15 @@ export default function RootLayout({
31
35
  const disabledPages = (process.env.FAILPROOFAI_DISABLE_PAGES ?? "")
32
36
  .split(",").map((s) => s.trim()).filter(Boolean);
33
37
  return (
34
- <html lang="en" suppressHydrationWarning>
35
- <head>
36
- <script
37
- dangerouslySetInnerHTML={{
38
- __html: `
39
- (function() {
40
- try {
41
- // Ensure we don't add duplicate classes
42
- document.documentElement.classList.remove('light', 'dark');
43
-
44
- var theme = localStorage.getItem('theme');
45
- if (theme && (theme === 'light' || theme === 'dark')) {
46
- document.documentElement.classList.add(theme);
47
- } else {
48
- document.documentElement.classList.add('dark');
49
- }
50
- } catch (e) {
51
- // Fallback to dark theme if there's any error
52
- document.documentElement.classList.remove('light', 'dark');
53
- document.documentElement.classList.add('dark');
54
- }
55
- })();
56
- `,
57
- }}
58
- />
59
- <style
60
- dangerouslySetInnerHTML={{
61
- __html: `
62
- #__loading {
63
- position: fixed; inset: 0; z-index: 9999;
64
- display: flex; align-items: center; justify-content: center;
65
- background: var(--background, #031035);
66
- color: var(--foreground, #f8fafc);
67
- font-family: system-ui, sans-serif;
68
- font-size: 1rem;
69
- transition: opacity 0.15s;
70
- }
71
- body > *:not(#__loading) { opacity: 0; }
72
- `,
73
- }}
74
- />
75
- </head>
38
+ <html lang="en" className={`${geistMono.variable} dark`}>
76
39
  <body className="antialiased">
77
- <div id="__loading">Loading…</div>
78
40
  <PostHogProvider>
79
41
  <GlobalErrorListeners />
80
- <ThemeProvider>
81
- <AutoRefreshProvider>
82
- <Navbar disabledPages={disabledPages} />
83
- {children}
84
- </AutoRefreshProvider>
85
- <Toaster />
86
- </ThemeProvider>
42
+ <AutoRefreshProvider>
43
+ <Navbar disabledPages={disabledPages} />
44
+ {children}
45
+ </AutoRefreshProvider>
46
+ <Toaster />
87
47
  </PostHogProvider>
88
48
  </body>
89
49
  </html>