feed-the-machine 1.5.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +170 -170
  3. package/bin/generate-manifest.mjs +463 -463
  4. package/bin/install.mjs +491 -491
  5. package/docs/HOOKS.md +243 -243
  6. package/docs/INBOX.md +233 -233
  7. package/ftm/SKILL.md +122 -122
  8. package/ftm-audit/SKILL.md +623 -541
  9. package/ftm-audit/references/protocols/PROJECT-PATTERNS.md +91 -91
  10. package/ftm-audit/references/protocols/RUNTIME-WIRING.md +66 -66
  11. package/ftm-audit/references/protocols/WIRING-CONTRACTS.md +135 -135
  12. package/ftm-audit/references/strategies/AUTO-FIX-STRATEGIES.md +69 -69
  13. package/ftm-audit/references/templates/REPORT-FORMAT.md +96 -96
  14. package/ftm-audit/scripts/run-knip.sh +23 -23
  15. package/ftm-audit.yml +2 -2
  16. package/ftm-brainstorm/SKILL.md +498 -498
  17. package/ftm-brainstorm/evals/evals.json +100 -100
  18. package/ftm-brainstorm/evals/promptfoo.yaml +109 -109
  19. package/ftm-brainstorm/references/agent-prompts.md +224 -224
  20. package/ftm-brainstorm/references/plan-template.md +121 -121
  21. package/ftm-brainstorm.yml +2 -2
  22. package/ftm-browse/SKILL.md +454 -454
  23. package/ftm-browse/daemon/browser-manager.ts +206 -206
  24. package/ftm-browse/daemon/bun.lock +30 -30
  25. package/ftm-browse/daemon/cli.ts +347 -347
  26. package/ftm-browse/daemon/commands.ts +410 -410
  27. package/ftm-browse/daemon/main.ts +357 -357
  28. package/ftm-browse/daemon/package.json +17 -17
  29. package/ftm-browse/daemon/server.ts +189 -189
  30. package/ftm-browse/daemon/snapshot.ts +519 -519
  31. package/ftm-browse/daemon/tsconfig.json +22 -22
  32. package/ftm-browse.yml +4 -4
  33. package/ftm-capture/SKILL.md +370 -370
  34. package/ftm-capture.yml +4 -4
  35. package/ftm-codex-gate/SKILL.md +361 -361
  36. package/ftm-codex-gate.yml +2 -2
  37. package/ftm-config/SKILL.md +345 -345
  38. package/ftm-config.default.yml +82 -80
  39. package/ftm-config.yml +2 -2
  40. package/ftm-council/SKILL.md +416 -416
  41. package/ftm-council/references/prompts/CLAUDE-INVESTIGATION.md +60 -60
  42. package/ftm-council/references/prompts/CODEX-INVESTIGATION.md +58 -58
  43. package/ftm-council/references/prompts/GEMINI-INVESTIGATION.md +58 -58
  44. package/ftm-council/references/prompts/REBUTTAL-TEMPLATE.md +57 -57
  45. package/ftm-council/references/protocols/PREREQUISITES.md +47 -47
  46. package/ftm-council/references/protocols/STEP-0-FRAMING.md +46 -46
  47. package/ftm-council.yml +2 -2
  48. package/ftm-dashboard/SKILL.md +163 -163
  49. package/ftm-dashboard.yml +4 -4
  50. package/ftm-debug/SKILL.md +1037 -1037
  51. package/ftm-debug/references/phases/PHASE-0-INTAKE.md +58 -58
  52. package/ftm-debug/references/phases/PHASE-1-TRIAGE.md +46 -46
  53. package/ftm-debug/references/phases/PHASE-2-WAR-ROOM-AGENTS.md +279 -279
  54. package/ftm-debug/references/phases/PHASE-3-TO-6-EXECUTION.md +436 -436
  55. package/ftm-debug/references/protocols/BLACKBOARD.md +86 -86
  56. package/ftm-debug/references/protocols/EDGE-CASES.md +103 -103
  57. package/ftm-debug.yml +2 -2
  58. package/ftm-diagram/SKILL.md +277 -277
  59. package/ftm-diagram.yml +2 -2
  60. package/ftm-executor/SKILL.md +777 -767
  61. package/ftm-executor/references/STYLE-TEMPLATE.md +73 -73
  62. package/ftm-executor/references/phases/PHASE-0-VERIFICATION.md +62 -62
  63. package/ftm-executor/references/phases/PHASE-2-AGENT-ASSEMBLY.md +34 -34
  64. package/ftm-executor/references/phases/PHASE-3-WORKTREES.md +38 -38
  65. package/ftm-executor/references/phases/PHASE-4-5-AUDIT.md +72 -72
  66. package/ftm-executor/references/phases/PHASE-4-DISPATCH.md +66 -66
  67. package/ftm-executor/references/phases/PHASE-5-5-CODEX-GATE.md +73 -73
  68. package/ftm-executor/references/protocols/DOCUMENTATION-BOOTSTRAP.md +36 -36
  69. package/ftm-executor/references/protocols/MODEL-PROFILE.md +59 -44
  70. package/ftm-executor/references/protocols/PROGRESS-TRACKING.md +66 -66
  71. package/ftm-executor/runtime/ftm-runtime.mjs +252 -252
  72. package/ftm-executor/runtime/package.json +8 -8
  73. package/ftm-executor.yml +2 -2
  74. package/ftm-git/SKILL.md +441 -441
  75. package/ftm-git/evals/evals.json +26 -26
  76. package/ftm-git/evals/promptfoo.yaml +75 -75
  77. package/ftm-git/hooks/post-commit-experience.sh +92 -92
  78. package/ftm-git/references/patterns/SECRET-PATTERNS.md +104 -104
  79. package/ftm-git/references/protocols/REMEDIATION.md +139 -139
  80. package/ftm-git/scripts/pre-commit-secrets.sh +110 -110
  81. package/ftm-git.yml +2 -2
  82. package/ftm-inbox/backend/adapters/_retry.py +64 -64
  83. package/ftm-inbox/backend/adapters/base.py +230 -230
  84. package/ftm-inbox/backend/adapters/freshservice.py +104 -104
  85. package/ftm-inbox/backend/adapters/gmail.py +125 -125
  86. package/ftm-inbox/backend/adapters/jira.py +136 -136
  87. package/ftm-inbox/backend/adapters/registry.py +192 -192
  88. package/ftm-inbox/backend/adapters/slack.py +110 -110
  89. package/ftm-inbox/backend/db/connection.py +54 -54
  90. package/ftm-inbox/backend/db/schema.py +78 -78
  91. package/ftm-inbox/backend/executor/__init__.py +7 -7
  92. package/ftm-inbox/backend/executor/engine.py +149 -149
  93. package/ftm-inbox/backend/executor/step_runner.py +98 -98
  94. package/ftm-inbox/backend/main.py +103 -103
  95. package/ftm-inbox/backend/models/__init__.py +1 -1
  96. package/ftm-inbox/backend/models/unified_task.py +36 -36
  97. package/ftm-inbox/backend/planner/__init__.py +6 -6
  98. package/ftm-inbox/backend/planner/generator.py +127 -127
  99. package/ftm-inbox/backend/planner/schema.py +34 -34
  100. package/ftm-inbox/backend/requirements.txt +5 -5
  101. package/ftm-inbox/backend/routes/execute.py +186 -186
  102. package/ftm-inbox/backend/routes/health.py +52 -52
  103. package/ftm-inbox/backend/routes/inbox.py +68 -68
  104. package/ftm-inbox/backend/routes/plan.py +271 -271
  105. package/ftm-inbox/bin/launchagent.mjs +91 -91
  106. package/ftm-inbox/bin/setup.mjs +188 -188
  107. package/ftm-inbox/bin/start.sh +10 -10
  108. package/ftm-inbox/bin/status.sh +17 -17
  109. package/ftm-inbox/bin/stop.sh +8 -8
  110. package/ftm-inbox/config.example.yml +55 -55
  111. package/ftm-inbox/package-lock.json +2898 -2898
  112. package/ftm-inbox/package.json +26 -26
  113. package/ftm-inbox/postcss.config.js +6 -6
  114. package/ftm-inbox/src/app.css +199 -199
  115. package/ftm-inbox/src/app.html +18 -18
  116. package/ftm-inbox/src/lib/api.ts +166 -166
  117. package/ftm-inbox/src/lib/components/ExecutionLog.svelte +81 -81
  118. package/ftm-inbox/src/lib/components/InboxFeed.svelte +143 -143
  119. package/ftm-inbox/src/lib/components/PlanStep.svelte +271 -271
  120. package/ftm-inbox/src/lib/components/PlanView.svelte +206 -206
  121. package/ftm-inbox/src/lib/components/StreamPanel.svelte +99 -99
  122. package/ftm-inbox/src/lib/components/TaskCard.svelte +190 -190
  123. package/ftm-inbox/src/lib/components/ui/EmptyState.svelte +63 -63
  124. package/ftm-inbox/src/lib/components/ui/KawaiiCard.svelte +86 -86
  125. package/ftm-inbox/src/lib/components/ui/PillButton.svelte +106 -106
  126. package/ftm-inbox/src/lib/components/ui/StatusBadge.svelte +67 -67
  127. package/ftm-inbox/src/lib/components/ui/StreamDrawer.svelte +149 -149
  128. package/ftm-inbox/src/lib/components/ui/ThemeToggle.svelte +80 -80
  129. package/ftm-inbox/src/lib/theme.ts +47 -47
  130. package/ftm-inbox/src/routes/+layout.svelte +76 -76
  131. package/ftm-inbox/src/routes/+page.svelte +401 -401
  132. package/ftm-inbox/svelte.config.js +12 -12
  133. package/ftm-inbox/tailwind.config.ts +63 -63
  134. package/ftm-inbox/tsconfig.json +13 -13
  135. package/ftm-inbox/vite.config.ts +6 -6
  136. package/ftm-intent/SKILL.md +241 -241
  137. package/ftm-intent.yml +2 -2
  138. package/ftm-manifest.json +3794 -3794
  139. package/ftm-map/SKILL.md +291 -291
  140. package/ftm-map/scripts/db.py +712 -712
  141. package/ftm-map/scripts/index.py +415 -415
  142. package/ftm-map/scripts/parser.py +224 -224
  143. package/ftm-map/scripts/queries/go-tags.scm +20 -20
  144. package/ftm-map/scripts/queries/javascript-tags.scm +35 -35
  145. package/ftm-map/scripts/queries/python-tags.scm +31 -31
  146. package/ftm-map/scripts/queries/ruby-tags.scm +19 -19
  147. package/ftm-map/scripts/queries/rust-tags.scm +37 -37
  148. package/ftm-map/scripts/queries/typescript-tags.scm +41 -41
  149. package/ftm-map/scripts/query.py +301 -301
  150. package/ftm-map/scripts/ranker.py +377 -377
  151. package/ftm-map/scripts/requirements.txt +5 -5
  152. package/ftm-map/scripts/setup-hooks.sh +27 -27
  153. package/ftm-map/scripts/setup.sh +56 -56
  154. package/ftm-map/scripts/test_db.py +364 -364
  155. package/ftm-map/scripts/test_parser.py +174 -174
  156. package/ftm-map/scripts/test_query.py +183 -183
  157. package/ftm-map/scripts/test_ranker.py +199 -199
  158. package/ftm-map/scripts/views.py +591 -591
  159. package/ftm-map.yml +2 -2
  160. package/ftm-mind/SKILL.md +1943 -1943
  161. package/ftm-mind/evals/promptfoo.yaml +142 -142
  162. package/ftm-mind/references/blackboard-schema.md +328 -328
  163. package/ftm-mind/references/complexity-guide.md +110 -110
  164. package/ftm-mind/references/event-registry.md +319 -319
  165. package/ftm-mind/references/mcp-inventory.md +296 -296
  166. package/ftm-mind/references/protocols/COMPLEXITY-SIZING.md +72 -72
  167. package/ftm-mind/references/protocols/MCP-HEURISTICS.md +32 -32
  168. package/ftm-mind/references/protocols/PLAN-APPROVAL.md +80 -80
  169. package/ftm-mind/references/reflexion-protocol.md +249 -249
  170. package/ftm-mind/references/routing/SCENARIOS.md +22 -22
  171. package/ftm-mind/references/routing-scenarios.md +35 -35
  172. package/ftm-mind.yml +2 -2
  173. package/ftm-pause/SKILL.md +395 -395
  174. package/ftm-pause/references/protocols/SKILL-RESTORE-PROTOCOLS.md +186 -186
  175. package/ftm-pause/references/protocols/VALIDATION.md +80 -80
  176. package/ftm-pause.yml +2 -2
  177. package/ftm-researcher/SKILL.md +275 -275
  178. package/ftm-researcher/evals/agent-diversity.yaml +17 -17
  179. package/ftm-researcher/evals/synthesis-quality.yaml +12 -12
  180. package/ftm-researcher/evals/trigger-accuracy.yaml +39 -39
  181. package/ftm-researcher/references/adaptive-search.md +116 -116
  182. package/ftm-researcher/references/agent-prompts.md +193 -193
  183. package/ftm-researcher/references/council-integration.md +193 -193
  184. package/ftm-researcher/references/output-format.md +203 -203
  185. package/ftm-researcher/references/synthesis-pipeline.md +165 -165
  186. package/ftm-researcher/scripts/score_credibility.py +234 -234
  187. package/ftm-researcher/scripts/validate_research.py +92 -92
  188. package/ftm-researcher.yml +2 -2
  189. package/ftm-resume/SKILL.md +518 -518
  190. package/ftm-resume/references/protocols/VALIDATION.md +172 -172
  191. package/ftm-resume.yml +2 -2
  192. package/ftm-retro/SKILL.md +380 -380
  193. package/ftm-retro/references/protocols/SCORING-RUBRICS.md +89 -89
  194. package/ftm-retro/references/templates/REPORT-FORMAT.md +109 -109
  195. package/ftm-retro.yml +2 -2
  196. package/ftm-routine/SKILL.md +170 -170
  197. package/ftm-routine.yml +4 -4
  198. package/ftm-state/blackboard/capabilities.json +5 -5
  199. package/ftm-state/blackboard/capabilities.schema.json +27 -27
  200. package/ftm-state/blackboard/context.json +23 -23
  201. package/ftm-state/blackboard/experiences/index.json +9 -9
  202. package/ftm-state/blackboard/patterns.json +6 -6
  203. package/ftm-state/schemas/context.schema.json +130 -130
  204. package/ftm-state/schemas/experience-index.schema.json +77 -77
  205. package/ftm-state/schemas/experience.schema.json +78 -78
  206. package/ftm-state/schemas/patterns.schema.json +44 -44
  207. package/ftm-upgrade/SKILL.md +194 -194
  208. package/ftm-upgrade/scripts/check-version.sh +76 -76
  209. package/ftm-upgrade/scripts/upgrade.sh +143 -143
  210. package/ftm-upgrade.yml +2 -2
  211. package/ftm-verify.yml +2 -2
  212. package/ftm.yml +2 -2
  213. package/hooks/ftm-blackboard-enforcer.sh +93 -93
  214. package/hooks/ftm-discovery-reminder.sh +90 -90
  215. package/hooks/ftm-drafts-gate.sh +61 -61
  216. package/hooks/ftm-event-logger.mjs +107 -107
  217. package/hooks/ftm-map-autodetect.sh +79 -79
  218. package/hooks/ftm-pending-sync-check.sh +22 -22
  219. package/hooks/ftm-plan-gate.sh +92 -92
  220. package/hooks/ftm-post-commit-trigger.sh +57 -57
  221. package/hooks/settings-template.json +81 -81
  222. package/install.sh +363 -363
  223. package/package.json +84 -84
  224. package/uninstall.sh +25 -25
