@syncedco/flow 0.1.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 (90) hide show
  1. package/CODE_OF_CONDUCT.md +26 -0
  2. package/CONTRIBUTING.md +54 -0
  3. package/LICENSE +21 -0
  4. package/README.md +334 -0
  5. package/SECURITY.md +30 -0
  6. package/SUPPORT.md +32 -0
  7. package/TRADEMARKS.md +14 -0
  8. package/base.css +100 -0
  9. package/bin/synced-flow.mjs +4639 -0
  10. package/components.css +1392 -0
  11. package/defaults.css +26 -0
  12. package/dist/config.d.ts +94 -0
  13. package/dist/config.js +3 -0
  14. package/dist/index.d.ts +45 -0
  15. package/dist/index.js +67 -0
  16. package/docs/accessibility-css.md +133 -0
  17. package/docs/ai-usage.md +112 -0
  18. package/docs/api-contract.md +81 -0
  19. package/docs/base-styling.md +113 -0
  20. package/docs/build-a-site-walkthrough.md +122 -0
  21. package/docs/cli-reference.md +230 -0
  22. package/docs/config-reference.md +81 -0
  23. package/docs/css-optimisation.md +117 -0
  24. package/docs/migration-from-tailwind.md +60 -0
  25. package/docs/native-components.md +156 -0
  26. package/docs/patterns.md +32 -0
  27. package/docs/presets.md +60 -0
  28. package/docs/quick-start.md +252 -0
  29. package/docs/recipes.md +285 -0
  30. package/docs/release-readiness.md +63 -0
  31. package/docs/system-primitives.md +150 -0
  32. package/docs/tailwind-comparison.md +66 -0
  33. package/docs/tokens.md +79 -0
  34. package/docs/website-patterns.md +114 -0
  35. package/docs/why-synced-flow.md +99 -0
  36. package/docs/wordpress.md +66 -0
  37. package/examples/README.md +16 -0
  38. package/examples/astro/package.json +19 -0
  39. package/examples/astro/src/pages/index.astro +85 -0
  40. package/examples/astro/src/styles/synced-flow.css +2 -0
  41. package/examples/astro/src/styles/synced-flow.generated.css +206 -0
  42. package/examples/astro/synced-flow.config.mjs +9 -0
  43. package/examples/next/app/layout.tsx +14 -0
  44. package/examples/next/app/page.tsx +92 -0
  45. package/examples/next/app/synced-flow.css +2 -0
  46. package/examples/next/app/synced-flow.generated.css +205 -0
  47. package/examples/next/package.json +19 -0
  48. package/examples/next/synced-flow.config.mjs +9 -0
  49. package/examples/plain-html/index.html +384 -0
  50. package/examples/plain-html/package.json +15 -0
  51. package/examples/plain-html/synced-flow.config.mjs +9 -0
  52. package/examples/plain-html/synced-flow.css +2 -0
  53. package/examples/plain-html/synced-flow.generated.css +205 -0
  54. package/examples/templates/README.md +22 -0
  55. package/examples/templates/blog-index.html +41 -0
  56. package/examples/templates/coming-soon.html +27 -0
  57. package/examples/templates/portfolio-scroll.html +45 -0
  58. package/examples/templates/saas-dashboard.html +171 -0
  59. package/examples/templates/saas-landing.html +104 -0
  60. package/examples/vite/index.html +2 -0
  61. package/examples/vite/package.json +20 -0
  62. package/examples/vite/src/main.jsx +27 -0
  63. package/examples/vite/src/synced-flow.css +2 -0
  64. package/examples/vite/src/synced-flow.generated.css +205 -0
  65. package/examples/vite/synced-flow.config.mjs +9 -0
  66. package/examples/wordpress/assets/css/synced-flow.css +641 -0
  67. package/examples/wordpress/functions.php +13 -0
  68. package/examples/wordpress/package.json +15 -0
  69. package/examples/wordpress/parts/footer.html +12 -0
  70. package/examples/wordpress/parts/header.html +10 -0
  71. package/examples/wordpress/patterns/contact-cta.php +28 -0
  72. package/examples/wordpress/patterns/feature-grid.php +38 -0
  73. package/examples/wordpress/patterns/landing-hero.php +45 -0
  74. package/examples/wordpress/synced-flow.config.mjs +11 -0
  75. package/examples/wordpress/templates/front-page.html +11 -0
  76. package/examples/wordpress/templates/index.html +27 -0
  77. package/examples/wordpress/theme.json +19 -0
  78. package/layout.css +365 -0
  79. package/package.json +93 -0
  80. package/reset.css +13 -0
  81. package/skills/synced-flow/SKILL.md +151 -0
  82. package/src/config.ts +98 -0
  83. package/src/index.ts +75 -0
  84. package/src/presets.d.mts +21 -0
  85. package/src/presets.mjs +171 -0
  86. package/src/tokens.mjs +138 -0
  87. package/src/utility-tokens.mjs +47 -0
  88. package/styles.css +2313 -0
  89. package/tokens.css +198 -0
  90. package/utilities.css +255 -0
