Skip to content
Merged
Show file tree
Hide file tree
Changes from 23 commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
c9f99c8
feat(ui): publish editor chrome tokens and Storybook inventory
cursoragent Aug 16, 2026
df74810
fix(docs): renumber design-token ADR to 0031
seonghobae Aug 16, 2026
720beff
fix(docs): index design-token ADR as 0031
seonghobae Aug 16, 2026
89dd568
test(docs): bind design-token contract to ADR 0031
seonghobae Aug 16, 2026
89dcc2a
fix(docs): align design-token fitness with ADR 0031
seonghobae Aug 16, 2026
d99cf3a
fix(ui): retire colliding token ADR 0027 and name print values
cursoragent Aug 16, 2026
7f734e5
feat(ui): mount shipped Toolbar in Storybook token inventory
cursoragent Aug 16, 2026
c9615d9
feat(ui): publish WCAG contrast checks for editor chrome tokens
cursoragent Aug 16, 2026
03a823d
fix(ui): disclose inventoried active-chrome contrast below 4.5:1
cursoragent Aug 16, 2026
a831359
test(a11y): require compliant dark active-toolbar contrast
seonghobae Aug 16, 2026
837560a
fix(a11y): raise dark active-toolbar contrast
seonghobae Aug 16, 2026
081f1a6
fix(a11y): ship compliant dark active-toolbar accent
seonghobae Aug 16, 2026
a2cf525
test(a11y): bind docs to compliant shipped active contrast
seonghobae Aug 16, 2026
c92bcd5
docs(a11y): record compliant shipped dark active contrast
seonghobae Aug 16, 2026
119c4e3
docs(a11y): distinguish shipped contrast from host overrides
seonghobae Aug 16, 2026
f0afb6f
docs(adr): own default active-toolbar contrast
seonghobae Aug 16, 2026
8b7bccb
docs(changelog): record dark active-toolbar contrast fix
seonghobae Aug 16, 2026
57413d5
test(a11y): distinguish default repair from host re-theming
seonghobae Aug 16, 2026
d22a8d5
docs(a11y): separate shipped defaults from host re-theming
seonghobae Aug 16, 2026
8c853e7
test(a11y): align re-theming contract with shipped defaults
seonghobae Aug 16, 2026
1fd0bdc
test(a11y): distinguish historical contrast defect from shipped truth
seonghobae Aug 16, 2026
d4a2311
test(a11y): cover low-contrast host guidance
seonghobae Aug 16, 2026
7ba4788
merge main: preserve release exact-checkout fix for accessibility repair
seonghobae Aug 18, 2026
e4a14d1
test(tokens): require DTCG 2025.10 value shapes
seonghobae Aug 18, 2026
4505293
fix(tokens): emit DTCG 2025.10 native values
seonghobae Aug 18, 2026
3cc73f5
test(release): require four-file canonical inventory
seonghobae Aug 18, 2026
c1429c3
docs(release): align contracts with four-file inventory
seonghobae Aug 18, 2026
d36c2e8
docs(release): align test strategy with four-file inventory
seonghobae Aug 18, 2026
938640a
docs(release): align operability with four-file inventory
seonghobae Aug 18, 2026
a74d336
docs(release): supersede stale three-file doctoring
seonghobae Aug 18, 2026
0f7d3bd
test(docs): reject active-PR shipped theme claims
seonghobae Aug 18, 2026
6d5dbe7
test(docs): narrow active-PR truth contract
seonghobae Aug 18, 2026
24e5195
test(release): include changelog in four-asset contract
seonghobae Aug 18, 2026
15486eb
docs(theme): separate active repair from shipped defaults
seonghobae Aug 18, 2026
cfa8a2f
docs(storybook): label repaired contrast as active PR
seonghobae Aug 18, 2026
affd46a
docs(doctoring): separate proposal from shipped truth
seonghobae Aug 18, 2026
d0b3494
docs(adr): keep proposed theme decision non-shipped
seonghobae Aug 18, 2026
2a23839
docs(changelog): converge active and release truth
seonghobae Aug 18, 2026
bb49858
test(a11y): require actionable override contrast guidance
seonghobae Aug 18, 2026
8df9736
fix(a11y): distinguish catalog and override contrast checks
seonghobae Aug 18, 2026
4cce549
test(docs): require truthful override contrast guidance
seonghobae Aug 18, 2026
0ddf23b
docs(a11y): distinguish catalog and resolved override contrast
seonghobae Aug 18, 2026
c25607e
fix(a11y): preserve actionable override instruction contract
seonghobae Aug 18, 2026
c7ea338
docs(a11y): bind custom themes to resolved contrast values
seonghobae Aug 18, 2026
9f1f6e5
docs(adr): separate catalog and custom-theme contrast authority
seonghobae Aug 18, 2026
ce078cf
docs(a11y): make host theme contrast verification truthful
seonghobae Aug 18, 2026
92d8f5a
fix(a11y): align contrast guidance with exact contracts
seonghobae Aug 18, 2026
93bb31c
docs(a11y): make token inventory authority explicit
seonghobae Aug 18, 2026
db52724
test(release): cover release-security stale inventory phrases
seonghobae Aug 18, 2026
422b0be
docs(a11y): clarify catalog versus resolved override contrast
seonghobae Aug 18, 2026
f20cadb
docs: reconcile protected DOCX hyperlink maturity
seonghobae Aug 19, 2026
ac23bc2
test: lock protected DOCX hyperlink documentation maturity
seonghobae Aug 19, 2026
4d33e4c
test(design-tokens): reject hostile contrast color coercion
seonghobae Aug 19, 2026
d56be5a
fix(design-tokens): reject hostile contrast inputs
seonghobae Aug 19, 2026
b20d534
test(design-tokens): require immutable DTCG font values
seonghobae Aug 19, 2026
0dbb7f4
fix(design-tokens): freeze DTCG font values
seonghobae Aug 19, 2026
08b576e
test(a11y): expose missing editor focus indicator
seonghobae Aug 20, 2026
44807c9
fix(a11y): restore visible editor keyboard focus
seonghobae Aug 20, 2026
0a5f18b
test(a11y): verify packed editor focus indicator
seonghobae Aug 20, 2026
94b9a23
test(a11y): run focus acceptance cross-engine
seonghobae Aug 20, 2026
97cce96
test(print): reject focus chrome in paged output
seonghobae Aug 20, 2026
082c19e
fix(print): suppress interactive focus chrome
seonghobae Aug 20, 2026
e2c4dc8
test(print): assert rendered outline suppression
seonghobae Aug 20, 2026
e56301c
docs(changelog): record editor focus accessibility contract
seonghobae Aug 20, 2026
6778fe1
test(docs): reject stale protected-capability maturity
seonghobae Aug 20, 2026
6bcb6ab
docs(architecture): align protected package and print maturity
seonghobae Aug 20, 2026
fcaf68e
chore(ownership): restore release-blocker scope
seonghobae Aug 20, 2026
11d5cfe
chore(ownership): remove duplicate maturity contract
seonghobae Aug 20, 2026
53e96b3
Merge remote-tracking branch 'origin/main' into cursor/bc-c3120e85-2b…
seonghobae Aug 25, 2026
e1f3ab9
chore(scope): restore DOCX maturity single-writer ownership
seonghobae Aug 25, 2026
820553b
chore(scope): leave TRD maturity to canonical writer
seonghobae Aug 25, 2026
f27df1b
test(scope): stop asserting foreign TRD maturity
seonghobae Aug 25, 2026
03994ad
test(a11y): expose forced-colors focus cascade ordering
seonghobae Aug 25, 2026
9b8c5e6
fix(a11y): make forced-colors focus override effective
seonghobae Aug 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,6 @@ htmlcov/

