@felan-ai/design-system 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NOTICE +12 -0
- package/README.md +81 -0
- package/lint/eslint-shadcn.mjs +35 -0
- package/lint/shadcn-policy.json +46 -0
- package/package.json +91 -0
- package/project/README.md +260 -0
- package/project/SKILL.md +36 -0
- package/project/assets/felan-icon-192.png +0 -0
- package/project/assets/felan-icon-512.png +0 -0
- package/project/assets/felan-icon.svg +8 -0
- package/project/assets/felan-logo.png +0 -0
- package/project/assets/felan-logo.svg +8 -0
- package/project/assets/integrations/asana.svg +5 -0
- package/project/assets/integrations/discord.svg +3 -0
- package/project/assets/integrations/email.svg +4 -0
- package/project/assets/integrations/linear.svg +7 -0
- package/project/assets/integrations/playwright.svg +9 -0
- package/project/assets/integrations/recall.svg +4 -0
- package/project/assets/integrations/signal.svg +4 -0
- package/project/assets/integrations/teams.svg +8 -0
- package/project/assets/integrations/vercel.svg +3 -0
- package/project/colors_and_type.css +309 -0
- package/project/styles.css +12 -0
- package/project/templates/quote/README.md +65 -0
- package/project/templates/quote/template.html +125 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Felan contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/NOTICE
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
@felan-ai/design-system
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Felan contributors
|
|
4
|
+
|
|
5
|
+
The package includes original Felan design tokens, brand guidance, and Felan
|
|
6
|
+
logo/icon artwork. The integration SVGs are included as reference marks for
|
|
7
|
+
their respective services; they remain the trademarks of their owners.
|
|
8
|
+
Personal avatars, generated catalog artifacts, and local tooling are not
|
|
9
|
+
included in the published package.
|
|
10
|
+
|
|
11
|
+
Geist fonts are referenced from Google Fonts by the distributed CSS. Production
|
|
12
|
+
consumers may use the Geist packages under their own application font policy.
|
package/README.md
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Felan AI — Design System
|
|
2
|
+
|
|
3
|
+
> Copilots make engineers faster. Felan makes the engineering team faster.
|
|
4
|
+
|
|
5
|
+
The design system for **Felan** — an agentic engineering platform. It captures the visual language, tone, and component vocabulary for Felan's marketing site (`felan.ai`) and product dashboard (`app.felan.ai`): canonical tokens and HTML/CSS component previews, plus a printable single-page catalog.
|
|
6
|
+
|
|
7
|
+
The full design spec — palette, typography, spacing, component anatomy, voice and copy rules — lives in [`project/README.md`](project/README.md). The machine-readable contract for coding agents is [`project/SKILL.md`](project/SKILL.md).
|
|
8
|
+
|
|
9
|
+
## Repository layout
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
├── catalog.html ← single-page catalog: readme + every preview, print-ready
|
|
13
|
+
├── project/ ← the design system itself
|
|
14
|
+
│ ├── README.md ← full design spec (start here)
|
|
15
|
+
│ ├── SKILL.md ← skill contract for Claude Code / agents
|
|
16
|
+
│ ├── colors_and_type.css ← canonical tokens + semantic type classes
|
|
17
|
+
│ ├── styles.css ← entry stylesheet (imports the tokens)
|
|
18
|
+
│ ├── assets/ ← logos, icons, customer & integration marks
|
|
19
|
+
│ ├── templates/ ← reusable customer-facing artifacts, including commercial quotes
|
|
20
|
+
│ └── preview/ ← design-system cards (brand, colors, type, components…)
|
|
21
|
+
└── scripts/repo-browser/ ← local HTTP server for the catalog
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Browse the catalog
|
|
25
|
+
|
|
26
|
+
The catalog fetches the readme, manifest, and previews at load time, so it must be served over HTTP (opening `catalog.html` from `file://` won't work):
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
scripts/repo-browser/start.sh # background; prints the chosen localhost URL
|
|
30
|
+
scripts/repo-browser/status.sh
|
|
31
|
+
scripts/repo-browser/stop.sh
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Or run it in the foreground with `scripts/repo-browser/serve.sh`. By default the OS assigns a free local port, so parallel repo browsers do not overlap. Pass a preferred starting port if needed: `scripts/repo-browser/start.sh <port>`. Requires Node ≥ 18, no dependencies.
|
|
35
|
+
|
|
36
|
+
The catalog mirrors the Claude Design view of this system: the project readme first, then every design-system card grouped by section (Brand, Colors, Components, Spacing, Type).
|
|
37
|
+
|
|
38
|
+
## npm package
|
|
39
|
+
|
|
40
|
+
This repository publishes `@felan-ai/design-system`, which contains the
|
|
41
|
+
canonical CSS, tokens, Felan-owned assets, reusable quote template, design
|
|
42
|
+
specification, agent skill, and shared `@shadcn/lint` policy.
|
|
43
|
+
|
|
44
|
+
```sh
|
|
45
|
+
pnpm add @felan-ai/design-system
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
```css
|
|
49
|
+
@import "@felan-ai/design-system/styles.css";
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The package's HSL-triplet tokens are consumed with `hsl(var(--token))`. The
|
|
53
|
+
distributed CSS loads Geist from Google Fonts; production applications may
|
|
54
|
+
provide the same Geist families locally. Public exports are documented in the
|
|
55
|
+
package README and include `./styles.css`, `./colors_and_type.css`, `./spec`,
|
|
56
|
+
`./skill`, `./assets/*`, `./templates/quote.html`, and
|
|
57
|
+
`./eslint/shadcn`.
|
|
58
|
+
|
|
59
|
+
See [`docs/consuming.md`](docs/consuming.md) for the complete export table,
|
|
60
|
+
package exclusions, lint limitations, asset policy, and consumer rollout.
|
|
61
|
+
|
|
62
|
+
The shadcn adapter is intended for Tailwind v4 projects using ESLint 9 flat
|
|
63
|
+
config. It enforces the shared component and token policy but cannot inspect
|
|
64
|
+
plain CSS or decide whether a newly-added theme token belongs in the system.
|
|
65
|
+
`felan-site` is the first compatible pilot; `felan-platform` follows its
|
|
66
|
+
Tailwind 4 migration. `go-to-market` consumes the assets and templates only.
|
|
67
|
+
|
|
68
|
+
## Print to PDF
|
|
69
|
+
|
|
70
|
+
1. Open the catalog and wait for the status pill (top right) to read **“All … previews loaded — ready to print”**.
|
|
71
|
+
2. Print → **Save as PDF**.
|
|
72
|
+
3. In Chrome's dialog, enable **More settings → Background graphics** so the dark surfaces and brand colors are kept. Paper size A4 portrait; default margins are fine (the page declares its own).
|
|
73
|
+
|
|
74
|
+
## Notes
|
|
75
|
+
|
|
76
|
+
- The design medium is HTML/CSS/JS **prototypes** — reference implementations to match visually, not production code to copy structurally.
|
|
77
|
+
- The reusable commercial quote template lives in `project/templates/quote/`; see its README for
|
|
78
|
+
placeholders and print instructions.
|
|
79
|
+
- `project/_ds_manifest.json` and `project/_ds_bundle.js` are generated by the design tooling; the catalog renders from the manifest, so regenerating it keeps the catalog in sync.
|
|
80
|
+
- Geist Sans/Mono load from the Google Fonts CDN (see the font note at the end of `project/README.md`).
|
|
81
|
+
- `npm pack --dry-run` and the package verifier are the source of truth for the published file surface; catalog previews and generated metadata are repository-only.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { plugin as shadcn } from "@shadcn/lint";
|
|
2
|
+
import policy from "./shadcn-policy.json" with { type: "json" };
|
|
3
|
+
|
|
4
|
+
const defaults = {
|
|
5
|
+
ui: "@/components/ui",
|
|
6
|
+
note: "Use Felan tokens and component variants. Read @felan-ai/design-system/spec before adding an exception.",
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Returns composable flat-config entries. Consumers keep their framework
|
|
11
|
+
* parser and presets; this adapter only registers the design-system plugin.
|
|
12
|
+
*/
|
|
13
|
+
export default function felanShadcn(options = {}) {
|
|
14
|
+
const { files = ["**/*.{jsx,tsx}"], settings = {}, rules = {} } = options;
|
|
15
|
+
|
|
16
|
+
return [
|
|
17
|
+
{
|
|
18
|
+
files,
|
|
19
|
+
plugins: { shadcn },
|
|
20
|
+
settings: {
|
|
21
|
+
shadcn: {
|
|
22
|
+
...defaults,
|
|
23
|
+
...settings,
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
rules: {
|
|
27
|
+
...policy.rules,
|
|
28
|
+
...rules,
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
...policy.overrides,
|
|
32
|
+
];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export { policy };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"rules": {
|
|
3
|
+
"shadcn/no-restyle": [
|
|
4
|
+
"warn",
|
|
5
|
+
{
|
|
6
|
+
"allow": ["layout"],
|
|
7
|
+
"contracts": [
|
|
8
|
+
{
|
|
9
|
+
"pattern": "^Button$",
|
|
10
|
+
"allow": ["layout"],
|
|
11
|
+
"deny": ["w-*", "h-*"],
|
|
12
|
+
"message": {
|
|
13
|
+
"layout": "Set Button width on the parent container.",
|
|
14
|
+
"spacing": "Use a Button size: {{sizes|none defined}}.",
|
|
15
|
+
"default": "Use an existing Felan Button variant: {{variants|none defined}}."
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"pattern": "^Card(Content|Header|Footer)$",
|
|
20
|
+
"allow": ["layout", "spacing"]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"pattern": "^CardTitle$",
|
|
24
|
+
"allow": ["layout", "typography"],
|
|
25
|
+
"deny": ["font-*"]
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
"shadcn/no-raw-colors": "error",
|
|
31
|
+
"shadcn/no-arbitrary-values": "warn",
|
|
32
|
+
"shadcn/no-inline-styles": "error",
|
|
33
|
+
"shadcn/no-unknown-classes": "warn",
|
|
34
|
+
"shadcn/require-static-classes": "error"
|
|
35
|
+
},
|
|
36
|
+
"overrides": [
|
|
37
|
+
{
|
|
38
|
+
"files": ["**/components/ui/**"],
|
|
39
|
+
"rules": {
|
|
40
|
+
"shadcn/no-restyle": "off",
|
|
41
|
+
"shadcn/no-arbitrary-values": "off",
|
|
42
|
+
"shadcn/require-static-classes": "off"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@felan-ai/design-system",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"description": "Felan design tokens, brand guidance, reusable assets, templates, and lint policy",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/felan-ai/design-system.git"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/felan-ai/design-system#readme",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/felan-ai/design-system/issues"
|
|
14
|
+
},
|
|
15
|
+
"style": "./project/styles.css",
|
|
16
|
+
"sideEffects": [
|
|
17
|
+
"./project/*.css"
|
|
18
|
+
],
|
|
19
|
+
"engines": {
|
|
20
|
+
"node": ">=20.19.0"
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"project/styles.css",
|
|
24
|
+
"project/colors_and_type.css",
|
|
25
|
+
"project/README.md",
|
|
26
|
+
"project/SKILL.md",
|
|
27
|
+
"lint",
|
|
28
|
+
"project/assets/felan-logo.svg",
|
|
29
|
+
"project/assets/felan-logo.png",
|
|
30
|
+
"project/assets/felan-icon.svg",
|
|
31
|
+
"project/assets/felan-icon-192.png",
|
|
32
|
+
"project/assets/felan-icon-512.png",
|
|
33
|
+
"project/assets/integrations",
|
|
34
|
+
"project/templates/quote/README.md",
|
|
35
|
+
"project/templates/quote/template.html",
|
|
36
|
+
"LICENSE",
|
|
37
|
+
"NOTICE",
|
|
38
|
+
"README.md"
|
|
39
|
+
],
|
|
40
|
+
"exports": {
|
|
41
|
+
".": "./project/styles.css",
|
|
42
|
+
"./styles.css": "./project/styles.css",
|
|
43
|
+
"./colors_and_type.css": "./project/colors_and_type.css",
|
|
44
|
+
"./spec": "./project/README.md",
|
|
45
|
+
"./skill": "./project/SKILL.md",
|
|
46
|
+
"./lint-policy": "./lint/shadcn-policy.json",
|
|
47
|
+
"./eslint/shadcn": "./lint/eslint-shadcn.mjs",
|
|
48
|
+
"./assets/felan-logo.svg": "./project/assets/felan-logo.svg",
|
|
49
|
+
"./assets/felan-logo.png": "./project/assets/felan-logo.png",
|
|
50
|
+
"./assets/felan-icon.svg": "./project/assets/felan-icon.svg",
|
|
51
|
+
"./assets/felan-icon-192.png": "./project/assets/felan-icon-192.png",
|
|
52
|
+
"./assets/felan-icon-512.png": "./project/assets/felan-icon-512.png",
|
|
53
|
+
"./assets/integrations/*": "./project/assets/integrations/*",
|
|
54
|
+
"./templates/quote.html": "./project/templates/quote/template.html",
|
|
55
|
+
"./templates/quote/README.md": "./project/templates/quote/README.md",
|
|
56
|
+
"./package.json": "./package.json"
|
|
57
|
+
},
|
|
58
|
+
"devDependencies": {
|
|
59
|
+
"@shadcn/lint": "0.1.5",
|
|
60
|
+
"@typescript-eslint/parser": "8.40.0",
|
|
61
|
+
"eslint": "9.30.0",
|
|
62
|
+
"typescript": "5.9.3"
|
|
63
|
+
},
|
|
64
|
+
"peerDependencies": {
|
|
65
|
+
"@shadcn/lint": ">=0.1.5",
|
|
66
|
+
"@typescript-eslint/parser": ">=8.40.0",
|
|
67
|
+
"eslint": ">=9.30.0"
|
|
68
|
+
},
|
|
69
|
+
"peerDependenciesMeta": {
|
|
70
|
+
"@shadcn/lint": {
|
|
71
|
+
"optional": true
|
|
72
|
+
},
|
|
73
|
+
"@typescript-eslint/parser": {
|
|
74
|
+
"optional": true
|
|
75
|
+
},
|
|
76
|
+
"eslint": {
|
|
77
|
+
"optional": true
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
"publishConfig": {
|
|
81
|
+
"access": "public",
|
|
82
|
+
"provenance": true
|
|
83
|
+
},
|
|
84
|
+
"scripts": {
|
|
85
|
+
"test": "node --test",
|
|
86
|
+
"pack": "rm -rf .artifacts && pnpm pack --pack-destination .artifacts",
|
|
87
|
+
"verify:pack": "node scripts/verify-package.mjs .artifacts/felan-ai-design-system-0.1.0.tgz",
|
|
88
|
+
"check:proposed-version": "node scripts/check-proposed-version.mjs",
|
|
89
|
+
"verify": "pnpm test && pnpm pack && pnpm verify:pack"
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
# Felan AI — Design System
|
|
2
|
+
|
|
3
|
+
> **Copilots make engineers faster. Felan makes the engineering team faster.**
|
|
4
|
+
> Felan is an agentic engineering platform — the team layer for AI-native software development: cloud background agents that work inside the tools your team already uses, share team knowledge, follow team guardrails, and improve from feedback.
|
|
5
|
+
|
|
6
|
+
This design system captures the visual language, tone, and component vocabulary for Felan's marketing site and product dashboard. Use it to design new surfaces, slides, mocks, and interfaces that feel unmistakably *Felan*.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Sources
|
|
11
|
+
|
|
12
|
+
This system began as a reverse-engineering of the **Bugzy** (QA agent) codebase and brand, then had its palette migrated to Felan's pine-green and its copy/IA rewritten for the platform positioning. It is now the canonical **Felan platform** design system.
|
|
13
|
+
|
|
14
|
+
- **Visual origin:** the Bugzy web app (Next.js + Tailwind + shadcn/ui) — token structure, warm-neutral ramp, Geist type, orb/glow treatment, component anatomy all carried over and are approved as-is. Those legacy `web/` code paths are historical provenance only; do not treat them as Felan product spec.
|
|
15
|
+
- **Brand:** `assets/felan-logo.svg` / `.png` — the forest-green geometric aperture mark.
|
|
16
|
+
- **Canonical tokens:** `colors_and_type.css`. All extracted assets live in `assets/`.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Products & surfaces
|
|
21
|
+
|
|
22
|
+
Felan ships two primary surfaces, both represented in this system:
|
|
23
|
+
|
|
24
|
+
1. **Marketing site** (`felan.ai`) — dark, dense, gradient-glow hero, green brand pop, Geist typography. Section order follows the messaging hierarchy: **Hero** (individual AI gains → team-level delivery) → **Problem** (context, standards, follow-through, guardrails didn't scale with AI) → **Product** (the four differentiators) → **Integrations** → **Proof** (start with a repo; customer logos live here) → **Pricing** → **CTA / Footer**.
|
|
25
|
+
2. **Product dashboard** (`app.felan.ai`) — light/dark responsive, sidebar shell grouped **Work** (Sessions, Activity, Approvals) / **Automate** (Automations, Skills) / **Team** (Agents, Memory) / **Configuration** (Integrations, Models & keys, Settings). Views: sessions, activity, approvals, automations, agents, integrations.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Content fundamentals
|
|
30
|
+
|
|
31
|
+
**What Felan is:** an agentic engineering platform — the team layer for AI-native software development. Engineers got faster with AI (Claude Code, Cursor, Copilot, Codex, Devin); the team layer around that work — shared context, standards, coordination, autonomy boundaries — did not keep up. Felan gives engineering orgs cloud background agents that work in existing tools, share team knowledge, follow guardrails, and improve from feedback.
|
|
32
|
+
|
|
33
|
+
**The anchor line:** *Copilots make engineers faster. Felan makes the engineering team faster.*
|
|
34
|
+
|
|
35
|
+
**The core distinction to teach on every surface** — copilot vs. background agent: one engineer → the team · a person prompts it → events/schedules/delegation trigger it · local chat context → shared team memory · personal autonomy → scoped permissions, approvals, audit logs · advice for a person → work advanced in Slack, tickets, Git, CI, docs.
|
|
36
|
+
|
|
37
|
+
**Voice:** confident, technical, pragmatic. Calm authority, zero hype. Felan speaks like a senior engineer — it doesn't sell "AI," it says what changes for the team. No exclamation marks.
|
|
38
|
+
|
|
39
|
+
**Audience:** engineering leaders (CTO / VP Eng / Head of Engineering / Head of Platform) as buyers, AI-forward senior/staff/platform engineers as champions. **Qualify by AI adoption, not headcount** — teams whose engineers adopted AI faster than the team's SDLC adapted. There is no company-size threshold and no QA framing.
|
|
40
|
+
|
|
41
|
+
**POV:** second-person *you* for benefits; third-person *Felan* as a named teammate (Felan is both the platform and the lead agent). Avoids first-person "we" except in legal/about copy.
|
|
42
|
+
|
|
43
|
+
**Casing:** Title Case for headlines, sentence case for subheads and UI labels. Short declarative section headers.
|
|
44
|
+
|
|
45
|
+
**Sentence rhythm:** short, then explanatory.
|
|
46
|
+
- Headline: `Copilots make engineers faster. Felan makes the team faster.`
|
|
47
|
+
- Subhead: `Felan gives your engineering team cloud background agents that carry delegated work forward — with shared team knowledge and guardrails, inside the tools you already use.`
|
|
48
|
+
- Feature title: `Runs in the background`
|
|
49
|
+
- Feature subtitle: `Agents keep delegated work moving when nobody is prompting them.`
|
|
50
|
+
|
|
51
|
+
**Em-dashes** are a signature punctuation mark — they break up explanatory clauses naturally. Expect 1–2 per paragraph of body copy.
|
|
52
|
+
|
|
53
|
+
**Emoji:** none in UI chrome, ever. No emoji in headlines, buttons, or empty states.
|
|
54
|
+
|
|
55
|
+
**Numbers are concrete — but only claims that are structurally true from the brief.** Use: `Start with one repo`, `Works in Slack, GitHub, Linear, Jira`, `Every agent action logged`. Do **not** carry over Bugzy-era proof claims (`5-minute setup`, `No config required`, `SOC2 ready`, `EUR 250/month`, `dev/QA ratio >8:1`, `auto-healed`). Where an illustrative number is needed, mark it as sample copy (see the marketing kit's pricing note). Never invent customer quotes, metrics, or case-study outcomes.
|
|
56
|
+
|
|
57
|
+
**Categories / eyebrows:** `Agentic engineering platform`, `The gap`, `The product`, `Proof`, `Integrations`, `Pricing`. Short, sentence/title-cased pill above section H2s.
|
|
58
|
+
|
|
59
|
+
**Naming — hard rules:**
|
|
60
|
+
- **Felan** is the platform *and* the lead agent — one name for both. Wordmark lockup stays **"Felan AI"** (from the domain `felan.ai`); in body copy the name is **Felan** alone. No new wordmark variants.
|
|
61
|
+
- **Bugzy** is the QA agent — the first agent shipped, on its own site `bugzy.ai`. It is *one agent under the Felan canopy*, never the platform. QA may appear as **one example of delegated work among several** (a single row in a mock, an example low on the page) — never as the category, never in a headline.
|
|
62
|
+
- Name agents by **SDLC role**: Developer agent, QA agent, SRE agent, General Purpose agent. No character names or mascots.
|
|
63
|
+
- **Legal footer:** `© 2026 Felan`. No "GmbH," no Berlin/Munich location line — that was fabricated during extraction.
|
|
64
|
+
|
|
65
|
+
**FAQ answer example:** *"Does Felan replace engineers? No — humans own direction, judgment, and approvals. Felan carries the delegated work between those decisions."*
|
|
66
|
+
|
|
67
|
+
**Words Felan uses** (and you should too): *background agent, session, delegate / delegation, automation, trigger, guardrails, permissions, approvals, audit log, shared team knowledge, team memory, team layer, SDLC, repo, PR, rollout, context, follow-through.*
|
|
68
|
+
|
|
69
|
+
**Retire the QA-era vocabulary** (only allowed inside an explicitly-QA example): *coverage gap, regression, triage, auto-heal, flaky, test maintenance, parallel runs, pass rate, "QA that keeps up".*
|
|
70
|
+
|
|
71
|
+
**Keep avoiding, and now also avoid:** *revolutionary, seamless, cutting-edge, supercharge, unlock, game-changer, magical, solution, ecosystem, synergy, empowers, transforms, "10x"*, and any *"AI-powered / AI-driven / AI-first"* framing — assume the audience knows it's AI; say what changes for the team. Don't position Felan as an orchestrator of other vendors' agents (every agent is company-built), don't imply it replaces engineers (humans own direction, judgment, approvals), and don't lead with security/governance as the hero (guardrails prove adoptability; the hero is team-level productivity).
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Visual foundations
|
|
76
|
+
|
|
77
|
+
### Palette
|
|
78
|
+
|
|
79
|
+
- **Brand green — `hsl(152 44% 26%)`** is the single accent color. Used for: primary CTAs (`variant="brand"`), hero glow orbs, focus rings, chart-1, active states, sidebar accent. On dark backgrounds it brightens to `hsl(152 46% 34%)`.
|
|
80
|
+
- **Warm neutrals.** The entire neutral ramp is tinted with hue 20–30 (warm) — backgrounds are `hsl(30 10% 95%)` (light) / `hsl(20 10% 7%)` (dark), never pure gray. This warmth is non-negotiable; it's what makes the site feel human rather than enterprise-sterile.
|
|
81
|
+
- **Surface elevation:** three tinted layers (`--surface-1` → `--surface-3`) step up in luminance on light, down on dark. Cards sit on `surface-1`; featured cards sit on `surface-2`.
|
|
82
|
+
- **Status colors:** green (`success`, done/approved), red (`destructive`, reject/high-risk), yellow (`warning`, awaiting approval), blue (`info`, running). In mockups: `/10` background and `/20` border for pills.
|
|
83
|
+
- **Categorical chart palette:** green → teal → blue → amber → violet (5 colors, rotates on integration category cards and pricing tier top-bars).
|
|
84
|
+
|
|
85
|
+
### Backgrounds — the signature glow
|
|
86
|
+
|
|
87
|
+
The marketing homepage is dark (`20 10% 7%`) with **two radial gradient orbs**: green-hot from the top, blue from the bottom. Orbs are *always* soft (`hsla(...,0.20)` to `hsla(...,0.14)`), *always* large (600–900px), *always* `pointer-events-none`. No busy patterns, no textures, no hand-drawn illustrations. The hero and final-CTA sections use this treatment; interior sections sit on flat background.
|
|
88
|
+
|
|
89
|
+
`SectionDivider` between marketing sections is a thin horizontal gradient line (`from-transparent via-white/[0.08] to-transparent`) — subtle, rhythmic, never a solid rule.
|
|
90
|
+
|
|
91
|
+
### Typography
|
|
92
|
+
|
|
93
|
+
- **Geist Sans** for everything (display + body). Loaded via `geist` npm in prod; Google Fonts CDN in this system.
|
|
94
|
+
- **Geist Mono** for code, file names, test IDs, timestamps in mockups.
|
|
95
|
+
- Hero H1: `text-[4.5rem]` / 72px, `font-extrabold` (800), `tracking-tight` (-0.02em), `leading-[1.08]`, with the white-to-white/70 gradient text fade applied.
|
|
96
|
+
- Section H2: 36–48px, `font-bold` (700), `tracking-tight`.
|
|
97
|
+
- Body: 16–20px, regular 400, `leading-relaxed` (1.65), color `muted-foreground` for supporting copy.
|
|
98
|
+
- `tracking-tight` is applied aggressively to all display text.
|
|
99
|
+
|
|
100
|
+
### Spacing & layout
|
|
101
|
+
|
|
102
|
+
- Container max-width `1400px` at 2xl; consistent `px-4 md:px-6` gutters inside.
|
|
103
|
+
- Section vertical padding: `py-24` (96px) for marketing sections, `py-16 md:py-24` for denser ones.
|
|
104
|
+
- Card grids: 3-column at `lg`, 2-column at `md`, 1-column mobile. Gap `gap-4` or `gap-6`.
|
|
105
|
+
- Feature blocks alternate image/copy with a `lg:order-*` reverse pattern.
|
|
106
|
+
|
|
107
|
+
### Corner radii
|
|
108
|
+
|
|
109
|
+
- `--radius: 0.5rem` (8px) — the base. Everything rounds to a multiple of this.
|
|
110
|
+
- Buttons: 6px (`rounded-md`). Cards and surfaces: 12px (`rounded-xl`). Pills / chips / integration tiles: full (`rounded-full` or `rounded-xl` for square tiles). Avatars: `rounded-lg` (not full circles — distinctive choice, e.g. the logo tile in the Slack mockup is `rounded-lg`).
|
|
111
|
+
|
|
112
|
+
### Borders
|
|
113
|
+
|
|
114
|
+
- On dark: `border-white/[0.06]` to `border-white/[0.10]` — hair-thin, barely-there.
|
|
115
|
+
- On light: `border-border` (`hsl(30 10% 90%)`) — warm gray, 1px.
|
|
116
|
+
- Hover raises border opacity (`hover:border-white/[0.10]`) rather than changing color.
|
|
117
|
+
|
|
118
|
+
### Shadows & elevation
|
|
119
|
+
|
|
120
|
+
- Mostly flat. Shadow is reserved for:
|
|
121
|
+
- Primary brand buttons: `shadow-sm`
|
|
122
|
+
- Hover-lift on cards: `hover:shadow-md`
|
|
123
|
+
- Featured pricing card: `shadow-xl` + `ring-2 ring-brand/20`
|
|
124
|
+
- Dark mode relies almost entirely on *surface luminance steps* instead of shadows.
|
|
125
|
+
|
|
126
|
+
### Card anatomy
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
┌────────────────────────────────────┐
|
|
130
|
+
│ ▬▬▬▬ gradient accent top bar (3px) │ ← feature & pricing cards only
|
|
131
|
+
│ │
|
|
132
|
+
│ Title (text-base/xl, semibold) │
|
|
133
|
+
│ Description (muted-foreground) │
|
|
134
|
+
│ │
|
|
135
|
+
│ • Bullet with Check icon (brand) │
|
|
136
|
+
│ │
|
|
137
|
+
│ [ CTA button ] │
|
|
138
|
+
└────────────────────────────────────┘
|
|
139
|
+
```
|
|
140
|
+
- `rounded-xl`, `border-white/[0.06]`, `bg-surface-1`, `p-6`.
|
|
141
|
+
- Step number watermark: `text-5xl font-extralight text-white/[0.08]`, top-right, absolute. Decorative.
|
|
142
|
+
- Gradient accent bar at top: `h-[3px]`, two-stop gradient (`from-blue-500/40 to-cyan-500/40`, `from-green-500/40 to-amber-500/40`, etc. — rotates by index).
|
|
143
|
+
|
|
144
|
+
### Buttons
|
|
145
|
+
|
|
146
|
+
- **Primary (`variant="brand"`)**: green bg, white text, `shadow-sm`, `hover:bg-brand/90`. The only green button on a page — reserved for the single most important action (Start Free Trial, Contact Sales).
|
|
147
|
+
- **Default**: neutral ink / white-on-ink.
|
|
148
|
+
- **Outline**: transparent bg, `border-input`, hover-fills with `bg-accent`.
|
|
149
|
+
- **Ghost**: no chrome until hover (`hover:bg-accent`). Used in headers and icon buttons.
|
|
150
|
+
- **Link**: `text-primary underline-offset-4 hover:underline`.
|
|
151
|
+
- Sizes: `sm` 36px, `default` 40px, `lg` 44px, `icon` 40×40.
|
|
152
|
+
- All buttons: `rounded-md`, `text-sm font-medium`, `transition-all duration-150`.
|
|
153
|
+
|
|
154
|
+
### Hover & press
|
|
155
|
+
|
|
156
|
+
- Text links: `hover:underline` — almost never a color change.
|
|
157
|
+
- Cards: `hover:bg-surface-2 hover:border-white/[0.10]` — subtle luminance step.
|
|
158
|
+
- Customer logos: de-saturated and dimmed at rest (`opacity-50 brightness-0 invert-1`), full color on hover.
|
|
159
|
+
- Integration icons in the grid: `hover:scale-110` + background swap. No color shifts.
|
|
160
|
+
- Press state: opacity drop only; no shrink transform. `active:opacity-80`.
|
|
161
|
+
- Transitions: `duration-150` (buttons), `duration-200` (icons/scale), `duration-300` (customer logos). Easing: default ease.
|
|
162
|
+
|
|
163
|
+
### Motion
|
|
164
|
+
|
|
165
|
+
- Scroll reveal on almost every section — `ScrollReveal` wraps content, fade + 8–12px rise, with a small `delay` (30ms × index) for staggered grid reveals.
|
|
166
|
+
- `animate-pulse` on coverage progress bars to show liveness.
|
|
167
|
+
- `animate-scroll` / `animate-accordion-*` for FAQ and integration strips.
|
|
168
|
+
- Reduced-motion: fully respected — `prefers-reduced-motion: reduce` kills transforms + transitions on `.scroll-reveal`.
|
|
169
|
+
- Bouncy easing is absent. Everything is linear/ease-out.
|
|
170
|
+
|
|
171
|
+
### Transparency & blur
|
|
172
|
+
|
|
173
|
+
- Sticky header uses `bg-background/60 backdrop-blur-2xl backdrop-saturate-150` — the defining chrome treatment.
|
|
174
|
+
- Dropdowns mirror it: `bg-background/95 backdrop-blur-xl`.
|
|
175
|
+
- Inside mockups: `bg-white/[0.04]` to `bg-white/[0.10]` is the typical translucent surface.
|
|
176
|
+
|
|
177
|
+
### Iconography treatment
|
|
178
|
+
|
|
179
|
+
- **Lucide React** (`lucide-react`) is the icon library. `size-4` (16px) by default, stroke-width 2. See `ICONOGRAPHY` below.
|
|
180
|
+
- In gradient step cards: icons sit in a `w-10 h-10 rounded-lg bg-gradient-to-br` tile with white stroke icon.
|
|
181
|
+
- In mockups: tiny colored dots (`w-2 h-2 rounded-full bg-red-500`) as status bullets — a recurring motif.
|
|
182
|
+
|
|
183
|
+
### Imagery mood
|
|
184
|
+
|
|
185
|
+
- Customer logos: SVG, displayed monochrome-to-color on hover.
|
|
186
|
+
- Screenshots: minimal, mostly product UI — sessions, approvals, delegated work. No stock photography. No illustrated people. No 3D renders.
|
|
187
|
+
- **Asset flags — replace before launch:** `flaky-hero.png`, `og-image.png`, and `github-app-feature-card.png` are **Bugzy-era QA product shots**. They must be replaced with Felan sessions/delegation product shots (a sessions view, an approval queue, agents working in Slack). Don't fake a screenshot — flagged here as a real replacement need.
|
|
188
|
+
|
|
189
|
+
### Layout rules
|
|
190
|
+
|
|
191
|
+
- Content always centers in a max-`1400px` container.
|
|
192
|
+
- Fixed header (`sticky top-0 z-50`). Sidebar in product is `collapsible="offcanvas"` on mobile, persistent on desktop.
|
|
193
|
+
- Grids align to 12 columns mentally but Tailwind's `md:grid-cols-2 lg:grid-cols-3` does the actual work.
|
|
194
|
+
- Feature blocks alternate reversed/unreversed — visual rhythm comes from order, not decoration.
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Iconography
|
|
199
|
+
|
|
200
|
+
**Primary icon system: `lucide-react`** (pinned `^0.454.0` in the codebase). Used everywhere — sidebar, feature cards, how-it-works steps, metric cards, empty states.
|
|
201
|
+
|
|
202
|
+
Recurring icons and their meanings:
|
|
203
|
+
- `Zap` / `Sparkles` — agents / automation / speed
|
|
204
|
+
- `GitPullRequest` — PR trigger / delegated code work
|
|
205
|
+
- `MessageSquare` — Slack / where work happens / reporting
|
|
206
|
+
- `Link` — integrations / connect
|
|
207
|
+
- `Check`, `CheckCircle`, `CheckCircle2` — done sessions, feature bullets, approvals granted
|
|
208
|
+
- `Play` / `Activity` — running sessions, activity feed
|
|
209
|
+
- `ShieldCheck`, `Lock` — guardrails, permissions, approvals, audit
|
|
210
|
+
- `Bot` / `Users` — agents, team
|
|
211
|
+
- `Clock`, `Calendar` — schedules, scheduled triggers
|
|
212
|
+
- `LayoutDashboard` — overview
|
|
213
|
+
- `FileText` — docs / context / audit log
|
|
214
|
+
- `Puzzle` — integrations
|
|
215
|
+
- `KeyRound` — models & API keys
|
|
216
|
+
- `Settings`, `CreditCard`, `Plus`, `ChevronDown`, `Menu`, `LogOut`, `Loader2` — standard chrome
|
|
217
|
+
|
|
218
|
+
**Defaults:** 16px (`size-4`) inline with text, 20px in section H3 card headers, 40px in 10×10 gradient tiles. Stroke width 2. Always inherits `currentColor` from its parent.
|
|
219
|
+
|
|
220
|
+
**Product / integration logos** — when Felan shows a third-party brand (GitHub, Slack, Linear, Notion, Vercel, Figma, Jira…), the canonical pattern is:
|
|
221
|
+
1. devicons CDN (`cdn.jsdelivr.net/gh/devicons/devicon/.../*-original.svg`) for recognizable brand marks
|
|
222
|
+
2. `svgl.app` for Linear / Framer-era logos
|
|
223
|
+
3. Self-hosted SVG in `/public/integrations/*.svg` or `/public/customers/*.svg` for the rest
|
|
224
|
+
|
|
225
|
+
These are all copied into `assets/integrations/` and `assets/customers/` here.
|
|
226
|
+
|
|
227
|
+
**Emoji:** not part of the system. The only emoji in the codebase (`👀 🎯 📁 📄`) appear inside mocked-up Slack messages or file-tree UI, never in real product chrome.
|
|
228
|
+
|
|
229
|
+
**Unicode characters:** `→` (→) appears in "View all →" and "let us know →" links. `—` (—) is used liberally in copy. `×` not used.
|
|
230
|
+
|
|
231
|
+
**Felan's own mark** (`assets/felan-logo.png`): a circular aperture/orbit mark — a bold ring with a solid center dot and a small orbiting “i” dot, reading as a lowercase **io**, rendered in forest green (`#255F44`). Available as crisp vector (`felan-logo.svg`) and transparent PNG. Used at 24–32px in headers, 32px in the footer. On dark backgrounds it sits on a small *cream* rounded tile (`#f7f3ec`, `border-radius:7px`) — this is the canonical protection treatment (it mirrors the artwork's own cream field and keeps the dark-green mark legible).
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## Index
|
|
236
|
+
|
|
237
|
+
```
|
|
238
|
+
├── README.md ← you are here
|
|
239
|
+
├── SKILL.md ← skill contract for Claude Code / agents
|
|
240
|
+
├── colors_and_type.css ← canonical tokens + semantic type classes
|
|
241
|
+
├── assets/ ← logos, icons, customer & integration marks, avatars
|
|
242
|
+
│ ├── felan-logo.png ← primary mark (forest-green “io” aperture on cream)
|
|
243
|
+
│ ├── felan-logo.svg ← primary mark, vector (forest green, transparent)
|
|
244
|
+
│ ├── felan-icon-192.png ← app icon
|
|
245
|
+
│ ├── felan-icon-512.png ← app icon (hi-res)
|
|
246
|
+
│ ├── felan-icon.svg ← vector mark
|
|
247
|
+
│ ├── customers/ ← Invenda, NEG, Toki, GoodShape, SportAitchQ (logos only)
|
|
248
|
+
│ ├── integrations/ ← Asana, ClickUp, Discord, Linear, etc.
|
|
249
|
+
│ └── avatars/ ← headshots (legacy)
|
|
250
|
+
├── preview/ ← design-system cards (rendered in Design System tab)
|
|
251
|
+
├── templates/ ← reusable customer-facing artifacts
|
|
252
|
+
│ └── quote/ ← A4 commercial quote HTML template + placeholder contract
|
|
253
|
+
└── fonts/ ← (empty) — system uses Geist via Google Fonts
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
## Font substitution — flagged
|
|
257
|
+
|
|
258
|
+
The codebase uses **Geist Sans** and **Geist Mono**, loaded via the `geist` npm package. I've wired this design system to pull Geist from Google Fonts CDN in every HTML preview and card. This renders identically to the production site without bundling .ttf/.woff2 files. If you want self-hosted Geist woff2 files dropped into `fonts/`, let me know and I'll add them.
|
|
259
|
+
|
|
260
|
+
No other font substitutions were needed — the Geist family is available on Google Fonts at the exact weights the codebase uses (400/500/600/700/800).
|
package/project/SKILL.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: felan-design
|
|
3
|
+
description: Use this skill to generate well-branded interfaces and assets for Felan, the agentic engineering platform (the team layer for AI-native software development) — for production or throwaway prototypes/mocks/decks. Contains design guidelines, colors, type, fonts, and assets.
|
|
4
|
+
user-invocable: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Read the README.md file within this skill, and explore the other available files.
|
|
8
|
+
|
|
9
|
+
If creating visual artifacts (slides, mocks, throwaway prototypes, etc), copy assets out and create static HTML files for the user to view. If working on production code, you can copy assets and read the rules here to become an expert in designing with this brand.
|
|
10
|
+
|
|
11
|
+
If the user invokes this skill without any other guidance, ask them what they want to build or design, ask some questions, and act as an expert designer who outputs HTML artifacts _or_ production code, depending on the need.
|
|
12
|
+
|
|
13
|
+
## What Felan is
|
|
14
|
+
|
|
15
|
+
An agentic engineering platform — the team layer for AI-native software development. Copilots made individual engineers faster; Felan gives the engineering team cloud background agents that carry delegated work forward, share team knowledge, follow guardrails (permissions, approvals, audit logs), and improve from feedback — inside Slack, GitHub/GitLab, Linear, Jira, CI, and docs. Anchor line: **Copilots make engineers faster. Felan makes the engineering team faster.** Qualify audience by AI adoption, not headcount. Bugzy (the QA agent) is *one agent under the Felan canopy*, never the platform.
|
|
16
|
+
|
|
17
|
+
## What's in here
|
|
18
|
+
|
|
19
|
+
- `README.md` — voice, tone, visual foundations, iconography, content fundamentals
|
|
20
|
+
- `colors_and_type.css` — canonical HSL tokens (light + dark) and semantic typography classes
|
|
21
|
+
- `assets/` — logo (`felan-logo.svg`/`.png`, forest-green geometric mark), app icons, customer marks, integration SVGs
|
|
22
|
+
- `preview/` — design-system cards: colors, type, spacing, components, brand
|
|
23
|
+
|
|
24
|
+
## Quick rules
|
|
25
|
+
|
|
26
|
+
- Green `hsl(152 44% 26%)` is the **only** accent. One green CTA per screen.
|
|
27
|
+
- Warm neutrals only — hue 20–30 on every gray. Never pure gray.
|
|
28
|
+
- Marketing = forced dark mode with soft radial green+blue orbs. Product app = light default, dark supported.
|
|
29
|
+
- Type = Geist Sans + Geist Mono. Display is `font-weight: 800`, `letter-spacing: -0.025em`, with a white→white/70 gradient text fade on big H1s.
|
|
30
|
+
- Icons = **Lucide** outline, 2px stroke, 16px inline / 20px header / 40px tile.
|
|
31
|
+
- Radii: 6px button, 12px card, full pill. Mostly flat; hover-lift on cards; brand glow on featured CTAs only.
|
|
32
|
+
- Logo is a **geometric aperture mark** (ring + center dot + orbiting dot), forest green. On dark, sit it on a cream tile. Not a monogram.
|
|
33
|
+
- Voice: calm authority, zero hype. Em-dashes, sentence-case subheads, no emoji in chrome. Say what changes for the *team*, not that it's "AI".
|
|
34
|
+
- Words to use: background agent, session, delegate, automation, trigger, guardrails, approvals, audit log, team memory, SDLC, repo, rollout. Retire QA-era words (coverage gap, regression, triage, flaky, pass rate) except inside an explicit QA example.
|
|
35
|
+
- Name agents by SDLC role: Developer, QA, SRE, General Purpose agent.
|
|
36
|
+
- Only make claims structurally true from the brief: "Start with one repo", "Works in Slack, GitHub, Linear, Jira", "Every agent action logged". No Bugzy-era proof claims (no "5-minute setup", "SOC2 ready", "EUR 250/month", "dev/QA ratio >8:1"). Mark illustrative numbers as sample copy. Never "10x", never invented customer metrics. Legal line: "© 2026 Felan".
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0"?>
|
|
2
|
+
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="250.000000pt" height="258.000000pt" viewBox="0 0 250.000000 258.000000" preserveAspectRatio="xMidYMid meet">
|
|
3
|
+
<g transform="translate(0.000000,258.000000) scale(0.100000,-0.100000)" fill="#255F44" stroke="none">
|
|
4
|
+
<path d="M1116 2399 c-77 -11 -191 -43 -268 -74 -60 -24 -214 -110 -222 -124
-3 -4 13 -29 35 -56 56 -70 84 -166 75 -256 l-6 -69 62 51 c131 106 282 160
453 162 119 1 196 -17 310 -72 378 -183 516 -645 303 -1013 -75 -130 -209
-247 -347 -303 -411 -167 -883 92 -967 531 -26 137 -12 298 36 410 11 25 20
47 20 49 0 1 -28 -9 -62 -23 -78 -33 -197 -36 -268 -8 -25 9 -51 18 -59 19
-36 5 -68 -252 -52 -410 84 -820 1016 -1271 1695 -819 329 219 518 623 476
1017 -48 450 -323 809 -723 944 -145 48 -340 66 -491 44z"></path>
|
|
5
|
+
<path d="M285 2156 c-89 -41 -135 -115 -135 -213 1 -181 197 -290 350 -195
119 74 144 244 52 354 -35 41 -116 78 -172 78 -26 0 -66 -10 -95 -24z"></path>
|
|
6
|
+
<path d="M1160 1601 c-83 -25 -156 -98 -190 -187 -72 -192 71 -396 279 -396
312 0 403 435 118 568 -54 25 -151 32 -207 15z"></path>
|
|
7
|
+
</g>
|
|
8
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0"?>
|
|
2
|
+
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="250.000000pt" height="258.000000pt" viewBox="0 0 250.000000 258.000000" preserveAspectRatio="xMidYMid meet">
|
|
3
|
+
<g transform="translate(0.000000,258.000000) scale(0.100000,-0.100000)" fill="#255F44" stroke="none">
|
|
4
|
+
<path d="M1116 2399 c-77 -11 -191 -43 -268 -74 -60 -24 -214 -110 -222 -124
-3 -4 13 -29 35 -56 56 -70 84 -166 75 -256 l-6 -69 62 51 c131 106 282 160
453 162 119 1 196 -17 310 -72 378 -183 516 -645 303 -1013 -75 -130 -209
-247 -347 -303 -411 -167 -883 92 -967 531 -26 137 -12 298 36 410 11 25 20
47 20 49 0 1 -28 -9 -62 -23 -78 -33 -197 -36 -268 -8 -25 9 -51 18 -59 19
-36 5 -68 -252 -52 -410 84 -820 1016 -1271 1695 -819 329 219 518 623 476
1017 -48 450 -323 809 -723 944 -145 48 -340 66 -491 44z"></path>
|
|
5
|
+
<path d="M285 2156 c-89 -41 -135 -115 -135 -213 1 -181 197 -290 350 -195
119 74 144 244 52 354 -35 41 -116 78 -172 78 -26 0 -66 -10 -95 -24z"></path>
|
|
6
|
+
<path d="M1160 1601 c-83 -25 -156 -98 -190 -187 -72 -192 71 -396 279 -396
312 0 403 435 118 568 -54 25 -151 32 -207 15z"></path>
|
|
7
|
+
</g>
|
|
8
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
|
2
|
+
<path d="M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.095 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.095 2.157 2.42 0 1.333-.947 2.418-2.157 2.418z" fill="#5865F2"></path>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2
|
+
<rect x="2" y="4" width="20" height="16" rx="2"></rect>
|
|
3
|
+
<path d="m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"></path>
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<?xml version="1.0"?>
|
|
2
|
+
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
3
|
+
<path d="M3.03509 12.9431C3.24245 14.9227 4.10472 16.8468 5.62188 18.364C7.13904 19.8811 9.0631 20.7434 11.0428 20.9508L3.03509 12.9431Z" fill="#000000"></path>
|
|
4
|
+
<path d="M3 11.4938L12.4921 20.9858C13.2976 20.9407 14.0981 20.7879 14.8704 20.5273L3.4585 9.11548C3.19793 9.88771 3.0451 10.6883 3 11.4938Z" fill="#000000"></path>
|
|
5
|
+
<path d="M3.86722 8.10999L15.8758 20.1186C16.4988 19.8201 17.0946 19.4458 17.6493 18.9956L4.99021 6.33659C4.54006 6.89125 4.16573 7.487 3.86722 8.10999Z" fill="#000000"></path>
|
|
6
|
+
<path d="M5.66301 5.59517C9.18091 2.12137 14.8488 2.135 18.3498 5.63604C21.8508 9.13708 21.8645 14.8049 18.3907 18.3228L5.66301 5.59517Z" fill="#000000"></path>
|
|
7
|
+
</svg>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<svg width="400" height="400" viewBox="0 0 400 400" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M136.444 221.556C123.558 225.213 115.104 231.625 109.535 238.032C114.869 233.364 122.014 229.08 131.652 226.348C141.51 223.554 149.92 223.574 156.869 224.915V219.481C150.941 218.939 144.145 219.371 136.444 221.556ZM108.946 175.876L61.0895 188.484C61.0895 188.484 61.9617 189.716 63.5767 191.36L104.153 180.668C104.153 180.668 103.578 188.077 98.5847 194.705C108.03 187.559 108.946 175.876 108.946 175.876ZM149.005 288.347C81.6582 306.486 46.0272 228.438 35.2396 187.928C30.2556 169.229 28.0799 155.067 27.5 145.928C27.4377 144.979 27.4665 144.179 27.5336 143.446C24.04 143.657 22.3674 145.473 22.7077 150.721C23.2876 159.855 25.4633 174.016 30.4473 192.721C41.2301 233.225 76.8659 311.273 144.213 293.134C158.872 289.185 169.885 281.992 178.152 272.81C170.532 279.692 160.995 285.112 149.005 288.347ZM161.661 128.11V132.903H188.077C187.535 131.206 186.989 129.677 186.447 128.11H161.661Z" fill="#2D4552"></path>
|
|
3
|
+
<path d="M193.981 167.584C205.861 170.958 212.144 179.287 215.465 186.658L228.711 190.42C228.711 190.42 226.904 164.623 203.57 157.995C181.741 151.793 168.308 170.124 166.674 172.496C173.024 167.972 182.297 164.268 193.981 167.584ZM299.422 186.777C277.573 180.547 264.145 198.916 262.535 201.255C268.89 196.736 278.158 193.031 289.837 196.362C301.698 199.741 307.976 208.06 311.307 215.436L324.572 219.212C324.572 219.212 322.736 193.41 299.422 186.777ZM286.262 254.795L176.072 223.99C176.072 223.99 177.265 230.038 181.842 237.869L274.617 263.805C282.255 259.386 286.262 254.795 286.262 254.795ZM209.867 321.102C122.618 297.71 133.166 186.543 147.284 133.865C153.097 112.156 159.073 96.0203 164.029 85.204C161.072 84.5953 158.623 86.1529 156.203 91.0746C150.941 101.747 144.212 119.124 137.7 143.45C123.586 196.127 113.038 307.29 200.283 330.682C241.406 341.699 273.442 324.955 297.323 298.659C274.655 319.19 245.714 330.701 209.867 321.102Z" fill="#2D4552"></path>
|
|
4
|
+
<path d="M161.661 262.296V239.863L99.3324 257.537C99.3324 257.537 103.938 230.777 136.444 221.556C146.302 218.762 154.713 218.781 161.661 220.123V128.11H192.869C189.471 117.61 186.184 109.526 183.423 103.909C178.856 94.612 174.174 100.775 163.545 109.665C156.059 115.919 137.139 129.261 108.668 136.933C80.1966 144.61 57.179 142.574 47.5752 140.911C33.9601 138.562 26.8387 135.572 27.5049 145.928C28.0847 155.062 30.2605 169.224 35.2445 187.928C46.0272 228.433 81.663 306.481 149.01 288.342C166.602 283.602 179.019 274.233 187.626 262.291H161.661V262.296ZM61.0848 188.484L108.946 175.876C108.946 175.876 107.551 194.288 89.6087 199.018C71.6614 203.743 61.0848 188.484 61.0848 188.484Z" fill="#E2574C"></path>
|
|
5
|
+
<path d="M341.786 129.174C329.345 131.355 299.498 134.072 262.612 124.185C225.716 114.304 201.236 97.0224 191.537 88.8994C177.788 77.3834 171.74 69.3802 165.788 81.4857C160.526 92.163 153.797 109.54 147.284 133.866C133.171 186.543 122.623 297.706 209.867 321.098C297.093 344.47 343.53 242.92 357.644 190.238C364.157 165.917 367.013 147.5 367.799 135.625C368.695 122.173 359.455 126.078 341.786 129.174ZM166.497 172.756C166.497 172.756 180.246 151.372 203.565 158C226.899 164.628 228.706 190.425 228.706 190.425L166.497 172.756ZM223.42 268.713C182.403 256.698 176.077 223.99 176.077 223.99L286.262 254.796C286.262 254.791 264.021 280.578 223.42 268.713ZM262.377 201.495C262.377 201.495 276.107 180.126 299.422 186.773C322.736 193.411 324.572 219.208 324.572 219.208L262.377 201.495Z" fill="#2EAD33"></path>
|
|
6
|
+
<path d="M139.88 246.04L99.3324 257.532C99.3324 257.532 103.737 232.44 133.607 222.496L110.647 136.33L108.663 136.933C80.1918 144.611 57.1742 142.574 47.5704 140.911C33.9554 138.563 26.834 135.572 27.5001 145.929C28.08 155.063 30.2557 169.224 35.2397 187.929C46.0225 228.433 81.6583 306.481 149.005 288.342L150.989 287.719L139.88 246.04ZM61.0848 188.485L108.946 175.876C108.946 175.876 107.551 194.288 89.6087 199.018C71.6615 203.743 61.0848 188.485 61.0848 188.485Z" fill="#D65348"></path>
|
|
7
|
+
<path d="M225.27 269.163L223.415 268.712C182.398 256.698 176.072 223.99 176.072 223.99L232.89 239.872L262.971 124.281L262.607 124.185C225.711 114.304 201.232 97.0224 191.532 88.8994C177.783 77.3834 171.735 69.3802 165.783 81.4857C160.526 92.163 153.797 109.54 147.284 133.866C133.171 186.543 122.623 297.706 209.867 321.097L211.655 321.5L225.27 269.163ZM166.497 172.756C166.497 172.756 180.246 151.372 203.565 158C226.899 164.628 228.706 190.425 228.706 190.425L166.497 172.756Z" fill="#1D8D22"></path>
|
|
8
|
+
<path d="M141.946 245.451L131.072 248.537C133.641 263.019 138.169 276.917 145.276 289.195C146.513 288.922 147.74 288.687 149 288.342C152.302 287.451 155.364 286.348 158.312 285.145C150.371 273.361 145.118 259.789 141.946 245.451ZM137.7 143.451C132.112 164.307 127.113 194.326 128.489 224.436C130.952 223.367 133.554 222.371 136.444 221.551L138.457 221.101C136.003 188.939 141.308 156.165 147.284 133.866C148.799 128.225 150.318 122.978 151.832 118.085C149.393 119.637 146.767 121.228 143.776 122.867C141.759 129.093 139.722 135.898 137.7 143.451Z" fill="#C04B41"></path>
|
|
9
|
+
</svg>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
|
2
|
+
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z" fill="#3A76F0"></path>
|
|
3
|
+
<circle cx="12" cy="12" r="4" fill="#3A76F0"></circle>
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none">
|
|
2
|
+
<path d="M19.5 6.5a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z" fill="#5059C9"></path>
|
|
3
|
+
<path d="M22 9h-5a1 1 0 0 0-1 1v5a3.5 3.5 0 0 0 7 0v-5a1 1 0 0 0-1-1Z" fill="#5059C9"></path>
|
|
4
|
+
<path d="M14.5 5.5a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z" fill="#7B83EB"></path>
|
|
5
|
+
<path d="M18 8H9a1 1 0 0 0-1 1v6.5a4.5 4.5 0 0 0 9 0V9a1 1 0 0 0-1-1h2Z" fill="#7B83EB"></path>
|
|
6
|
+
<path d="M10 8H4a1 1 0 0 0-1 1v7a5 5 0 0 0 10 0V9a1 1 0 0 0-1-1h-2Z" fill="#4B53BC"></path>
|
|
7
|
+
<path d="M10 12H4v-1h6v1Z" fill="white" opacity="0.4"></path>
|
|
8
|
+
</svg>
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
/* ============================================================
|
|
2
|
+
Felan AI — Foundations: Colors & Type
|
|
3
|
+
Source of truth: web/app/globals.css (HSL var system) +
|
|
4
|
+
web/tailwind.config.ts (font families)
|
|
5
|
+
|
|
6
|
+
Fonts: Geist Sans + Geist Mono (via Google Fonts CDN)
|
|
7
|
+
The production app uses the `geist` npm package; the
|
|
8
|
+
Google Fonts equivalent is visually identical.
|
|
9
|
+
|
|
10
|
+
Modes: default is LIGHT; add class="dark" on root for DARK.
|
|
11
|
+
The marketing site actually ships in forced-dark mode — see
|
|
12
|
+
web/app/page.tsx which wraps the homepage in <div className="dark">.
|
|
13
|
+
============================================================ */
|
|
14
|
+
|
|
15
|
+
@import url('https://fonts.googleapis.com/css2?family=Geist:wght@300;400;500;600;700;800&family=Geist+Mono:wght@400;500;600&display=swap');
|
|
16
|
+
|
|
17
|
+
:root {
|
|
18
|
+
/* ---------- Brand palette (raw) ---------- */
|
|
19
|
+
--felan-green: hsl(152 44% 26%); /* @kind color */ /* primary brand */
|
|
20
|
+
--felan-green-hot: hsl(150 55% 34%); /* @kind color */ /* hero glow / gradient orb */
|
|
21
|
+
--felan-green-dark: hsl(152 48% 20%); /* @kind color */
|
|
22
|
+
--felan-ink: hsl(20 14% 11%); /* @kind color */ /* near-black, warm */
|
|
23
|
+
--felan-paper: hsl(0 0% 99%); /* @kind color */ /* warm off-white */
|
|
24
|
+
|
|
25
|
+
/* ---------- Core tokens (HSL triplets, Tailwind-compatible) ---------- */
|
|
26
|
+
/* Backgrounds */
|
|
27
|
+
--background: 0 0% 99%; /* @kind color */
|
|
28
|
+
--foreground: 20 14% 11%; /* @kind color */
|
|
29
|
+
|
|
30
|
+
/* Cards & Popovers */
|
|
31
|
+
--card: 0 0% 100%; /* @kind color */
|
|
32
|
+
--card-foreground: 20 14% 11%; /* @kind color */
|
|
33
|
+
--popover: 0 0% 100%; /* @kind color */
|
|
34
|
+
--popover-foreground: 20 14% 11%; /* @kind color */
|
|
35
|
+
|
|
36
|
+
/* Primary — neutral ink for high contrast */
|
|
37
|
+
--primary: 20 14% 11%; /* @kind color */
|
|
38
|
+
--primary-foreground: 0 0% 99%; /* @kind color */
|
|
39
|
+
|
|
40
|
+
/* Secondary */
|
|
41
|
+
--secondary: 30 10% 95%; /* @kind color */
|
|
42
|
+
--secondary-foreground: 20 14% 20%; /* @kind color */
|
|
43
|
+
|
|
44
|
+
/* Muted */
|
|
45
|
+
--muted: 30 10% 95%; /* @kind color */
|
|
46
|
+
--muted-foreground: 20 6% 44%; /* @kind color */
|
|
47
|
+
|
|
48
|
+
/* Accent (shadcn hover) */
|
|
49
|
+
--accent: 30 10% 95%; /* @kind color */
|
|
50
|
+
--accent-foreground: 20 14% 11%; /* @kind color */
|
|
51
|
+
|
|
52
|
+
/* Brand — the green identity */
|
|
53
|
+
--brand: 152 44% 26%; /* @kind color */
|
|
54
|
+
--brand-foreground: 0 0% 100%; /* @kind color */
|
|
55
|
+
|
|
56
|
+
/* Destructive */
|
|
57
|
+
--destructive: 0 84% 60%; /* @kind color */
|
|
58
|
+
--destructive-foreground: 0 0% 98%; /* @kind color */
|
|
59
|
+
|
|
60
|
+
/* Structural */
|
|
61
|
+
--border: 30 10% 90%; /* @kind color */
|
|
62
|
+
--input: 30 10% 90%; /* @kind color */
|
|
63
|
+
--ring: 152 44% 26%; /* @kind color */
|
|
64
|
+
--radius: 0.5rem; /* @kind radius */
|
|
65
|
+
|
|
66
|
+
/* Surface elevation layers (warm neutrals) */
|
|
67
|
+
--surface-1: 30 8% 97%; /* @kind color */
|
|
68
|
+
--surface-2: 30 8% 94%; /* @kind color */
|
|
69
|
+
--surface-3: 30 8% 91%; /* @kind color */
|
|
70
|
+
|
|
71
|
+
/* Charts / categorical */
|
|
72
|
+
--chart-1: 152 44% 26%; /* @kind color */ /* brand green */
|
|
73
|
+
--chart-2: 180 55% 42%; /* @kind color */ /* teal */
|
|
74
|
+
--chart-3: 220 65% 50%; /* @kind color */ /* blue */
|
|
75
|
+
--chart-4: 45 85% 50%; /* @kind color */ /* amber */
|
|
76
|
+
--chart-5: 280 60% 55%; /* @kind color */ /* violet */
|
|
77
|
+
|
|
78
|
+
/* Status (marketing + product) */
|
|
79
|
+
--success: 142 71% 45%; /* @kind color */
|
|
80
|
+
--warning: 38 92% 50%; /* @kind color */
|
|
81
|
+
--info: 210 90% 55%; /* @kind color */
|
|
82
|
+
|
|
83
|
+
/* Sidebar (product app) */
|
|
84
|
+
--sidebar-background: 30 8% 97%; /* @kind color */
|
|
85
|
+
--sidebar-foreground: 20 6% 40%; /* @kind color */
|
|
86
|
+
--sidebar-primary: 152 44% 26%; /* @kind color */
|
|
87
|
+
--sidebar-primary-foreground: 0 0% 100%; /* @kind color */
|
|
88
|
+
--sidebar-accent: 30 12% 91%; /* @kind color */
|
|
89
|
+
--sidebar-accent-foreground: 20 14% 9%; /* @kind color */
|
|
90
|
+
--sidebar-border: 30 10% 90%; /* @kind color */
|
|
91
|
+
--sidebar-ring: 152 44% 26%; /* @kind color */
|
|
92
|
+
|
|
93
|
+
/* ---------- Typography ---------- */
|
|
94
|
+
--font-sans: 'Geist', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
|
|
95
|
+
--font-mono: 'Geist Mono', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;
|
|
96
|
+
|
|
97
|
+
/* Type scale — matches Tailwind defaults used across the app */
|
|
98
|
+
--text-xs: 0.75rem; /* @kind font */ /* 12px — micro labels, tags */
|
|
99
|
+
--text-sm: 0.875rem; /* @kind font */ /* 14px — body small, nav */
|
|
100
|
+
--text-base: 1rem; /* @kind font */ /* 16px — body */
|
|
101
|
+
--text-lg: 1.125rem; /* @kind font */ /* 18px — lead paragraph */
|
|
102
|
+
--text-xl: 1.25rem; /* @kind font */ /* 20px — eyebrow/sub-head */
|
|
103
|
+
--text-2xl: 1.5rem; /* @kind font */ /* 24px — h3 */
|
|
104
|
+
--text-3xl: 1.875rem; /* @kind font */ /* 30px — h2 small */
|
|
105
|
+
--text-4xl: 2.25rem; /* @kind font */ /* 36px — h2 */
|
|
106
|
+
--text-5xl: 3rem; /* @kind font */ /* 48px — h1 mid */
|
|
107
|
+
--text-6xl: 3.75rem; /* @kind font */ /* 60px — hero h1 */
|
|
108
|
+
--text-hero: 4.5rem; /* @kind font */ /* 72px — landing hero */
|
|
109
|
+
|
|
110
|
+
--leading-tight: 1.08; /* @kind font */ /* hero lines */
|
|
111
|
+
--leading-snug: 1.2; /* @kind font */
|
|
112
|
+
--leading-normal: 1.5; /* @kind font */
|
|
113
|
+
--leading-relaxed: 1.65; /* @kind font */
|
|
114
|
+
|
|
115
|
+
--tracking-tight: -0.02em; /* @kind font */
|
|
116
|
+
--tracking-normal: 0; /* @kind font */
|
|
117
|
+
|
|
118
|
+
--weight-regular: 400; /* @kind font */
|
|
119
|
+
--weight-medium: 500; /* @kind font */
|
|
120
|
+
--weight-semibold: 600; /* @kind font */
|
|
121
|
+
--weight-bold: 700; /* @kind font */
|
|
122
|
+
--weight-extrabold: 800; /* @kind font */
|
|
123
|
+
|
|
124
|
+
/* ---------- Elevation & spacing ---------- */
|
|
125
|
+
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
126
|
+
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.07), 0 2px 4px -2px rgb(0 0 0 / 0.05);
|
|
127
|
+
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.08), 0 4px 6px -4px rgb(0 0 0 / 0.04);
|
|
128
|
+
--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.10), 0 8px 10px -6px rgb(0 0 0 / 0.06);
|
|
129
|
+
--shadow-brand: 0 10px 30px -8px hsl(152 44% 26% / 0.35);
|
|
130
|
+
|
|
131
|
+
--radius-sm: calc(var(--radius) - 4px); /* 4px */
|
|
132
|
+
--radius-md: calc(var(--radius) - 2px); /* 6px */
|
|
133
|
+
--radius-lg: var(--radius); /* 8px */
|
|
134
|
+
--radius-xl: 0.75rem; /* 12px — cards */
|
|
135
|
+
--radius-2xl: 1rem; /* 16px */
|
|
136
|
+
--radius-full: 9999px;
|
|
137
|
+
|
|
138
|
+
/* Signature gradients */
|
|
139
|
+
--gradient-hero-green: radial-gradient(ellipse, hsla(150,55%,34%,0.20) 0%, transparent 70%); /* @kind other */
|
|
140
|
+
--gradient-hero-blue: radial-gradient(ellipse, hsla(220,80%,50%,0.14) 0%, transparent 70%); /* @kind other */
|
|
141
|
+
--gradient-text-fade: linear-gradient(to bottom, hsl(0 0% 100%) 0%, hsl(0 0% 100% / 0.7) 100%); /* @kind other */
|
|
142
|
+
--gradient-divider: linear-gradient(to right, transparent, hsl(0 0% 100% / 0.08), transparent); /* @kind other */
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* ============================================================
|
|
146
|
+
DARK MODE (default for marketing homepage)
|
|
147
|
+
============================================================ */
|
|
148
|
+
.dark {
|
|
149
|
+
--background: 20 10% 7%; /* @kind color */ /* warm near-black */
|
|
150
|
+
--foreground: 30 10% 90%; /* @kind color */
|
|
151
|
+
|
|
152
|
+
--card: 20 8% 10%; /* @kind color */
|
|
153
|
+
--card-foreground: 30 10% 90%; /* @kind color */
|
|
154
|
+
--popover: 20 8% 10%; /* @kind color */
|
|
155
|
+
--popover-foreground: 30 10% 90%; /* @kind color */
|
|
156
|
+
|
|
157
|
+
--primary: 30 10% 90%; /* @kind color */
|
|
158
|
+
--primary-foreground: 20 10% 7%; /* @kind color */
|
|
159
|
+
|
|
160
|
+
--secondary: 20 8% 15%; /* @kind color */
|
|
161
|
+
--secondary-foreground: 30 10% 90%; /* @kind color */
|
|
162
|
+
|
|
163
|
+
--muted: 20 8% 15%; /* @kind color */
|
|
164
|
+
--muted-foreground: 20 5% 55%; /* @kind color */
|
|
165
|
+
|
|
166
|
+
--accent: 20 8% 15%; /* @kind color */
|
|
167
|
+
--accent-foreground: 30 10% 90%; /* @kind color */
|
|
168
|
+
|
|
169
|
+
--brand: 152 46% 34%; /* @kind color */ /* brighter on dark */
|
|
170
|
+
--brand-foreground: 0 0% 100%; /* @kind color */
|
|
171
|
+
|
|
172
|
+
--destructive: 0 63% 31%; /* @kind color */
|
|
173
|
+
--destructive-foreground: 0 0% 98%; /* @kind color */
|
|
174
|
+
|
|
175
|
+
--border: 20 6% 18%; /* @kind color */
|
|
176
|
+
--input: 20 6% 18%; /* @kind color */
|
|
177
|
+
--ring: 152 46% 34%; /* @kind color */
|
|
178
|
+
|
|
179
|
+
--surface-1: 20 8% 9%; /* @kind color */
|
|
180
|
+
--surface-2: 20 8% 12%; /* @kind color */
|
|
181
|
+
--surface-3: 20 8% 15%; /* @kind color */
|
|
182
|
+
|
|
183
|
+
--sidebar-background: 20 8% 9%; /* @kind color */
|
|
184
|
+
--sidebar-foreground: 20 5% 55%; /* @kind color */
|
|
185
|
+
--sidebar-primary: 152 46% 34%; /* @kind color */
|
|
186
|
+
--sidebar-primary-foreground: 0 0% 100%; /* @kind color */
|
|
187
|
+
--sidebar-accent: 20 8% 16%; /* @kind color */
|
|
188
|
+
--sidebar-accent-foreground: 0 0% 98%; /* @kind color */
|
|
189
|
+
--sidebar-border: 20 6% 15%; /* @kind color */
|
|
190
|
+
--sidebar-ring: 152 46% 34%; /* @kind color */
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/* ============================================================
|
|
194
|
+
SEMANTIC UTILITIES
|
|
195
|
+
============================================================ */
|
|
196
|
+
.felan-bg { background-color: hsl(var(--background)); color: hsl(var(--foreground)); }
|
|
197
|
+
.felan-card { background-color: hsl(var(--card)); color: hsl(var(--card-foreground)); border: 1px solid hsl(var(--border)); border-radius: var(--radius-xl); }
|
|
198
|
+
.felan-surface-1 { background-color: hsl(var(--surface-1)); }
|
|
199
|
+
.felan-surface-2 { background-color: hsl(var(--surface-2)); }
|
|
200
|
+
.felan-surface-3 { background-color: hsl(var(--surface-3)); }
|
|
201
|
+
|
|
202
|
+
/* Hero headline treatment — gradient text fade (dark mode signature) */
|
|
203
|
+
.felan-headline-fade {
|
|
204
|
+
background: linear-gradient(to bottom, #fff 0%, rgba(255,255,255,0.7) 100%);
|
|
205
|
+
-webkit-background-clip: text;
|
|
206
|
+
background-clip: text;
|
|
207
|
+
color: transparent;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/* ============================================================
|
|
211
|
+
SEMANTIC TYPOGRAPHY
|
|
212
|
+
============================================================ */
|
|
213
|
+
body, .felan-body {
|
|
214
|
+
font-family: var(--font-sans);
|
|
215
|
+
font-size: var(--text-base);
|
|
216
|
+
line-height: var(--leading-normal);
|
|
217
|
+
color: hsl(var(--foreground));
|
|
218
|
+
background: hsl(var(--background));
|
|
219
|
+
-webkit-font-smoothing: antialiased;
|
|
220
|
+
text-rendering: optimizeLegibility;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
.felan-h1, h1.felan {
|
|
224
|
+
font-family: var(--font-sans);
|
|
225
|
+
font-size: clamp(var(--text-4xl), 6vw, var(--text-hero));
|
|
226
|
+
font-weight: var(--weight-extrabold);
|
|
227
|
+
letter-spacing: var(--tracking-tight);
|
|
228
|
+
line-height: var(--leading-tight);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
.felan-h2, h2.felan {
|
|
232
|
+
font-family: var(--font-sans);
|
|
233
|
+
font-size: clamp(var(--text-3xl), 4vw, var(--text-5xl));
|
|
234
|
+
font-weight: var(--weight-bold);
|
|
235
|
+
letter-spacing: var(--tracking-tight);
|
|
236
|
+
line-height: 1.15;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
.felan-h3, h3.felan {
|
|
240
|
+
font-family: var(--font-sans);
|
|
241
|
+
font-size: var(--text-2xl);
|
|
242
|
+
font-weight: var(--weight-bold);
|
|
243
|
+
letter-spacing: var(--tracking-tight);
|
|
244
|
+
line-height: 1.25;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
.felan-h4, h4.felan {
|
|
248
|
+
font-family: var(--font-sans);
|
|
249
|
+
font-size: var(--text-xl);
|
|
250
|
+
font-weight: var(--weight-semibold);
|
|
251
|
+
line-height: 1.3;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.felan-lead {
|
|
255
|
+
font-family: var(--font-sans);
|
|
256
|
+
font-size: var(--text-xl);
|
|
257
|
+
font-weight: var(--weight-regular);
|
|
258
|
+
color: hsl(var(--muted-foreground));
|
|
259
|
+
line-height: var(--leading-relaxed);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
.felan-p, p.felan {
|
|
263
|
+
font-family: var(--font-sans);
|
|
264
|
+
font-size: var(--text-base);
|
|
265
|
+
line-height: var(--leading-relaxed);
|
|
266
|
+
color: hsl(var(--foreground));
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
.felan-small {
|
|
270
|
+
font-size: var(--text-sm);
|
|
271
|
+
color: hsl(var(--muted-foreground));
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
.felan-eyebrow {
|
|
275
|
+
display: inline-flex;
|
|
276
|
+
align-items: center;
|
|
277
|
+
gap: 0.375rem;
|
|
278
|
+
font-size: var(--text-sm);
|
|
279
|
+
font-weight: var(--weight-medium);
|
|
280
|
+
background: hsl(var(--muted));
|
|
281
|
+
color: hsl(var(--foreground));
|
|
282
|
+
padding: 0.25rem 0.75rem;
|
|
283
|
+
border-radius: var(--radius-lg);
|
|
284
|
+
letter-spacing: 0;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
.felan-overline {
|
|
288
|
+
font-size: var(--text-xs);
|
|
289
|
+
font-weight: var(--weight-medium);
|
|
290
|
+
text-transform: uppercase;
|
|
291
|
+
letter-spacing: 0.08em;
|
|
292
|
+
color: hsl(var(--muted-foreground));
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
.felan-code, code.felan {
|
|
296
|
+
font-family: var(--font-mono);
|
|
297
|
+
font-size: 0.9em;
|
|
298
|
+
background: hsl(var(--muted));
|
|
299
|
+
color: hsl(var(--foreground));
|
|
300
|
+
padding: 0.125em 0.375em;
|
|
301
|
+
border-radius: var(--radius-sm);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
.felan-link {
|
|
305
|
+
color: hsl(var(--brand));
|
|
306
|
+
text-decoration: none;
|
|
307
|
+
font-weight: var(--weight-medium);
|
|
308
|
+
}
|
|
309
|
+
.felan-link:hover { text-decoration: underline; }
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/* ============================================================
|
|
2
|
+
Felan AI — Design System entry stylesheet
|
|
3
|
+
Link THIS file to get the full foundation (tokens + type).
|
|
4
|
+
Consumers: <link rel="stylesheet" href="styles.css">
|
|
5
|
+
|
|
6
|
+
The per-kit stylesheets (ui_kits/marketing/marketing.css,
|
|
7
|
+
ui_kits/product/product.css) are component-scoped reference
|
|
8
|
+
implementations — link those only inside their own kit,
|
|
9
|
+
NOT globally (each sets its own html/body background).
|
|
10
|
+
============================================================ */
|
|
11
|
+
|
|
12
|
+
@import url('./colors_and_type.css');
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Commercial quote template
|
|
2
|
+
|
|
3
|
+
Reusable A4 HTML template for Felan commercial quotes. It is intentionally separate from the
|
|
4
|
+
catalog previews because it is a customer-facing print artifact, not a design-system card.
|
|
5
|
+
|
|
6
|
+
## Use
|
|
7
|
+
|
|
8
|
+
1. Read `template.html` as UTF-8.
|
|
9
|
+
2. Replace every `{{PLACEHOLDER}}` with escaped content.
|
|
10
|
+
3. Replace `{{LOGO_SRC}}` with a local `file://` URL or a data URL for the Felan logo.
|
|
11
|
+
4. Open the resulting HTML in Chromium with background graphics enabled and save as A4 PDF with
|
|
12
|
+
zero browser margins.
|
|
13
|
+
|
|
14
|
+
The template uses the design-system tokens through a relative stylesheet link for direct preview.
|
|
15
|
+
PDF renderers should inline `../../colors_and_type.css` or otherwise resolve the stylesheet and logo
|
|
16
|
+
before generating the final artifact.
|
|
17
|
+
|
|
18
|
+
## Placeholder contract
|
|
19
|
+
|
|
20
|
+
| Placeholder | Purpose |
|
|
21
|
+
|-------------|---------|
|
|
22
|
+
| `{{DOCUMENT_TITLE}}` | Browser/PDF title |
|
|
23
|
+
| `{{QUOTE_LABEL}}` | Document type, e.g. `Commercial quote` |
|
|
24
|
+
| `{{REFERENCE}}` | Quote reference |
|
|
25
|
+
| `{{ISSUE_DATE}}` | Issue date |
|
|
26
|
+
| `{{VALID_UNTIL}}` | Expiry date |
|
|
27
|
+
| `{{CUSTOMER}}` | Customer display name |
|
|
28
|
+
| `{{CONTACT}}` | Recipient name |
|
|
29
|
+
| `{{SELLER}}` | Seller display name |
|
|
30
|
+
| `{{LEGAL_SELLER}}` | Optional light legal attribution |
|
|
31
|
+
| `{{HEADLINE}}` | Main offer headline |
|
|
32
|
+
| `{{INTRO}}` | Offer summary |
|
|
33
|
+
| `{{PACKAGE_META}}` | Page-two header label |
|
|
34
|
+
| `{{PACKAGE_TITLE}}` | Package section title |
|
|
35
|
+
| `{{SCOPE_TITLE}}` | Included-scope column title |
|
|
36
|
+
| `{{SCOPE_ITEMS}}` | `<li>` elements for included scope |
|
|
37
|
+
| `{{SUPPORT_TITLE}}` | Support/update column title |
|
|
38
|
+
| `{{SUPPORT_ITEMS}}` | `<li>` elements for support/updates |
|
|
39
|
+
| `{{PACKAGE_CALLOUT_TITLE}}` / `{{PACKAGE_CALLOUT_BODY}}` | Page-two callout |
|
|
40
|
+
| `{{PRICING_TITLE}}` | Investment section heading |
|
|
41
|
+
| `{{PRICING_CONTENT}}` | Escaped quote table: single package or option comparison |
|
|
42
|
+
| `{{IMPLEMENTATION_TITLE}}` | Final-page heading |
|
|
43
|
+
| `{{IMPLEMENTATION_SCOPE_TITLE}}` | Implementation/rollout column title |
|
|
44
|
+
| `{{IMPLEMENTATION_ITEMS}}` | `<li>` elements for implementation/rollout scope |
|
|
45
|
+
| `{{RESPONSIBILITY_TITLE}}` | Customer-responsibility column title |
|
|
46
|
+
| `{{RESPONSIBILITY_ITEMS}}` | `<li>` elements for customer responsibilities |
|
|
47
|
+
| `{{EXCLUSION_TITLE}}` | Exclusions column title |
|
|
48
|
+
| `{{EXCLUSION_ITEMS}}` | `<li>` elements for exclusions |
|
|
49
|
+
| `{{TERMS_ITEMS}}` | `<li>` elements for lightweight commercial terms |
|
|
50
|
+
| `{{FINAL_CALLOUT_TITLE}}` / `{{FINAL_CALLOUT_BODY}}` | Final-page callout |
|
|
51
|
+
| `{{NEXT_STEPS}}` | `<li>` elements for next steps |
|
|
52
|
+
| `{{FOOTER_NOTE}}` | Footer note, e.g. `Prices exclude VAT, if applicable.` |
|
|
53
|
+
|
|
54
|
+
List placeholders must be replaced with trusted, already-escaped HTML. Do not interpolate raw
|
|
55
|
+
customer or user input into the document.
|
|
56
|
+
|
|
57
|
+
## Pricing layouts
|
|
58
|
+
|
|
59
|
+
- **Single package:** one line-item table with scope, billing, term amount, and an explicitly named
|
|
60
|
+
total contract value.
|
|
61
|
+
- **Option comparison:** one matrix that compares mutually exclusive billing options row-for-row,
|
|
62
|
+
including recurring subtotal, one-time fees, invoice timing, and total contract value.
|
|
63
|
+
|
|
64
|
+
Do not use cards to compare unlike concepts such as price and user capacity. Keep monthly rates,
|
|
65
|
+
one-time charges, and term totals in separately labelled columns or rows.
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>{{DOCUMENT_TITLE}}</title>
|
|
7
|
+
<link rel="stylesheet" href="../../colors_and_type.css">
|
|
8
|
+
<style>
|
|
9
|
+
@page { size: A4; margin: 0; }
|
|
10
|
+
:root { --paper: hsl(0 0% 99%); --ink: hsl(20 14% 11%); --muted: hsl(20 6% 44%); --line: hsl(30 10% 88%); --soft: hsl(30 10% 96%); --brand: hsl(152 44% 26%); --brand-soft: hsl(152 30% 94%); }
|
|
11
|
+
* { box-sizing: border-box; }
|
|
12
|
+
html, body { margin: 0; background: hsl(30 8% 90%); color: var(--ink); font-family: var(--font-sans); font-size: 10.5pt; line-height: 1.5; }
|
|
13
|
+
body { padding: 20px 0; }
|
|
14
|
+
.page { width: 210mm; height: 297mm; margin: 0 auto 16px; padding: 17mm 18mm 16mm; position: relative; overflow: hidden; background: var(--paper); page-break-after: always; }
|
|
15
|
+
.page:last-child { page-break-after: auto; }
|
|
16
|
+
.page::after { content: ''; position: absolute; left: 18mm; right: 18mm; bottom: 10mm; border-top: 1px solid var(--line); }
|
|
17
|
+
.header { display: flex; align-items: center; justify-content: space-between; padding-bottom: 9mm; border-bottom: 1px solid var(--line); }
|
|
18
|
+
.lockup { display: flex; align-items: center; gap: 9px; }
|
|
19
|
+
.lockup img { width: 28px; height: 28px; object-fit: contain; }
|
|
20
|
+
.wordmark { font-size: 17pt; font-weight: 800; letter-spacing: -0.03em; }
|
|
21
|
+
.meta { color: var(--muted); font-family: var(--font-mono); font-size: 7.5pt; line-height: 1.7; text-align: right; }
|
|
22
|
+
.eyebrow { color: var(--brand); font-family: var(--font-mono); font-size: 7.5pt; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; }
|
|
23
|
+
h1 { max-width: 155mm; margin: 26mm 0 7mm; font-size: 31pt; line-height: 1.05; letter-spacing: -.04em; }
|
|
24
|
+
h2 { margin: 0 0 5mm; font-size: 18pt; line-height: 1.15; letter-spacing: -.025em; }
|
|
25
|
+
h3 { margin: 0 0 2mm; font-size: 11pt; line-height: 1.25; }
|
|
26
|
+
p { margin: 0 0 4mm; }
|
|
27
|
+
.lede { max-width: 143mm; color: var(--muted); font-size: 14pt; line-height: 1.45; }
|
|
28
|
+
.recipient { margin-top: 20mm; padding: 5mm; border-left: 3px solid var(--brand); background: var(--brand-soft); }
|
|
29
|
+
.recipient strong { display: block; margin-bottom: 1mm; }
|
|
30
|
+
.cover-note { position: absolute; left: 18mm; right: 18mm; bottom: 23mm; color: var(--muted); font-size: 8.5pt; }
|
|
31
|
+
.section-head { margin-bottom: 9mm; }
|
|
32
|
+
.callout { margin-top: 6mm; padding: 5mm; border-radius: 8px; background: hsl(20 14% 11%); color: white; }
|
|
33
|
+
.callout strong { color: hsl(152 45% 62%); }
|
|
34
|
+
.callout p { margin: 0; color: hsl(30 10% 78%); font-size: 9pt; }
|
|
35
|
+
.columns { display: grid; grid-template-columns: 1fr 1fr; gap: 12mm; }
|
|
36
|
+
.block { margin-bottom: 8mm; }
|
|
37
|
+
.block h3 { padding-bottom: 2mm; border-bottom: 1px solid var(--line); }
|
|
38
|
+
ul, ol { margin: 2mm 0 0; padding-left: 5mm; }
|
|
39
|
+
li { margin: 1.5mm 0; }
|
|
40
|
+
.checklist { list-style: none; padding-left: 0; }
|
|
41
|
+
.checklist li { position: relative; padding-left: 6mm; }
|
|
42
|
+
.checklist li::before { content: '✓'; position: absolute; left: 0; color: var(--brand); font-weight: 700; }
|
|
43
|
+
.quote-table { width: 100%; margin: 5mm 0 0; border-collapse: collapse; table-layout: fixed; }
|
|
44
|
+
.quote-table th { padding: 4mm 3mm; background: var(--ink); color: white; font-family: var(--font-mono); font-size: 7.5pt; font-weight: 600; letter-spacing: .04em; text-align: left; text-transform: uppercase; vertical-align: top; }
|
|
45
|
+
.quote-table td { padding: 4.5mm 3mm; border-bottom: 1px solid var(--line); vertical-align: middle; }
|
|
46
|
+
.quote-table .row-label { font-weight: 650; text-align: left; }
|
|
47
|
+
.quote-table.comparison th:first-child { width: 36%; }
|
|
48
|
+
.quote-table.comparison th:not(:first-child), .quote-table.comparison td:not(:first-child) { text-align: right; }
|
|
49
|
+
.quote-table.single th:nth-child(1) { width: 30%; }
|
|
50
|
+
.quote-table.single th:nth-child(2) { width: 25%; }
|
|
51
|
+
.quote-table.single th:nth-child(3) { width: 25%; }
|
|
52
|
+
.quote-table.single th:nth-child(4), .quote-table.single td:nth-child(4) { width: 20%; text-align: right; }
|
|
53
|
+
.quote-table tr.emphasis td { border-top: 2px solid var(--brand); border-bottom: 0; background: var(--brand-soft); font-weight: 750; }
|
|
54
|
+
.quote-table tr.emphasis td:not(:first-child) { font-size: 12pt; }
|
|
55
|
+
.option-label { display: block; }
|
|
56
|
+
.option-badge { display: inline-block; margin-top: 2mm; padding: 1mm 2mm; border-radius: 9999px; background: hsl(152 35% 88%); color: var(--brand); font-size: 6.5pt; }
|
|
57
|
+
.pricing-notes { margin-top: 7mm; padding-top: 5mm; border-top: 1px solid var(--line); }
|
|
58
|
+
.pricing-notes p { margin-bottom: 2mm; color: var(--muted); font-size: 8.5pt; }
|
|
59
|
+
.small { color: var(--muted); font-size: 8.5pt; }
|
|
60
|
+
.terms { margin-top: 9mm; padding-top: 5mm; border-top: 1px solid var(--line); }
|
|
61
|
+
.terms li { color: var(--muted); font-size: 8.5pt; }
|
|
62
|
+
.page.final section { margin-top: 12mm !important; }
|
|
63
|
+
.page.final .block { margin-bottom: 5mm; }
|
|
64
|
+
.page.final .terms { margin-top: 5mm; }
|
|
65
|
+
.page.final .callout { margin-top: 5mm !important; }
|
|
66
|
+
.page.final .block[style] { margin-top: 6mm !important; }
|
|
67
|
+
.page.final .columns { gap: 8mm; }
|
|
68
|
+
.page.final li { margin: .5mm 0; font-size: 8pt; line-height: 1.35; }
|
|
69
|
+
.footer { position: absolute; right: 18mm; bottom: 5mm; color: var(--muted); font-family: var(--font-mono); font-size: 7pt; }
|
|
70
|
+
.footer span { margin-left: 5mm; }
|
|
71
|
+
@media print { html, body { background: var(--paper); } body { padding: 0; } .page { margin: 0; } }
|
|
72
|
+
</style>
|
|
73
|
+
</head>
|
|
74
|
+
<body>
|
|
75
|
+
<main class="page">
|
|
76
|
+
<header class="header">
|
|
77
|
+
<div class="lockup"><img src="{{LOGO_SRC}}" alt="Felan AI"><span class="wordmark">Felan AI</span></div>
|
|
78
|
+
<div class="meta">{{QUOTE_LABEL}}<br>{{REFERENCE}}<br>{{ISSUE_DATE}}</div>
|
|
79
|
+
</header>
|
|
80
|
+
<div class="eyebrow" style="margin-top: 22mm">Agentic engineering platform</div>
|
|
81
|
+
<h1>{{HEADLINE}}</h1>
|
|
82
|
+
<p class="lede">{{INTRO}}</p>
|
|
83
|
+
<div class="recipient"><strong>Prepared for {{CUSTOMER}}</strong>{{CONTACT}}<br><span class="small">Prepared by {{SELLER}} · {{LEGAL_SELLER}}</span></div>
|
|
84
|
+
<p class="cover-note">Valid until {{VALID_UNTIL}} · {{FOOTER_NOTE}}</p>
|
|
85
|
+
<div class="footer">© 2026 Felan <span>1</span></div>
|
|
86
|
+
</main>
|
|
87
|
+
|
|
88
|
+
<main class="page">
|
|
89
|
+
<header class="header"><div class="lockup"><img src="{{LOGO_SRC}}" alt=""><span class="wordmark">Felan AI</span></div><div class="meta">{{PACKAGE_META}}<br>{{CUSTOMER}}</div></header>
|
|
90
|
+
<section style="margin-top: 18mm">
|
|
91
|
+
<div class="section-head"><h2>{{PACKAGE_TITLE}}</h2></div>
|
|
92
|
+
<div class="columns">
|
|
93
|
+
<div class="block"><h3>{{SCOPE_TITLE}}</h3><ul class="checklist">{{SCOPE_ITEMS}}</ul></div>
|
|
94
|
+
<div class="block"><h3>{{SUPPORT_TITLE}}</h3><ul class="checklist">{{SUPPORT_ITEMS}}</ul></div>
|
|
95
|
+
</div>
|
|
96
|
+
<div class="callout"><p><strong>{{PACKAGE_CALLOUT_TITLE}}</strong> {{PACKAGE_CALLOUT_BODY}}</p></div>
|
|
97
|
+
</section>
|
|
98
|
+
<div class="footer">© 2026 Felan <span>2</span></div>
|
|
99
|
+
</main>
|
|
100
|
+
|
|
101
|
+
<main class="page">
|
|
102
|
+
<header class="header"><div class="lockup"><img src="{{LOGO_SRC}}" alt=""><span class="wordmark">Felan AI</span></div><div class="meta">Investment<br>{{CUSTOMER}}</div></header>
|
|
103
|
+
<section style="margin-top: 18mm">
|
|
104
|
+
<div class="section-head"><h2>{{PRICING_TITLE}}</h2></div>
|
|
105
|
+
{{PRICING_CONTENT}}
|
|
106
|
+
<p class="small">{{FOOTER_NOTE}}</p>
|
|
107
|
+
</section>
|
|
108
|
+
<div class="footer">© 2026 Felan <span>3</span></div>
|
|
109
|
+
</main>
|
|
110
|
+
|
|
111
|
+
<main class="page final">
|
|
112
|
+
<header class="header"><div class="lockup"><img src="{{LOGO_SRC}}" alt=""><span class="wordmark">Felan AI</span></div><div class="meta">Scope and terms<br>{{REFERENCE}}</div></header>
|
|
113
|
+
<section style="margin-top: 18mm">
|
|
114
|
+
<div class="section-head"><h2>{{IMPLEMENTATION_TITLE}}</h2></div>
|
|
115
|
+
<div class="columns">
|
|
116
|
+
<div class="block"><h3>{{IMPLEMENTATION_SCOPE_TITLE}}</h3><ul>{{IMPLEMENTATION_ITEMS}}</ul><h3 style="margin-top: 8mm">{{RESPONSIBILITY_TITLE}}</h3><ul>{{RESPONSIBILITY_ITEMS}}</ul></div>
|
|
117
|
+
<div class="block"><h3>{{EXCLUSION_TITLE}}</h3><ul>{{EXCLUSION_ITEMS}}</ul><div class="terms"><h3>Terms</h3><ul>{{TERMS_ITEMS}}</ul></div></div>
|
|
118
|
+
</div>
|
|
119
|
+
<div class="callout" style="margin-top: 10mm"><p><strong>{{FINAL_CALLOUT_TITLE}}</strong> {{FINAL_CALLOUT_BODY}}</p></div>
|
|
120
|
+
<div class="block" style="margin-top: 10mm"><h3>Next steps</h3><ol>{{NEXT_STEPS}}</ol></div>
|
|
121
|
+
</section>
|
|
122
|
+
<div class="footer">© 2026 Felan <span>4</span></div>
|
|
123
|
+
</main>
|
|
124
|
+
</body>
|
|
125
|
+
</html>
|