@@ -0,0 +1,26 @@
1
+ # Code Of Conduct
2
+
3
+ Synced Flow aims to be a practical, respectful open-source project.
4
+
5
+ ## Expected Behaviour
6
+
7
+ - Be considerate and constructive.
8
+ - Keep feedback focused on the work.
9
+ - Assume good intent, and ask for clarification when something is unclear.
10
+ - Respect maintainers' time and project scope.
11
+ - Welcome people with different levels of CSS, design-system, WordPress, and
12
+ frontend experience.
13
+
14
+ ## Unacceptable Behaviour
15
+
16
+ - Harassment, threats, or personal attacks.
17
+ - Discriminatory language or behaviour.
18
+ - Repeated off-topic, hostile, or bad-faith comments.
19
+ - Publishing private information without permission.
20
+ - Pressuring maintainers for unpaid commercial support.
21
+
22
+ ## Reporting
23
+
24
+ Report conduct concerns to SyncedCo through [syncedco.com](https://syncedco.com).
25
+ Maintainers may remove comments, close issues, or block contributors when needed
26
+ to keep the project healthy.
@@ -0,0 +1,54 @@
1
+ # Contributing
2
+
3
+ Thanks for considering a contribution to Synced Flow.
4
+
5
+ Synced Flow is an open-source fluid CSS design system maintained by SyncedCo.
6
+ The core project includes the CSS library, CLI, WordPress preset, examples, and
7
+ documentation.
8
+
9
+ ## Local Setup
10
+
11
+ ```bash
12
+ pnpm install
13
+ pnpm test
14
+ ```
15
+
16
+ Useful commands:
17
+
18
+ ```bash
19
+ pnpm build
20
+ pnpm check
21
+ pnpm pack --dry-run
22
+ ```
23
+
24
+ ## Contribution Guidelines
25
+
26
+ - Keep changes focused and easy to review.
27
+ - Prefer modern CSS features already used by the project: cascade layers,
28
+ custom properties, logical properties, `clamp()`, OKLCH colour, and
29
+ container-aware layout.
30
+ - Keep new APIs small and documented.
31
+ - Add or update tests for CLI, package, or generated CSS behaviour.
32
+ - Use complete class names in docs and examples so the scanner can find them.
33
+ - Avoid positioning Synced Flow as a Tailwind copy or one-for-one replacement;
34
+ Tailwind references should only support migration from existing projects.
35
+ - Use British English in documentation.
36
+
37
+ ## Before Opening A Pull Request
38
+
39
+ Run:
40
+
41
+ ```bash
42
+ pnpm check
43
+ pnpm test
44
+ pnpm pack --dry-run
45
+ ```
46
+
47
+ For documentation-only changes, `pnpm check` is usually enough unless package
48
+ metadata or generated files changed.
49
+
50
+ ## Commercial Work
51
+
52
+ Commercial services, premium templates, hosted tools, and paid starter kits are
53
+ optional work around the open-source core. They are not part of this package
54
+ unless explicitly released here.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 SyncedCo Limited
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/README.md ADDED
@@ -0,0 +1,334 @@
1
+ # Synced Flow
2
+
3
+ AI-native fluid CSS design system for brand-consistent websites, agency builds,
4
+ and modern frontend projects.
5
+
6
+ Synced Flow gives developers and AI coding agents a shared styling contract:
7
+ fluid tokens, layout primitives, accessible components, website recipes, and
8
+ source-scanned utility CSS.
9
+
10
+ Use it when you want AI-assisted build speed without breakpoint soup, one-off
11
+ brand drift, or generated class chaos.
12
+
13
+ - fluid by default: Utopia-style type and spacing with modern `clamp()` scales
14
+ - token-led: primitive, semantic, and component tokens using CSS custom
15
+ properties and OKLCH colour
16
+ - agent-readable: `catalog --json`, `suggest`, `recipe`, `pattern`, `lint`,
17
+ `doctor`, and project-local AI guidance
18
+ - agency-ready: presets for WordPress, Next, Astro, Vite, and plain HTML
19
+ - accessible defaults: visible focus states, skip links, reduced-motion
20
+ safeguards, and state styling
21
+ - lean CSS loading: modular layers plus generated utilities scanned from real
22
+ project usage
23
+ - layout primitives: container, section, stack, cluster, grid, sidebar,
24
+ switcher, frame, cover, hero, and flow
25
+ - component primitives: buttons, cards, surfaces, navigation, forms, alerts,
26
+ badges, avatars, charts, and section headers
27
+ - website patterns: logo clouds, feature blocks, stats, testimonials, pricing,
28
+ FAQ, CTA, and footer helpers
29
+ - native component styling: dialog, popover, drawer, tooltip, disclosure, tabs,
30
+ breadcrumbs, pagination, scroll snap, and sticky patterns
31
+ - AI-friendly CLI discovery: `catalog --json`, `suggest`, `lint`, `watch`, and
32
+ `theme init --from` for turning a site brief into reusable theme tokens
33
+ - project-level AI agent setup: `agents install`, `agents status`, and `skill`
34
+ make the packaged Synced Flow skill visible to common coding agents
35
+ - accessibility and base helpers: `sr-only`, `not-sr-only`, skip links, focus
36
+ rings, touch targets, link helpers, and list helpers
37
+ - accessibility state styling for invalid, required, disabled, busy, current,
38
+ expanded, pressed, selected, target, and forced-colors states
39
+ - modular CSS layer exports when a project wants a smaller imported surface
40
+ - modern CSS best practices: cascade layers, custom properties, logical
41
+ properties, `clamp()`, OKLCH colour, container-aware primitives, and
42
+ reduced-motion safeguards
43
+
44
+ ## Links
45
+
46
+ - GitHub: [github.com/SyncedCo/synced-flow](https://github.com/SyncedCo/synced-flow)
47
+ - Website: [syncedco.com](https://syncedco.com)
48
+ - Issues: [github.com/SyncedCo/synced-flow/issues](https://github.com/SyncedCo/synced-flow/issues)
49
+ - Support: [SUPPORT.md](SUPPORT.md)
50
+
51
+ ## Open Source
52
+
53
+ Synced Flow core is released under the [MIT licence](LICENSE). The open-source
54
+ core includes the CSS library, CLI, WordPress preset, modern frontend examples,
55
+ documentation, and recipes.
56
+
57
+ Useful project files:
58
+
59
+ - [Contributing](CONTRIBUTING.md)
60
+ - [Security policy](SECURITY.md)
61
+ - [Code of conduct](CODE_OF_CONDUCT.md)
62
+ - [Support](SUPPORT.md)
63
+ - [Trademark and brand use](TRADEMARKS.md)
64
+
65
+ The MIT licence covers the software. It does not grant rights to use Synced,
66
+ SyncedCo, or Synced Flow branding in a way that implies official endorsement.
67
+
68
+ ## Install
69
+
70
+ ```bash
71
+ pnpm add @syncedco/flow
72
+ pnpm exec synced-flow init --preset next --theme synced --agents
73
+ ```
74
+
75
+ `--agents` adds project-level AI guidance so Cursor, Codex-style agents, Claude,
76
+ Copilot, Windsurf, Gemini, and Aider can discover the Synced Flow skill and
77
+ recommended CLI checks from the consuming project.
78
+
79
+ Until the package is published to a registry, install it from the GitHub repo:
80
+
81
+ ```bash
82
+ pnpm add git+https://github.com/SyncedCo/synced-flow.git
83
+ ```
84
+
85
+ ## Import
86
+
87
+ Most projects should choose one core import strategy.
88
+
89
+ Use the full stylesheet when simplicity matters:
90
+
91
+ ```css
92
+ @import "@syncedco/flow/styles.css";
93
+ @import "@syncedco/flow/defaults.css";
94
+ ```
95
+
96
+ `styles.css` already includes the tokens, reset, base, layout, components, and
97
+ static utilities layers. Do not also import those modular layer files alongside
98
+ `styles.css`.
99
+
100
+ `defaults.css` is optional. It applies common site/UI defaults such as removing raw
101
+ link underlines and list markers. Leave it out for content-heavy pages that
102
+ should keep browser affordances by default.
103
+
104
+ For tighter CSS loading, skip `styles.css` and import only the layers the
105
+ project uses:
106
+
107
+ ```css
108
+ @import "@syncedco/flow/tokens.css";
109
+ @import "@syncedco/flow/reset.css";
110
+ @import "@syncedco/flow/base.css";
111
+ @import "@syncedco/flow/defaults.css";
112
+ @import "@syncedco/flow/layout.css";
113
+ @import "@syncedco/flow/components.css";
114
+ @import "@syncedco/flow/utilities.css";
115
+ ```
116
+
117
+ ## CSS Size And Loading
118
+
119
+ Synced Flow is designed to avoid shipping a large universal utility stylesheet.
120
+ It uses modern CSS techniques and keeps CSS loading compact in three ways:
121
+
122
+ - the CLI scans source files and generates utility CSS only for discovered class
123
+ tokens
124
+ - CSS layers are exported separately, so projects can import only tokens, reset,
125
+ base, defaults, layout, components, or static utilities as needed
126
+ - generated animation keyframes are emitted only when scanned animation classes
127
+ need them
128
+
129
+ The core CSS is built around current browser capabilities rather than legacy
130
+ breakpoint-heavy patterns: fluid `clamp()` scales, CSS custom properties,
131
+ logical sizing and spacing, cascade layers, OKLCH colour tokens,
132
+ container-aware layout primitives, and `prefers-reduced-motion` handling.
133
+
134
+ Current built CSS sizes from `pnpm build` on 2026-05-28:
135
+
136
+ | File | Raw | Gzip | Purpose |
137
+ | --- | ---: | ---: | --- |
138
+ | `styles.css` | 59.1 KB | 10.5 KB | Full core stylesheet for simple setup. |
139
+ | `tokens.css` | 9.5 KB | 2.2 KB | Design tokens only. |
140
+ | `reset.css` | 0.7 KB | 0.4 KB | Reset layer only. |
141
+ | `base.css` | 3.4 KB | 1.2 KB | Base element styles. |
142
+ | `defaults.css` | 0.5 KB | 0.3 KB | Optional site/UI defaults for links, lists, and native controls. |
143
+ | `layout.css` | 7.5 KB | 1.9 KB | Fluid layout, app shell, scroll, sticky, media, and split primitives. |
144
+ | `components.css` | 31.3 KB | 5.0 KB | Button, icon, avatar, chart, card, surface, nav, form, alert, native component, website pattern, accessibility state, and input primitives. |
145
+ | `utilities.css` | 7.5 KB | 1.9 KB | Static `sf-*` content, positioning, motion, and helper utilities. |
146
+
147
+ CSS is not automatically tree-shaken like JavaScript in every environment. The
148
+ Synced Flow approach is explicit and predictable: import the core layers you
149
+ need, then run `synced-flow build` so project utilities are generated from real
150
+ usage.
151
+
152
+ For WordPress themes and plugins, `synced-flow init --preset wordpress` scans
153
+ PHP/template files and writes one enqueue-ready CSS file at
154
+ `assets/css/synced-flow.css`.
155
+
156
+ See [CSS optimisation](docs/css-optimisation.md) for the full measurements,
157
+ developer notes, and marketing-safe claims.
158
+
159
+ ## Base Styling Decisions
160
+
161
+ Synced Flow keeps the browser affordances people rely on:
162
+
163
+ - links stay visibly underlined by default
164
+ - `ul` and `ol` keep their markers by default
165
+ - focus states are visible through `:focus-visible`
166
+ - reduced-motion preferences are respected
167
+
168
+ Use opt-in helpers when UI needs a different treatment: `sf-link-plain` for
169
+ navigation links, `sf-list-reset` for menu lists, `sr-only` for assistive text,
170
+ `sf-skip-link` for skip navigation, and `sf-touch-target` for compact controls.
171
+ For site/UI projects, include `@syncedco/flow/defaults.css` or run
172
+ `synced-flow add defaults` to apply those common UI defaults globally.
173
+
174
+ See [Base styling decisions](docs/base-styling.md).
175
+
176
+ ## Icons
177
+
178
+ Synced Flow supports icons without shipping an icon set. Use `sf-icon` on
179
+ inline SVGs or external libraries such as Lucide, Heroicons, or Bootstrap Icons;
180
+ icons inherit `currentColor` and size from fluid system tokens.
181
+
182
+ ```tsx
183
+ import { Settings } from "lucide-react"
184
+
185
+ <button className="sf-button">
186
+ <Settings className="sf-icon" aria-hidden="true" />
187
+ Settings
188
+ </button>
189
+ ```
190
+
191
+ ## Configure
192
+
193
+ `synced-flow init` creates `synced-flow.config.mjs`, a CSS entry file, a
194
+ generated CSS placeholder, and `flow:build` / `flow:check` / `flow:lint` /
195
+ `flow:watch` package scripts.
196
+
197
+ To add AI agent guidance to an existing project:
198
+
199
+ ```bash
200
+ pnpm exec synced-flow agents install
201
+ pnpm exec synced-flow agents status
202
+ pnpm exec synced-flow skill
203
+ ```
204
+
205
+ Use `--target all` to also add tool-specific project files for Cursor, Claude,
206
+ Copilot, Windsurf, Gemini, and Aider where those tools support project-local
207
+ instructions or skills.
208
+
209
+ Start by shaping the theme: radius style, font family, primary colour, accent
210
+ colour, surface treatment, and density. With AI, ask it to use the Synced Flow
211
+ skill and convert that brief into `synced-flow.config.mjs` theme tokens before
212
+ building pages.
213
+
214
+ You can also create the config by hand:
215
+
216
+ ```js
217
+ import { defineConfig } from '@syncedco/flow/config'
218
+ import { themePresets } from '@syncedco/flow/presets'
219
+
220
+ export default defineConfig({
221
+ scan: ['app', 'components', 'lib'],
222
+ out: 'app/synced-flow.generated.css',
223
+ responsiveVariants: false,
224
+ theme: themePresets.synced,
225
+ safelist: ['hidden', 'flex'],
226
+ })
227
+ ```
228
+
229
+ Import the generated file after the core stylesheet:
230
+
231
+ ```ts
232
+ import '@syncedco/flow/styles.css'
233
+ import './synced-flow.generated.css'
234
+ ```
235
+
236
+ Add package scripts:
237
+
238
+ ```json
239
+ {
240
+ "scripts": {
241
+ "flow:build": "synced-flow build",
242
+ "flow:check": "synced-flow build --check",
243
+ "flow:lint": "synced-flow lint",
244
+ "flow:watch": "synced-flow watch",
245
+ "flow:doctor": "synced-flow doctor"
246
+ }
247
+ }
248
+ ```
249
+
250
+ Run setup checks:
251
+
252
+ ```bash
253
+ pnpm flow:doctor
254
+ ```
255
+
256
+ Discover the supported starter surface:
257
+
258
+ ```bash
259
+ pnpm exec synced-flow tokens
260
+ pnpm exec synced-flow tokens --json
261
+ pnpm exec synced-flow catalog --json
262
+ pnpm exec synced-flow suggest "full page scroll portfolio"
263
+ pnpm exec synced-flow recipe portfolio-scroll --markup
264
+ pnpm exec synced-flow recipe portfolio-scroll --framework next --markup
265
+ pnpm exec synced-flow theme init --from brief.md
266
+ pnpm exec synced-flow theme init --from brief.md --preset-base neutral-saas
267
+ ```
268
+
269
+ ## Use
270
+
271
+ ```html
272
+ <section class="sf-section">
273
+ <div class="sf-container sf-stack" style="--sf-stack-space: var(--sf-space-l)">
274
+ <span class="sf-badge">Fluid by default</span>
275
+ <h1 class="sf-text-display">A styling system that adapts without layout breakpoints.</h1>
276
+ <p class="sf-text-lead sf-prose">Use shared tokens and layout primitives before project-specific styling.</p>
277
+ <a class="sf-button" href="/contact">Start a project</a>
278
+ </div>
279
+ </section>
280
+ ```
281
+
282
+ The CLI also accepts flags for projects that do not want a config file:
283
+
284
+ ```bash
285
+ synced-flow build --scan app --scan components --out app/synced-flow.generated.css
286
+ ```
287
+
288
+ Use `--include-core` only when you want the generated CSS file to contain the
289
+ reset, base, layout, and component layers instead of importing
290
+ `@syncedco/flow/styles.css` separately.
291
+
292
+ For WordPress themes or plugins, use the WordPress preset. It scans PHP and
293
+ template files and writes one CSS file that can be enqueued directly:
294
+
295
+ ```bash
296
+ pnpm exec synced-flow init --preset wordpress
297
+ pnpm flow:build
298
+ ```
299
+
300
+ New projects should keep `responsiveVariants` off. Turn it on only when migrating
301
+ an existing codebase that still contains compatibility classes such as `sm:` or
302
+ `lg:`.
303
+
304
+ ## Docs
305
+
306
+ - [Why Synced Flow?](docs/why-synced-flow.md)
307
+ - [Quick start](docs/quick-start.md)
308
+ - [Build a site walkthrough](docs/build-a-site-walkthrough.md)
309
+ - [AI usage guide](docs/ai-usage.md)
310
+ - [Base styling decisions](docs/base-styling.md)
311
+ - [Accessibility CSS](docs/accessibility-css.md)
312
+ - [System primitives](docs/system-primitives.md)
313
+ - [CSS API contract](docs/api-contract.md)
314
+ - [Native components](docs/native-components.md)
315
+ - [Website patterns](docs/website-patterns.md)
316
+ - [CLI reference](docs/cli-reference.md)
317
+ - [Config reference](docs/config-reference.md)
318
+ - [CSS optimisation](docs/css-optimisation.md)
319
+ - [Presets](docs/presets.md)
320
+ - [Recipes](docs/recipes.md)
321
+ - [Release readiness](docs/release-readiness.md)
322
+ - [WordPress](docs/wordpress.md)
323
+ - [Synced Flow skill](skills/synced-flow/SKILL.md)
324
+ - [Tokens guide](docs/tokens.md)
325
+ - [Tailwind comparison](docs/tailwind-comparison.md)
326
+ - [Migration from Tailwind](docs/migration-from-tailwind.md)
327
+
328
+ ## Scripts
329
+
330
+ ```bash
331
+ pnpm build
332
+ pnpm check
333
+ pnpm type-check
334
+ ```
package/SECURITY.md ADDED
@@ -0,0 +1,30 @@
1
+ # Security Policy
2
+
3
+ ## Supported Versions
4
+
5
+ Synced Flow is currently pre-1.0. Security fixes target the latest published
6
+ version and the current `main` branch.
7
+
8
+ ## Reporting A Vulnerability
9
+
10
+ Please do not open a public GitHub issue for suspected vulnerabilities.
11
+
12
+ Report security concerns to SyncedCo through [syncedco.com](https://syncedco.com)
13
+ and include:
14
+
15
+ - affected package version or commit
16
+ - affected command, file, or integration
17
+ - reproduction steps
18
+ - expected and actual impact
19
+ - any relevant logs or generated CSS output
20
+
21
+ We will review the report, confirm whether the issue is valid, and coordinate a
22
+ fix before public disclosure where appropriate.
23
+
24
+ ## Scope
25
+
26
+ Security reports may include issues in the CLI, generated CSS output, package
27
+ distribution, examples, or WordPress integration guidance.
28
+
29
+ General support questions, styling issues, and feature requests should use
30
+ [GitHub issues](https://github.com/SyncedCo/synced-flow/issues).
package/SUPPORT.md ADDED
@@ -0,0 +1,32 @@
1
+ # Support
2
+
3
+ Synced Flow is maintained by SyncedCo.
4
+
5
+ - Website: [syncedco.com](https://syncedco.com)
6
+ - GitHub: [github.com/SyncedCo/synced-flow](https://github.com/SyncedCo/synced-flow)
7
+ - Issues: [github.com/SyncedCo/synced-flow/issues](https://github.com/SyncedCo/synced-flow/issues)
8
+ - Security: [SECURITY.md](SECURITY.md)
9
+ - Contributing: [CONTRIBUTING.md](CONTRIBUTING.md)
10
+
11
+ ## Community Support
12
+
13
+ Use GitHub issues for reproducible bugs, documentation problems, CLI issues,
14
+ and focused feature requests for the open-source core.
15
+
16
+ Before opening an issue, please include:
17
+
18
+ - the package version
19
+ - the framework or environment
20
+ - the relevant `synced-flow.config.mjs`
21
+ - the command that failed
22
+ - the expected and actual behaviour
23
+
24
+ ## Commercial And Team Support
25
+
26
+ For paid implementation, design-system audits, WordPress/theme integration,
27
+ training, workshops, or team support, contact SyncedCo through
28
+ [syncedco.com](https://syncedco.com).
29
+
30
+ Commercial services are optional support around the open-source core. Premium
31
+ templates, hosted tools, and paid starter kits are not included in this package
32
+ unless explicitly released separately.
package/TRADEMARKS.md ADDED
@@ -0,0 +1,14 @@
1
+ # Trademark And Brand Use
2
+
3
+ The MIT licence covers the Synced Flow software. It does not grant trademark,
4
+ brand, logo, or endorsement rights.
5
+
6
+ Names such as Synced, SyncedCo, and Synced Flow may be used to truthfully refer
7
+ to this project, compatibility, forks, or integrations.
8
+
9
+ Do not use Synced, SyncedCo, or Synced Flow names, logos, or branding in a way
10
+ that suggests official sponsorship, endorsement, partnership, or ownership
11
+ unless SyncedCo has given written permission.
12
+
13
+ Forks and derived projects should use a distinct name if they are distributed as
14
+ their own product.
package/base.css ADDED
@@ -0,0 +1,100 @@
1
+ /* Generated by @syncedco/flow. Edit src/tokens.mjs or scripts/build-css.mjs, then run pnpm build. */
2
+ @layer reset, tokens, base, app, layout, components, utilities;
3
+ @layer base {
4
+ html {
5
+ background: var(--sf-colour-background);
6
+ color: var(--sf-colour-foreground);
7
+ scroll-behavior: smooth;
8
+ }
9
+
10
+ body {
11
+ background: var(--sf-colour-background);
12
+ color: var(--sf-colour-foreground);
13
+ font-family: var(--sf-font-sans);
14
+ font-size: var(--sf-type-body);
15
+ line-height: var(--sf-line-height-body);
16
+ -webkit-font-smoothing: antialiased;
17
+ text-rendering: optimizeLegibility;
18
+ }
19
+
20
+ :where(h1, h2, h3, h4, h5, h6) {
21
+ color: inherit;
22
+ font-family: var(--sf-font-display);
23
+ font-weight: 700;
24
+ line-height: var(--sf-line-height-tight);
25
+ text-wrap: balance;
26
+ }
27
+
28
+ :where(h1) { font-size: var(--sf-type-h1); }
29
+ :where(h2) { font-size: var(--sf-type-h2); }
30
+ :where(h3) { font-size: var(--sf-type-h3); }
31
+ :where(h4) { font-size: var(--sf-type-h4); }
32
+ :where(h5) { font-size: var(--sf-type-h5); }
33
+ :where(h6) { font-size: var(--sf-type-h6); }
34
+ :where(p, li, dd, figcaption) { text-wrap: pretty; }
35
+ :where(a) {
36
+ color: var(--sf-colour-link);
37
+ text-decoration-color: color-mix(in oklch, currentColor 55%, transparent);
38
+ text-decoration-skip-ink: auto;
39
+ text-decoration-thickness: .08em;
40
+ text-underline-offset: .18em;
41
+ }
42
+ :where(a:hover) { color: var(--sf-colour-link-hover); }
43
+ :where(strong, b) { font-weight: 800; }
44
+ :where(small) { font-size: var(--sf-step--1); }
45
+ :where(code, kbd, samp, pre) { font-family: var(--sf-font-mono); }
46
+ :where(:not(pre) > code, kbd) {
47
+ background: var(--sf-colour-surface-alt);
48
+ border: 1px solid var(--sf-colour-border);
49
+ border-radius: var(--sf-radius-sm);
50
+ font-size: .9em;
51
+ padding: .1em .35em;
52
+ }
53
+ :where(pre) {
54
+ background: var(--sf-colour-surface-inset);
55
+ border: 1px solid var(--sf-colour-border);
56
+ border-radius: var(--sf-radius-panel);
57
+ overflow-x: auto;
58
+ padding: var(--sf-space-s);
59
+ }
60
+ :where(hr) {
61
+ border: 0;
62
+ border-block-start: 1px solid var(--sf-colour-border);
63
+ margin-block: var(--sf-space-l);
64
+ }
65
+ :where(blockquote) {
66
+ border-inline-start: 0.25rem solid var(--sf-colour-primary);
67
+ color: var(--sf-colour-muted);
68
+ padding-inline-start: var(--sf-space-s);
69
+ }
70
+ :where(label) { cursor: pointer; }
71
+ :where(input, textarea, select) { color: inherit; }
72
+ :where(textarea) { resize: vertical; }
73
+ :where(button:not(:disabled), [role="button"]:not(:disabled), a[href]) { cursor: pointer; }
74
+ :where(button:disabled, input:disabled, textarea:disabled, select:disabled, [aria-disabled="true"]) { cursor: not-allowed; }
75
+ :where(:focus-visible) { outline: 0.125rem solid var(--sf-colour-ring); outline-offset: .2rem; }
76
+ :where(:target) { scroll-margin-block: var(--sf-space-l); }
77
+ ::selection { background: color-mix(in oklch, var(--sf-colour-primary) 28%, transparent); }
78
+
79
+ @media (prefers-reduced-motion: reduce) {
80
+ html { scroll-behavior: auto; }
81
+ *, *::before, *::after {
82
+ animation-duration: 0.01ms !important;
83
+ animation-iteration-count: 1 !important;
84
+ scroll-behavior: auto !important;
85
+ transition-duration: 0.01ms !important;
86
+ }
87
+ }
88
+
89
+ @media (forced-colors: active) {
90
+ :where(:focus-visible) {
91
+ outline: 2px solid Highlight;
92
+ outline-offset: .2rem;
93
+ }
94
+
95
+ ::selection {
96
+ background: Highlight;
97
+ color: HighlightText;
98
+ }
99
+ }
100
+ }