@@ -1,26 +1,26 @@
1
- {
2
- "name": "ftm-inbox",
3
- "version": "0.1.0",
4
- "private": true,
5
- "type": "module",
6
- "scripts": {
7
- "dev": "vite dev",
8
- "build": "vite build",
9
- "preview": "vite preview",
10
- "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
11
- "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch"
12
- },
13
- "devDependencies": {
14
- "@sveltejs/adapter-auto": "^3.0.0",
15
- "@sveltejs/kit": "^2.0.0",
16
- "@sveltejs/vite-plugin-svelte": "^3.0.0",
17
- "autoprefixer": "^10.4.16",
18
- "postcss": "^8.4.32",
19
- "svelte": "^4.2.7",
20
- "svelte-check": "^3.6.0",
21
- "tailwindcss": "^3.4.0",
22
- "tslib": "^2.4.1",
23
- "typescript": "^5.0.0",
24
- "vite": "^5.0.3"
25
- }
26
- }
1
+ {
2
+ "name": "ftm-inbox",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite dev",
8
+ "build": "vite build",
9
+ "preview": "vite preview",
10
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
11
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch"
12
+ },
13
+ "devDependencies": {
14
+ "@sveltejs/adapter-auto": "^3.0.0",
15
+ "@sveltejs/kit": "^2.0.0",
16
+ "@sveltejs/vite-plugin-svelte": "^3.0.0",
17
+ "autoprefixer": "^10.4.16",
18
+ "postcss": "^8.4.32",
19
+ "svelte": "^4.2.7",
20
+ "svelte-check": "^3.6.0",
21
+ "tailwindcss": "^3.4.0",
22
+ "tslib": "^2.4.1",
23
+ "typescript": "^5.0.0",
24
+ "vite": "^5.0.3"
25
+ }
26
+ }
@@ -1,6 +1,6 @@
1
- export default {
2
- plugins: {
3
- tailwindcss: {},
4
- autoprefixer: {}
5
- }
6
- };
1
+ export default {
2
+ plugins: {
3
+ tailwindcss: {},
4
+ autoprefixer: {}
5
+ }
6
+ };
@@ -1,199 +1,199 @@
1
- @tailwind base;
2
- @tailwind components;
3
- @tailwind utilities;
4
-
5
- /* ─── Kawaii CSS Custom Properties ─── */
6
-
7
- .theme-light {
8
- --bg-primary: #e8f5e9;
9
- --bg-secondary: #f1f8f1;
10
- --bg-card: #fefefe;
11
- --bg-sidebar: #f5fbf5;
12
- --bg-drawer: #fafafa;
13
- --border-accent: #a5d6a7;
14
- --border-card: #c8e6c9;
15
- --text-primary: #1b3a1b;
16
- --text-secondary: #4a7a4a;
17
- --text-muted: #7aaa7a;
18
- --accent-primary: #4caf50;
19
- --accent-hover: #388e3c;
20
- --shadow-card: 0 4px 24px 0 rgba(76, 175, 80, 0.10);
21
- --shadow-card-hover: 0 6px 32px 0 rgba(76, 175, 80, 0.18);
22
- --grid-color: rgba(76, 175, 80, 0.07);
23
- --scrollbar-thumb: #c8e6c9;
24
- --scrollbar-track: #f1f8f1;
25
- }
26
-
27
- .theme-dark {
28
- --bg-primary: #1b2e1b;
29
- --bg-secondary: #1e331e;
30
- --bg-card: #243824;
31
- --bg-sidebar: #1e331e;
32
- --bg-drawer: #1a2a1a;
33
- --border-accent: #69f0ae;
34
- --border-card: #2e7d32;
35
- --text-primary: #e8f5e9;
36
- --text-secondary: #a5d6a7;
37
- --text-muted: #66bb6a;
38
- --accent-primary: #69f0ae;
39
- --accent-hover: #b2ffdb;
40
- --shadow-card: 0 0 0 1px #69f0ae33, 0 4px 24px 0 rgba(105, 240, 174, 0.12);
41
- --shadow-card-hover: 0 0 0 2px #69f0ae55, 0 6px 32px 0 rgba(105, 240, 174, 0.22);
42
- --grid-color: rgba(105, 240, 174, 0.05);
43
- --scrollbar-thumb: #2e7d32;
44
- --scrollbar-track: #1b2e1b;
45
- }
46
-
47
- /* ─── Base Styles ─── */
48
-
49
- *,
50
- *::before,
51
- *::after {
52
- box-sizing: border-box;
53
- }
54
-
55
- html {
56
- height: 100%;
57
- font-size: 16px;
58
- }
59
-
60
- body {
61
- margin: 0;
62
- padding: 0;
63
- min-height: 100vh;
64
- background-color: var(--bg-primary);
65
- color: var(--text-primary);
66
- font-family: 'Nunito', 'Quicksand', sans-serif;
67
- transition: background-color 0.3s ease, color 0.3s ease;
68
- /* Graph-paper grid background */
69
- background-image:
70
- linear-gradient(var(--grid-color) 1px, transparent 1px),
71
- linear-gradient(90deg, var(--grid-color) 1px, transparent 1px);
72
- background-size: 30px 30px;
73
- }
74
-
75
- /* ─── Scrollbar ─── */
76
-
77
- ::-webkit-scrollbar {
78
- width: 6px;
79
- height: 6px;
80
- }
81
- ::-webkit-scrollbar-track {
82
- background: var(--scrollbar-track);
83
- }
84
- ::-webkit-scrollbar-thumb {
85
- background: var(--scrollbar-thumb);
86
- border-radius: 9999px;
87
- }
88
-
89
- /* ─── Typography ─── */
90
-
91
- h1, h2, h3, h4, h5, h6 {
92
- font-family: 'Nunito', sans-serif;
93
- font-weight: 800;
94
- color: var(--text-primary);
95
- margin: 0;
96
- }
97
-
98
- p {
99
- margin: 0;
100
- line-height: 1.6;
101
- }
102
-
103
- /* ─── Kawaii Card ─── */
104
-
105
- .card-kawaii {
106
- background: var(--bg-card);
107
- border: 2px solid var(--border-card);
108
- border-radius: 16px;
109
- box-shadow: var(--shadow-card);
110
- transition: box-shadow 0.2s ease, transform 0.2s cubic-bezier(0.68, -0.55, 0.265, 1.55);
111
- }
112
-
113
- .card-kawaii:hover {
114
- box-shadow: var(--shadow-card-hover);
115
- }
116
-
117
- /* ─── Pill Button ─── */
118
-
119
- .btn-pill {
120
- display: inline-flex;
121
- align-items: center;
122
- gap: 0.5rem;
123
- padding: 0.5rem 1.25rem;
124
- border-radius: 9999px;
125
- font-family: 'Nunito', sans-serif;
126
- font-weight: 700;
127
- font-size: 0.875rem;
128
- cursor: pointer;
129
- border: none;
130
- transition: transform 0.18s cubic-bezier(0.68, -0.55, 0.265, 1.55),
131
- box-shadow 0.18s ease,
132
- background-color 0.18s ease;
133
- user-select: none;
134
- }
135
-
136
- .btn-pill:hover {
137
- transform: scale(1.06) translateY(-1px);
138
- }
139
-
140
- .btn-pill:active {
141
- transform: scale(0.96);
142
- }
143
-
144
- .btn-pill-primary {
145
- background-color: var(--accent-primary);
146
- color: #fff;
147
- box-shadow: 0 2px 8px rgba(76, 175, 80, 0.3);
148
- }
149
-
150
- .btn-pill-primary:hover {
151
- background-color: var(--accent-hover);
152
- box-shadow: 0 4px 16px rgba(76, 175, 80, 0.4);
153
- }
154
-
155
- .btn-pill-ghost {
156
- background-color: transparent;
157
- color: var(--text-secondary);
158
- border: 2px solid var(--border-card);
159
- }
160
-
161
- .btn-pill-ghost:hover {
162
- border-color: var(--accent-primary);
163
- color: var(--accent-primary);
164
- }
165
-
166
- /* ─── Status Badge Colors ─── */
167
-
168
- .badge-pending { background: #fff9c4; color: #5d4037; }
169
- .badge-planning { background: #bbdefb; color: #0d47a1; }
170
- .badge-approved { background: #c8e6c9; color: #1b5e20; }
171
- .badge-executing { background: #ffe0b2; color: #bf360c; }
172
- .badge-complete { background: #b2dfdb; color: #004d40; }
173
- .badge-failed { background: #ffcdd2; color: #b71c1c; }
174
-
175
- /* ─── Animations ─── */
176
-
177
- @keyframes bounceIn {
178
- 0% { opacity: 0; transform: scale(0.8); }
179
- 100% { opacity: 1; transform: scale(1); }
180
- }
181
-
182
- @keyframes fadeUp {
183
- 0% { opacity: 0; transform: translateY(8px); }
184
- 100% { opacity: 1; transform: translateY(0); }
185
- }
186
-
187
- @keyframes slideDown {
188
- 0% { opacity: 0; transform: translateY(-8px); }
189
- 100% { opacity: 1; transform: translateY(0); }
190
- }
191
-
192
- @keyframes drawerOpen {
193
- 0% { transform: translateY(100%); }
194
- 100% { transform: translateY(0); }
195
- }
196
-
197
- .animate-bounce-in { animation: bounceIn 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55) both; }
198
- .animate-fade-up { animation: fadeUp 0.3s ease-out both; }
199
- .animate-slide-down { animation: slideDown 0.3s ease-out both; }
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+
5
+ /* ─── Kawaii CSS Custom Properties ─── */
6
+
7
+ .theme-light {
8
+ --bg-primary: #e8f5e9;
9
+ --bg-secondary: #f1f8f1;
10
+ --bg-card: #fefefe;
11
+ --bg-sidebar: #f5fbf5;
12
+ --bg-drawer: #fafafa;
13
+ --border-accent: #a5d6a7;
14
+ --border-card: #c8e6c9;
15
+ --text-primary: #1b3a1b;
16
+ --text-secondary: #4a7a4a;
17
+ --text-muted: #7aaa7a;
18
+ --accent-primary: #4caf50;
19
+ --accent-hover: #388e3c;
20
+ --shadow-card: 0 4px 24px 0 rgba(76, 175, 80, 0.10);
21
+ --shadow-card-hover: 0 6px 32px 0 rgba(76, 175, 80, 0.18);
22
+ --grid-color: rgba(76, 175, 80, 0.07);
23
+ --scrollbar-thumb: #c8e6c9;
24
+ --scrollbar-track: #f1f8f1;
25
+ }
26
+
27
+ .theme-dark {
28
+ --bg-primary: #1b2e1b;
29
+ --bg-secondary: #1e331e;
30
+ --bg-card: #243824;
31
+ --bg-sidebar: #1e331e;
32
+ --bg-drawer: #1a2a1a;
33
+ --border-accent: #69f0ae;
34
+ --border-card: #2e7d32;
35
+ --text-primary: #e8f5e9;
36
+ --text-secondary: #a5d6a7;
37
+ --text-muted: #66bb6a;
38
+ --accent-primary: #69f0ae;
39
+ --accent-hover: #b2ffdb;
40
+ --shadow-card: 0 0 0 1px #69f0ae33, 0 4px 24px 0 rgba(105, 240, 174, 0.12);
41
+ --shadow-card-hover: 0 0 0 2px #69f0ae55, 0 6px 32px 0 rgba(105, 240, 174, 0.22);
42
+ --grid-color: rgba(105, 240, 174, 0.05);
43
+ --scrollbar-thumb: #2e7d32;
44
+ --scrollbar-track: #1b2e1b;
45
+ }
46
+
47
+ /* ─── Base Styles ─── */
48
+
49
+ *,
50
+ *::before,
51
+ *::after {
52
+ box-sizing: border-box;
53
+ }
54
+
55
+ html {
56
+ height: 100%;
57
+ font-size: 16px;
58
+ }
59
+
60
+ body {
61
+ margin: 0;
62
+ padding: 0;
63
+ min-height: 100vh;
64
+ background-color: var(--bg-primary);
65
+ color: var(--text-primary);
66
+ font-family: 'Nunito', 'Quicksand', sans-serif;
67
+ transition: background-color 0.3s ease, color 0.3s ease;
68
+ /* Graph-paper grid background */
69
+ background-image:
70
+ linear-gradient(var(--grid-color) 1px, transparent 1px),
71
+ linear-gradient(90deg, var(--grid-color) 1px, transparent 1px);
72
+ background-size: 30px 30px;
73
+ }
74
+
75
+ /* ─── Scrollbar ─── */
76
+
77
+ ::-webkit-scrollbar {
78
+ width: 6px;
79
+ height: 6px;
80
+ }
81
+ ::-webkit-scrollbar-track {
82
+ background: var(--scrollbar-track);
83
+ }
84
+ ::-webkit-scrollbar-thumb {
85
+ background: var(--scrollbar-thumb);
86
+ border-radius: 9999px;
87
+ }
88
+
89
+ /* ─── Typography ─── */
90
+
91
+ h1, h2, h3, h4, h5, h6 {
92
+ font-family: 'Nunito', sans-serif;
93
+ font-weight: 800;
94
+ color: var(--text-primary);
95
+ margin: 0;
96
+ }
97
+
98
+ p {
99
+ margin: 0;
100
+ line-height: 1.6;
101
+ }
102
+
103
+ /* ─── Kawaii Card ─── */
104
+
105
+ .card-kawaii {
106
+ background: var(--bg-card);
107
+ border: 2px solid var(--border-card);
108
+ border-radius: 16px;
109
+ box-shadow: var(--shadow-card);
110
+ transition: box-shadow 0.2s ease, transform 0.2s cubic-bezier(0.68, -0.55, 0.265, 1.55);
111
+ }
112
+
113
+ .card-kawaii:hover {
114
+ box-shadow: var(--shadow-card-hover);
115
+ }
116
+
117
+ /* ─── Pill Button ─── */
118
+
119
+ .btn-pill {
120
+ display: inline-flex;
121
+ align-items: center;
122
+ gap: 0.5rem;
123
+ padding: 0.5rem 1.25rem;
124
+ border-radius: 9999px;
125
+ font-family: 'Nunito', sans-serif;
126
+ font-weight: 700;
127
+ font-size: 0.875rem;
128
+ cursor: pointer;
129
+ border: none;
130
+ transition: transform 0.18s cubic-bezier(0.68, -0.55, 0.265, 1.55),
131
+ box-shadow 0.18s ease,
132
+ background-color 0.18s ease;
133
+ user-select: none;
134
+ }
135
+
136
+ .btn-pill:hover {
137
+ transform: scale(1.06) translateY(-1px);
138
+ }
139
+
140
+ .btn-pill:active {
141
+ transform: scale(0.96);
142
+ }
143
+
144
+ .btn-pill-primary {
145
+ background-color: var(--accent-primary);
146
+ color: #fff;
147
+ box-shadow: 0 2px 8px rgba(76, 175, 80, 0.3);
148
+ }
149
+
150
+ .btn-pill-primary:hover {
151
+ background-color: var(--accent-hover);
152
+ box-shadow: 0 4px 16px rgba(76, 175, 80, 0.4);
153
+ }
154
+
155
+ .btn-pill-ghost {
156
+ background-color: transparent;
157
+ color: var(--text-secondary);
158
+ border: 2px solid var(--border-card);
159
+ }
160
+
161
+ .btn-pill-ghost:hover {
162
+ border-color: var(--accent-primary);
163
+ color: var(--accent-primary);
164
+ }
165
+
166
+ /* ─── Status Badge Colors ─── */
167
+
168
+ .badge-pending { background: #fff9c4; color: #5d4037; }
169
+ .badge-planning { background: #bbdefb; color: #0d47a1; }
170
+ .badge-approved { background: #c8e6c9; color: #1b5e20; }
171
+ .badge-executing { background: #ffe0b2; color: #bf360c; }
172
+ .badge-complete { background: #b2dfdb; color: #004d40; }
173
+ .badge-failed { background: #ffcdd2; color: #b71c1c; }
174
+
175
+ /* ─── Animations ─── */
176
+
177
+ @keyframes bounceIn {
178
+ 0% { opacity: 0; transform: scale(0.8); }
179
+ 100% { opacity: 1; transform: scale(1); }
180
+ }
181
+
182
+ @keyframes fadeUp {
183
+ 0% { opacity: 0; transform: translateY(8px); }
184
+ 100% { opacity: 1; transform: translateY(0); }
185
+ }
186
+
187
+ @keyframes slideDown {
188
+ 0% { opacity: 0; transform: translateY(-8px); }
189
+ 100% { opacity: 1; transform: translateY(0); }
190
+ }
191
+
192
+ @keyframes drawerOpen {
193
+ 0% { transform: translateY(100%); }
194
+ 100% { transform: translateY(0); }
195
+ }
196
+
197
+ .animate-bounce-in { animation: bounceIn 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55) both; }
198
+ .animate-fade-up { animation: fadeUp 0.3s ease-out both; }
199
+ .animate-slide-down { animation: slideDown 0.3s ease-out both; }
@@ -1,18 +1,18 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8" />
5
- <link rel="icon" href="%sveltekit.assets%/favicon.png" />
6
- <meta name="viewport" content="width=device-width, initial-scale=1" />
7
- <link rel="preconnect" href="https://fonts.googleapis.com" />
8
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous" />
9
- <link
10
- href="https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,400;0,600;0,700;0,800;1,400&display=swap"
11
- rel="stylesheet"
12
- />
13
- %sveltekit.head%
14
- </head>
15
- <body data-sveltekit-preload-data="hover" class="theme-light">
16
- <div style="display: contents">%sveltekit.body%</div>
17
- </body>
18
- </html>
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <link rel="icon" href="%sveltekit.assets%/favicon.png" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
7
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
8
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous" />
9
+ <link
10
+ href="https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,400;0,600;0,700;0,800;1,400&display=swap"
11
+ rel="stylesheet"
12
+ />
13
+ %sveltekit.head%
14
+ </head>
15
+ <body data-sveltekit-preload-data="hover" class="theme-light">
16
+ <div style="display: contents">%sveltekit.body%</div>
17
+ </body>
18
+ </html>