# CodeGraph local index
.codegraph/

# Storybook local build output
storybook-static/
9 changes: 9 additions & 0 deletions .storybook/main.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import type { StorybookConfig } from '@storybook/react-vite';

const config: StorybookConfig = {
framework: '@storybook/react-vite',
stories: ['../stories/**/*.stories.@(ts|tsx)'],
addons: ['@storybook/addon-docs'],
};

export default config;
11 changes: 11 additions & 0 deletions .storybook/preview.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import type { Preview } from '@storybook/react';

import '../src/styles.css';

const preview: Preview = {
parameters: {
controls: { disable: true },
},
};

export default preview;
2 changes: 2 additions & 0 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ The protected standalone product provides:
- dependency-locked Chromium/Firefox/WebKit rich-clipboard release assurance; and
- a network-free Office renderer for deterministic DOCX, XLSX, and PPTX output.

A named editor-chrome theme-token catalog and Storybook inventory for repeating toolbar/editor objects are Active PR / Proposed. Hosts override `--cwl-*` on `.cwl-editor`; Inkspan does not own Figma Variables, brand certification, or design-tool sync.

Hosts own transport, authorization, tenant isolation, persistence, credentials, migration, retention, and model-use policy. They also own authentication, deployment, durable audit, print destination policy, and any durable PDF/print-service authority; persistence includes durable storage and commit authority.

