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.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +7 -7
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/required-server-files.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +4 -4
- package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
- package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +4 -4
- package/.next/standalone/.next/server/app/_not-found/page/next-font-manifest.json +6 -2
- package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js +2 -2
- package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -30
- package/.next/standalone/.next/server/app/_not-found.rsc +21 -26
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +21 -26
- package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +10 -11
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +21 -21
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +21 -21
- package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +10 -11
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +3 -2
- package/.next/standalone/.next/server/app/page/build-manifest.json +4 -4
- package/.next/standalone/.next/server/app/page/next-font-manifest.json +6 -2
- package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/page.js +2 -2
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/policies/page/build-manifest.json +4 -4
- package/.next/standalone/.next/server/app/policies/page/next-font-manifest.json +6 -2
- package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +8 -8
- package/.next/standalone/.next/server/app/policies/page.js +2 -2
- package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page/build-manifest.json +4 -4
- package/.next/standalone/.next/server/app/project/[name]/page/next-font-manifest.json +6 -2
- package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page.js +3 -3
- package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/build-manifest.json +4 -4
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/next-font-manifest.json +6 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js +3 -3
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/page/build-manifest.json +4 -4
- package/.next/standalone/.next/server/app/projects/page/next-font-manifest.json +6 -2
- package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/projects/page.js +3 -3
- package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0fjhqi9._.js → [root-of-the-server]__044xt9.._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0d_ob4n._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fe7_q_._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0vlhtkc._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0yfq1yr._.js +1 -1
- package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_0z7w.hh._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0370~qj._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0mup1hi._.js → [root-of-the-server]__0609ezh._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__07_-mkc._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0e9o9ri._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0og6yo7._.js → [root-of-the-server]__0l6swv1._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0logebz._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0mi5ejy._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0joez.y._.js → [root-of-the-server]__0podumr._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rkxer-._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rl2kwi._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0t5l7a5._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0vg0uey._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ye1w50._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ymlddl._.js +32 -7
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__10._f0s._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/_03d7qyt._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0xb8ngh._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_0cdqd9w._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_0xerkr6._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_0q-m0y-._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/lib_gemini-projects_ts_0sl~yqr._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/lib_opencode-projects_ts_0op9gyp._.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +7 -7
- package/.next/standalone/.next/server/next-font-manifest.js +1 -1
- package/.next/standalone/.next/server/next-font-manifest.json +21 -2
- package/.next/standalone/.next/server/pages/404.html +1 -30
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +9 -9
- package/.next/standalone/.next/static/chunks/{0k2yq8zevk9bl.js → 0j171xiqge4rv.js} +1 -1
- package/.next/standalone/.next/static/chunks/0kqar56yl~41o.js +6 -0
- package/.next/standalone/.next/static/chunks/{07i9r0t6n4cpy.js → 0lt8ko3lw.5yt.js} +1 -1
- package/.next/standalone/.next/static/chunks/0ml1.ck_5t36i.js +1 -0
- package/.next/standalone/.next/static/chunks/{0km4.rc8uvt_t.js → 0pkl..xgo-qox.js} +1 -1
- package/.next/standalone/.next/static/chunks/{12simlrcfk3g2.js → 0rnqmir4cd5p9.js} +2 -2
- package/.next/standalone/.next/static/chunks/{0bi2r.m~yokoo.js → 0w6fzf.07a24u.js} +1 -1
- package/.next/standalone/.next/static/chunks/0xbo5nl6w4lka.js +1 -0
- package/.next/standalone/.next/static/chunks/12l2t63hkyo2q.js +1 -0
- package/.next/standalone/.next/static/chunks/{0tyw4u3~2isbh.js → 12pt~2f.c1sha.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0by8zx1no6kt4.js → 14lii11wmo450.js} +1 -1
- package/.next/standalone/.next/static/chunks/179yytvmam0ug.js +1 -0
- package/.next/standalone/.next/static/chunks/17rm86uz2nd5a.css +2 -0
- package/.next/standalone/.next/static/chunks/{turbopack-0o7k.hakttp4k.js → turbopack-05z7a19q43zfq.js} +1 -1
- package/.next/standalone/.next/static/media/4fa387ec64143e14-s.0q3udbd2bu5yp.woff2 +0 -0
- package/.next/standalone/.next/static/media/797e433ab948586e-s.p.0.q-h669a_dqa.woff2 +0 -0
- package/.next/standalone/.next/static/media/bbc41e54d2fcbd21-s.0gw~uztddq1df.woff2 +0 -0
- package/.next/standalone/.opencode/plugins/failproofai.mjs +75 -15
- package/.next/standalone/app/actions/get-hooks-config.ts +25 -1
- package/.next/standalone/app/components/cli-badge.tsx +1 -1
- package/.next/standalone/app/globals.css +68 -111
- package/.next/standalone/app/layout.tsx +16 -56
- package/.next/standalone/app/policies/hooks-client.tsx +228 -44
- package/.next/standalone/components/navbar.tsx +16 -15
- package/.next/standalone/components/ui/button.tsx +4 -4
- package/.next/standalone/lib/gemini-projects.ts +64 -24
- package/.next/standalone/lib/opencode-projects.ts +9 -7
- package/.next/standalone/package.json +2 -2
- package/.next/standalone/pi-extension/index.ts +113 -12
- package/.next/standalone/readme-arch-hq.gif +0 -0
- package/.next/standalone/server.js +1 -1
- package/README.md +54 -241
- package/dist/cli.mjs +195 -75
- package/lib/gemini-projects.ts +64 -24
- package/lib/opencode-projects.ts +9 -7
- package/package.json +2 -2
- package/pi-extension/index.ts +113 -12
- package/scripts/launch.ts +6 -22
- package/scripts/parse-script-args.ts +1 -11
- package/scripts/translate-docs/config.ts +0 -1
- package/src/hooks/handler.ts +63 -6
- package/src/hooks/integrations.ts +31 -6
- package/src/hooks/policy-evaluator.ts +34 -2
- package/src/hooks/types.ts +52 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01hj~sd._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__02r6nu-._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__04dywib._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__06sb2gn._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09jpajs._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0jm6jnh._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0t2k4c5._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0u1i~9~._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/_02_tcps._.js +0 -32
- package/.next/standalone/.next/server/chunks/ssr/_10lm7or._.js +0 -5
- package/.next/standalone/.next/server/chunks/ssr/_11rg2a_._.js +0 -3
- package/.next/standalone/.next/static/chunks/0gq8kvc3blri~.js +0 -1
- package/.next/standalone/.next/static/chunks/0q5bmqop--9yk.js +0 -1
- package/.next/standalone/.next/static/chunks/0s41ggdsb2alw.js +0 -3
- package/.next/standalone/.next/static/chunks/0t_7i~pqwbcww.js +0 -6
- package/.next/standalone/.next/static/chunks/0xr8w5io1-kb9.css +0 -1
- package/.next/standalone/.next/static/chunks/164g0yuhpb2pi.js +0 -1
- package/.next/standalone/components/logo.tsx +0 -36
- package/.next/standalone/components/theme-toggle.tsx +0 -37
- package/.next/standalone/contexts/ThemeContext.tsx +0 -69
- package/.next/standalone/failproofai-hq.gif +0 -0
- package/.next/standalone/public/exospheresmall-dark.png +0 -0
- package/.next/standalone/public/exospheresmall.png +0 -0
- /package/.next/standalone/.next/static/{0PSH56_4bbPBaHiyPkthl → dAuQps6jUwCz9X1Q5FFOO}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{0PSH56_4bbPBaHiyPkthl → dAuQps6jUwCz9X1Q5FFOO}/_clientMiddlewareManifest.js +0 -0
- /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
|
-
--
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
--
|
|
14
|
-
--foreground: #
|
|
15
|
-
--
|
|
16
|
-
--
|
|
17
|
-
--
|
|
18
|
-
--
|
|
19
|
-
--
|
|
20
|
-
--
|
|
21
|
-
--
|
|
22
|
-
--
|
|
23
|
-
--
|
|
24
|
-
--
|
|
25
|
-
--accent-
|
|
26
|
-
--
|
|
27
|
-
--
|
|
28
|
-
--
|
|
29
|
-
--
|
|
30
|
-
--
|
|
31
|
-
--
|
|
32
|
-
--chart-
|
|
33
|
-
--chart-
|
|
34
|
-
--chart-
|
|
35
|
-
--
|
|
36
|
-
--
|
|
37
|
-
--sidebar
|
|
38
|
-
--sidebar-
|
|
39
|
-
--sidebar-
|
|
40
|
-
--sidebar-
|
|
41
|
-
--sidebar-
|
|
42
|
-
--sidebar-
|
|
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(--
|
|
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(--
|
|
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%;
|
|
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:
|
|
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%
|
|
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:
|
|
222
|
+
outline: 1px solid color-mix(in oklch, var(--primary), transparent 55%);
|
|
266
223
|
outline-offset: -1px;
|
|
267
|
-
border-radius:
|
|
224
|
+
border-radius: var(--radius);
|
|
268
225
|
}
|
|
269
226
|
|
|
270
227
|
@keyframes expand-in {
|
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Root layout —
|
|
2
|
+
* Root layout — single dark theme, no toggle.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
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"
|
|
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
|
-
<
|
|
81
|
-
<
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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>
|