Site AI / Agent Discovery (1.4.0):/.well-known/ai.json entry pointer; site llms.txt = package generator base + site overlay (no second skill inventory); public velin-agent.json projects full registry skill set; AI / Agent Resources docs EN/DE under Docs → AI & Intelligence
CLI scan — link integrity (Detect only):links/local-href-target and links/local-fragment-target for local HTML paths (incl. directory index.html / index.htm) and #fragment ids against the scan root; no Live-HTTP; no automatic path or id rewrites
CLI scan — structured finding diagnostics: additive diagnostic on link integrity and selected a11y rules; optional candidates and related hints; review-only — candidates are not auto-fixes (exact ≠ Apply)
CLI scan — safe fix dry-run:--fix-dry-run and JSON autoFix.plans / autoFix.rejected describe each planned SAFE change without writing files
CLI Discoverability & Scan SARIF (1.4.0): Docgen REGISTERED_COMMANDS includes blocks (aligned with router/manifest). velinstyle scan --sarif / --format sarif emits SARIF 2.1.0 from the same findings as --json (fixable, SAFE eligibility, diagnostic, Detect-only for links/*). Experience human scan shows Apply column (SAFE / review / detect) without dumping JSON. Help lists --quiet and Scan SAFE wording. Site CLI EN/DE + AI Resources / Help updated; branding footer gates unchanged.
CLI scan --help (1.4.0 freeze):velinstyle scan --help / -h (also with --json / --sarif / --format) prints Experience human help and does not scan .; machine flags do not force JSON/SARIF for the help path
Homepage search index (1.4.0 quality): Package search index emits real .md paths for generated docs (no invented .html). sync:dist rebuilds docs/search-index.json then refreshes dist/search-index.json via sync-home-search so homepage search stays site-resolvable and includes crawled guides (e.g. AI Resources)
Docs themeToggle null (1.4.0 quality): Legacy inline #themeToggle handlers (spaced const themeToggle = …) threw addEventListener on null after header moved to <velin-theme-toggle>; sync-sidebar strip now matches whitespace and removes the dead script
Component counts clarity: llms lists 43 canonical WC + 3 helpers + loader aliases; Atelier hero/demo stats aligned to 43 Web Components (was stale 38)
Component minimal examples: curated velin-persist / velin-scrollspy from human docs (43/46); helpers flip/haptic/reveal remain MISSING without inventing APIs
Site documentation & frontpage (1.4.0): Homepage EN/DE surfaces AI Resources, scan diagnostics / SAFE boundaries, 58 skills and 36 attributes; release-1-4-0 overview aligned to Phase 5/6 freeze (not Phase 6.1); Help Center pinned to 1.4.0; CLI docs document Experience footer / --quiet and SAFE-only scan.fix; site llms.txt overlay refreshed via patch:seo
CLI scan: Auto-fix re-validates file content at apply time (fail-closed). Link-integrity rules (links/*) are never applied. SAFE Apply limited to html-lang, skip-link (only with id="main"), safe-external-link, z-index-token, and hardcoded-email
Agent metadata:velin-agent.json / llms.txt from meta:build project skills deterministically from the skills registry (SoT), including registry version metadata in the agent bundle and an derived skills inventory section in llms.txt
Agent discovery pointers & scan policy:meta:build publishes docs/generated/rules/scan-policy.json from existing scanner rule meta + SAFE Apply gates; agent manifest / .well-known/ai.json point at skills, docs, components, Atelier, CLI, and scan policy without duplicating inventories
Public skill semantics:velin-agent.jsonskills.items project registry name and description (SoT packages/velinstyle-skills/registry.json) so agents can read skill meaning without a second skill list or invented per-skill URLs
Agent minimal WC examples:docs generate publishes Minimal working examples for Web Components when curated or knowledge-SoT HTML exists; related-resource pointers only for existing human docs / CLI / Atelier library (no Skill↔Component graph)
Agent WC human-doc extract & doc aliases: fail-closed Minimal examples may be derived from existing human component docs (exampleSource: human-doc) after curated/knowledge; explicit EN doc aliases (toast→toasts, tooltip→tooltips, tabs→navs-tabs) plus DE twins via doc-lang-map.js only; structural component-doc contract check (facts only — no a11y/runtime claims, no Skill/Atelier heuristics)
Agent discovery contract & curated WC starters: public Atelier catalog mirror at docs/generated/atelier/catalog.json (SoT remains cli/atelier-catalog.json); curated minimal examples for velin-live-dot and velin-progress-ring; discovery/atelier inventory contract checks (pointer reachability, counts, no package-internal public paths)
CLI branding footer & skill clarity: human Experience terminal output appends a short branding footer (Built with VelinStyle · Powered by SKYLITE.DESIGN); suppressed for --quiet, --json, SARIF, and compact modes. Selected skill registry descriptions clarified for agents (Detect/Review/Apply boundaries; Candidates ≠ Apply) — 58 skill IDs unchanged
CLI scan:a11y/skip-link marked fixable only when id="main" already exists (Detect aligned with Apply gate)
CLI scan:a11y/interactive-aria-hidden flags only the interactive host with aria-hidden="true" (decorative children no longer false positives)
CLI scan:a11y/aria-controls-target / IDREF helpers skip VelinStyle WC runtime ids (velin-*-N) in addition to templates
CLI scan:a11y/nested-interactive also flags interactive children inside <summary> (Detect only)
Tokens / dark media:prefers-color-scheme: dark no longer overrides when data-velin-theme="light" or data-velin-color-scheme="light" is set
velin-theme-toggle: Light mode sets data-velin-theme="light" (no longer clears the attribute)
Tokens: light --velin-color-info darkened so --velin-color-on-info meets WCAG AA; contrast check covers on-info / info
A11y skills (velin-a11y-page-checklist, velin-a11y-scan-fix): diagnostics workflow, Candidate ≠ Apply, Dry-Run before --fix; still review-only
Public docs aligned for Core Features / Agent Workflows / Migration Intelligence / CLI Scan (diagnostics, link integrity, SAFE limits)
Review CLI help lists ecommerce profile; detectProfile also considers HTML ids/body hints
PixVerse setup copy wording
🐛
Fixed
Homepage footer & README (1.4.0): Footer Version/Release pins 1.4.0 on EN/DE home; DE install CTAs and quick-install lede aligned; README EN/DE expanded for 1.4.0 (migrate, scan, 58 skills, ecosystem, build scripts); encoding artifacts cleaned
Docs search result cards: Dropdown shows title + contextual excerpt (snippetAround + highlightHtml) + section path; search index extracts real prose from page/section HTML instead of repeating the generic meta description
Homepage ecosystem nav: Ecosystem menu adds VelinShield, Website-Check, and VelinLabor (mobile drawer too); AI Runtime Quick start fixes invalid workflow run to velinstyle skills list --capability review && velinstyle workflow release-gate --json (EN/DE)
Docs download pages (1.4.0):getting-started/herunterladen.html and EN twin download.html — badge, release button, npm pin, maturity alert, and optional Compat/Motion packages aligned to 1.4.0; DE breadcrumb/prev-next labels fixed
Docs chrome layout (header actions / section speak): After larger VelinStyle touch targets / theme-toggle sizing, docs header actions stay on one compact row (nowrap + horizontal scroll on narrow viewports, compact reader/speak/lang/home, scaled theme toggle with theme picker). Section speak (outside <summary>) realigns to the section head via contained head margins + CSS anchor centering (calc fallback), right of the chevron without overlapping the divider or title; stacked mobile --doc-header-h matches measured header height for sidebar offset
PixVerse 1.4.0 gap closure: AI discovery points at PixVerse / Motion Clips guides (velin-agent.jsondocumentation.guides, site llms.txt overlay, .well-known/ai.json resources); EN/DE partner guides aligned (account copy, English CLI meaning + German live-CLI note, chip/demo signup purpose, table header); affiliate rel="noopener sponsored" documented as SAFE-compatible (noopener required; noreferrer not forced); AI Resources EN/DE list partner guides; DE home ticker labels localized
Docs Related enhancer:doc-examples.js preserves target / rel / aria-label when turning Related paragraphs into .velin-doc-related lists (fixes stripped affiliate noopener sponsored on PixVerse guides)
PixVerse 1.4.0 opportunity closure: CLI #motion Guides link partner setup (EN/DE); PixVerse guides drop duplicate end partner banner (keep top banner + end CTA); sitemap includes AI Resources EN/DE via generate:sitemaps; home melt minis use existing lores assets; PixVerse Related links AI Resources
PixVerse real API integration: connection check uses GET /account/balance (ErrCode-aware); generate/upload/poll honor HTTP-200 + ErrCode; motion usage / setup show live monthly+package credits; AI create shows connection/credits before confirm and aborts on zero balance; poll maps status 5/7/8; Guides EN/DE credits section updated
Public changelog HTML: guide links resolve to local .html when published, otherwise GitHub (no public 404)
Public docs sidebar: Atelier / Library links use site-root paths (/atelier/…)
Public site theme init: Light sets data-velin-theme="light" so OS dark preference cannot leave dark tokens on light chrome
Public docs Light theme: brand/link/code and sidebar accents meet AA on tinted chrome
Public site changelog generator: version label in <summary> is non-interactive (nested-interactive)
Public site home release tabs: aria-controls points at #expo-release-panels tabpanel (EN/DE)
Public docs header: tools/search sizing no longer uses 100vw (reduces overflow under high zoom)
Public Atelier hub hero: tighter orb sizing + paint containment under zoom
Public home: velin-dialog#expoDialog naming via dialog API title (no redundant host aria-label)
Public docs: search input / result items expose :focus-visible rings; overflowed code <pre> keyboard-reachable only when it scrolls
Public site: Atelier Library route restored; sitemap regenerated; AI Skills version badges aligned to 1.4.0
Accessibility
a11y/duplicate-id — occurrences and similar-id candidates
Site home (velinstyle-site):verify:home again green — core-count ignores optional velin-signature; lang-switch matches multi-class expo-lang; What’s New title/CTA pinned to 1.2.9 (EN/DE); site package.json version aligned
Known limits (RC)
No live npm outdated network rule
Production report images still “coming soon”
Motion V2 triggers / Physics / Studio UI not first-class
Strategy/ADR deep-dives remain maintainer-local (monorepo interne_docs/strategy/; not published)
UPGRADING.md draft for 1.1.0 → 1.2.0 (publish when cutting the minor)
RELEASE_NOTES_1.2.0.md companion overview
Changed
Production dependency isomorphic-dompurify3.13 → 3.21.0 (DOMPurify 3.4.x) so npm audit --omit=dev reports 0 vulnerabilities before the 1.2.0 upload
velinstyle scan and velinstyle perf accept a single HTML/CSS/JS file or a directory (no more ENOTDIR on file paths)
velinstyle init copies vendor assets when framework dist/ is available and scaffolds starter HTML with data-velin-reveal-auto + icon sprite meta
velinstyle create emits zero-warning HTML (no inline styles, label for/id), copies vendor into the target dir, boots via bootFromDOM when the package resolves (vendor full-bundle fallback)
Create vendor copy includes mini WC docs under vendor/velinstyle/docs/
velinstyle build invokes local lightningcss from the package node_modules; --preset lite prints size vs dist/velinstyle.min.css
Unknown CLI commands exit 1 with "Did you mean ...?" instead of dumping help with a success-looking exit
Top-level --help / README CLI tables list all create kinds and wc api / skills doctor
velinstyle meta page --write merges curated goals/intent and warns when dropping non-allowlisted keys
Hero CTA heuristic strips scripts/styles/code-blocks and counts only real <a>/<button> CTAs in hero scope
velin-icon default sprite is relative/configurable (sprite attr → meta/data-velin-icon-sprite → VelinIcon.defaultSprite → velin-icons.svg) instead of hardcoded /dist/velin-icons.svg
Skills templates/demos remap to existing files (samples/ecommerce.html, samples/landing.html, ...)
velin-agent.json and llms.txt include AI skills catalog and workflow discovery hints
Publish inputs include skills packages and schemas; prepublish runs skills:generate, skills:validate, skills:doctor, and check:blueprints
Docs clarify <velin-copy> (value/text + Shadow button), tooltip content, lightbox, icon sprite, attribute vs WC vs bootFromDOM, flex -- naming, breadcrumb __item/__link, Windows/vendor install, and review CTA semantics
README fit statement: landing/docs/simple admin yes; multipage shop + enterprise admin primary not yet; npm circulation note until 1.2.0 cut
🐛
Fixed
velinstyle build: config import uses pathToFileURL (no ERR_UNSUPPORTED_ESM_URL_SCHEME on drive-letter paths)
Duplicate IDs, unknown velin-* classes, invalid WC attributes, and inline document.write in HTML are detected
Official @velinstyle/react coverage for all canonical tags
Release sync guard (release:check / release:sync)
Docs/version/count drift fixes across framework and site
Highlight lexers: Python, YAML, Go, Rust
🚀
Added
<velin-data-table>: progressive enhancement for a light-DOM <table> -- sortable columns via real <button> headers with aria-sort, text/number/date sort types (data-sort, data-sort-value), substring filtering bound to any input (filter-input), optional pagination (page-size), and an empty state (empty-text). Sort, filter and page changes are announced; filtered and off-page rows use hidden so they leave the accessibility tree. Requires a <caption>, aria-label, or label attribute.
<velin-form-summary>: accessible error summary for any <form>. Replaces the transient native validation bubble with a focusable role="alert" panel listing every invalid field, wires aria-invalid and aria-describedby to per-field messages, moves focus to the offending field from summary links, and clears each error as soon as the field becomes valid. Supports data-error-message, data-error-label, data-error-ignore and author-supplied [data-velin-error-for] containers.
Highlight languages: Python, YAML, Go and Rust lexers, lazy-loaded like the existing ones. Aliases py, python3, yml, golang, rs resolve to them; yaml previously fell back to plain text.
Release sync guard:npm run release:check compares every machine-readable version surface (CLI manifest, a11y contracts, velin-agent.json, doc header badges, landing-page version badges, velin-meta blocks, JSON-LD softwareVersion, npm/CDN install pins, generated docs, changelog copies) against package.json. It also checks the component counts quoted in prose across both repos -- English and German -- against components.count / components.loaderCount in velin-agent.json, so adding a component cannot leave the docs claiming the old number. npm run release:sync rewrites the mechanical ones. Wired into ci:checks and the site build; site checks are skipped when the sibling repo is absent.
WCAG matrix: 3.3.1 Error Identification and 3.3.3 Error Suggestion are now tracked and owned by velin-form-summary.
Changed
@velinstyle/react is official (1.1.0): wrappers now cover all 38 canonicalvelin-* elements instead of 12, generated from the component registry so CI fails when they drift. Props map correctly for custom elements -- booleans become presence attributes, objects and arrays are assigned as element properties instead of being stringified, and onVelin* handlers bind the matching custom event (onVelinSearchSelect → velin-search-select). Ships TypeScript definitions and createVelinComponent for your own tags. Deprecated *-wc aliases are intentionally excluded.
CLI version:velinstyle --help reads the version from package.json instead of a hardcoded string that had drifted to 0.9.0.
Demo sync:tools/sync-demos-to-repo.mjs derives its unpkg pin from package.json rather than a hardcoded 0.9.0.
🐛
Fixed
Docs drift: stale @birdapi/velinstyle@0.9.0 install snippets and velin-meta version blocks across the site, plus a @0.4.0 CDN example in the framework docs landing page. The site guide generators now read the framework version instead of embedding it.
Component counts: the docs claimed 36 canonical components and 38 loader entries in 20+ places; both repos now report 38 and 40, and the guard keeps them honest.
Duplicate heading: the site accessibility page shipped the "Component contracts" section twice with the same id="contracts", because a one-shot patch script had been applied twice.
Site changelog copy: the a11y bulk-patch script rewrote a link inside the copied CHANGELOG.md, which made the copy permanently differ from the framework original. Verbatim copies (CHANGELOG.md, docs/generated/) are now excluded from that script.
Docs coverage audit:audit-docs-coverage.py crashed on Windows consoles because its report contains →; it now forces UTF-8 output, and recognises the two new component pages.
Release guard robustness: the repo walk crashed with ENOENT when a file disappeared mid-scan, which made the check fail intermittently alongside tests that use temporary directories. Dot-directories are now skipped and vanished files are ignored.
Build
npm run build regenerates the React wrapper sources; npm run build:react also bundles the package.
New CI gates: React wrapper drift and release sync.
The loader-count gate now derives its minimum from component-contracts.json instead of a hardcoded 36.
Full-bundle JS budget raised from 200 KB to 215 KB (209.4 KB actual, 46.9 KB brotli) to cover the two new components. Applications using register() / bootFromDOM() pay only for what they load.
Component names: canonical tags are <velin-tooltip> and <velin-stepper>; source files components/velin-tooltip.js and components/velin-stepper.js. <velin-tooltip-wc> and <velin-stepper-wc> remain as deprecated aliases (console warning once).
Spacing:.velin-mb-* is margin-bottom only; use .velin-my-* for block-axis spacing.
Visual: default text/primary tokens are darker for AAA — use data-velin-contrast="aa" on <html> if you need the previous lighter palette without retuning tokens.
Migration
Replace <velin-tooltip-wc> → <velin-tooltip> and <velin-stepper-wc> → <velin-stepper> in HTML; legacy tags still work in 0.9.0.
Imports: VelinTooltip / VelinStepper from @birdapi/velinstyle (or component paths); VelinTooltipWC / VelinStepperWC re-exported as deprecated.
🐛
Fixed
Security:velin-secure-field no longer emits plaintext or AES keys; hardened sanitizeURL / sanitizeSearchUrl; DOMPurify SVG sanitization in velin-icon; search result URLs validated.
Audit follow-up:velin-scroll-top declarative attribute; src/base/wc-placeholder.css CLS guards for all loader tags; velin-persist in component-contracts.json; Playwright cross-browser smoke (npm run test:e2e); shared docs theme picker assets (docs/assets/theme-picker.*).
Velin-Meta:velinstyle meta builds dist/velin-agent.json and dist/llms.txt for AI assistants; MIME application/vnd.velinstyle.meta+json; page-level <script id="velin-meta">; velinstyle meta page <file> --write; docs generate --scope meta; export @birdapi/velinstyle/meta.
WCAG 2.2 AAA defaults: OKLCH color tokens (:root, dark, 13 themes) validated at 7:1 via npm run test:contrast; data-velin-contrast="aa" opt-down to AA palette.
A11y runtime:@birdapi/velinstyle/a11y with initA11y() (live announcer, scroll padding); core/a11y/component-contracts.json; docs/generated/a11y/wcag22-aaa-matrix.md; npm run test:a11y:coverage.
Component a11y:a11y-utils.js, fixes for velin-icon, velin-search, velin-theme-toggle, velin-popover (aria-labelledby), dialogs, toasts, and more; scanner rules velin-icon-label, sparkline-label, skeleton-text.
VelinHighlight:core/highlight/ (velinSyntax, highlightElement, highlightAll, initHighlight, registerLanguage, lazyLoadLanguage); lexers for JS/TS, HTML, CSS, JSON, Markdown, Shell, SQL, PHP, Blade; highlight.css with OKLCH/P3 token colors and reduced-motion fade.
<velin-code-block> Web Component (copy, line numbers, line highlight, collapsible); velin-code attribute bridge with lazy in-view highlighting.
VelinSearch:core/search/ API (velinSearch, createSearch, registerSearchProvider), fuzzy offline search, highlight, category filters; optional Web Worker (core/search/worker.js).
<velin-search> Web Component with autocomplete, keyboard navigation, grouped results.
Search benchmark:tests/search-benchmark.test.js — fuzzy query over 10k entries (main thread under 400ms, worker under 500ms in CI); npm run test:search:bench.
Auto-generated reference:velinstyle docs generate / npm run docs:generate writes Markdown to docs/generated/ (components, tokens, utilities, CLI, scanner rules, a11y modules). CI verifies committed snapshots.
Tokens JSON:zIndex block in schema/build/validate; deterministic key order in tokens build; examples/tokens.full.json.
Changed
Documentation and samples: landmark structure (<header role="banner">), AAA migration section, updated docs/getting-started/accessibility.html (formerly docs/a11y.html) and token pages.
test:a11y enables color-contrast-enhanced; JSDOM canvas stub for axe in CI.
Package and CLI version 0.9.0; CI runs tokens:validate, test:security, test:perf, ci:checks (bundle budget, search-index drift, loader drift).
Package:. export → runtime-entry.js; full bundle at @birdapi/velinstyle/bundle; TypeScript dist/velinstyle.d.ts. Subpaths: /search, /motion, /attributes, /highlight, /sanitize. Distribution via velinstyle.info.
velin-reveal.js delegates to core/motion; attribute bridge uses <velin-tooltip> / lazy loaders from renamed component files.
Motion tokens: five new easings (spring, elastic, expo-out, back-out, snappy) and two new durations (slowest 800ms, cinematic 1200ms) in tokens/motion.css.
Filter-effect utilities: new utilities/filter-effects.css with velin-saturate-*, velin-hue-rotate-*, velin-contrast-*, velin-invert, velin-sepia, velin-drop-shadow-*, extended velin-backdrop-*, and velin-glass / velin-glass-strong composites.
Chart-animation utilities: new utilities/chart-animation.css with velin-stroke-draw, velin-sparkline-glow, velin-value-bump, velin-live-pulse, velin-count-fade keyframes and matching velin-chart-line / velin-chart-area / velin-chart-glow / velin-spark-tick / velin-live-pulse classes — all reduced-motion safe.
Three new Web Components:<velin-sparkline> (animated draw-in + live update() API), <velin-counter> (rAF + Intl.NumberFormat count-up with currency/percent/locale), <velin-live-dot> (slotted realtime indicator).
Two motion helpers:velin-reveal.js (initReveal() plus [data-velin-reveal-auto] auto-init) and velin-flip.js (flipReorder(), filterList() plus [data-velin-flip] + [data-velin-filter-value] / [data-velin-filter-input] auto-wiring).
Demo upgrades: crypto dashboard uses sparkline tick + counters + live-dot; forum and shop chips/searches drive real FLIP-animated list filtering; grid/list view toggle on the shop animates layout changes via FLIP.
CLI velinstyle scaffold: prompt-based HTML from blueprint composition (cli/scaffold.js, scaffold-recipes.json); list-intents, -o, --json.
CLI velinstyle layout:audit, suggest, and fix for flex/grid/responsive issues (cli/layout-audit.js).
Docs: new pages docs/utilities/motion.html, docs/utilities/filter-effects.html, docs/utilities/chart-animation.html, docs/components/sparkline.html, docs/components/counter.html, docs/components/live-dot.html; docs/guides/prompt-scaffolding.html, docs/guides/responsive-layout.html; layout and getting-started sections for 0.8.0 CLI.
Changed
src/velinstyle.css imports the new filter-effects + chart-animation utilities.
components/index.js exports the three new WCs and two helpers.
index.html drops the inline scroll-reveal IIFE in favour of the shared velin-reveal helper via data-velin-reveal-auto.
CLI help version 0.8.0; package version 0.8.0.
🚀
Added
velinstyle prefix JSON maps: optional velinstyle-prefix-map.json next to the migrated tree (or --map <file>) supplies explicit token → velin-class replacements; merged after auto map, overrides catalog and --bootstrap-display. Keys _* / $* ignored. Sample: examples/velinstyle-prefix-map.sample.json. Documented in README, README.de, docs/migration.html, docs/guides/existing-project.html.
Vitest / jsdom: tests/setup.js mocks window.matchMedia for velin-theme-toggle tests; velin-popover test now sets trigger="hover" so role="tooltip" is asserted correctly.
Drawer CSS: Fixed side="end" drawer showing content and not closing due to inset-inline-start: 0 leaking to all sides. Each side now explicitly resets opposing inset values.
FOUC Protection: Added :not(:defined) rule in reset.css hiding VelinStyle custom elements until they are registered, preventing flash of unstyled content.
CLI require() bug: Replaced CJS require('fs').unlinkSync with ESM unlinkSync import in cli/index.js.
CLI version: Updated help text to v0.6.1.
CLI a11y layer: security.css now included in the a11y layer file list.
Multi-Provider Icon System: <velin-icon> now supports a provider attribute for CDN-based icons from Lucide, Heroicons, Bootstrap Icons, Material Symbols, Font Awesome, and Tabler Icons.
VelinIcon.registerProvider(): Static method to register custom icon providers at runtime.
cli/icon-providers.js: Provider registry with CDN URL mappings, variant support, license info, and homepage links for 6 providers.
Design Tokens: OKLCH color palette, spacing scale (4px base), typography scale (1.25x Major Third), border-radius, shadows, motion, z-index, and aspect-ratio tokens
Dark Mode: Automatic via prefers-color-scheme and explicit via data-velin-theme="dark" attribute
Modern CSS Reset: box-sizing: border-box, scroll behavior, motion reduction, min font-size for mobile inputs
Accessibility Layer: .velin-sr-only, .velin-skip-link, :focus-visible outlines, prefers-reduced-motion support, forced-colors (Windows High Contrast) support, skeleton loading with CLS protection
Layout System: Responsive container with Container Queries, CSS Grid with auto-fit/auto-fill, Flexbox utilities, stack and cluster patterns
BEM Components: Button (6 variants + 4 sizes), Card, Form inputs, Navigation, Alert, Badge, Table, Tooltip, Modal (CSS)
Utility Classes: Flex, spacing, text alignment, display, visibility, color utilities
Web Components: <velin-modal>, <velin-tabs>, <velin-accordion>, <velin-dropdown>, <velin-toast>, <velin-icon> with full keyboard and screen reader support
Focus Manager: Shared module with trapFocus(), rovingTabindex(), saveFocus(), restoreFocus()
Icon System: 51 essential SVG icons with sprite builder and <velin-icon> component