Inkspan therefore never opens a production collaboration connection, chooses a tenant, stores a provider secret, creates a durable database transaction, decides a retention schedule, authorizes an AI operation, or claims that a browser print destination constitutes a durable authorized export. A standalone adopter can provide those capabilities directly; a CWL host can provide them through shared platform services.
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@ Historical release entries from **0.1.0 through 0.5.27** are preserved verbatim

## [Unreleased]

### Added
- Named the repeating editor chrome as a host-facing theme-token catalog and Storybook inventory so hosts can override `--cwl-*` custom properties on `.cwl-editor` after checking WCAG 2.2 contrast, without editing Inkspan internals. Color catalog values now distinguish light, dark, and `@media print` remaps; forced-colors mode is not treated as a token assignment. Hosts can call `getEditorThemeTokenContrast()` to compare inventoried pairs, including `--cwl-accent` on `--cwl-accent-soft`, against the 4.5:1 text threshold via `meetsTextContrast`.

### Accessibility
- Raised the shipped dark active-toolbar accent from `#4493f8` to `#58a6ff`, increasing `--cwl-accent` text on `--cwl-accent-soft: #163356` from about 4.13:1 to about 5.06:1 so Inkspan's default 13px active-button text meets the WCAG 2.2 4.5:1 normal-text threshold while host overrides remain explicitly re-checkable through `getEditorThemeTokenContrast()`.

## [0.6.0] — 2026-08-10

### Release
Expand Down
17 changes: 17 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,23 @@ export function Example() {
Set `mode="html"` when `value` and `onChange` should exchange HTML. Both modes
embed accepted images as inline data URIs.

### Theme the repeating chrome

Override the named `--cwl-*` custom properties on `.cwl-editor` after checking
WCAG 2.2 contrast for body text and active toolbar text
(`getEditorThemeTokenContrast('cwl-accent', 'cwl-accent-soft', 'dark')`). Do not
edit Inkspan internals. See
[`docs/design-tokens.md`](docs/design-tokens.md) for the token catalog and
[`docs/storybook-inventory.md`](docs/storybook-inventory.md) for the Storybook
preview of toolbar and editor chrome.

```css
.cwl-editor {
--cwl-accent: #0b6e4f;
--cwl-accent-soft: #d8f3e8;
}
```

### Server rendering

`CwlEditor` and `CollaborativeCwlEditor` are safe to include in server-rendered
Expand Down
1 change: 1 addition & 0 deletions docs/CONTRACTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ Rollback must preserve readable canonical documents and must not require silentl
| autosave | local ordering/state, callback contract, validator validation | transport, durable CAS, retry/offline policy, persistence |
| collaboration | provider-neutral editor/Yjs binding | provider lifecycle, rooms, identity, authorization, persistence, awareness privacy |
| Office rendering | deterministic bounded JSON→artifact conversion | file destination policy, downstream distribution, tenant authorization |
| editor chrome theming (Active PR / Proposed) | named `--cwl-*` tokens, DTCG interchange snapshot, Storybook inventory, inventoried pair contrast including `--cwl-accent` on `--cwl-accent-soft` | host brand CSS, contrast certification, Figma Variables, design-tool sync |
| naruon composition | stable local package/module boundary | authenticated compose transport, tenancy, provider/model policy |
| model assistance | deterministic proposal acceptance boundary | provider, prompt/data policy, credentials, human approval |
| release evidence | exact three-file draft inventory, package/artifact/digest verification and repository evidence | downstream deployment and operational rollout |
Expand Down
2 changes: 2 additions & 0 deletions docs/DOCUMENTATION_FITNESS.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ Document fitness and implementation maturity are independent. A `present_current
| Unified stable registry release train | ADR 0019, protected release workflow and release doctoring | `present_current` | `implemented_on_protected_main` | Stable npm/Office version equality, OIDC Trusted Publishing, exact-artifact publication and post-publication digest verification are source-integrated; live registry publication remains separate operational evidence. |
| Framework-neutral Markdown package boundary | ADR 0020, protected `@contextualwisdomlab/cwl-editor/markdown` package subpath and shared policy modules from #114 | `present_current` | `implemented_on_protected_main` | Server/worker consumers can reuse deterministic Markdown/HTML/email/plain-text conversion without evaluating the React/TipTap editor graph. |
| CSS paged-media print boundary | ADR 0021, protected `src/styles.css`, packaged stylesheet evidence and real-browser print tests from #116/#127 | `present_current` | `implemented_on_protected_main` | Declarative print output removes screen-only clipping/chrome while preserving authored content without creating a durable PDF service. |
| Editor chrome design tokens / Storybook inventory | ADR 0031, `docs/design-tokens.md`, doctoring, token catalog, and Storybook stories | `present_current` | `implemented_on_active_pr` | Hosts can name, override, and preview repeating toolbar/editor tokens without treating the interchange snapshot as shipped protected-main authority. |
| Informative DOCX PNG figures | ADR 0022, Office schema/renderer/tests and guidance | `present_current` | `implemented_on_protected_main` | Strict bounded inline PNG figures preserve informative alternative text without remote-resource or arbitrary OOXML authority. |
| DOCX bounded rich-text runs | ADR 0023, Office schema/renderer/tests and doctoring | `present_current` | `implemented_on_protected_main` | Ordered bold/italic/underline runs preserve common inline fidelity under one bounded deterministic contract. |
| DOCX bounded paragraph alignment | ADR 0024, Office schema/renderer/tests, Office guidance and doctoring | `present_current` | `implemented_on_protected_main` | `paragraph` and `rich_paragraph` preserve explicit left/center/right/justify alignment while omission retains inherited/default behavior. |
Expand All @@ -82,6 +83,7 @@ The documentation pack is substantially complete for acquisition review, but rep
1. The protected manifests now agree at `0.6.0`, while registry operational acceptance remains open under issue #118 because the exact protected release still needs its tag/GitHub Release, live npm/PyPI Trusted Publisher execution, and public artifact digest verification.
2. Future protected-source changes must continue to reconcile PRD/TRD/Architecture/ADR/UML/DATA_MODEL/security/test/operability/traceability semantics rather than treating this baseline as permanently complete.
3. Documentation becoming mergeable, green, or protected-merged is never a reason for the commercial loop to stop; the next safe product, release, security, accessibility, package, Office-fidelity, or interoperability lane continues.
4. Hosts still need a named, Storybook-previewable chrome-token catalog so brand theming does not require editing Inkspan internals; that lane is Active PR / Proposed and must not be described as shipped until protected integration.

## Sufficiency decision

Expand Down
2 changes: 2 additions & 0 deletions docs/PRD.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,3 +146,5 @@ Shareable acquisition evidence excludes production tenant content and credential
Protected `main` is the sole implemented baseline. Open PRs may describe Proposed or Active work but are not shipped contracts until protected integration. Canonical documentation must state when a requirement is target architecture rather than current implementation.

SafeClipboard, real Chromium/Firefox/WebKit release assurance, lifecycle observation, the root security disclosure lifecycle, toolbar shortcut accessibility metadata, SSR/native-form serialization, revision-scoped selection evidence, W3C text-position selector evidence, document-transition evidence, and envelope identity migration routing are implemented on protected `main`.

A named editor-chrome theme-token catalog, DTCG 2025.10 interchange snapshot, and Storybook inventory for repeating toolbar/editor objects are Active PR / Proposed and are not shipped claims until protected integration. Hosts must check inventoried active-chrome contrast (`--cwl-accent` on `--cwl-accent-soft`) in addition to body text.
1 change: 1 addition & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ This directory is the discoverable index for Inkspan's product, technical, secur
| [`package-distribution.md`](package-distribution.md) | Buyer-facing public npm package entrypoints, packaged contents, runtime dependency boundaries, and consumer verification |
| [`email-output.md`](email-output.md) | Deterministic email fragment/full-document authority, language/direction metadata, accessibility and host-owned transport boundary |
| [`print-output.md`](print-output.md) | Browser print/paged-media presentation, accessibility/fidelity limits, host-owned governed-export boundary, and rollback |
| [`design-tokens.md`](design-tokens.md) | Host-facing editor chrome tokens, DTCG 2025.10 interchange snapshot, and Storybook inventory (Active PR / Proposed) |
| [`UML.md`](UML.md) | Component, sequence, state and authority-flow diagrams |
| [`DATA_MODEL.md`](DATA_MODEL.md) | Conceptual evidence/domain model and persistence ownership |
| [`THREAT_MODEL.md`](THREAT_MODEL.md) | Trust boundaries, abuse cases, security/privacy controls and residual risks |
Expand Down
5 changes: 5 additions & 0 deletions docs/TRACEABILITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ This record maps durable Inkspan product decisions to authoritative standards, p
| Browser clipboard behavior | Security-relevant rich HTML handling requires actual paste-pipeline integration and bounded semantic reconstruction before editor state | WHATWG HTML parsing; W3C Clipboard API | protected-main rich-clipboard unit/integration corpus and SafeClipboard ADR | Protected jsdom/TipTap integration success is not universal browser-engine conformance |
| Cross-engine release assurance | The same committed synthetic adversarial corpus runs under required Chromium, Firefox, and WebKit projects; exact package-lock and packed npm artifact SHA-256 digests are required, and only focused standards-grounded safe differences may be admitted | WHATWG HTML Living Standard; W3C Clipboard API and events; Playwright 1.62 release notes and browser/project documentation | ADR 0016, protected-main browser evidence source/workflows, TEST_STRATEGY, OPERABILITY and UML | Protected-main implementation is the release-policy authority; every release candidate must regenerate fresh exact-source/lock/run/browser evidence bound to the exact packed npm artifact SHA-256 and does not claim byte-identical browser serialization or branded enterprise-policy coverage |
| CSS paged-media output | Shipped editor CSS has a declarative print boundary that removes interactive chrome and screen clipping while preserving authored document flow and bounded fragmentation behavior | W3C Media Queries Level 3; CSS Fragmentation Level 3; CSS Paged Media Level 3 as tracked draft input | protected-main #116 packaged stylesheet, real-browser print-media evidence, ADR 0021, print doctoring and tests | `implemented_on_protected_main`; browser print styling does not create a durable PDF service, page-number/header authority, persistence, signing, or PDF-conformance claim |
| Editor chrome design tokens | Repeating toolbar/editor surfaces share named `--cwl-*` custom properties; hosts override those properties on `.cwl-editor` and preview them in Storybook | Design Tokens Format Module 2025.10; WCAG 2.2 contrast including inventoried `--cwl-accent` on `--cwl-accent-soft`; Storybook React/Vite | Active-PR doctoring `docs/doctoring/editor-design-tokens.md`, operator guide, ADR 0031, token catalog tests, and Storybook inventory | Proposed until protected `main`; the interchange snapshot is not complete DTCG conformance, Figma Variables sync, or a host WCAG certification |
| Editor integration | Public behavior must exercise the actual TipTap/ProseMirror integration path, not an inert extension field or test-only hook | official TipTap and ProseMirror documentation for the locked dependency line | integration tests and package consumers | Inkspan does not claim compatibility with untested major-version integration semantics |
| Collaboration | Inkspan provides provider-neutral editor/Yjs bindings; host owns provider lifecycle, room authorization, awareness privacy, persistence and audit | official Yjs/provider documentation plus Inkspan public contract | collaboration tests and architecture ownership matrix | No network-provider or tenant-authorization authority is implied |
| Secure development | Security controls are developed test-first, with exact-head scanning/review/package evidence and root-cause regression | NIST SP 800-218 SSDF 1.1 | CI/security/SAST/package/provenance gates, doctoring and regression history | Repository evidence is not a claim of complete SSDF organizational conformance |
Expand All @@ -38,6 +39,8 @@ Bray, T. (Ed.). (2015). *The I-JSON Message Format* (RFC 7493). RFC Editor. http

Bray, T. (Ed.). (2017). *The JavaScript Object Notation (JSON) Data Interchange Format* (RFC 8259; STD 90). RFC Editor. https://doi.org/10.17487/RFC8259

Design Tokens Community Group. (2025, October 28). *Design Tokens Format Module 2025.10* (Final Community Group Report). World Wide Web Consortium. https://www.w3.org/community/reports/design-tokens/CG-FINAL-format-20251028/

Ecma International. (2021). *ECMA-376: Office Open XML file formats* (5th ed.). https://ecma-international.org/publications-and-standards/standards/ecma-376/

Ecma International. (2026). *ECMA-402: ECMAScript 2026 internationalization API specification* (13th ed.). https://402.ecma-international.org/
Expand Down Expand Up @@ -70,6 +73,8 @@ Rundgren, A., Jordan, B., & Erdtman, S. (2020). *JSON Canonicalization Scheme (J

Souppaya, M., Scarfone, K., & Dodson, D. (2022). *Secure Software Development Framework (SSDF) Version 1.1: Recommendations for Mitigating the Risk of Software Vulnerabilities* (NIST SP 800-218). National Institute of Standards and Technology. https://doi.org/10.6028/NIST.SP.800-218

Storybook. (n.d.). *Storybook for React with Vite*. Retrieved August 16, 2026, from https://storybook.js.org/docs/get-started/frameworks/react-vite

Web Hypertext Application Technology Working Group. (2026). *HTML Standard: Parsing HTML documents* (Living Standard). Retrieved August 10, 2026, from https://html.spec.whatwg.org/multipage/parsing.html

World Wide Web Consortium. (2013). *PROV-DM: The PROV Data Model*. https://www.w3.org/TR/prov-dm/
Expand Down
2 changes: 2 additions & 0 deletions docs/TRD.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@ CSS paged-media print boundary is implemented on protected `main` under Accepted

The CSS contract does not introduce JavaScript print orchestration, a PDF service, durable export authority, credentials, network access, identity, tenancy, persistence, page-number/header/footer generation, signature authority, or PDF-conformance claims. Browser/OS print destination and durable artifact policy remain host/user responsibilities.

A named editor-chrome theme-token catalog, DTCG 2025.10 interchange snapshot, and Storybook inventory are Active PR / Proposed. CSS remains runtime presentation authority. Hosts override `--cwl-*` on `.cwl-editor` after checking WCAG 2.2 contrast for body text and the inventoried active toolbar pair (`--cwl-accent` on `--cwl-accent-soft`). The catalog's optional print values are the `@media print` remaps; forced-colors mode does not assign those custom properties. This slice adds no Figma, network, persistence, credential, or model authority.

## Model-assisted authoring

Inkspan does not own model credentials, provider routing, prompt retention, external-data-use approval, tenant disclosure policy, or model audit. A host may route assistance through contextual-orchestrator or another approved provider. Model output is untrusted proposed content and cannot bypass deterministic clipboard/document/conversion validation, user/host approval, or durable save authorization.
Expand Down
2 changes: 2 additions & 0 deletions docs/UML.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ flowchart LR

The host owns transport, authentication, authorization, tenant isolation, persistence, credentials, provider lifecycle, retention, deployment, durable audit, and model-use policy. Inkspan owns deterministic local editor/conversion/evidence behavior only.

A named editor-chrome theme-token catalog and Storybook inventory are Active PR / Proposed. Hosts override `--cwl-*` on `.cwl-editor` after checking WCAG 2.2 contrast for body text and active toolbar text (`--cwl-accent` on `--cwl-accent-soft`). CSS remains runtime presentation authority. Storybook previews a class-level chrome sample (including `:focus-visible`) and a live shipped Toolbar. It does not mount `CwlEditor`. Print-media remaps live in `@media print`; forced-colors mode does not assign those custom properties. Figma Variables, brand certification, and design-tool sync remain host-owned.

## Rich paste sequence

```mermaid
Expand Down
Loading
Loading