From 138fa427c0a36588bab6f44848fddd7058c9a352 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Sat, 26 Sep 2026 15:38:41 +0200 Subject: [PATCH 1/8] docs(parity): nextcloud-theming and opendesk re-read from source, sources objects, twelve mined rows (wip) --- openspec/parity/capabilities.json | 1230 ++++++++++++++++++++--------- 1 file changed, 858 insertions(+), 372 deletions(-) diff --git a/openspec/parity/capabilities.json b/openspec/parity/capabilities.json index 5fce7ef8..4ed828fa 100644 --- a/openspec/parity/capabilities.json +++ b/openspec/parity/capabilities.json @@ -26,8 +26,60 @@ "readOn": "2026-09-26", "columnAddedOn": "2026-09-26", "evidenceGrade": "docs-only", - "unknownReason": "Only acc-keyboard-admin is unknown: verifying full keyboard operability of the rendered admin settings page requires driving a live instance in a browser, which is out of scope for a source-and-docs reading. Every other row was settled yes/partial/no from the theming app's PHP/Vue source and the admin manual.", - "sources": [ + "unknownReason": "Each unknown cell carries its own not-checked reason: rows the v35.0.1 source read could not settle without a live drive, and rows mined on 2026-09-26 after the column was read.", + "sources": { + "docs": "https://docs.nextcloud.com/server/stable/admin_manual/configuration_server/theming.html", + "sourceRepo": "https://github.com/nextcloud/server/tree/v35.0.1/apps/theming (tag v35.0.1, commit 3c012e6)", + "featurePage": "https://nextcloud.com/blog/branding-theming-nextcloud-hub/", + "featureRequests": "https://github.com/nextcloud/server/issues?q=is%3Aissue+is%3Aopen+label%3A%22feature%3A+theming%22+label%3Aenhancement", + "issueTracker": { + "url": "https://github.com/nextcloud/server/issues?q=is%3Aissue+is%3Aopen+label%3A%22feature%3A+theming%22", + "featureLabel": "feature: theming" + }, + "roadmap": null, + "changelog": [ + "https://github.com/nextcloud/server/releases/tag/v35.0.1", + "https://nextcloud.com/changelog/" + ], + "apiReference": [ + "https://github.com/nextcloud/server/blob/v35.0.1/apps/theming/openapi.json", + "https://docs.nextcloud.com/server/latest/developer_manual/client_apis/OCS/ocs-api-overview.html" + ], + "marketplace": "https://apps.nextcloud.com/apps/theming_customcss", + "pricing": null, + "accessibilityStatement": null, + "securityDocs": "https://github.com/nextcloud/server/blob/v35.0.1/SECURITY.md", + "demoInstance": "https://try.nextcloud.com/", + "community": "https://help.nextcloud.com/", + "reviews": null, + "videos": "https://nextcloud.com/blog/webinar/webinar-branding-theming-nextcloud-hub/", + "caseStudies": null, + "partnerDirectory": null, + "trainingCurriculum": null, + "jobPostings": null, + "tenders": [ + "opentender AT ocds-70d2nz-e3a2e012-3572-3e76-abe8-62471096b8de (Bundesministerium fuer Arbeit und Wirtschaft, Nextcloud Subscriptions, https://opentender.eu/at/tender/ocds-70d2nz-e3a2e012-3572-3e76-abe8-62471096b8de)", + "opentender AT ocds-70d2nz-6ff0aa94-6e12-3651-b25e-efe4f4e7cd2e (Universitaet Innsbruck, Nextcloud Groupware Campus Lizenz, 2024-12-12, https://opentender.eu/at/tender/ocds-70d2nz-6ff0aa94-6e12-3651-b25e-efe4f4e7cd2e)" + ], + "nullReasons": { + "roadmap": "2026-09-26: no public roadmap found; github.com/nextcloud/roadmap returns 404 and nextcloud.com could not be reached from this sandbox (connection refused), so a roadmap page there was not checked", + "pricing": "2026-09-26: theming is free in the AGPL server; nextcloud.com/pricing could not be reached from this sandbox (connection refused), so enterprise branding prices were not read", + "accessibilityStatement": "2026-09-26: nextcloud.com/accessibility could not be reached (connection refused); no accessibility statement file in the v35.0.1 source tree", + "reviews": "2026-09-26: g2.com/products/nextcloud/reviews returned 403; no other review source checked", + "caseStudies": "2026-09-26: nextcloud.com/customers could not be reached (connection refused); no theming-specific case study found in web search", + "partnerDirectory": "2026-09-26: nextcloud.com/partners could not be reached (connection refused)", + "trainingCurriculum": "2026-09-26: nextcloud.com/training could not be reached (connection refused); the admin manual theming page is the only training material found", + "jobPostings": "2026-09-26: nextcloud.com/jobs could not be reached (connection refused); not relevant to a shipped server component" + }, + "notes": { + "featurePage": "URL found by web search on 2026-09-26; nextcloud.com itself refused connections from this sandbox, so its current content was not read", + "changelog": "GitHub release list read with gh; nextcloud.com/changelog found by web search but not loadable here", + "marketplace": "theming_customcss is a separate App Store app that adds a custom CSS field; it is not part of the built-in theming app", + "videos": "found by web search 2026-09-26, not loaded" + } + }, + "readingNotes": "Grade is docs-only: this reading was of the local server source (read-only) plus the published admin manual, not of a running instance, per the brief. Key structural facts a matrix author needs: (1) there is no house-style *catalogue* at all in stock Nextcloud - admin theming is exactly two colours (primary, background) plus four uploadable images (logo, logoheader, background, favicon) plus text fields (name, url, slogan, imprint/privacy URLs); most 'catalogue', 'authoring' (token-set upload/DTCG/CSS/Figma/Git) and 'scoping' (group/tenant/domain) rows are structurally out of scope, not merely unimplemented. (2) The 'themes' the app does ship are accessibility/appearance variants - default, light, dark, high-contrast, dark+high-contrast, a dyslexia font, and a reduced-motion toggle - selectable per-user in Personal settings, auto-applied via prefers-color-scheme/prefers-contrast/prefers-reduced-motion media queries, and instance-enforceable via config.php's enforce_theme. (3) Its one real strength versus thematiq's likely gaps: Util::elementColor() bakes a minimum-contrast guarantee (3.2:1, 5.6:1 under high-contrast) into every derived element colour automatically, and DefaultTheme/DarkTheme hand-tune status colours to a documented 4.5:1 target - a built-in contrast-safety net thematiq would need to demonstrate matching. (4) Governance: this settings section already supports Nextcloud's native admin-delegation (IDelegatedSettings), so 'delegate theme editing to a non-admin' is a real yes, not a gap. (5) No custom CSS field, no font upload, no audit log, no OTAP config bundle (only per-key occ theming:config), no marketplace, no desktop/mobile client branding (Enterprise-only per Nextcloud's own tiering, not present here).", + "readSources": [ "server repo @ 175c7e6be47 (git -C ~/nextcloud-docker-dev/workspace/server log -1 --format=%h), apps/theming/lib/Controller/ThemingController.php", "apps/theming/lib/ThemingDefaults.php", "apps/theming/lib/Capabilities.php", @@ -56,7 +108,7 @@ "config/config.sample.php (enforce_theme, theming.standalone_window.enabled)", "https://docs.nextcloud.com/server/stable/admin_manual/configuration_server/theming.html (fetched 2026-09-26, thinner than the source: covers name/url/slogan, primary+background colour, logo, background/login image, favicon, legal links, disable-user-theming, occ theming:config; does not mention fonts, custom CSS, group theming, accessibility statements, dark/high-contrast modes, or a marketplace)" ], - "readingNotes": "Grade is docs-only: this reading was of the local server source (read-only) plus the published admin manual, not of a running instance, per the brief. Key structural facts a matrix author needs: (1) there is no house-style *catalogue* at all in stock Nextcloud - admin theming is exactly two colours (primary, background) plus four uploadable images (logo, logoheader, background, favicon) plus text fields (name, url, slogan, imprint/privacy URLs); most 'catalogue', 'authoring' (token-set upload/DTCG/CSS/Figma/Git) and 'scoping' (group/tenant/domain) rows are structurally out of scope, not merely unimplemented. (2) The 'themes' the app does ship are accessibility/appearance variants - default, light, dark, high-contrast, dark+high-contrast, a dyslexia font, and a reduced-motion toggle - selectable per-user in Personal settings, auto-applied via prefers-color-scheme/prefers-contrast/prefers-reduced-motion media queries, and instance-enforceable via config.php's enforce_theme. (3) Its one real strength versus thematiq's likely gaps: Util::elementColor() bakes a minimum-contrast guarantee (3.2:1, 5.6:1 under high-contrast) into every derived element colour automatically, and DefaultTheme/DarkTheme hand-tune status colours to a documented 4.5:1 target - a built-in contrast-safety net thematiq would need to demonstrate matching. (4) Governance: this settings section already supports Nextcloud's native admin-delegation (IDelegatedSettings), so 'delegate theme editing to a non-admin' is a real yes, not a gap. (5) No custom CSS field, no font upload, no audit log, no OTAP config bundle (only per-key occ theming:config), no marketplace, no desktop/mobile client branding (Enterprise-only per Nextcloud's own tiering, not present here)." + "readNote": "source read at nextcloud/server v35.0.1 (3c012e6, latest stable, 2026-09-24), not driven; replaces the 2026-09-26 read at dev commit 175c7e6be47" }, { "key": "m365-branding", @@ -87,8 +139,58 @@ "readOn": "2026-09-26", "columnAddedOn": "2026-09-26", "evidenceGrade": "docs-only", - "unknownReason": "openDesk's own theming documentation (docs.opendesk.eu/operations/theming/) is a short page that names the mechanism (theme.yaml.gotmpl + helmfile/files/theme + portalStylesheets.css) but does not enumerate accessibility auditing, per-user/per-group scoping, dark mode, font handling, or monitoring/API surfaces; those areas were not covered by any further page found under docs.opendesk.eu or the deployment repo docs/ tree, so rows in typography, scoping, accessibility and integration are mostly 'unknown' rather than 'no' unless the absence was directly evidenced (e.g. an explicit 'Not yet implemented' marker or a values file confirmed to lack the key).", - "sources": [ + "unknownReason": "Each unknown cell carries its own not-checked reason: stock component behaviour (focus, forced colours, reduced motion, clients) not audited in the v1.18.2 source read, and rows mined on 2026-09-26 after the column was read.", + "sources": { + "docs": [ + "https://docs.opendesk.eu/operations/theming/", + "https://docs.opendesk.eu/" + ], + "sourceRepo": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (tag v1.18.2, commit eab2ee7; also read opendesk-nextcloud chart v4.10.6, opendesk-nextcloud image v2.17.2, opendesk-jitsi chart v3.10.0, opendesk-impress-customization v1.0.0 under gitlab.opencode.de/bmi/opendesk/components/platform-development/)", + "featurePage": "https://www.opendesk.eu/en/product", + "featureRequests": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/issues/?label_name%5B%5D=type%3A%20Improvement", + "issueTracker": { + "url": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/issues", + "featureLabel": "type: Improvement (feature requests also use the 'Feature Request' issue template)" + }, + "roadmap": "https://www.opendesk.eu/en/roadmap", + "changelog": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/blob/v1.18.2/CHANGELOG.md", + "apiReference": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/blob/v1.18.2/docs/architecture/apis.md", + "marketplace": null, + "pricing": null, + "accessibilityStatement": [ + "https://docs.opendesk.eu/legal/barrierefreiheit/", + "https://www.opendesk.eu/en/accessibility" + ], + "securityDocs": [ + "https://docs.opendesk.eu/operations/security/", + "https://docs.opendesk.eu/legal/it-grundschutz/" + ], + "demoInstance": "https://portal.demo.opendesk.eu/univention/portal/", + "community": "https://gitlab.opencode.de/bmi/opendesk", + "reviews": null, + "videos": null, + "caseStudies": null, + "partnerDirectory": "https://www.opendesk.eu/en/partner-werden", + "trainingCurriculum": null, + "jobPostings": "https://www.zendis.de/karriere", + "tenders": null, + "nullReasons": { + "marketplace": "openDesk ships as a helmfile deployment; opendesk.eu/en and docs.opendesk.eu link no app store or marketplace listing, and it is not a Nextcloud app store app (searched 2026-09-26)", + "pricing": "https://www.opendesk.eu/en/operating-models (read 2026-09-26) describes Enterprise and Community editions and operating models but publishes no prices", + "reviews": "no review platform linked from opendesk.eu or docs.opendesk.eu; not searched on third-party review sites (2026-09-26)", + "videos": "opendesk.eu/en footer links LinkedIn, GitLab, opencode.de and docs only; no video channel found (2026-09-26)", + "caseStudies": "opendesk.eu/en has a blog (news, partner programme, security incident) but no case study section (2026-09-26)", + "trainingCurriculum": "docs.opendesk.eu has user and admin guides (/user/overview/erste-schritte/, /administration/erste-schritte/) but no training curriculum; searched site navigation 2026-09-26", + "tenders": "intelligence database searched 2026-09-26: no tender name, description or requirement mentions openDesk" + }, + "notes": { + "roadmap": "page exists but lists no items: 'We are currently coordinating our upcoming development cycles. More information about future releases will be available here shortly.' (read 2026-09-26)", + "demoInstance": "https://demo.opendesk.eu/ redirects to the portal login; https://www.opendesk.eu/en/demo-session books a guided demo", + "docs": "docs.opendesk.eu/operations/theming/ renders docs/theming.md, whose link to portalStylesheets.css names a file that does not exist at v1.18.2" + } + }, + "readingNotes": "openDesk's theming is fundamentally different in shape from thematiq: it is ONE deployment-configured brand (set via Helm/helmfile values, requiring `helmfile apply` to change) applied consistently across Nextcloud (via a separate opendesk-nextcloud-management chart), Element, OX App Suite, Xwiki, Jitsi and the Portal/Keycloak login screens - not a runtime catalogue of switchable house styles with an admin UI. There is no in-app theming admin screen, preview, trial, diff, or rollback UI documented anywhere; every 'apply'-area capability that assumes a live admin UI is 'no' by construction, not because the feature is missing but because the whole model is config-as-code. Nextcloud's own values-nextcloud.yaml file was confirmed to carry NO theming keys itself - branding reaches Nextcloud only via the separate opendesk-nextcloud-management chart. The shipped default colour table itself documents several colour tokens (primary35, primary65, secondaryBlue, secondaryBlueHighcontrast, secondaryRed, secondaryYellow, secondaryGreen, secondaryGrey) as 'Not yet implemented' by any component - a concrete, vendor-acknowledged incompleteness worth flagging to a matrix author.", + "readSources": [ "https://docs.opendesk.eu/operations/theming/", "https://docs.opendesk.eu/operations/functional/", "https://docs.opendesk.eu/operations/getting-started/", @@ -100,7 +202,7 @@ "https://github.com/opentelekomcloud-blueprints/openDesk-deployment (search snippet: environments/prod/values.yaml.gotmpl, confirms multi-environment values structure)", "docs.nextcloud.com theming admin manual (search snippet only, used solely to support that Nextcloud's own theming app also colours emails; not independently fetched)" ], - "readingNotes": "openDesk's theming is fundamentally different in shape from thematiq: it is ONE deployment-configured brand (set via Helm/helmfile values, requiring `helmfile apply` to change) applied consistently across Nextcloud (via a separate opendesk-nextcloud-management chart), Element, OX App Suite, Xwiki, Jitsi and the Portal/Keycloak login screens - not a runtime catalogue of switchable house styles with an admin UI. There is no in-app theming admin screen, preview, trial, diff, or rollback UI documented anywhere; every 'apply'-area capability that assumes a live admin UI is 'no' by construction, not because the feature is missing but because the whole model is config-as-code. Nextcloud's own values-nextcloud.yaml file was confirmed to carry NO theming keys itself - branding reaches Nextcloud only via the separate opendesk-nextcloud-management chart. The shipped default colour table itself documents several colour tokens (primary35, primary65, secondaryBlue, secondaryBlueHighcontrast, secondaryRed, secondaryYellow, secondaryGreen, secondaryGrey) as 'Not yet implemented' by any component - a concrete, vendor-acknowledged incompleteness worth flagging to a matrix author." + "readNote": "source read at openDesk deployment v1.18.2 (eab2ee7), with opendesk-nextcloud chart v4.10.6, opendesk-nextcloud-image v2.17.2 (inferred from the 33.0.9 pin at images.yaml.gotmpl:351, not a git-tag pin), opendesk-jitsi v3.10.0, opendesk-impress-customization v1.0.0 and nextcloud/server v33.0.9 for stock behaviour; not driven" }, { "key": "liferay-dxp", @@ -265,9 +367,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Design token set' dropdown (templates/settings/admin.php:68)", "evidence": { - "nextcloud-theming": "apps/theming/lib/Service/ThemesService.php:37-48 : only default/light/dark/highcontrast/dark-highcontrast/dyslexia-font/reduced-motion are registered, no Dutch government house style shipped", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Service/ThemesService.php:42-50: only default, light, dark, light-highcontrast, dark-highcontrast, opendyslexic and reduced-motion themes are registered; no Dutch government house style is shipped or selectable", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : openDesk applies exactly one deployment-configured brand (productName, slogan, primary colour, logos) via theme.yaml.gotmpl; there is no in-product catalogue, picker or gallery of alternative ready-made house styles to choose between; the shipped default is BMI/German-government branding (primary #571EFA, productName \"openDesk\"), not Dutch Rijkshuisstijl", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); grep -rniE 'rijks|nl-design|nldesign|utrecht|dsfr|marianne' helmfile docs: no hits, so no preset catalogue exists", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -294,9 +396,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Design token set' dropdown", "evidence": { - "nextcloud-theming": "apps/theming/lib/Controller/ThemingController.php:70-167 : admin sets one primary_color/background_color/logo manually, no catalogue of municipality styles to pick from", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Controller/ThemingController.php:74-147: the only settable keys are name, url, imprintUrl, privacyUrl, slogan, primary_color, background_color, disable-user-theming, backgroundMime; no list of ready-made organisation styles exists (apps/theming/lib/Settings/Admin.php:57-83 initial state is these fixed fields)", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : openDesk applies exactly one deployment-configured brand (productName, slogan, primary colour, logos) via theme.yaml.gotmpl; there is no in-product catalogue, picker or gallery of alternative ready-made house styles to choose between", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); grep -rniE 'rijks|nl-design|nldesign|utrecht|dsfr|marianne' helmfile docs: no hits, so no preset catalogue exists or picker", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -323,9 +425,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Design token set' dropdown", "evidence": { - "nextcloud-theming": "outside the product: no design-system catalogue exists (apps/theming/lib/Service/ThemesService.php registers only accessibility/appearance modes, not organisation design systems)", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Service/ThemesService.php:42-50: only default, light, dark, light-highcontrast, dark-highcontrast, opendyslexic and reduced-motion themes are registered; these are appearance and accessibility variants of one Nextcloud design, not city design systems", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : openDesk applies exactly one deployment-configured brand (productName, slogan, primary colour, logos) via theme.yaml.gotmpl; there is no in-product catalogue, picker or gallery of alternative ready-made house styles to choose between", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); grep -rniE 'rijks|nl-design|nldesign|utrecht|dsfr|marianne' helmfile docs: no hits, so no preset catalogue exists", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -353,9 +455,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Design token set' dropdown", "evidence": { - "nextcloud-theming": "outside the product: same absence of any house-style catalogue as cat-municipal-sets", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Service/ThemesService.php:42-50: only default, light, dark, light-highcontrast, dark-highcontrast, opendyslexic and reduced-motion themes are registered; no VNG or any other organisation house style is shipped", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : openDesk applies exactly one deployment-configured brand (productName, slogan, primary colour, logos) via theme.yaml.gotmpl; there is no in-product catalogue, picker or gallery of alternative ready-made house styles to choose between", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); grep -rniE 'rijks|nl-design|nldesign|utrecht|dsfr|marianne' helmfile docs: no hits, so no preset catalogue exists", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -371,7 +473,7 @@ "thematiq": "yes", "nextcloud-theming": "no", "m365-branding": "no", - "opendesk": "partial", + "opendesk": "no", "liferay-dxp": "no", "tokens-studio": "no", "built": { @@ -382,9 +484,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Design token set' dropdown", "evidence": { - "nextcloud-theming": "outside the product: theming has no bundled external design-system look, only manual colour/logo fields", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Service/ThemesService.php:42-50: only default, light, dark, light-highcontrast, dark-highcontrast, opendyslexic and reduced-motion themes are registered; no La Suite look is bundled, only manual colour and image fields (apps/theming/lib/Controller/ThemingController.php:74-147)", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : every brand value (colours, logos, product name, slogan, URLs) is overridable in the deployer's own values file, so a La Suite-matching palette can be hand-built, but no La Suite preset ships and no bundle-seam feature exists", + "opendesk": "opendesk@v1.18.2 helmfile/apps/notes/values.yaml.gotmpl:124 sets the La Suite Docs (impress) frontendTheme to 'openDesk' and :78 hardcodes brandName 'openDesk'; opendesk-impress-customization@v1.0.0 charts/impress-customization/files/notes/theme.json holds only translation overrides. The La Suite component is restyled toward openDesk, not the reverse; no La Suite preset in theme.yaml.gotmpl:13-154", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -411,9 +513,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Design token set' dropdown (browser-native type-ahead only)", "evidence": { - "nextcloud-theming": "apps/theming/lib/Settings/Admin.php:57-83 : initial state exposes fixed fields (name, colors, images, urls), no searchable list of styles", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/views/AdminTheming.vue:13-16 mounts only AdminSectionTheming, AdminSectionThemingAdvanced and AdminSectionAppMenu; no style picker or search field exists", "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : theme picker is a fixed gallery of 8 light + 2 dark default themes plus any custom org themes, not a searchable-by-name picker scaling to hundreds", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : openDesk applies exactly one deployment-configured brand (productName, slogan, primary colour, logos) via theme.yaml.gotmpl; there is no in-product catalogue, picker or gallery of alternative ready-made house styles to choose between", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); nothing to pick from; theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : a site's style book picker lists the style books available for that site/theme, not a searchable catalogue of hundreds of named house styles", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -441,9 +543,9 @@ }, "reachedOn": "Settings > Administration > Theming: select a set in the dropdown (live preview shell repaints immediately), then the apply dialog shows swatches before you confirm", "evidence": { - "nextcloud-theming": "no catalogue of house styles exists to show swatches of; apps/theming/src/components/admin/ColorPickerField.vue only shows the swatch of the two manually-set colour fields", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/components/admin/ColorPickerField.vue:55-63 previews only the colour being picked for the two admin colour fields; there is no catalogue of house styles to show swatches of (the personal ThemeList shows preview images of the seven built-in themes, not house styles)", "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : the default-themes gallery shows each theme's colour settings and 'those color settings are instantly applied to the page' when picked, i.e. a swatch/preview in the SharePoint theme picker; Entra ID sign-in branding has no such gallery, it is a single custom configuration", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : openDesk applies exactly one deployment-configured brand (productName, slogan, primary colour, logos) via theme.yaml.gotmpl; there is no in-product catalogue, picker or gallery of alternative ready-made house styles to choose between", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style book editor lets you 'preview the effects of a style book on your pages... before publishing', i.e. a live preview, but the picker itself was not documented as showing a colour swatch before opening a style book", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -458,9 +560,9 @@ "area": "catalogue", "name": "Switch back to stock Nextcloud styling with one choice, removing every added stylesheet.", "thematiq": "yes", - "nextcloud-theming": "yes", + "nextcloud-theming": "partial", "m365-branding": "partial", - "opendesk": "partial", + "opendesk": "no", "liferay-dxp": "partial", "tokens-studio": "no", "built": { @@ -471,9 +573,9 @@ }, "reachedOn": "Settings > Administration > Theming, select 'Nextcloud (default)' in the dropdown", "evidence": { - "nextcloud-theming": "apps/theming/lib/Controller/ThemingController.php:331-345 undoAll() and apps/theming/lib/ThemingDefaults.php:480-487 undoAll() revert every appconfig value (colors, images, name, slogan, app menu) to stock defaults in one action", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/appinfo/routes.php:26-29 and lib/Controller/ThemingController.php:331-345 undoAll() exist, but no page calls /ajax/undoAllChanges (grep of apps/theming/src finds no caller); the settings page only offers per-field resets (src/components/admin/ColorPickerField.vue:71-80, FileInputField.vue:97-112, TextField.vue:55-57) and occ theming:config --reset works one key at a time (lib/Command/UpdateConfig.php:82-86)", "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : 'Reset color: Select this link to reset colors to the default colors' (per-tab reset, not one action that also removes uploaded logos/CSS everywhere)", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : reverting to defaults means redeploying with default/empty theme values (a `helmfile apply` / helm rollback), not a one-click in-app switch", + "opendesk": "opendesk-nextcloud-image@v2.17.2 src/files/usr/local/bin/entrypoint/php/nextcloud_configure_theming.php:21-114 only issues theming:config set commands for keys present, and functions.php:791-801 reruns them only when they change; nothing resets Nextcloud theming to stock (only background has a --reset path, :50-56). Removing overrides redeploys openDesk's own brand, not stock Nextcloud", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : every site has a default 'Styles from X Theme' style book 'with all of the default values', selectable to revert a site, but this is per-site not an instance-wide one-click stock switch", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -500,9 +602,9 @@ }, "reachedOn": "Settings > Administration > Theming, badge next to the token set dropdown", "evidence": { - "nextcloud-theming": "no house-style token vocabulary/completeness concept exists in the app", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ConfigLexicon.php:53-114 defines only name, slogan, URLs and internals; there is no token vocabulary or completeness concept to badge", "m365-branding": "not checked: no token-vocabulary-completeness indicator found in Entra ID, M365 org theme or SharePoint theming docs read on 2026-09-26", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : openDesk applies exactly one deployment-configured brand (productName, slogan, primary colour, logos) via theme.yaml.gotmpl; there is no in-product catalogue, picker or gallery of alternative ready-made house styles to choose between", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no vocabulary or completeness concept", "liferay-dxp": "not checked: no token-vocabulary-completeness indicator found in the style book or frontend-token-definition docs read on 2026-09-26", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -529,9 +631,9 @@ }, "reachedOn": "Settings > Administration > Theming, dropdown option carries data-design-system, badge shown via js/admin.js updateDesignSystemBadge()", "evidence": { - "nextcloud-theming": "apps/theming/lib/Service/ThemesService.php:37-48 : the only selectable set is default/light/dark/highcontrast/dark-highcontrast/dyslexia-font/reduced-motion, accessibility/appearance variants not whole design systems like NL DS or La Suite", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Service/ThemesService.php:42-50: only default, light, dark, light-highcontrast, dark-highcontrast, opendyslexic and reduced-motion themes are registered; the user can pick light, dark or high contrast variants of the same design (lib/Settings/Personal.php:38-53), not whole design systems such as NL Design System or La Suite", "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme / https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : both only expose colour/logo fields, not a choice between whole named design systems", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : openDesk applies exactly one deployment-configured brand (productName, slogan, primary colour, logos) via theme.yaml.gotmpl; there is no in-product catalogue, picker or gallery of alternative ready-made house styles to choose between; only one brand exists per deployment", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); the only alternatives are the per-user stock Nextcloud themes (light, dark, high contrast), which are not design systems", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : since DXP 2025.Q2 'every style book is explicitly tied to a specific theme' (Token Isolation), so switching theme effectively switches the whole design system, but Liferay ships no NL Design System/high-contrast/soft-light design-system catalogue itself", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -558,9 +660,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Documentation' link in the section header", "evidence": { - "nextcloud-theming": "apps/theming/lib/Settings/Admin.php:62 'docUrl' => urlGenerator->linkToDocs('admin-theming') links to Nextcloud's own theming admin docs, not an external design system's documentation", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Settings/Admin.php:62-63 links docUrl and docUrlIcons via linkToDocs(admin-theming), shown by src/components/AdminSectionTheming.vue:21; this is the Nextcloud admin manual, not an external design system's documentation", "m365-branding": "not checked: no 'link to the design system's own documentation' field found in the branding admin screens documented", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : no settings page exists to link out from; theming is a deploy-time YAML file", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page", "liferay-dxp": "not checked: no such link found in the style book editor documentation", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -588,9 +690,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Design token set' dropdown", "evidence": { - "nextcloud-theming": "outside the product: no marketplace or community brand sets exist", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Service/ThemesService.php:42-50: only default, light, dark, light-highcontrast, dark-highcontrast, opendyslexic and reduced-motion themes are registered; no community brand sets are shipped or loadable", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : openDesk applies exactly one deployment-configured brand (productName, slogan, primary colour, logos) via theme.yaml.gotmpl; there is no in-product catalogue, picker or gallery of alternative ready-made house styles to choose between", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); grep -rniE 'rijks|nl-design|nldesign|utrecht|dsfr|marianne' helmfile docs: no hits, so no preset catalogue exists", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -617,9 +719,9 @@ }, "reachedOn": "Settings > Administration > Theming: pick a shipped set as a base, then the token editor below it", "evidence": { - "nextcloud-theming": "outside the product: settings form starts from the current live values, no example/starter theme to adapt", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/components/AdminSectionTheming.vue:25-58 and AdminSectionThemingAdvanced.vue:72-124 start from the current live values; no example or starter theme exists to adapt", "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : SharePoint's default themes (Teal, Blue, Orange...) 'have been designed for readability, so you might find them to be useful starting points for creating custom themes'; Entra ID sign-in branding has no such starter gallery, only a blank form", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : \"All default settings can be found in theme.yaml.gotmpl... to overwrite a specific default setting, you can copy the snippet into your own values.yaml.gotmpl and change the values to your need\" - the shipped defaults are explicitly a template to copy and adapt", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:4-11 and docs/theming.md:18-22: the shipped defaults are the template ('review the default configuration... update the files in helmfile/files/theme'); helmfile/environments/{dev,test,prod}/sample.yaml.gotmpl are the override starting points", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : every theme ships a default 'Styles from X Theme' style book that can be duplicated/edited as a starting point instead of building from scratch", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -647,9 +749,9 @@ }, "reachedOn": "nothing reaches it", "evidence": { - "nextcloud-theming": "outside the product: no theme marketplace or gallery in the theming app", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Service/ThemesService.php:42-50: only default, light, dark, light-highcontrast, dark-highcontrast, opendyslexic and reduced-motion themes are registered in code; no theme gallery or download path exists in apps/theming/lib or src (the separate App Store hosts unrelated apps, not themes for this app)", "m365-branding": "not checked: no vendor/community marketplace for SharePoint or Entra sign-in themes found in the docs read", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : openDesk applies exactly one deployment-configured brand (productName, slogan, primary colour, logos) via theme.yaml.gotmpl; there is no in-product catalogue, picker or gallery of alternative ready-made house styles to choose between", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no gallery or download mechanism", "liferay-dxp": "https://marketplace.liferay.com/p/materialized-theme : marketplace.liferay.com lists installable themes (e.g. Materialized Theme, Seven Theme, Mercury Theme) maintained by Liferay and third parties", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -677,9 +779,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Design token set' dropdown (province only)", "evidence": { - "nextcloud-theming": "outside the product: no provincial/waterboard house styles are shipped", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Service/ThemesService.php:42-50: only default, light, dark, light-highcontrast, dark-highcontrast, opendyslexic and reduced-motion themes are registered; no provincial or water board style is shipped", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : openDesk applies exactly one deployment-configured brand (productName, slogan, primary colour, logos) via theme.yaml.gotmpl; there is no in-product catalogue, picker or gallery of alternative ready-made house styles to choose between", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); grep -rniE 'rijks|nl-design|nldesign|utrecht|dsfr|marianne' helmfile docs: no hits, so no preset catalogue exists", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -707,9 +809,9 @@ }, "reachedOn": "Settings > Administration > Theming, dropdown selection then 'Apply selected' in the apply dialog", "evidence": { - "nextcloud-theming": "apps/theming/lib/Controller/ThemingController.php:70-293 : each value (name, colors, logo, background, favicon) is set through its own separate ajax call; there is no single house-style object to apply everything from in one action", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/composables/useAdminThemingValue.ts:25-46 saves each field on its own debounced POST to /ajax/updateStylesheet; images are uploaded one key at a time (lib/Controller/ThemingController.php:220-293); there is no bundle to apply in one action", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding ; https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme ; https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : sign-in branding, the M365 suite-header theme and SharePoint site themes are three separate admin surfaces with no single action that rebrands all of them plus every app at once", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : one edited values file + one `helmfile apply` rebrands Nextcloud (via the management chart), Element, OX App Suite, Xwiki, Jitsi and the Portal/Keycloak screens together - one coordinated deployment action, not an admin-UI click, and it is not instantaneous (redeploy)", + "opendesk": "opendesk@v1.18.2: one values change plus helmfile apply reaches Nextcloud (values-nextcloud-management.yaml.gotmpl:267-296), OX (values-openxchange.yaml.gotmpl:1150-1158), Element (values-element.yaml.gotmpl:20-22), XWiki (xwiki/values.yaml.gotmpl:196,226-228), OpenProject (openproject/values.yaml.gotmpl:92-116), Jitsi (jitsi/values.yaml.gotmpl:68-70); but portal and Keycloak colours need a separate CSS edit (docs/theming.md:31, stylesheet.css:7 hardcodes #571EFA), Collabora is not themed (collabora/values.yaml.gotmpl:45)", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : a style book applies to the pages of one site via its theme; login/administrative themes are excluded ('Style books cannot be used in administrative themes'), so one style book does not cover the whole workspace including login", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -725,7 +827,7 @@ "thematiq": "yes", "nextcloud-theming": "no", "m365-branding": "unknown", - "opendesk": "no", + "opendesk": "partial", "liferay-dxp": "unknown", "tokens-studio": "no", "built": { @@ -736,9 +838,9 @@ }, "reachedOn": "Settings > Administration > Theming, apply dialog shown after selecting a token set", "evidence": { - "nextcloud-theming": "no house-style object exists to diff against the current values before applying", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/composables/useAdminThemingValue.ts:25-46 saves each field on its own debounced POST to /ajax/updateStylesheet; each change is saved as soon as it is made, with no house-style object to diff and no confirmation dialog", "m365-branding": "not checked: no before/after colour-diff dialog found, only instant live substitution when a theme is chosen", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : the theming doc describes only a values file + `helmfile/files/theme` assets directory; no admin screen, preview, diff, trial session or rollback UI for theming is documented", + "opendesk": "opendesk@v1.18.2 docs/requirements.md:177: helmfile requires helm-diff to compare desired against deployed state, and docs/getting-started.md:455 shows helmfile apply with an optional --suppress-diff, so changed values are printed as a manifest diff before they roll out; a CLI diff, not a dialog", "liferay-dxp": "not checked: no before/after colour-diff dialog found in the style book docs, only live preview", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -765,9 +867,9 @@ }, "reachedOn": "Settings > Administration > Theming, apply dialog: per-row checkboxes", "evidence": { - "nextcloud-theming": "not applicable: there is no house style to selectively apply fields from", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/composables/useAdminThemingValue.ts:25-46 saves each field on its own debounced POST to /ajax/updateStylesheet; there is no house style to take a subset of values from", "m365-branding": "not checked: Entra/SharePoint branding screens apply the whole configuration on save, no per-value adoption picker when switching", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : the documented pattern is copying only the specific value snippets you want to change into your own values file while the rest keep openDesk's defaults - granular per-key override, not a tick-list UI", + "opendesk": "opendesk@v1.18.2 docs/theming.md:18-20 and helmfile/bases/environments.yaml.gotmpl:4-13: overrides are per key in the environment values layered over the defaults, so an operator takes over only the keys they copy; per-key, not a tick list", "liferay-dxp": "not checked: no 'tick which tokens to adopt when switching style book' control found; tokens can link to other token values but that is authoring, not a switch-time picker", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -795,9 +897,9 @@ }, "reachedOn": "Settings > Administration > Theming, applying any token set repaints the settings page itself with no reload", "evidence": { - "nextcloud-theming": "apps/theming/src/utils/refreshStyles.ts : swaps the stylesheet href with a cache-busted URL and removes the old node once loaded, repainting without a full page reload", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/utils/refreshStyles.ts:10-27 clones each link.theme with a cache-busted href and removes the old node on load; src/components/AdminSectionThemingAdvanced.vue:76,87,105,112 call it after each colour or image save, so the page repaints without a reload", "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : 'When you choose a theme in the list, those color settings are instantly applied to the page so that you can see what the selected theme will look like'", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : branding is declared as Helm/helmfile values (theme.yaml.gotmpl, customization.yaml.gotmpl) and rolled out with `helmfile apply`; changing it is a deployment/redeploy operation, not a runtime admin action (opposite: requires redeploy)", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page; changes land by redeploy and component jobs", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : the style book editor lets a builder 'preview the effects of a style book on your pages, templates, and page fragments' as they edit, before publishing", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -824,9 +926,9 @@ }, "reachedOn": "Settings > Administration > Theming, mock app-shell preview region", "evidence": { - "nextcloud-theming": "apps/theming/src/components/admin/ColorPickerField.vue:47-76 : the colour picker's own button previews the chosen colour live, but there is no mock of the full app shell (header, navigation, buttons) in the settings page", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/components/admin/ColorPickerField.vue:55-63 paints a real primary NcButton with the colour being picked; there is no mock of the header, navigation or other components in the settings page", "m365-branding": "not checked: the Entra branding wizard assembles settings section by section and shows a labelled diagram of sign-in elements, but no explicit 'live mock of the shell inside the settings page' was described in the docs read", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : the theming doc describes only a values file + `helmfile/files/theme` assets directory; no admin screen, preview, diff, trial session or rollback UI for theming is documented", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : the style book editor previews changes directly on real pages, templates and page fragments as you edit tokens, which covers header/navigation/button chrome in place", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -853,9 +955,9 @@ }, "reachedOn": "Settings > Administration > Theming, component playground, 'Login page & Branding' tab", "evidence": { - "nextcloud-theming": "no login-page preview component found in apps/theming/src/views/AdminTheming.vue or Admin.php; admin must open the real login page to see the result", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/components/admin/FileInputField.vue:130-136 previews only the uploaded image itself; no login-page preview exists in apps/theming/src", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : the 'Review' step shows 'all of the available options... in one list so you can review everything you customized' before you select Create, but this is a settings summary, not a rendered login-page preview", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : the theming doc describes only a values file + `helmfile/files/theme` assets directory; no admin screen, preview, diff, trial session or rollback UI for theming is documented", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page; the Keycloak login style is a CSS file (stylesheet.css:124-197) seen only after deploy", "liferay-dxp": "not checked: style books are excluded from administrative/login themes, so login look is only visible after a theme/client extension is actually deployed, no in-settings login preview documented", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -883,9 +985,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Preview in my session' button next to the dropdown", "evidence": { - "nextcloud-theming": "apps/theming/lib/ThemingDefaults.php:461-475 set() writes directly to appconfig and calls increaseCacheBuster(), which is instance-wide and immediate, not scoped to the editing admin's own session", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ThemingDefaults.php:461-475 set() writes to app config and increaseCacheBuster() (448-453) invalidates caches instance-wide at once; per-user primary colour and background (ThemingDefaults.php:195-201) are personal preferences, not a trial of the admin theme", "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : choosing a theme 'instantly applies' it in the editor's own view, and you 'choose Save... to save your selection, or choose Cancel to revert', i.e. changes stay local until saved", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : the theming doc describes only a values file + `helmfile/files/theme` assets directory; no admin screen, preview, diff, trial session or rollback UI for theming is documented", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); one brand per deployment, NC user colour theming is disabled (opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:16-17)", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style book edits are live-previewed for the editor and only affect everyone once published, but this is an edit-mode draft, not a separately shareable per-user trial session", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -912,9 +1014,9 @@ }, "reachedOn": "Any page while a session preview is active (banner injected app-wide), and the active-preview panel on Settings > Administration > Theming (templates/settings/admin.php:142-153)", "evidence": { - "nextcloud-theming": "no trial mode exists, so no such banner is needed or present", + "nextcloud-theming": "nextcloud/server@v35.0.1 no trial mode exists (apps/theming/lib/ThemingDefaults.php:461-475 applies changes instance-wide immediately), so there is no trial banner in apps/theming/src", "m365-branding": "not checked: no trial-mode banner described in the SharePoint/Entra branding editors", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : the theming doc describes only a values file + `helmfile/files/theme` assets directory; no admin screen, preview, diff, trial session or rollback UI for theming is documented", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no trial concept", "liferay-dxp": "not checked: no trial-mode banner described in the style book editor docs", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -941,9 +1043,9 @@ }, "reachedOn": "Settings > Administration > Theming, active-preview panel 'Publish' button, then confirm in the apply dialog", "evidence": { - "nextcloud-theming": "not applicable: admin changes are already live the moment they are saved (ThemingDefaults::set), there is no separate trial-then-publish step", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ThemingDefaults.php:461-475: admin changes are live the moment they are saved; there is no staged theme to publish", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : the branding wizard's final 'Create'/'Save' step applies the whole configuration to everyone in one action", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : the theming doc describes only a values file + `helmfile/files/theme` assets directory; no admin screen, preview, diff, trial session or rollback UI for theming is documented", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no trial concept", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style book changes are saved/published to the site in one action from the editor", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -957,7 +1059,7 @@ "area": "apply", "name": "Discard a trial theme and return to what everyone else sees.", "thematiq": "yes", - "nextcloud-theming": "partial", + "nextcloud-theming": "no", "m365-branding": "yes", "opendesk": "no", "liferay-dxp": "unknown", @@ -970,9 +1072,9 @@ }, "reachedOn": "Settings > Administration > Theming, active-preview panel 'Discard' button", "evidence": { - "nextcloud-theming": "apps/theming/lib/Controller/ThemingController.php:302-323 undo(setting) reverts one changed field to its previous default, the closest analogue to discarding a change, but it is a manual per-field revert, not a bundled trial discard", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ThemingDefaults.php:495-530 undo() deletes the key and returns the built-in default, not the value everyone saw before; no trial state exists to discard", "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : 'After you've found a theme that you want to use, choose Save to save your selection, or choose Cancel to revert to your current theme'", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : the theming doc describes only a values file + `helmfile/files/theme` assets directory; no admin screen, preview, diff, trial session or rollback UI for theming is documented", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no trial concept", "liferay-dxp": "not checked: no explicit 'discard and revert to the published style book' control was described in the docs read, though the editor implies unsaved changes do not affect other users", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -999,9 +1101,9 @@ }, "reachedOn": "Settings > Administration > Theming, component playground below the token editor", "evidence": { - "nextcloud-theming": "no component-state preview surface (buttons/inputs/note-cards/list items/login card) exists in the settings UI", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/components has only the settings sections, form fields and app-order widgets; no component-state gallery (buttons, inputs, note cards, login card) exists", "m365-branding": "not checked: no component-state playground found in Entra/SharePoint/M365 branding docs", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : the theming doc describes only a values file + `helmfile/files/theme` assets directory; no admin screen, preview, diff, trial session or rollback UI for theming is documented", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : the style book has a dedicated buttons section for 'individual customization of primary, secondary, dark, and light button styling' with live preview on real fragments, but the docs read do not show a dedicated states playground (hover/focus/disabled) covering inputs, note cards and the login card together", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -1017,7 +1119,7 @@ "thematiq": "yes", "nextcloud-theming": "partial", "m365-branding": "unknown", - "opendesk": "unknown", + "opendesk": "partial", "liferay-dxp": "partial", "tokens-studio": "unknown", "built": { @@ -1028,9 +1130,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Let the primary colour drive every component' checkbox", "evidence": { - "nextcloud-theming": "apps/theming/lib/Util.php:70-99 elementColor() and apps/theming/lib/Themes/CommonThemeTrait.php:28-56 derive nearly every element colour from the single primary colour with automatic contrast correction, but there is no explicit toggle to let individual components keep their own colours instead", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Themes/CommonThemeTrait.php:28-69 derives the primary element, hover, light and text colours from the one primary colour with contrast correction (lib/Util.php:70-91); there is no switch to let components keep their own colours", "m365-branding": "not checked: M365/SharePoint theme colours (nav bar, accent, text/icon / accent-background pairs) are global settings, not a per-component lock/unlock choice", - "opendesk": "not checked: theme.yaml.gotmpl documents fixed keys per component but no toggle for whether primary colour overrides component-local colours was found", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:28-29: one 'primary' key fans out to Element (values-element.yaml.gotmpl:21-22), OX (values-openxchange.yaml.gotmpl:571-572,1150), XWiki (:226), OpenProject (:92-97), Jitsi and Nextcloud (values-nextcloud-management.yaml.gotmpl:277); opting a component out takes a per-release customization file (customization.yaml.gotmpl:4-24), and Collabora is deliberately left on its own theme (collabora/values.yaml.gotmpl:45). No switch", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/creating-pages/building-and-managing-content-pages/configuring-fragment-styles.html : 'Users can edit fragment styles only inside the brand/style book limits', implying components normally follow the style book's tokens but a page builder can still adjust individual fragment styles within limits", "tokens-studio": "not checked: no documentation found describing a primary-colour-drives-everything toggle" }, @@ -1057,9 +1159,9 @@ }, "reachedOn": "Settings > Administration > Theming, dropdown + apply dialog", "evidence": { - "nextcloud-theming": "apps/theming/lib/Controller/ThemingController.php:70-167 updateStylesheet() and :221-293 uploadImage() apply admin changes at runtime through the settings screen, no redeploy or config-management run needed", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Controller/ThemingController.php:69-167 updateStylesheet() and 220-293 uploadImage() change the brand at runtime from the admin page (src/components/AdminSectionThemingAdvanced.vue:72-116), no redeploy needed", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding ; https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme ; https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : all three are configured from admin portals at runtime with no application redeployment", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : branding is declared as Helm/helmfile values (theme.yaml.gotmpl, customization.yaml.gotmpl) and rolled out with `helmfile apply`; changing it is a deployment/redeploy operation, not a runtime admin action", + "opendesk": "opendesk@v1.18.2 docs/baseline-requirements.md:191 'Theming MUST be controlled with the deployment'; docs/theming.md:18-22 values only. The stock Nextcloud admin theming page stays enabled (opendesk-nextcloud-image@v2.17.2 config_apps.php:62), so a Nextcloud admin could change Nextcloud-only branding by hand, but that is not what openDesk configures and reaches no other component", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : 'With style books, you can customize the values of frontend tokens without touching any code', a pure admin-UI runtime action", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -1086,9 +1188,9 @@ }, "reachedOn": "nothing reaches it", "evidence": { - "nextcloud-theming": "no scheduling mechanism for theme/value changes exists in the app or its background Jobs", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Jobs holds only MigrateBackgroundImages.php and RestoreBackgroundImageColor.php; no scheduled theme change exists", "m365-branding": "not checked: no scheduled/date-triggered branding switch found for Entra ID or SharePoint theming", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : the theming doc describes only a values file + `helmfile/files/theme` assets directory; no admin screen, preview, diff, trial session or rollback UI for theming is documented", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no scheduling", "liferay-dxp": "https://www.xtivia.com/blog/liferay-dxp-publications-versus-staging/ : Publications group changes into a change set that authors 'publish them to the live site on a schedule', but the docs read do not confirm style book/theme configuration is itself trackable inside a Publication change set", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -1115,9 +1217,9 @@ }, "reachedOn": "nothing reaches it (the audit log at Settings > Administration > Theming shows history but offers no restore action)", "evidence": { - "nextcloud-theming": "apps/theming/lib/ThemingDefaults.php:495-530 undo() only resets a field to the app's built-in default, there is no stored history of prior admin-set values to roll back through", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ThemingDefaults.php:495-497 undo() deletes the app config key; previous values are not stored anywhere, so there is no history to roll back through", "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/organization-assets-library ; https://learn.microsoft.com/en-us/sharepoint/brand-center-overview : brand assets live in ordinary SharePoint document libraries, which carry SharePoint's standard file version history, but the Entra sign-in and M365 org-theme settings themselves have no documented version history", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : branding is declared as Helm/helmfile values (theme.yaml.gotmpl, customization.yaml.gotmpl) and rolled out with `helmfile apply`; changing it is a deployment/redeploy operation, not a runtime admin action : because the brand lives in a values file, git history plus `helm rollback` gives you prior versions, but this is generic Git/Helm mechanics, not a dedicated theme version-history feature", + "opendesk": "opendesk@v1.18.2: the brand is Helm release values (theme.yaml.gotmpl), so reverting the values and redeploying (or helm rollback) restores it; opendesk-nextcloud-image@v2.17.2 functions.php:791-801 reapplies Nextcloud theming when commands change; docs/migrations.md:18 warns app-level rollbacks may need backups. Release history, not a theme history UI", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/publishing-tools/staging : Publications track and can be reverted as change sets over time, which could include site design changes, but no dedicated 'style book version history' UI was found in the style book docs", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -1132,7 +1234,7 @@ "area": "apply", "name": "Reset Nextcloud's own theming values back to stock in one action.", "thematiq": "yes", - "nextcloud-theming": "yes", + "nextcloud-theming": "partial", "m365-branding": "yes", "opendesk": "no", "liferay-dxp": "yes", @@ -1145,9 +1247,9 @@ }, "reachedOn": "Settings > Administration > Theming: selecting 'Nextcloud (default)' opens a confirm dialog with a 'Reset theming' button", "evidence": { - "nextcloud-theming": "apps/theming/lib/Controller/ThemingController.php:331-345 undoAll() plus ThemingDefaults::undoAll() (lib/ThemingDefaults.php:480-487) reset all Nextcloud's own theming values (colors, images, name, slogan, app menu) back to stock in one action", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Controller/ThemingController.php:331-345 undoAll() is routed (appinfo/routes.php:26-29) but no page in apps/theming/src calls it; the reachable resets are per field in the UI (src/components/admin/ColorPickerField.vue:71-80, FileInputField.vue:97-112) and per key on the CLI (lib/Command/UpdateConfig.php:82-86)", "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : 'Reset color: Select this link to reset colors to the default colors'", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : the theming doc describes only a values file + `helmfile/files/theme` assets directory; no admin screen, preview, diff, trial session or rollback UI for theming is documented", + "opendesk": "opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:21-114 only sets keys; no reset-all of Nextcloud theming in openDesk. Stock occ theming:config --reset exists per key but openDesk does not use it except for background (:56)", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : selecting the theme's default 'Styles from X Theme' style book restores 'all of the default values'", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -1163,7 +1265,7 @@ "thematiq": "yes", "nextcloud-theming": "no", "m365-branding": "partial", - "opendesk": "no", + "opendesk": "partial", "liferay-dxp": "partial", "tokens-studio": "no", "built": { @@ -1174,9 +1276,9 @@ }, "reachedOn": "Settings > Administration > Theming, Custom token sets, 'Choose file and upload' (templates/settings/admin.php:179)", "evidence": { - "nextcloud-theming": "apps/theming/lib/Controller/ThemingController.php:48 VALID_UPLOAD_KEYS = ['header','logo','logoheader','background','favicon'] : only images can be uploaded, no CSS/token file upload exists", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Controller/ThemingController.php:48 VALID_UPLOAD_KEYS = header, logo, logoheader, background, favicon; only images can be uploaded, no CSS or token file", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : 'Custom CSS: Upload a custom CSS file to replace the Microsoft default style of the page', but 'Tenants created after January 5, 2026, don't have custom CSS available' and it is being retired entirely", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : the theming doc describes only a values file + `helmfile/files/theme` assets directory; no admin screen, preview, diff, trial session or rollback UI for theming is documented; theming is YAML/Helm values, not a CSS-file upload", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:152-154 styles.portal.main takes a whole CSS file (default opendesk@v1.18.2 helmfile/files/theme/portal/stylesheet.css:5-97, a :root block of custom properties such as --color-accent, --button-primary-bgc) and opendesk@v1.18.2 helmfile/apps/nubus/values-nubus.yaml.gotmpl:403 hands it to the portal; it also styles the Keycloak screens (docs/theming.md:31). Portal and login only", "liferay-dxp": "https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-css-client-extension : a theme CSS client extension overrides 'main.css and clay.css', but it is authored/deployed as a packaged client extension via Gradle (client-extension.yaml + zip to the deploy folder), not a simple admin-facing CSS file upload", "tokens-studio": "https://docs.tokens.studio/manage-settings/token-format and /manage-tokens/token-types/ : Tokens Studio imports/exports token JSON (legacy or W3C DTCG); no CSS-file import path is documented" }, @@ -1203,9 +1305,9 @@ }, "reachedOn": "Settings > Administration > Theming, Custom token sets upload form (same control as CSS upload)", "evidence": { - "nextcloud-theming": "outside the product: no DTCG/W3C design-tokens JSON import path exists anywhere in lib/ or src/", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Controller/ThemingController.php:48 VALID_UPLOAD_KEYS = header, logo, logoheader, background, favicon; no JSON or DTCG import path exists in apps/theming/lib or src", "m365-branding": "not checked: Entra custom CSS is plain CSS, not a W3C Design Tokens (DTCG) JSON file, and no such upload path was found", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : the theming doc describes only a values file + `helmfile/files/theme` assets directory; no admin screen, preview, diff, trial session or rollback UI for theming is documented", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no JSON token format, grep -rni 'dtcg\\|\\$value' helmfile: none", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/developer-guide/style-book-token-definitions : Liferay's frontend-token-definition.json is Liferay's own proprietary schema (frontendTokenCategories/tokens), not the W3C DTCG format, and no DTCG import was found", "tokens-studio": "https://docs.tokens.studio/manage-settings/token-format : \"Tokens Studio supports two JSON formatting standards... W3C DTCG format\", switchable in settings, tokens use $value/$type/$description" }, @@ -1232,9 +1334,9 @@ }, "reachedOn": "Settings > Administration > Theming, upload result panel under the upload form (#nldesign-upload-result, admin.php:183)", "evidence": { - "nextcloud-theming": "not applicable: there is no style/token file upload to validate, only image uploads (validated for mime type only, see aut-upload-security)", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Controller/ThemingController.php:48 VALID_UPLOAD_KEYS = header, logo, logoheader, background, favicon; there is no token file upload to validate (image uploads are checked for type only, lib/ImageManager.php:218-300)", "m365-branding": "not checked: no 'missing/invalid tokens' upload feedback found; Entra branding fields are validated individually (image size/file-size limits), not as a token set", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : the theming doc describes only a values file + `helmfile/files/theme` assets directory; no admin screen, preview, diff, trial session or rollback UI for theming is documented", + "opendesk": "opendesk@v1.18.2: the portal CSS is passed through verbatim (values-nubus.yaml.gotmpl:403); the only check is Nextcloud's own hex test on primary_color (nextcloud/server theming UpdateConfig.php primary_color regex), no token validation", "liferay-dxp": "not checked: no documented message that names which tokens are missing/invalid on deploy of a theme CSS client extension; a malformed extension would fail the Gradle/module deploy generically", "tokens-studio": "https://docs.tokens.studio/token-storage/troubleshooting-common-sync-provider-errors : pulling a malformed/invalid token file surfaces a schema validation error and blocks the load; not itemised per missing token" }, @@ -1261,9 +1363,9 @@ }, "reachedOn": "Server-side gate on the same upload path as aut-upload-css/aut-upload-dtcg; surfaced to the admin as an upload error", "evidence": { - "nextcloud-theming": "row concerns uploaded 'styles'; the product has no style/token upload at all, only image uploads whose mime type is checked (apps/theming/lib/ImageManager.php:218-337 updateImage()/getSupportedUploadImageFormats())", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Controller/ThemingController.php:48 VALID_UPLOAD_KEYS = header, logo, logoheader, background, favicon; there is no style upload at all, so no style sanitiser exists (image uploads are checked for MIME type in lib/ImageManager.php:218-300)", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : Microsoft is 'retiring support for custom CSS layout and positioning properties (such as position, margin, transform, and overflow)... to align with the Microsoft Secure Future Initiative and its focus on identity security and phishing resistance', i.e. specific CSS capabilities are being stripped for security, though this is a property-level restriction/retirement, not a general upload-time sanitiser", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : the theming doc describes only a values file + `helmfile/files/theme` assets directory; no admin screen, preview, diff, trial session or rollback UI for theming is documented", + "opendesk": "opendesk@v1.18.2 values-nubus.yaml.gotmpl:403 passes styles.portal.main unmodified to the portal frontend; no sanitising step in the deployment", "liferay-dxp": "https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-css-client-extension : theme CSS client extensions are code deployed by developers via a build pipeline into the deploy folder, a trusted deployment path with no documented stripping/sanitisation step for script or external-resource loading", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance); tokens are structured JSON values, not executable CSS, and no sanitisation step is documented because nothing is rendered" }, @@ -1291,9 +1393,9 @@ }, "reachedOn": "Settings > Administration > Theming, Custom token sets list (#nldesign-custom-set-list, admin.php:184) with Download/Delete buttons per row; activation via the main token-set dropdown", "evidence": { - "nextcloud-theming": "outside the product: there is nothing to list/activate/delete since no custom house styles can be uploaded", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Controller/ThemingController.php:48 VALID_UPLOAD_KEYS = header, logo, logoheader, background, favicon; no uploaded house styles exist to list, activate or delete", "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview ; https://learn.microsoft.com/en-us/sharepoint/brand-center-overview : custom SharePoint themes created via the brand center appear in the 'Change the Look' picker for site owners; Entra ID has only one default plus per-language brandings, not a general list/delete of uploaded styles", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : openDesk applies exactly one deployment-configured brand (productName, slogan, primary colour, logos) via theme.yaml.gotmpl; there is no in-product catalogue, picker or gallery of alternative ready-made house styles to choose between", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); one active set, no list", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style books are created, listed and one marked default under Site Menu -> Design -> Style Books, matching list/activate/delete", "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/ and /manage-tokens/token-sets/ : token sets can be created, enabled/disabled, renamed and deleted from the Tokens Studio sidebar" }, @@ -1320,9 +1422,9 @@ }, "reachedOn": "Settings > Administration > Theming, Custom token sets list, 'Download' button per row", "evidence": { - "nextcloud-theming": "outside the product: no uploaded house style exists to export", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Controller/ThemingController.php:48 VALID_UPLOAD_KEYS = header, logo, logoheader, background, favicon; no uploaded house style exists to download", "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/dev/general-development/how-to-deploy-a-custom-theme-in-sharepoint : SharePoint theme JSON can be exported/deployed with PnP PowerShell/CSOM, but this needs developer tooling, not an admin 'download' button", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : openDesk applies exactly one deployment-configured brand (productName, slogan, primary colour, logos) via theme.yaml.gotmpl; there is no in-product catalogue, picker or gallery of alternative ready-made house styles to choose between", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); the operator's own values file is the only copy, there is no export function", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/exporting-and-importing-style-books : style books can be exported as a zip (style-book.json + frontend-token-values.json) or LAR file 'to share them between Liferay installations'", "tokens-studio": "https://docs.tokens.studio/token-storage/remote-push-pull-changes : tokens can be pushed/exported as JSON files for reuse elsewhere" }, @@ -1349,9 +1451,9 @@ }, "reachedOn": "Settings > Administration > Theming, Custom token sets upload form (conversion runs server-side on upload, no separate UI)", "evidence": { - "nextcloud-theming": "outside the product: no NL Design System token converter exists", + "nextcloud-theming": "nextcloud/server@v35.0.1 grep of apps/theming/lib and src for token import or conversion finds nothing; apps/theming/lib/Controller/ThemingController.php:48 VALID_UPLOAD_KEYS = header, logo, logoheader, background, favicon", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : openDesk applies exactly one deployment-configured brand (productName, slogan, primary colour, logos) via theme.yaml.gotmpl; there is no in-product catalogue, picker or gallery of alternative ready-made house styles to choose between", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); grep -rniE 'rijks|nl-design|nldesign|utrecht|dsfr|marianne' helmfile docs: no hits, so no preset catalogue exists", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "https://docs.tokens.studio/manage-settings/token-format : generic legacy/DTCG JSON import will accept any spec-conformant token source including an NL Design System export, but no dedicated NLDS converter is documented" }, @@ -1378,9 +1480,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Custom token overrides' panel (#nldesign-token-editor, admin.php:291)", "evidence": { - "nextcloud-theming": "apps/theming/src/components/admin/ColorPickerField.vue plus apps/theming/lib/Controller/ThemingController.php:115-130 : a colour picker exists, but only for exactly two tokens (primary_color, background_color), far short of a full token vocabulary", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/components/AdminSectionThemingAdvanced.vue:72-92 mounts ColorPickerField for exactly two values, primaryColor and backgroundColor (validated at lib/Controller/ThemingController.php:115-130); no other token is editable", "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/brand-center-overview : brand center lets you 'select your primary, secondary colors using your brand colors or by adding a custom color'; https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : Colors tab has pickers for nav bar/text/icon/accent colours", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : the theming doc describes only a values file + `helmfile/files/theme` assets directory; no admin screen, preview, diff, trial session or rollback UI for theming is documented", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : 'colors support hex codes, custom pickers', and since DXP 2025.Q4 the style book colour editor supports 8-digit hex with alpha", "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/ : colour tokens are edited via an in-plugin colour picker" }, @@ -1407,9 +1509,9 @@ }, "reachedOn": "Settings > Administration > Theming, token editor tab bar (.nldesign-tabs inside #nldesign-token-editor)", "evidence": { - "nextcloud-theming": "apps/theming/src/components/AdminSectionTheming.vue and Admin.php:57-83 : the admin form is a flat list of fields (name, url, slogan, 2 colours, images, legal urls), not tabs of grouped tokens", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/views/AdminTheming.vue:13-16: the page is three stacked sections (Theming, Background and color, Navigation bar settings), not tabs of grouped tokens", "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : the theme editor is organised into General / Logos / Colors tabs, a coarser grouping than per-token-category tabs", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : the theming doc describes only a values file + `helmfile/files/theme` assets directory; no admin screen, preview, diff, trial session or rollback UI for theming is documented", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : the style book editor is organised into sections such as colour, typography, spacing, buttons and general settings, matching grouped/tabbed token browsing", "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/ : the plugin groups the 24 token types (colour, typography, dimension, etc.) into categorised sections/token sets in its sidebar UI" }, @@ -1425,7 +1527,7 @@ "thematiq": "yes", "nextcloud-theming": "yes", "m365-branding": "partial", - "opendesk": "no", + "opendesk": "partial", "liferay-dxp": "unknown", "tokens-studio": "unknown", "built": { @@ -1436,9 +1538,9 @@ }, "reachedOn": "Settings > Administration > Theming, per-token reset button in the token editor rows (.nldesign-reset-btn)", "evidence": { - "nextcloud-theming": "apps/theming/src/components/admin/ColorPickerField.vue (Reset to default button) calling useAdminThemingValue's reset(), backed by apps/theming/lib/Controller/ThemingController.php:302-323 undo(setting), reverts one field without touching the others", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/components/admin/ColorPickerField.vue:71-80 shows a reset button per field that calls reset() in src/composables/useAdminThemingValue.ts:51-64, posting to /ajax/undoChanges (lib/Controller/ThemingController.php:302-323), which reverts that one field only", "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : only one 'Reset color' link is documented, which resets colours together rather than confirming a per-token reset", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : the theming doc describes only a values file + `helmfile/files/theme` assets directory; no admin screen, preview, diff, trial session or rollback UI for theming is documented", + "opendesk": "opendesk@v1.18.2 helmfile/bases/environments.yaml.gotmpl:4-13 layers environment values over helmfile/environments/default/theme.yaml.gotmpl, so deleting one override key reverts that key to the default on the next deploy while others stay; a file edit, not a reset control", "liferay-dxp": "not checked: no explicit 'reset this one token only' control documented for the style book editor", "tokens-studio": "not checked: no documentation found describing a per-token \"reset to source value\" action distinct from git/version revert" }, @@ -1465,9 +1567,9 @@ }, "reachedOn": "Settings > Administration > Theming, token editor color pickers/text inputs; effect visible immediately on the settings page itself", "evidence": { - "nextcloud-theming": "apps/theming/src/components/admin/ColorPickerField.vue:31-34 updates its own preview button live while dragging the picker, and refreshStyles.ts swaps the served stylesheet after save without reload, but there is no full-page live repaint while still editing/unsaved", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/components/admin/ColorPickerField.vue:33-35,59-62 repaints only its own preview button while picking; the rest of the page repaints after the debounced save via refreshStyles (src/utils/refreshStyles.ts:10-27)", "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : 'those color settings are instantly applied to the page' when a theme is chosen, before saving", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : the theming doc describes only a values file + `helmfile/files/theme` assets directory; no admin screen, preview, diff, trial session or rollback UI for theming is documented", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style book token edits are previewed live on pages/templates/fragments before publishing", "tokens-studio": "https://docs.tokens.studio/manage-settings/token-format (and general plugin behaviour docs): edited token values apply immediately to the Figma canvas as you type, before any push/save" }, @@ -1483,7 +1585,7 @@ "thematiq": "yes", "nextcloud-theming": "yes", "m365-branding": "yes", - "opendesk": "no", + "opendesk": "yes", "liferay-dxp": "yes", "tokens-studio": "yes", "built": { @@ -1494,9 +1596,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Save overrides' button in the token editor (#nldesign-save-btn)", "evidence": { - "nextcloud-theming": "apps/theming/lib/ThemingDefaults.php:461-475 set() persists values via IAppConfig to the database, applied instance-wide and surviving restarts", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ThemingDefaults.php:461-475 set() persists values in IAppConfig (the database), read back for every user by getDefaultColorPrimary() (237-246)", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding ; https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : saved branding/theme settings are tenant configuration that persists and applies to everyone", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : the theming doc describes only a values file + `helmfile/files/theme` assets directory; no admin screen, preview, diff, trial session or rollback UI for theming is documented", + "opendesk": "opendesk@v1.18.2: overrides live in the operator's values files and are re-rendered on every helmfile apply for all users; opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:118 writes them into Nextcloud's config, OpenProject seeds them on every deployment (theme.yaml.gotmpl:130-131)", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : published style book token values are saved site configuration that persists and applies to every visitor", "tokens-studio": "https://docs.tokens.studio/token-storage/remote-push-pull-changes : token edits are saved to the document / pushed to the sync provider and are then pulled by every team member" }, @@ -1512,7 +1614,7 @@ "thematiq": "yes", "nextcloud-theming": "partial", "m365-branding": "partial", - "opendesk": "no", + "opendesk": "yes", "liferay-dxp": "yes", "tokens-studio": "yes", "built": { @@ -1523,9 +1625,9 @@ }, "reachedOn": "Settings > Administration > Theming, token editor header 'Download'/'Upload' controls (#nldesign-export-btn, #nldesign-import-input)", "evidence": { - "nextcloud-theming": "apps/theming/lib/Command/UpdateConfig.php:21-131 : occ theming:config can get/set one key at a time for scripting onto another instance, but there is no single export/import file of the whole configuration", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Command/UpdateConfig.php:64-75 prints all configured values and 88-127 sets one key per call, so values can be scripted across instances; there is no export or import file", "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/dev/general-development/how-to-deploy-a-custom-theme-in-sharepoint : SharePoint theme JSON can be uploaded to the Theme Gallery and deployed to another site/tenant via PnP tooling, which needs developer/PowerShell skills rather than a built-in export-then-import admin flow", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : openDesk applies exactly one deployment-configured brand (productName, slogan, primary colour, logos) via theme.yaml.gotmpl; there is no in-product catalogue, picker or gallery of alternative ready-made house styles to choose between", + "opendesk": "opendesk@v1.18.2 helmfile/bases/environments.yaml.gotmpl:4-13: overrides are plain files (helmfile/environments//*.yaml.gotmpl) that are reused as-is on another deployment", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/exporting-and-importing-style-books : style books export to a zip or LAR file and can be imported 'to share them between Liferay installations'", "tokens-studio": "https://docs.tokens.studio/token-storage/remote-push-pull-changes : tokens export/import as JSON files, portable to another Figma file or instance" }, @@ -1539,9 +1641,9 @@ "area": "authoring", "name": "Add your own free-form CSS rules for things tokens cannot express.", "thematiq": "yes", - "nextcloud-theming": "no", + "nextcloud-theming": "partial", "m365-branding": "partial", - "opendesk": "no", + "opendesk": "partial", "liferay-dxp": "yes", "tokens-studio": "no", "built": { @@ -1552,9 +1654,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Custom CSS' section (#nldesign-custom-css, admin.php:297)", "evidence": { - "nextcloud-theming": "apps/theming/lib/ITheme.php:96 getCustomCss() only returns hardcoded CSS from the shipped PHP theme classes (e.g. HighContrastTheme.php:133, DyslexiaFont.php:53); there is no admin-facing free-form CSS field", + "nextcloud-theming": "nextcloud/server@v35.0.1 no admin CSS field exists in apps/theming (ITheme::getCustomCss() returns only shipped CSS, e.g. lib/Themes/HighContrastTheme.php:133); the server does load extra CSS from a legacy theme folder on disk when config key theme is set (lib/private/Template/ResourceLocator.php:58-67, CSSResourceLocator.php:62-67, config/config.sample.php:2463-2469), and Admin.php:46-49 warns about it", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : custom CSS upload exists for things the branding form fields cannot express, but is deprecated for new tenants and being retired", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : the theming doc describes only a values file + `helmfile/files/theme` assets directory; no admin screen, preview, diff, trial session or rollback UI for theming is documented; portalStylesheets.css is an operator-edited file for Portal/Keycloak only, not a general per-house-style free-form CSS feature", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:152-154 free-form CSS for the portal and Keycloak screens (values-nubus.yaml.gotmpl:403); XWiki takes a lessCode property (xwiki/values.yaml.gotmpl:230) overridable per release; Nextcloud gets no custom CSS (image config_apps.php lists no custom CSS app), Element only two CSS variables (values-element.yaml.gotmpl:20-22)", "liferay-dxp": "https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-css-client-extension : 'the CSS in these files is added to the styling already used in your theme... the client extension's CSS overrides the styling already on the page', explicitly for cases tokens cannot express", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance); Tokens Studio only defines structured, typed tokens, not free-form CSS" }, @@ -1581,9 +1683,9 @@ }, "reachedOn": "Settings > Administration > Theming, Custom CSS save button (#nldesign-custom-css-save) surfaces validator errors in #nldesign-custom-css-feedback", "evidence": { - "nextcloud-theming": "not applicable: no admin-authored custom CSS input exists to sanitise", + "nextcloud-theming": "nextcloud/server@v35.0.1 lib/private/Template/CSSResourceLocator.php:62-67 appends legacy theme CSS files as they are on disk with no check; the theming app has no custom CSS input to sanitise", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : Microsoft is removing specific 'layout and positioning' CSS properties from allowed custom CSS for security reasons, which is a restriction/removal rather than an active clean-on-save sanitiser, and custom CSS is being retired altogether", - "opendesk": "not applicable: no free-form CSS authoring feature exists to sanitise", + "opendesk": "opendesk@v1.18.2 values-nubus.yaml.gotmpl:403: CSS is passed verbatim, no server check", "liferay-dxp": "not checked: no server-side checking/cleaning of theme CSS client extension content was documented; it is developer-authored code deployed through the build pipeline", "tokens-studio": "not applicable: no free-form CSS authoring feature exists to sanitise" }, @@ -1600,7 +1702,7 @@ "thematiq": "yes", "nextcloud-theming": "no", "m365-branding": "no", - "opendesk": "unknown", + "opendesk": "partial", "liferay-dxp": "yes", "tokens-studio": "partial", "built": { @@ -1611,9 +1713,9 @@ }, "reachedOn": "Settings > Administration > Theming, token editor rows for component tokens (visible once 'Let the primary colour drive every component' is switched off)", "evidence": { - "nextcloud-theming": "outside the product: tokens are not scoped per component type, only two global colours plus images exist", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Themes/DefaultTheme.php:80-275 defines global variables only and the admin can set only two global colours (apps/theming/lib/Controller/ThemingController.php:74-147); no per-component tokens", "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : colours (nav bar, accent, text, icon) are single global settings, no per-component-type token layer documented", - "opendesk": "not checked: theme.yaml.gotmpl assigns some keys per component (e.g. primary only to Element/OX/Xwiki/Jitsi) but this is fixed by the template, not an admin-adjustable per-component scope", + "opendesk": "opendesk@v1.18.2 helmfile/files/theme/portal/stylesheet.css:68-85 defines button-scoped tokens (--button-primary-bgc, --button-bgc-hover, ...) separate from the palette, and OX and OpenProject take component keys (values-openxchange.yaml.gotmpl:1154-1158 list and folder colours, openproject/values.yaml.gotmpl:92 primary button colour); theme.yaml itself exposes only a palette", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : the style book has a distinct buttons section ('individual customization of primary, secondary, dark, and light button styling') separate from the general colour palette", "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-sets/ : tokens can be split into multiple token sets (e.g. a button-only set) applied independently in Figma, though this scopes design tokens, not a live app's rendered components" }, @@ -1640,9 +1742,9 @@ }, "reachedOn": "Automatic on upload (Settings > Administration > Theming, Custom token sets upload); instance-wide on/off toggle at #nldesign-dark-variants", "evidence": { - "nextcloud-theming": "apps/theming/lib/Themes/DarkTheme.php reuses the same admin-set primary colour through CommonThemeTrait::generatePrimaryVariables() to auto-derive a dark palette, served via the '(prefers-color-scheme: dark)' media query", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Themes/DarkTheme.php:78 feeds the admin primary colour through generatePrimaryVariables() against the dark background, and DarkTheme.php:38-39 applies it under (prefers-color-scheme: dark)", "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme ; https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : dark-theme logos ('Square logo (dark theme)', 'alternate logo... optimized for use in Microsoft 365 dark themes') must be uploaded manually, there is no automatic derivation of a dark palette from the light one", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : no dark-mode key or automatic derivation is present in theme.yaml.gotmpl", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:27-47 has no dark variant and nothing derives one; grep -rni dark helmfile/apps: no hits", "liferay-dxp": "not checked: no automatic dark-variant generation for style book token values was found; SharePoint's own inverted themes derive dark neutrals from an isInverted flag, but that mechanism was documented for SharePoint site theming (the m365-branding key), not for Liferay style books", "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/color/modified : \"Modified Colors\" (pro) lets you darken/lighten a base colour by a percentage, useful for building a dark variant, but it is a manual per-token modifier, not a one-click \"generate dark theme\" action" }, @@ -1658,7 +1760,7 @@ "thematiq": "partial", "nextcloud-theming": "no", "m365-branding": "unknown", - "opendesk": "no", + "opendesk": "partial", "liferay-dxp": "yes", "tokens-studio": "yes", "built": { @@ -1669,9 +1771,9 @@ }, "reachedOn": "Settings > Administration > Theming, DTCG upload only (aliases are read and flattened, not preserved as an editable semantic layer)", "evidence": { - "nextcloud-theming": "outside the product: CSS variables are hardcoded per theme class, not defined as references between tokens", + "nextcloud-theming": "nextcloud/server@v35.0.1 aliases exist only as fixed code (e.g. apps/theming/lib/Themes/CommonThemeTrait.php:63-65 --color-primary-element-light => var(--color-primary-light)); an admin cannot define or change references between tokens", "m365-branding": "not checked: M365/SharePoint colour fields are independent values, no token-references-token mechanism documented", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : theme.yaml.gotmpl is a flat key/value list, not a referencing/aliasing system", + "opendesk": "opendesk@v1.18.2 helmfile/files/theme/portal/stylesheet.css:16-27,68-85 builds semantic tokens as var() references (--bgc-content-header: var(--bgc-content-container), --button-bgc: var(--color-accent)); opendesk@v1.18.2 xwiki/values.yaml.gotmpl:218-225 points link and button colours at @brand-primary; the theme.yaml colours themselves are flat values", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style book colours support 'linking to other style book token values', i.e. one token can reference another so a change flows through", "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-values/references : \"When the value of a Token is the Name of an existing Token... wrapped in curly brackets, it will inherit its value\" - unlimited reference layers, described as the W3C \"alias token\" concept" }, @@ -1698,9 +1800,9 @@ }, "reachedOn": "nothing reaches it", "evidence": { - "nextcloud-theming": "outside the product: no expression-based token computation exists", + "nextcloud-theming": "nextcloud/server@v35.0.1 derived values are computed in fixed PHP (apps/theming/lib/Util.php:109-122 mix, lighten, darken); no admin-authored expressions exist", "m365-branding": "not checked: no expression/computed-value support found for M365/SharePoint theme values", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw)", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:31,40-41: tints primary15/35/65 are hand-entered hex values, not computed; no expressions", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/developer-guide/style-book-token-definitions : frontend token definitions describe simple typed values (defaultValue/label/type/validValues), no arithmetic-expression support was found", "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-values/math : math equations like `{spacing.md} * 2` are supported for any numeric token type (dimension, spacing, sizing, font size, etc.)" }, @@ -1727,9 +1829,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Per-group theming' section (#nldesign-group-theming)", "evidence": { - "nextcloud-theming": "outside the product: only one active brand (primary/background colour, logo) exists instance-wide, no multiple brands maintained in one source", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ThemingDefaults.php:237-258 reads one primary_color and one background_color from app config; only one brand exists per instance", "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : 'you can create multiple themes for the people in your organization... add or update a default theme... and create up to four additional group themes'", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : openDesk applies exactly one deployment-configured brand (productName, slogan, primary colour, logos) via theme.yaml.gotmpl; there is no in-product catalogue, picker or gallery of alternative ready-made house styles to choose between; one values file = one brand per deployment", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); one theme tree per deployment", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : a site can hold several style books (one default) that can be switched, and virtual instances add fully separate brands per tenant", "tokens-studio": "https://docs.tokens.studio/manage-themes/themes-overview : Themes (pro) let you maintain and switch between any number of brands/themes from one token source; \"a multi-brand design system may have four or forty brands to switch between\"" }, @@ -1756,9 +1858,9 @@ }, "reachedOn": "nothing reaches it", "evidence": { - "nextcloud-theming": "outside the product: no Figma integration exists", + "nextcloud-theming": "nextcloud/server@v35.0.1 no Figma or design-tool integration in apps/theming/lib or src", "m365-branding": "not checked: no Figma synchronisation found in Entra/SharePoint/M365 branding docs", - "opendesk": "not applicable: openDesk is not a design-authoring tool", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no design-tool integration", "liferay-dxp": "not checked: no Figma synchronisation found in the style book/frontend-token-definition docs", "tokens-studio": "https://docs.tokens.studio/ : Tokens Studio for Figma is precisely the plugin that keeps a token source in sync with Figma design files (its core purpose)" }, @@ -1774,7 +1876,7 @@ "thematiq": "no", "nextcloud-theming": "no", "m365-branding": "unknown", - "opendesk": "no", + "opendesk": "yes", "liferay-dxp": "partial", "tokens-studio": "yes", "built": { @@ -1784,9 +1886,9 @@ }, "reachedOn": "nothing reaches it", "evidence": { - "nextcloud-theming": "outside the product: theming values live in the appconfig database, not a Git-backed token source", + "nextcloud-theming": "nextcloud/server@v35.0.1 values live in app config (apps/theming/lib/ThemingDefaults.php:461-475), not a Git-backed token source", "m365-branding": "not checked: no git-based token source/PR workflow found for Entra/SharePoint/M365 branding, which is configured through admin portals", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : branding is declared as Helm/helmfile values (theme.yaml.gotmpl, customization.yaml.gotmpl) and rolled out with `helmfile apply`; changing it is a deployment/redeploy operation, not a runtime admin action (openDesk's own deployment repo is git-versioned, but that is the deployment config, not a thematiq-like authoring workflow)", + "opendesk": "opendesk@v1.18.2: the token source is plain files in the helmfile repository (theme.yaml.gotmpl, helmfile/files/theme/**), and docs/enhanced-configuration/gitops.md documents deploying from Git with Argo CD", "liferay-dxp": "https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-css-client-extension : theme CSS client extensions are built and deployed from a Liferay Workspace project (Gradle-based), a source layout that is normally kept in git, though the docs do not describe a PR-based sync feature as such", "tokens-studio": "https://docs.tokens.studio/token-storage/remote/sync-git-github : two-way GitHub sync with branches, plus a \"Create a Pull Request\" button that opens the provider's PR flow; GitLab, Bitbucket and Azure DevOps are also supported (https://docs.tokens.studio/token-storage-and-sync/sync-provider-add)" }, @@ -1812,9 +1914,9 @@ }, "reachedOn": "nothing reaches it", "evidence": { - "nextcloud-theming": "outside the product: no multi-platform token export (CSS/iOS/Android/JSON) exists", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming exposes CSS (lib/Controller/ThemingController.php:403-443) and capabilities JSON (lib/Capabilities.php:80-144); no token export to iOS, Android or other platform formats", "m365-branding": "not checked: no cross-platform (iOS/Android) token export found for M365/SharePoint branding", - "opendesk": "not applicable", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); values are rendered only into the bundled components", "liferay-dxp": "not checked: frontend token definitions target the web portal's CSS only; no iOS/Android export was found", "tokens-studio": "https://docs.tokens.studio/transform-tokens/style-dictionary : Style Dictionary + the @tokens-studio/sd-transforms package export the same token source to CSS, iOS, Android, JSON and other platforms" }, @@ -1840,9 +1942,9 @@ }, "reachedOn": "nothing reaches it as a single simple form; closest is the full token editor, which is not colour-only", "evidence": { - "nextcloud-theming": "apps/theming/lib/Settings/Admin.php:67-83 exposes exactly primaryColor, backgroundColor and a logo upload as the core branding form, matching a simple 'colour + colour + logo' setup", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/components/AdminSectionThemingAdvanced.vue:72-116: a simple form with primary colour, background colour, background image, favicon, logo and header logo", "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : the theme form is essentially logo + a handful of colour fields (nav bar, accent, text/icon), matching a simple primary-colour/background/logo form", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : setting a brand means editing/overriding the full theme.yaml.gotmpl (colours, texts, many imagery keys), not a 3-field simple form", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page; the stock Nextcloud form stays enabled but openDesk sets the brand through deploy values", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : a style book exposes many token categories beyond colour/logo (typography, spacing, buttons...), so setting only 3 fields is possible but is not a distinct 'simple mode'", "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/ : Tokens Studio is a full structured token editor; no simplified \"colour + background + logo\" quick-brand form is documented" }, @@ -1858,7 +1960,7 @@ "thematiq": "yes", "nextcloud-theming": "no", "m365-branding": "unknown", - "opendesk": "unknown", + "opendesk": "no", "liferay-dxp": "unknown", "tokens-studio": "no", "built": { @@ -1869,9 +1971,9 @@ }, "reachedOn": "Applied automatically whenever a house style using these fonts is active; not a distinct admin control", "evidence": { - "nextcloud-theming": "apps/theming/lib/Themes/DefaultTheme.php:203 hardcodes a system-ui/OS font stack (no Fira Sans/Inter); the only bundled alternate font is OpenDyslexic for the accessibility toggle, not a house-style font", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Themes/DefaultTheme.php:203 sets --font-face to the operating system font stack; the only bundled font is OpenDyslexic for the accessibility toggle (apps/theming/fonts), no Fira Sans or Inter", "m365-branding": "not checked: M365/SharePoint default typography is Microsoft's own fonts (e.g. Segoe UI), not Fira Sans/Inter, and no self-hosted open-font bundle for org branding was found", - "opendesk": "not checked: theme.yaml.gotmpl documents colours/imagery/text keys but font files/CSP were not covered on the fetched pages", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl: no font key for the web UI (only OpenProject PDF export fonts by URL, :135-145); grep -n font-family opendesk@v1.18.2 helmfile/files/theme/portal/stylesheet.css: none", "liferay-dxp": "not checked: Liferay's default Clay/Lexicon typography was not documented as Fira Sans/Inter, and font tokens reference font-family names such as 'sans-serif'/'Courier New', not a bundled open-font set", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance); Tokens Studio stores a font family name as a token value, it does not bundle or serve font files" }, @@ -1885,9 +1987,9 @@ "area": "typography", "name": "Keep typography working on an air-gapped instance under the default content security policy.", "thematiq": "yes", - "nextcloud-theming": "partial", + "nextcloud-theming": "yes", "m365-branding": "unknown", - "opendesk": "unknown", + "opendesk": "no", "liferay-dxp": "unknown", "tokens-studio": "no", "built": { @@ -1898,9 +2000,9 @@ }, "reachedOn": "Works automatically under Nextcloud's default CSP; no admin control needed", "evidence": { - "nextcloud-theming": "apps/theming/lib/Themes/DyslexiaFont.php:54-55 serves the one bundled font (OpenDyslexic) from the instance itself via linkTo('theming','fonts/...'), and the default UI uses the OS system font stack with no external fetch, so typography works air-gapped even though there is no 'house style font' concept", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Themes/DefaultTheme.php:203 uses system fonts only and lib/Themes/DyslexiaFont.php:53-71 serves OpenDyslexic from the instance via linkTo(); grep of apps/theming/lib/Themes finds no external font URL, so typography works offline under the default CSP", "m365-branding": "not checked: Microsoft 365/SharePoint/Entra ID are cloud SaaS services; an air-gapped instance is outside the product", - "opendesk": "not checked", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:135-145: the only font setting is OpenProject PDF export fonts as http(s) URLs; there is no brand web typography to keep working, and issue #420 notes XWiki EE needs internet to start", "liferay-dxp": "not checked: Liferay DXP can run on-premises/air-gapped, but whether style book fonts (and any external Google-Fonts-style references) keep working under a strict default CSP with no internet access was not confirmed in the docs read", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -1916,7 +2018,7 @@ "thematiq": "yes", "nextcloud-theming": "no", "m365-branding": "yes", - "opendesk": "unknown", + "opendesk": "no", "liferay-dxp": "no", "tokens-studio": "no", "built": { @@ -1927,9 +2029,9 @@ }, "reachedOn": "Settings > Administration > Theming, Custom fonts, 'Choose font and upload' (admin.php:382)", "evidence": { - "nextcloud-theming": "apps/theming/lib/Controller/ThemingController.php:48 VALID_UPLOAD_KEYS has no font entry; ImageManager::SUPPORTED_IMAGE_KEYS likewise excludes fonts", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Controller/ThemingController.php:48 VALID_UPLOAD_KEYS = header, logo, logoheader, background, favicon and lib/ImageManager.php:25 SUPPORTED_IMAGE_KEYS: no font upload; open request github.com/nextcloud/server/issues/46043", "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/brand-fonts : brand fonts are 'uploaded and managed within the SharePoint brand center'; supported file types are TrueType (.ttf), OpenType (.otf), WOFF and WOFF2, up to 10 MB", - "opendesk": "not checked", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:135-145: fonts only for OpenProject PDF exports, as .ttf URLs (openproject/values.yaml.gotmpl:106-116); no webfont for any UI", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/developer-guide/style-book-token-definitions : font tokens are typed string values with a defaultValue and a list of valid font-family names (e.g. 'sans-serif', 'Courier New'); no font-FILE upload mechanism for style books was found", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -1945,7 +2047,7 @@ "thematiq": "yes", "nextcloud-theming": "no", "m365-branding": "yes", - "opendesk": "unknown", + "opendesk": "no", "liferay-dxp": "unknown", "tokens-studio": "no", "built": { @@ -1956,9 +2058,9 @@ }, "reachedOn": "Settings > Administration > Theming, Custom fonts upload result (#nldesign-font-upload-result, admin.php:386)", "evidence": { - "nextcloud-theming": "not applicable: no font upload path exists to validate", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Controller/ThemingController.php:48 VALID_UPLOAD_KEYS = header, logo, logoheader, background, favicon; no font upload path exists to validate", "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/brand-fonts : only .ttf/.otf/.woff/.woff2 are accepted and 'Font file Size Limit: 10 MB'", - "opendesk": "not checked", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:140 'Only .ttf font files are supported' is a comment; no check in openproject/values.yaml.gotmpl:106-116", "liferay-dxp": "not checked: no font-file upload/validation exists for style book font tokens (see typ-upload-font)", "tokens-studio": "not applicable: no font upload feature" }, @@ -1974,7 +2076,7 @@ "thematiq": "yes", "nextcloud-theming": "no", "m365-branding": "yes", - "opendesk": "unknown", + "opendesk": "no", "liferay-dxp": "unknown", "tokens-studio": "no", "built": { @@ -1985,9 +2087,9 @@ }, "reachedOn": "Settings > Administration > Theming, Custom fonts list (#nldesign-font-list)", "evidence": { - "nextcloud-theming": "not applicable: no uploaded fonts exist to list or delete", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Controller/ThemingController.php:48 VALID_UPLOAD_KEYS = header, logo, logoheader, background, favicon; no uploaded fonts exist to list or delete", "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/brand-fonts : custom fonts live in the Brand Fonts library where you can 'Edit the Visible property... to control the availability' and remove a font tenant-wide with Remove-SPOFontFile", - "opendesk": "not checked", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:135-145: fonts are URLs in values, no font store", "liferay-dxp": "not checked: no font-file library to list/delete exists for style books (fonts are referenced by name in tokens, not uploaded files)", "tokens-studio": "not applicable: no font upload feature" }, @@ -2003,7 +2105,7 @@ "thematiq": "yes", "nextcloud-theming": "no", "m365-branding": "partial", - "opendesk": "unknown", + "opendesk": "no", "liferay-dxp": "no", "tokens-studio": "no", "built": { @@ -2014,9 +2116,9 @@ }, "reachedOn": "The Nextcloud login page (font loads via the publicly-served /fonts/css and /fonts/{id}.woff2 routes)", "evidence": { - "nextcloud-theming": "not applicable: no organisation font upload exists to show anywhere, including the login page", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Controller/ThemingController.php:48 VALID_UPLOAD_KEYS = header, logo, logoheader, background, favicon; no organisation font can be uploaded, so none reaches the login page", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : sign-in page font could only be affected via the deprecated custom-CSS override, since the SharePoint brand-center Brand Fonts library is a separate surface not documented as reaching the Entra sign-in page", - "opendesk": "not checked", + "opendesk": "opendesk@v1.18.2 helmfile/files/theme/portal/stylesheet.css:124-197 Keycloak login rules set no font-family; no font key in theme.yaml", "liferay-dxp": "Liferay DXP style book docs: style books 'cannot be used in administrative themes', so a style-book font token cannot reach the login page", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -2043,9 +2145,9 @@ }, "reachedOn": "Settings > Administration > Theming, Marianne licence gate (#nldesign-marianne-gate)", "evidence": { - "nextcloud-theming": "outside the product: no Marianne typeface or entitlement gating exists", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/fonts holds only OpenDyslexic-Regular.otf and OpenDyslexic-Bold.otf; no Marianne typeface or entitlement check exists", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "not applicable: openDesk is the German sovereign-workplace bundle, not a French one; no Marianne-gating feature found", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); grep -rniE 'rijks|nl-design|nldesign|utrecht|dsfr|marianne' helmfile docs: no hits, so no preset catalogue exists", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "not applicable / outside the product" }, @@ -2061,7 +2163,7 @@ "thematiq": "yes", "nextcloud-theming": "no", "m365-branding": "partial", - "opendesk": "unknown", + "opendesk": "partial", "liferay-dxp": "yes", "tokens-studio": "yes", "built": { @@ -2072,9 +2174,9 @@ }, "reachedOn": "Settings > Administration > Theming, token editor 'Typography' tab (font family); size/weight are per-house-style tokens, not user-editable overrides", "evidence": { - "nextcloud-theming": "apps/theming/lib/ConfigLexicon.php has no font-family/size/weight config entries; font values are hardcoded per PHP theme class (DefaultTheme.php:203-211), not admin-settable tokens", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Themes/DefaultTheme.php:203-211 exposes --font-face, --default-font-size and --font-weight-default/-element/-heading as CSS variables, but their values are hard-coded; no admin setting or per-style value exists (apps/theming/lib/Controller/ThemingController.php:74-147)", "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/brand-fonts ; https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : brand fonts are applied via font packages, but the SharePoint theme JSON schema documented is colour/accent focused (up to 16 accent-and-background pairs), not a unified family+size+weight token set", - "opendesk": "not checked: theme.yaml.gotmpl (colours/text/imagery) does not expose a documented font-family/size/weight key", + "opendesk": "opendesk@v1.18.2 helmfile/files/theme/portal/stylesheet.css:48-58 defines --font-size-1..5, --font-weight-bold and line-height tokens for portal and Keycloak; no family token and nothing reaches the other components", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : the style book Typography section lets you 'define new fonts for your pages' and 'adjust header sizing', i.e. family and size are both style-book tokens", "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/ : Font Family, Font Weight and Font Size are core token types, settable per token set (i.e. per house style)" }, @@ -2091,7 +2193,7 @@ "thematiq": "no", "nextcloud-theming": "yes", "m365-branding": "unknown", - "opendesk": "unknown", + "opendesk": "partial", "liferay-dxp": "no", "tokens-studio": "no", "built": { @@ -2101,9 +2203,9 @@ }, "reachedOn": "nothing reaches it", "evidence": { - "nextcloud-theming": "apps/theming/lib/Themes/DyslexiaFont.php : a personal-settings toggle lets a user enable the OpenDyslexic font for themselves (ITheme::TYPE_FONT)", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Themes/DyslexiaFont.php:21-22 registers a TYPE_FONT theme listed under Fonts in src/views/UserTheming.vue:28 and enabled per user by lib/Controller/UserThemeController.php:69-86", "m365-branding": "not checked: no dyslexia-friendly font toggle found for end users in M365/SharePoint branding docs", - "opendesk": "not checked", + "opendesk": "nextcloud/server@v33.0.9 apps/theming/lib/Service/ThemesService.php:35 registers DyslexiaFont; openDesk only sets disable-user-theming (opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:16-17), which in nextcloud/server@v33.0.9 apps/theming/src/views/UserTheming.vue:48-52 hides colour and background only, so Nextcloud users can still pick it (stock, left enabled); other components not", "liferay-dxp": "https://learn.liferay.com/w/dxp/personalization/experiences/using-the-accessibility-menu : the Accessibility Menu offers underlined links, increased text spacing, expanded text, reduced motion and focus ring animation, but no dyslexia-friendly font option", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -2119,7 +2221,7 @@ "thematiq": "partial", "nextcloud-theming": "no", "m365-branding": "yes", - "opendesk": "unknown", + "opendesk": "no", "liferay-dxp": "unknown", "tokens-studio": "no", "built": { @@ -2130,9 +2232,9 @@ }, "reachedOn": "Settings > Administration > Theming, Custom fonts list + role select (#nldesign-font-list, #nldesign-font-role)", "evidence": { - "nextcloud-theming": "outside the product: no font library exists for site owners to choose from", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/fonts holds only OpenDyslexic; no font library for site owners exists", "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/brand-fonts : the SharePoint brand center's Brand Fonts library is exactly 'a central library of approved organisation fonts' for site owners, also reaching Viva Connections and PowerPoint for the web", - "opendesk": "not checked", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no font library", "liferay-dxp": "not checked: no curated, shared 'approved fonts library' feeding the style book font token picker was found; font tokens are typed values defined per theme", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -2160,9 +2262,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Design token set' dropdown (templates/settings/admin.php:68); picking a set opens an apply dialog (js/admin.js:965-982 change handler -> checkAndShowThemingDialog) that offers the sync", "evidence": { - "nextcloud-theming": "not applicable: there is no house-style catalogue whose selection would auto-set the logo; the logo is one manually uploaded global asset (apps/theming/lib/ImageManager.php:25 SUPPORTED_IMAGE_KEYS)", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ImageManager.php:25 SUPPORTED_IMAGE_KEYS: the logo is one manually uploaded asset; there is no house style whose selection sets it", "m365-branding": "not checked: there is no catalogue of pickable house styles to sync a logo from (see cat-* rows); the org's single logo is set directly, not synced from a style pick", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/components/platform-development/charts/opendesk-nextcloud (charts/opendesk-nextcloud-management/README.md) : \"SVG logo insertable as theme.logo.svgBase64\" is applied by the Nextcloud management chart together with the shared theme.yaml.gotmpl logo, so picking the (single) house style sets the workspace logo", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:52 logoHeaderSvg feeds Nextcloud (opendesk@v1.18.2 helmfile/apps/nextcloud/values-nextcloud-management.yaml.gotmpl:283 -> opendesk-nextcloud@v4.10.6 charts/opendesk-nextcloud-management/templates/job.yaml:320-322 -> opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:87-97 occ theming:config logo), the portal (values-nubus.yaml.gotmpl:1403; static files :28-29, reused by OX dynamic-theme logoURL values-openxchange.yaml.gotmpl:1151) and XWiki (xwiki/values.yaml.gotmpl:196)", "liferay-dxp": "not checked: same reasoning, no catalogue of named house styles to sync a logo from", "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/asset : an Asset token stores a URL pointing to an externally hosted image (or a local file path in dev); Tokens Studio does not host/upload the file itself and does not render it into a live workspace, login page or favicon" }, @@ -2190,9 +2292,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Design token set' dropdown, same apply dialog as ast-logo-sync", "evidence": { - "nextcloud-theming": "not applicable, same reasoning as ast-logo-sync: no house style exists to sync a login background from", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ImageManager.php:25: the login background is one manually uploaded asset; there is no house style to sync it from", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : background image is one of the branding elements configured alongside logo/colours as part of the same sign-in branding, so it is set consistently with the rest, though not 'synced' from a separate catalogue pick", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/components/platform-development/charts/opendesk-nextcloud (charts/opendesk-nextcloud-management/README.md) : \"Image background using theme.background.imgBase64\" is set from the shared theme source for the Nextcloud login screen", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:67 login.backgroundJpg is served as /opendesk-static-files/login/background.jpg (values-opendesk-static-files.yaml.gotmpl:34-35) and used by the Keycloak login (stylesheet.css:196-197). Nextcloud's own background colour is not applied (opendesk@v1.18.2 helmfile/apps/nextcloud/values-nextcloud-management.yaml.gotmpl:270-272, image nextcloud_configure_theming.php:42-48 'NOT AVAILABLE YET')", "liferay-dxp": "not checked: a login background can be styled through a theme/theme CSS client extension consistent with the rest of the site's style book tokens, but no dedicated 'sync login background to style book' feature was documented", "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/asset : an Asset token stores a URL pointing to an externally hosted image (or a local file path in dev); Tokens Studio does not host/upload the file itself and does not render it into a live workspace, login page or favicon" }, @@ -2219,9 +2321,9 @@ }, "reachedOn": "Settings > Administration > Theming (Nextcloud core's own panel, separate from thematiq's Theming section)", "evidence": { - "nextcloud-theming": "apps/theming/lib/Controller/ThemingController.php:221-293 uploadImage() with key='logo' lets the admin upload their own logo", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/components/AdminSectionThemingAdvanced.vue:109-112 FileInputField logo posts to /ajax/uploadImage, handled by lib/Controller/ThemingController.php:220-293 uploadImage()", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding ; https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : banner logo, header logo, square light/dark logos (Entra) and default/alternate logo (M365 org theme) are all uploadable", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : logos are supplied as base64-encoded SVG in the operator's values file (\"assets are base64-encoded and stored in ConfigMaps with a 1MiB size limit\") - an upload in the sense of a config edit + redeploy, not an admin-UI file upload", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:9-11,52: logos are base64 files read from helmfile/files/theme into values and ConfigMaps (1 MiB limit), a file swap plus redeploy (docs/theming.md:22), not an admin upload", "liferay-dxp": "https://help.liferay.com/hc/en-us/articles/360018171691-Page-Set-Look-and-Feel : 'If you want to use your own logo for a specific Site, you can select the Logo tab from the Configure interface and browse to the location of your logo'", "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/asset : an Asset token stores a URL pointing to an externally hosted image (or a local file path in dev); Tokens Studio does not host/upload the file itself and does not render it into a live workspace, login page or favicon" }, @@ -2249,9 +2351,9 @@ }, "reachedOn": "Settings > Administration > Theming (Nextcloud core panel)", "evidence": { - "nextcloud-theming": "apps/theming/lib/Controller/ThemingController.php:221-293 uploadImage() with key='background', backed by apps/theming/lib/Service/BackgroundService.php setFileBackground(), lets the admin upload a login background image", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/components/AdminSectionThemingAdvanced.vue:101-105 FileInputField background posts to lib/Controller/ThemingController.php:220-293; the image is served as --image-background (lib/Themes/CommonThemeTrait.php:88-96)", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : 'Background image: Select a PNG or JPG to display as the main image on your sign-in page... Image size: 1920x1080 px, Max file size: 300 KB'", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : same base64-in-values mechanism as the logo", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:61-63,67: login and Nextcloud backgrounds are base64 files in values (PNG/JPEG/SVG tested), file swap plus redeploy", "liferay-dxp": "not checked: a login/page background image can be set through theme/master-page customisation, but no simple admin 'upload a login background image' UI was documented the way Entra ID has one", "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/asset : an Asset token stores a URL pointing to an externally hosted image (or a local file path in dev); Tokens Studio does not host/upload the file itself and does not render it into a live workspace, login page or favicon" }, @@ -2279,9 +2381,9 @@ }, "reachedOn": "Settings > Administration > Theming (Nextcloud core panel, 'Advanced theming settings')", "evidence": { - "nextcloud-theming": "apps/theming/lib/Controller/ThemingController.php:48 VALID_UPLOAD_KEYS includes 'favicon'; uploadImage() lets the admin set a custom favicon (also auto-generated otherwise via lib/IconBuilder.php:34 getFavicon())", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/components/AdminSectionThemingAdvanced.vue:106-108 FileInputField favicon; lib/Controller/ThemingController.php:48 accepts favicon and lib/Controller/IconController.php:87-135 serves it", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : 'Favicon: Select a PNG or JPG of your logo that appears in the web browser tab. Image size: 32x32 px, Max file size: 5 KB'", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/components/platform-development/charts/opendesk-nextcloud (charts/opendesk-nextcloud-management/README.md) : \"Favicon settable through theme.favicon.pngBase64\"; theme.yaml.gotmpl also lists per-module favicons and notes \".svg versions of the favicons are also used for the portal tiles\"", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:55-148 per-module favicons; Nextcloud via opendesk-nextcloud@v4.10.6 charts/opendesk-nextcloud-management/templates/job.yaml:324-326 -> image nextcloud_configure_theming.php:104-114; Jitsi via static files (values-opendesk-static-files.yaml.gotmpl:85-86); portal favicons values-nubus.yaml.gotmpl:404-409", "liferay-dxp": "https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-favicon-client-extension : a theme favicon client extension lets you set a custom favicon image via a client-extension.yaml url property, available as a favicon option for every page", "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/asset : an Asset token stores a URL pointing to an externally hosted image (or a local file path in dev); Tokens Studio does not host/upload the file itself and does not render it into a live workspace, login page or favicon" }, @@ -2309,9 +2411,9 @@ }, "reachedOn": "machine: any Nextcloud app, via the standard static app-asset path (imagePath()/OC.filePath()), verified by the e2e test above", "evidence": { - "nextcloud-theming": "outside the product: no reusable government icon library exists", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Controller/IconController.php:53-86 only recolours existing core and app icons; no reusable government icon library exists", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : theme.yaml.gotmpl ships per-module favicons and portal-tile icons for openDesk's own modules, not a general-purpose reusable government icon library for other apps to call by name", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:92-122 portalTiles are per-tile SVGs for the portal only; no named icon library for other apps", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -2339,9 +2441,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Design token set' dropdown -> apply dialog (same as ast-logo-sync)", "evidence": { - "nextcloud-theming": "outside the product: no bundled library of government organisation logos exists, only one manually uploaded logo", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ImageManager.php:25 SUPPORTED_IMAGE_KEYS holds one logo slot; no bundled organisation logos", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : openDesk applies exactly one deployment-configured brand (productName, slogan, primary colour, logos) via theme.yaml.gotmpl; there is no in-product catalogue, picker or gallery of alternative ready-made house styles to choose between; no bundled library of other organisations' logos", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); only openDesk's own logos ship", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -2368,9 +2470,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Active icon pack' indicator only (templates/settings/admin.php:94-103); no icon anywhere in the running instance visibly changes to the named pack", "evidence": { - "nextcloud-theming": "apps/theming/lib/IconBuilder.php:219-231 colorSvg() just recolours each app's existing SVG icon to the primary brand colour; it does not swap in a different municipal icon pack/design system", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/IconBuilder.php:219-231 colorSvg() tints existing SVG icons with the primary colour; it does not swap in another icon pack", "m365-branding": "not checked: no switchable icon pack tied to a chosen design system was found in M365/SharePoint branding docs", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : openDesk applies exactly one deployment-configured brand (productName, slogan, primary colour, logos) via theme.yaml.gotmpl; there is no in-product catalogue, picker or gallery of alternative ready-made house styles to choose between; one fixed icon set ships, not a design-system-linked swappable pack", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:92-122: the portal tile icons can be swapped as files, but no icon pack is tied to a design system and component icons are untouched (OX coloredIcons false, values-openxchange.yaml.gotmpl:1146)", "liferay-dxp": "not checked: no switchable icon pack tied to a theme/style book was found in the docs read", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -2398,9 +2500,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Active icon pack' block under the token-set dropdown (templates/settings/admin.php:94)", "evidence": { - "nextcloud-theming": "not applicable: no icon pack concept exists to indicate on the settings page", + "nextcloud-theming": "nextcloud/server@v35.0.1 no icon pack concept exists (apps/theming/lib/IconBuilder.php:219-231 only recolours), so nothing to indicate", "m365-branding": "not checked: follows from ast-icon-pack, no icon pack concept exists to indicate", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : the theming doc describes only a values file + `helmfile/files/theme` assets directory; no admin screen, preview, diff, trial session or rollback UI for theming is documented", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page", "liferay-dxp": "not checked: follows from ast-icon-pack, no icon pack concept exists to indicate", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -2414,9 +2516,9 @@ "area": "assets", "name": "Keep icons legible against the brand colours, with contrast fixes for dark and light backgrounds.", "thematiq": "partial", - "nextcloud-theming": "partial", + "nextcloud-theming": "yes", "m365-branding": "unknown", - "opendesk": "unknown", + "opendesk": "no", "liferay-dxp": "unknown", "tokens-studio": "no", "built": { @@ -2427,9 +2529,9 @@ }, "reachedOn": "Every page (the fix is scoped to Nextcloud's own app-management/appstore icon list, class selector '[class*=_appIcon_]')", "evidence": { - "nextcloud-theming": "apps/theming/lib/IconBuilder.php:219-231 colorSvg() tints icons using apps/theming/lib/Util.php:70-99 elementColor(), which enforces a minimum contrast ratio (3.2:1, or 5.6:1 in high-contrast) against the background automatically, but this is the general colour-derivation engine rather than a dedicated per-icon dark/light contrast-fix feature", + "nextcloud-theming": "nextcloud/server@v35.0.1 header icons take --color-background-plain-text, black or white by a 4.5:1 test against the brand background (apps/theming/lib/Themes/CommonThemeTrait.php:82-84, lib/Util.php:36-38) and are masked with it (lib/Themes/DefaultTheme.php:249); tests/Themes/AccessibleThemeTestCase.php:250-280 asserts app-menu glyphs reach 3:1 on the background in every shipped theme", "m365-branding": "not checked: no automated icon-contrast-fix feature found in the branding docs read", - "opendesk": "not checked", + "opendesk": "opendesk@v1.18.2: no icon contrast handling in theme or stylesheet; issue #355 (users with low vision could not tell OX attachment viewer icons apart) was handed upstream to Open-Xchange", "liferay-dxp": "not checked: no automated icon-contrast-fix feature found in the style book/accessibility docs read", "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" }, @@ -2457,9 +2559,9 @@ }, "reachedOn": "nothing reaches it: no shipped token set and no custom-token-set upload path ever sets 'logo_dark', so the dark-logo code path never fires for any real admin", "evidence": { - "nextcloud-theming": "apps/theming/lib/ImageManager.php:25 SUPPORTED_IMAGE_KEYS has only one 'logo' key; dark mode instead applies a CSS invert filter to the same logo unless customised (apps/theming/lib/Themes/CommonThemeTrait.php '--primary-invert-if-dark' / '--image-logoheader-custom'), not a separately uploaded dark-mode logo", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ImageManager.php:25 has one logo key; only the background has a dark fallback (ImageManager.php:49-51, 59-68), and an extra logo variant is an open request (github.com/nextcloud/server/issues/47357)", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : 'Square logo (dark theme): Select a square PNG or JPG image file of your logo to be used in browsers that are using a dark color theme'; https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : 'Alternate logo: ...optimized for use in Microsoft 365 dark themes'", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : only one logo key (theme.logo.svgBase64, plus an \"inverted\" header logo variant) is documented, no separate dark-mode logo slot", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:53 defines logoHeaderInvertedSvg but grep -rn logoHeaderInverted helmfile/apps finds no consumer; opendesk-jitsi@v3.10.0 charts/opendesk-jitsi/templates/configmap.yaml:20 still reads the old name logoHeaderInvertedSvgB64 (renamed in 1.18, docs/migrations-manual.md:416-430), so Jitsi gets its 1x1 blank default (values.yaml:714)", "liferay-dxp": "not checked: no dedicated dark-mode logo slot was found in the style book/Site Logo documentation read", "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/asset : an Asset token stores a URL pointing to an externally hosted image (or a local file path in dev); Tokens Studio does not host/upload the file itself and does not render it into a live workspace, login page or favicon" }, @@ -2487,9 +2589,9 @@ }, "reachedOn": "nothing reaches it", "evidence": { - "nextcloud-theming": "outside the product: no central library of approved brand images/banners for user content exists", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Service/BackgroundService.php:59-100 ships a fixed set of Nextcloud background images for users to pick as their own background; no admin-curated brand image library for user content exists", "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/organization-assets-library : the organization assets library lets users 'select \"Your organization\" in the left pane to browse the libraries you've specified' when adding an image to any modern page, i.e. a central set of approved brand images for use in their own content", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : imagery keys are scoped to the platform's own chrome (login, portal tiles, favicons); no library of banners/images offered to end users for their own content", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no shared image library for users", "liferay-dxp": "not checked: no curated 'approved brand images library' surfaced to page builders was found for Liferay beyond generic Documents and Media libraries", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -2517,9 +2619,9 @@ }, "reachedOn": "every Nextcloud page (any app), unless that app id is on the admin's exclusion list (Settings > Administration > Theming > 'Theming per app')", "evidence": { - "nextcloud-theming": "apps/theming/lib/Controller/ThemingController.php:398-443 getThemeStylesheet() serves the CSS variables globally for any app consuming Nextcloud's own theming variables, but a genuinely different-vendor app not built on those CSS variables is not restyled by this mechanism", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Listener/BeforeTemplateRenderedListener.php:56 calls ThemeInjectionService::injectHeaders() (lib/Service/ThemeInjectionService.php:36-63) for every rendered template and the login page (lib/AppInfo/Application.php:35-36); apps that do not use the Nextcloud CSS variables are not restyled", "m365-branding": "https://learn.microsoft.com/en-us/answers/questions/5985270/microsoft-365-organisational-theme-no-longer-appli : the M365 organisation theme is meant to appear across the whole 'Microsoft 365 suite header', but a Microsoft Q&A thread reports it 'no longer applied in New Outlook and Outlook on the web', showing inconsistent reach across first-party surfaces, let alone third-party ISV apps", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/components/platform-development/charts/opendesk-nextcloud (charts/opendesk-nextcloud-management/README.md) combined with Nextcloud's theming app applying its configured colour/logo instance-wide (per Nextcloud's own theming architecture) to first- and third-party apps alike", + "opendesk": "opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:21-114 sets Nextcloud's stock theming (primary colour, logo, favicon, name) instance-wide, which every Nextcloud app inherits; what openDesk configures, background colour excepted (:42-48)", "liferay-dxp": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : theming is portal-wide for native Liferay pages/widgets via shared frontend tokens, but the docs read do not confirm third-party/embedded (non-Liferay) apps automatically pick up the same tokens", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -2533,7 +2635,7 @@ "area": "surfaces", "name": "Have every Conduction app pick up the house style through shared tokens.", "thematiq": "yes", - "nextcloud-theming": "no", + "nextcloud-theming": "partial", "m365-branding": "no", "opendesk": "no", "liferay-dxp": "no", @@ -2546,9 +2648,9 @@ }, "reachedOn": "machine: every Conduction app built on CnAppRoot, automatically at app mount (no admin action)", "evidence": { - "nextcloud-theming": "outside the product: stock Nextcloud theming has no concept of 'Conduction apps'; any app inherits styling only incidentally if it happens to consume the same CSS variables", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps built on @nextcloud/vue read the variables that lib/Service/ThemeInjectionService.php:36-63 injects on every page (e.g. --color-primary-element from lib/Themes/CommonThemeTrait.php:48-68), so Conduction apps pick up the primary colour, background and logo, but only that two-colour vocabulary, not a full house style", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "not applicable: openDesk does not ship or integrate Conduction apps", + "opendesk": "no: outside the product. opendesk-nextcloud-image@v2.17.2 src/files/apps.yaml lists the bundled Nextcloud apps (integration_swp, richdocuments, spreed, ...), no Conduction app ships", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "not applicable: Tokens Studio is not a Nextcloud app and has no relationship to Conduction apps" }, @@ -2576,9 +2678,9 @@ }, "reachedOn": "the Nextcloud login page, before any session exists", "evidence": { - "nextcloud-theming": "apps/theming/lib/Controller/ThemingController.php:360-385 getImage() is #[PublicPage] so the login page (before any session) gets the themed logo/background/colours", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/AppInfo/Application.php:36 listens for BeforeLoginTemplateRenderedEvent and injects the theme stylesheets; logo and background come from #[PublicPage] getImage() (lib/Controller/ThemingController.php:360-385)", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : the whole article is about branding 'the sign-in page' before any authentication has happened", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : theme.yaml.gotmpl has a dedicated \"Login\" imagery/favicon set, and https://gitlab.opencode.de/bmi/opendesk/components/platform-development/charts/opendesk-nextcloud (charts/opendesk-nextcloud-management/README.md) sets Nextcloud's login background/logo/colour via theme.background/theme.logo", + "opendesk": "opendesk@v1.18.2 helmfile/files/theme/portal/stylesheet.css:124-197 styles the Keycloak login (the openDesk sign-in, before any session), logo from values-opendesk-static-files.yaml.gotmpl:20-21, title from values-nubus.yaml.gotmpl:208-213", "liferay-dxp": "Liferay DXP style book docs: style books 'cannot be used in administrative themes', so restyling the Sign In portlet/login page needs a custom theme or theme CSS client extension (developer work), not the no-code style book path", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -2605,9 +2707,9 @@ }, "reachedOn": "every logged-in page's header and app-navigation bar", "evidence": { - "nextcloud-theming": "apps/theming/lib/Themes/DefaultTheme.php:242-249 defines --header-height/--header-menu-item-height/--header-menu-icon-mask and the header uses getColorBackground()/getLogo(), so header and navigation are themed", + "nextcloud-theming": "nextcloud/server@v35.0.1 core/css/header.scss:77,87 sets the header logo from var(--image-logoheader, var(--image-logo)) and apps/theming/lib/Themes/DefaultTheme.php:242-249 plus CommonThemeTrait.php:81-85 set header height, icon mask and background-plain colours", "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : 'Navigation bar color: Select a color to use for the background of the navigation bar. The navigation bar appears at the top on every page'", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : the primary colour is documented as applied to Element, OX App Suite, Xwiki and Jitsi chrome; header/nav styling for Nextcloud specifically follows from the same primary colour via the management chart", + "opendesk": "opendesk@v1.18.2: header colours reach OX topbar (values-openxchange.yaml.gotmpl:1152-1153), OpenProject header and menu (openproject/values.yaml.gotmpl:94-98), XWiki navbar (xwiki/values.yaml.gotmpl:227-228); Nextcloud's header colour is overridden by integration_swp (values-nextcloud-management.yaml.gotmpl:285-287, image config_struct.php:122), not from theme keys; portal header needs the CSS file", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style books style header/navigation chrome as part of the site's overall look through the theme's master page and tokens", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -2621,7 +2723,7 @@ "area": "surfaces", "name": "Show text labels instead of icons only in the app menu.", "thematiq": "yes", - "nextcloud-theming": "no", + "nextcloud-theming": "yes", "m365-branding": "unknown", "opendesk": "unknown", "liferay-dxp": "unknown", @@ -2634,9 +2736,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Show text labels in app menu' checkbox (templates/settings/admin.php:409)", "evidence": { - "nextcloud-theming": "not found: no toggle for text labels vs icons-only in the app menu exists in apps/theming/lib or src/components/AppOrderSelector*.vue, which only reorders/enables default apps", + "nextcloud-theming": "nextcloud/server@v35.0.1 core/src/components/AppMenuItem.vue:81-83 renders each app tile with its name label and core/src/components/AppMenu.vue:59-61 shows the current app name next to its icon in the header (the v35 waffle menu); this is default behaviour, not a theming toggle", "m365-branding": "not checked: no text-labels-vs-icons-only app-menu setting found in the branding docs read", - "opendesk": "not checked", + "opendesk": "not checked: unknown: Nextcloud's app menu is replaced by integration_swp central navigation (opendesk-nextcloud-image@v2.17.2 config_struct.php:110-122); I did not read integration_swp 4.8.1 source to see how entries are labelled, and openDesk sets no menu option", "liferay-dxp": "not checked: no such setting found in the style book/site docs read", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -2650,9 +2752,9 @@ "area": "surfaces", "name": "Hide the Nextcloud slogan on the login page.", "thematiq": "yes", - "nextcloud-theming": "partial", + "nextcloud-theming": "yes", "m365-branding": "no", - "opendesk": "unknown", + "opendesk": "partial", "liferay-dxp": "unknown", "tokens-studio": "no", "built": { @@ -2663,9 +2765,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Hide slogan' checkbox (templates/settings/admin.php:397)", "evidence": { - "nextcloud-theming": "apps/theming/lib/Controller/ThemingController.php:110-114 lets the admin set the slogan to an empty string, which effectively removes it, but there is no dedicated 'hide slogan' toggle distinct from clearing the text field", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/components/admin/TextField.vue:47-60 lets the admin clear the slogan, lib/Controller/ThemingController.php:110-114 accepts an empty value, and lib/ThemingDefaults.php:140 appends the slogan to the login footer only when it is not empty", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : the documented sign-in elements (title, description, username hint, sign-in text) do not include a Microsoft product slogan to hide", - "opendesk": "not checked: theme.texts.slogan is configurable but no documented option to hide it specifically on the login page was found", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:18 slogan -> opendesk-nextcloud@v4.10.6 charts/opendesk-nextcloud-management/templates/job.yaml:310-311 -> opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:60-61; env_all_available (functions.php:125-135) only tests presence, so slogan: \"\" runs theming:config slogan '' and blanks it. A side effect of an empty value, and openDesk's real login is Keycloak, which shows no slogan", "liferay-dxp": "not checked: no product-slogan element was found in Liferay's login/theme documentation", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -2679,9 +2781,9 @@ "area": "surfaces", "name": "Style public share and link pages that visitors without an account see.", "thematiq": "yes", - "nextcloud-theming": "partial", + "nextcloud-theming": "yes", "m365-branding": "partial", - "opendesk": "unknown", + "opendesk": "yes", "liferay-dxp": "yes", "tokens-studio": "no", "built": { @@ -2692,9 +2794,9 @@ }, "reachedOn": "public share/link pages (RENDER_AS_PUBLIC responses)", "evidence": { - "nextcloud-theming": "apps/theming/lib/ThemingDefaults.php:126-178 getShortFooter() (used for guest/public pages) carries the entity name and legal links, so public pages inherit some branding, but this reading did not confirm full logo/colour theming coverage of every public share/link page template", + "nextcloud-theming": "nextcloud/server@v35.0.1 core/templates/layout.public.php:51-66 renders the themed logo and instance name and 96-100 the long footer (lib/private/legacy/OC_Defaults.php:245-253 falls back to the themed short footer); theme stylesheets are injected for every template response by apps/theming/lib/Listener/BeforeTemplateRenderedListener.php:56", "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : a SharePoint site's theme is a site-wide setting that would apply to that site's pages including externally shared/anonymous-access pages, though this was not explicitly confirmed for anonymous visitors in the docs read", - "opendesk": "not checked: not covered on the fetched theming/management-chart pages", + "opendesk": "opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:21-114 sets the instance-level theming values, which nextcloud/server@v33.0.9 ThemingDefaults serves to visitors without a session (the admin default is used when no user is set), so Nextcloud public share pages carry the brand; Jitsi guests get branding.json colours (opendesk-jitsi@v3.10.0 files/web/branding.json:11-21)", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/creating-pages : Liferay sites have a first-class distinction between public and private pages, and public pages are themed the same as any other page in the site via its style book", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -2721,9 +2823,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Email template' section (templates/settings/admin.php:461)", "evidence": { - "nextcloud-theming": "lib/private/Mail/EMailTemplate.php:81-82 renders the theming logo inside a background-colour circle in the email header, and its button styling (line 201) is filled with the theme's primary colour", + "nextcloud-theming": "nextcloud/server@v35.0.1 lib/private/Mail/EMailTemplate.php:360-369 puts the themed logo and default primary colour in the email header and 565, 597 colour the buttons with getDefaultColorPrimary()", "m365-branding": "not checked: the M365 organisation theme documentation states it appears 'in the top navigation bar for everyone in the organization', with no mention of notification emails", - "opendesk": "https://docs.nextcloud.com (search result snippet): \"the theming app changes not only the Web User Interface, but also the color and logos in emails sent out\" - combined with https://gitlab.opencode.de/bmi/opendesk/components/platform-development/charts/opendesk-nextcloud (charts/opendesk-nextcloud-management/README.md) setting Nextcloud's theming colour/logo, openDesk emails inherit the brand, though this is Nextcloud's own theming behaviour rather than an openDesk-specific feature", + "opendesk": "opendesk@v1.18.2: Nextcloud mails use its stock theming colour and logo set by openDesk; OX notification mail buttons take primary (values-openxchange.yaml.gotmpl:568-572); Keycloak new-device mail subject uses productName (values-nubus.yaml.gotmpl:525); Notes mail brandName is hardcoded 'openDesk' (notes/values.yaml.gotmpl:78)", "liferay-dxp": "not checked: no email-template theming tied to style books/frontend tokens was found in the docs read", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -2751,9 +2853,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Email template' section, footer fields (templates/settings/admin.php:496)", "evidence": { - "nextcloud-theming": "apps/theming/lib/ThemingDefaults.php:126-178 getShortFooter() adds the entity/organisation name plus 'Legal notice' and 'Privacy policy' links to the footer used in emails/pages, but there is no dedicated postal-address or free-text compliance field beyond those two link fields", + "nextcloud-theming": "nextcloud/server@v35.0.1 lib/private/Mail/EMailTemplate.php:628-645 addFooter() defaults to instance name, slogan and an automatic-mail notice; there is no address, legal-links or free compliance text field for email", "m365-branding": "not checked: no compliance-footer-for-email feature found in the branding docs read", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : no compliance-footer (organisation name/address/legal text) key is documented for emails", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no mail footer key", "liferay-dxp": "not checked: no compliance-footer-for-email feature found in the docs read", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -2769,7 +2871,7 @@ "thematiq": "yes", "nextcloud-theming": "no", "m365-branding": "no", - "opendesk": "unknown", + "opendesk": "no", "liferay-dxp": "no", "tokens-studio": "no", "built": { @@ -2780,9 +2882,9 @@ }, "reachedOn": "every themed page (part of the always-loaded design-system stylesheet stack)", "evidence": { - "nextcloud-theming": "outside the product: no Utrecht/community-component token mapping exists", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Themes/DefaultTheme.php:80-275 defines Nextcloud variables only; grep of apps/theming for utrecht finds nothing", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "not checked: not documented: no mapping of NL Design System \"Utrecht\" component tokens was found", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); grep -rniE 'rijks|nl-design|nldesign|utrecht|dsfr|marianne' helmfile docs: no hits, so no preset catalogue exists; no mapping of community component tokens", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -2798,7 +2900,7 @@ "thematiq": "yes", "nextcloud-theming": "yes", "m365-branding": "no", - "opendesk": "unknown", + "opendesk": "no", "liferay-dxp": "no", "tokens-studio": "no", "built": { @@ -2809,9 +2911,9 @@ }, "reachedOn": "every themed page (part of the always-loaded nldesign stylesheet stack)", "evidence": { - "nextcloud-theming": "apps/theming/lib/Themes/DefaultTheme.php:124-268 defines the full internal --color-* variable set consumed by Nextcloud's own UI, so none of NC's own stock colours are left unmapped (third-party apps not using these variables are out of scope, as in sur-all-pages)", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Themes/DefaultTheme.php:80-275 getCSSVariables() defines the full --color-* set Nextcloud's own UI reads, and every shipped theme overrides the same keys", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "not checked: the management chart documents primary colour/logo/favicon/background keys only; whether every Nextcloud CSS colour variable is mapped (vs. relying on Nextcloud's own colour-shading defaults) was not verified", + "opendesk": "opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:21-114 sets only primary_color, background, name, slogan, url, imprintUrl, privacyUrl, logo and favicon; every other Nextcloud variable is derived by stock theming", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -2838,9 +2940,9 @@ }, "reachedOn": "every themed page", "evidence": { - "nextcloud-theming": "apps/theming/lib/Themes/DefaultTheme.php:82-83,94-105 hand-tunes error/warning/success/info colours with a documented 4.5:1 contrast target, and DarkTheme.php recomputes equivalents for dark backgrounds", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Themes/DefaultTheme.php:82-105 hand-tunes status colours, and tests/Themes/AccessibleThemeTestCase.php:124-215 asserts error, warning and success text and elements reach 4.5:1 (3:1 for elements, 7:1 in high contrast) in every shipped theme", "m365-branding": "not checked: no per-house-style audit of error/status message contrast was found", - "opendesk": "not checked", + "opendesk": "not checked: unknown: openDesk does not touch status colours (opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:39-46 'Not in use yet', no consumers), so readability is each component's stock behaviour, which I did not audit; the published BITV audit (docs.opendesk.eu/legal/barrierefreiheit/, 07/2024) reports 17% failing criteria overall without a contrast breakdown", "liferay-dxp": "not checked: general accessibility conformance is covered by Liferay's VPAT (https://www.liferay.com/documents/d/guest/vpat2-5rev_int_february2025_liferay_dxp_sites_experience), but not broken out per house style/status message", "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" }, @@ -2855,7 +2957,7 @@ "area": "surfaces", "name": "Colour success, warning and error states from the house style's status tokens.", "thematiq": "yes", - "nextcloud-theming": "yes", + "nextcloud-theming": "partial", "m365-branding": "no", "opendesk": "partial", "liferay-dxp": "yes", @@ -2868,9 +2970,9 @@ }, "reachedOn": "every themed page's success/warning/error UI elements", "evidence": { - "nextcloud-theming": "apps/theming/lib/Themes/DefaultTheme.php:94-105,163-175 defines --color-error/-warning/-success/-info plus -text/-element variants used to colour status states", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Themes/DefaultTheme.php:94-105,164-181 define --color-error/-warning/-success/-info with text and element variants that the UI reads, but the values are fixed per built-in theme; a brand cannot set its own status tokens (apps/theming/lib/Controller/ThemingController.php:74-147)", "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : the only theme colour tokens documented are navigation bar, accent, text and icon colours, with no separate success/warning/error tokens", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : theme.yaml.gotmpl already defines secondaryRed, secondaryYellow and secondaryGreen colour keys, but the fetched \"used by\" table marks all three \"Not yet implemented\" by any component - the tokens exist but are not yet wired to status/success/warning/error states", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:39-46 secondaryRed/Yellow/Green are 'Not in use yet' (no consumer in helmfile/apps), but opendesk@v1.18.2 helmfile/files/theme/portal/stylesheet.css:12-15,45-47,62-67 define error, warning and success tokens for portal and Keycloak", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : the style book's colour options include 'alert-related element colours' in addition to body/background/text, i.e. status colours are part of the token set", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -2898,9 +3000,9 @@ }, "reachedOn": "official desktop/mobile sync clients, via the same core theming capability thematiq partially populates", "evidence": { - "nextcloud-theming": "apps/theming/lib/ThemingDefaults.php:322-349 only themes the client download URLs (iOSClientUrl/AndroidClientUrl/FDroidClientUrl); actual visual branding of the desktop/mobile sync clients is a Nextcloud Enterprise-only capability, not present in this AGPL app", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Capabilities.php:114-144 exposes name, colours, logo and background to clients and src/components/AdminSectionTheming.vue:20 says the theming covers supported clients; fully rebranded sync clients are a separate Nextcloud GmbH service (https://nextcloud.com/blog/branded-nextcloud-clients/)", "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : the organisation theme is documented to appear 'in the top navigation bar for everyone in the organization' as part of the web suite header, with no mention of the OneDrive/desktop sync client or mobile apps", - "opendesk": "not checked", + "opendesk": "not checked: unknown: openDesk ships no client builds (grep docs for desktop/mobile client branding: none); stock clients may read the Nextcloud theming capabilities openDesk sets (nextcloud/server@v33.0.9 apps/theming/lib/Capabilities.php:98-108), but I did not read client source", "liferay-dxp": "not checked: Liferay DXP is a web portal/CMS with no documented desktop or mobile file-sync client to carry a brand into", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -2915,9 +3017,9 @@ "area": "surfaces", "name": "Carry the brand into the integrated office editor and chat in the same suite.", "thematiq": "no", - "nextcloud-theming": "no", + "nextcloud-theming": "partial", "m365-branding": "partial", - "opendesk": "yes", + "opendesk": "partial", "liferay-dxp": "unknown", "tokens-studio": "no", "built": { @@ -2928,9 +3030,9 @@ }, "reachedOn": "nothing reaches it for the office editor; Nextcloud Talk, being an ordinary NC app, would get the same generic per-page CSS layer as any other app (sur-all-pages) but no Talk-specific work exists", "evidence": { - "nextcloud-theming": "outside the product: the theming app has no integrated office editor or chat component to brand", + "nextcloud-theming": "nextcloud/server@v35.0.1 Talk and other Nextcloud apps render inside the themed shell and read the injected variables (apps/theming/lib/Service/ThemeInjectionService.php:36-63); branding inside the office editor depends on the separate richdocuments app, which is not part of this reading", "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : the organisation theme is shared across the Microsoft 365 suite header used by Office web apps, though the Outlook regression noted above shows inconsistent reach", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : the primary colour is documented as applied to OX App Suite (office/groupware) and Element (chat)", + "opendesk": "opendesk@v1.18.2: chat (Element, values-element.yaml.gotmpl:20-22) and groupware (OX, values-openxchange.yaml.gotmpl:1150-1158) take the brand, but the office editor Collabora is started with --o:user_interface.use_integration_theme=false (collabora/values.yaml.gotmpl:45) and Notes keeps a fixed 'openDesk' theme (notes/values.yaml.gotmpl:124)", "liferay-dxp": "not checked: Liferay DXP has no bundled office editor/chat suite of its own to carry a brand into", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -2957,9 +3059,9 @@ }, "reachedOn": "machine: the web server / reverse proxy in front of the self-hosted instance", "evidence": { - "nextcloud-theming": "outside the product: getBaseUrl()/getName() only label the configured URL and name (apps/theming/lib/ThemingDefaults.php:98-100,73-75); serving the workspace on that domain is a webserver/reverse-proxy concern, not a theming-app feature", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ThemingDefaults.php:97-100 getBaseUrl() only stores a link shown to users, so this is outside the product: which domain serves the instance is web server and trusted_domains configuration", "m365-branding": "not checked: whether a SharePoint/M365 tenant can be served on a fully custom (non- *.sharepoint.com/*.onmicrosoft.com) domain was not confirmed in the docs read", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (docs/getting-started.md, search snippet): the getting-started guide covers DNS setup for the deployment's own domain", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/global.yaml.gotmpl:11 domain from DOMAIN, with per-app hosts; every themed URL is built from global.domain", "liferay-dxp": "https://learn.liferay.com/w/dxp/security-and-administration/administration/configuring-liferay/virtual-instances : each virtual instance is 'accessed via a unique domain name', i.e. the branded workspace is served on the organisation's own domain", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -2976,7 +3078,7 @@ "thematiq": "yes", "nextcloud-theming": "yes", "m365-branding": "yes", - "opendesk": "yes", + "opendesk": "partial", "liferay-dxp": "unknown", "tokens-studio": "no", "built": { @@ -2987,9 +3089,9 @@ }, "reachedOn": "Settings > Administration > Theming (Nextcloud core panel, 'Legal notice URL' / 'Privacy policy URL' fields), rendered in every page footer and the login page", "evidence": { - "nextcloud-theming": "apps/theming/lib/ThemingDefaults.php:142-176 getShortFooter() adds 'Legal notice' and 'Privacy policy' links to the footer and login footer (no separate accessibility-statement link field though)", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ThemingDefaults.php:142-175 adds Legal notice and Privacy policy links to the footer, and 153-160 also appends guest navigation entries apps register; no dedicated accessibility-statement field", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : the Footer section explicitly supports custom 'Privacy & Cookies' and 'Terms of Use' display text and links", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : \"if you like to adapt the default links in the portal pointing to external resources (like 'Support', 'Legal Notice') please check the functional.portal section\"; https://gitlab.opencode.de/bmi/opendesk/components/platform-development/charts/opendesk-nextcloud (charts/opendesk-nextcloud-management/README.md) also documents theme.urls.privacy and theme.urls.imprint", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/functional.yaml.gotmpl:448-457 legal notice, privacy, documentation, support and feedback links, passed to Nextcloud (values-nextcloud-management.yaml.gotmpl:294-295) and portal (values-nubus.yaml.gotmpl:1414-1418); there is no accessibility statement link key", "liferay-dxp": "not checked: legal footer links can be added through theme/master-page development, but no built-in admin UI field for privacy/imprint/accessibility-statement footer links was found for style books", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -3017,9 +3119,9 @@ }, "reachedOn": "Settings > Administration > Theming (Nextcloud core panel, basic settings)", "evidence": { - "nextcloud-theming": "apps/theming/lib/Controller/ThemingController.php:75-114 lets the admin change name/slogan/url; apps/theming/lib/ConfigLexicon.php PRODUCT_NAME/INSTANCE_NAME/INSTANCE_SLOGAN drive what is shown across the UI", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/components/AdminSectionTheming.vue:25-41 edits name, web link and slogan, validated in lib/Controller/ThemingController.php:75-114 and read by lib/ThemingDefaults.php:72-110", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : sign-in title/description text can be customised, but the underlying Microsoft 365/Entra product name and web address are not rebrandable", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/components/platform-development/charts/opendesk-nextcloud (charts/opendesk-nextcloud-management/README.md) : theme.texts.productName and theme.texts.slogan set the product name/slogan shown to users (default \"openDesk\" / \"a safe home for all your data\")", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:16-18 productName and slogan -> Nextcloud name and slogan (opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:60-66), Keycloak title (values-nubus.yaml.gotmpl:211-213), portal and tab titles (values-nubus.yaml.gotmpl:1370,1412-1413; element :175; jitsi :69; openproject :43; xwiki :248); web address via global.domain", "liferay-dxp": "https://learn.liferay.com/w/dxp/security-and-administration/administration/configuring-liferay/virtual-instances : a virtual instance has its own domain name, and sites have their own configurable name, but the Liferay product name itself is not rebranded by this", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -3036,7 +3138,7 @@ "thematiq": "yes", "nextcloud-theming": "no", "m365-branding": "unknown", - "opendesk": "no", + "opendesk": "partial", "liferay-dxp": "unknown", "tokens-studio": "no", "built": { @@ -3047,9 +3149,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Theming per app' section (templates/settings/admin.php:320)", "evidence": { - "nextcloud-theming": "outside the product: there is no per-app opt-out of the active theme", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Service/ThemeInjectionService.php:36-63 injects the same stylesheets on every page with no per-app condition; no opt-out setting exists", "m365-branding": "not checked: no per-app opt-out of org branding was found", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : openDesk applies exactly one deployment-configured brand (productName, slogan, primary colour, logos) via theme.yaml.gotmpl; there is no in-product catalogue, picker or gallery of alternative ready-made house styles to choose between; theming applies platform-wide with no documented per-app exclude switch", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/customization.yaml.gotmpl:4-24 loads a custom values file per release, so one app's theme values can be overridden back to stock; documented as unsupported by openDesk (:10-14). Collabora is already excluded (collabora/values.yaml.gotmpl:45)", "liferay-dxp": "not checked: theme CSS client extensions and style books are scoped per site, not per individual app/widget, so no documented way to exclude one app while the rest of the site is themed", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -3076,9 +3178,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Group theming' section (templates/settings/admin.php:339)", "evidence": { - "nextcloud-theming": "apps/theming/lib/ThemingDefaults.php:185-232 getColorPrimary()/getColorBackground() only branch on the single logged-in user's own override, appconfig values are instance-wide with no group-scoped storage", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ThemingDefaults.php:237-258 reads one instance-wide primary_color and background_color from app config, overridable only by the individual user (185-232); no group lookup exists; open request github.com/nextcloud/server/issues/31749", "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : 'you can also create up to four additional group themes that can be assigned to multiple Microsoft 365 groups'", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : openDesk applies exactly one deployment-configured brand (productName, slogan, primary colour, logos) via theme.yaml.gotmpl; there is no in-product catalogue, picker or gallery of alternative ready-made house styles to choose between; one brand for the whole deployment", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no group dimension", "liferay-dxp": "not checked: Liferay themes/style books are assigned per site, not per user group on a shared site; no per-group theming was found", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -3106,9 +3208,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Group theming' section (the list order set there is the priority order)", "evidence": { - "nextcloud-theming": "not applicable: no group-scoped theming exists to prioritise between", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ThemingDefaults.php:237-258 reads one instance-wide primary_color and background_color from app config, overridable only by the individual user (185-232); with no group theming there is nothing to prioritise", "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : 'What happens if a user is assigned to multiple group themes? Users who are assigned to multiple group themes will be shown the default theme.' -- a fixed fallback rule, not an admin-chosen priority order", - "opendesk": "not applicable: no per-group theming exists", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no group dimension", "liferay-dxp": "not checked: not applicable, Liferay has no per-user-group theme feature to prioritise (see sco-per-group)", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -3135,9 +3237,9 @@ }, "reachedOn": "the login page and any unauthenticated request, which always render the instance-default token set regardless of any group mapping", "evidence": { - "nextcloud-theming": "not applicable: since no group-scoped theming exists at all (see sco-per-group), there is nothing for the login page to be deliberately exempted from", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ThemingDefaults.php:237-258 reads one instance-wide primary_color and background_color from app config, overridable only by the individual user (185-232); with no group theming there is nothing for the login page to be exempted from", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding ; https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : the sign-in page branding is one shared tenant-wide configuration, independent of the M365 group themes that only change the suite-header nav bar", - "opendesk": "not applicable: no per-group theming exists to be unaffected from", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no group themes exist", "liferay-dxp": "not checked: not applicable, no per-group theming exists to be unaffected by", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -3153,7 +3255,7 @@ "thematiq": "yes", "nextcloud-theming": "yes", "m365-branding": "partial", - "opendesk": "unknown", + "opendesk": "partial", "liferay-dxp": "partial", "tokens-studio": "no", "built": { @@ -3164,9 +3266,9 @@ }, "reachedOn": "Settings > Personal > Appearance and accessibility (core Nextcloud), which thematiq's per-house-style dark/high-contrast CSS then honours", "evidence": { - "nextcloud-theming": "apps/theming/lib/Settings/Personal.php:38-53 plus apps/theming/lib/Service/ThemesService.php let each user enable default/light/dark/highcontrast/dark-highcontrast for themselves", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Settings/Personal.php:38-53 lists the themes, and lib/Controller/UserThemeController.php:69-105 with lib/Service/ThemesService.php:90-126 let each user enable light, dark or high contrast for themselves", "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : 'you can prevent users from overriding their theme', implying that by default end users CAN override their assigned organisation theme unless the admin locks it", - "opendesk": "not checked in openDesk-specific docs (Nextcloud core itself offers a personal light/dark/high-contrast choice, but this was not verified as part of openDesk's own theming documentation)", + "opendesk": "opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:16-17 disables only user colour and background; nextcloud/server@v33.0.9 apps/theming/src/views/UserTheming.vue:17-22,48-52 still offers the theme list (light, dark, high contrast), stock and left enabled; docs/baseline-requirements.md:201 wants the portal's light/dark choice respected by all components with 'Reference: No reference yet'", "liferay-dxp": "https://learn.liferay.com/w/dxp/personalization/experiences/using-the-accessibility-menu : the personal Accessibility Menu (underlined links, text spacing, expanded text, reduced motion, focus ring animation) lets a user self-select display preferences, though it is not literally a light/dark/high-contrast theme switch", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -3183,7 +3285,7 @@ "thematiq": "yes", "nextcloud-theming": "yes", "m365-branding": "unknown", - "opendesk": "unknown", + "opendesk": "partial", "liferay-dxp": "unknown", "tokens-studio": "no", "built": { @@ -3194,9 +3296,9 @@ }, "reachedOn": "any page, automatically, when the OS/browser reports prefers-color-scheme:dark, prefers-contrast:more or forced-colors:active and no explicit user theme choice overrides it", "evidence": { - "nextcloud-theming": "apps/theming/lib/Themes/LightTheme.php:37 '(prefers-color-scheme: light)', DarkTheme.php:39 '(prefers-color-scheme: dark)' and HighContrastTheme's '(prefers-contrast: more)' media queries auto-apply based on the OS/browser preference", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Service/ThemeInjectionService.php:47-50 adds each theme with its media query: LightTheme.php:36-37 (prefers-color-scheme: light), DarkTheme.php:38-39 (dark), HighContrastTheme.php:36-37 (prefers-contrast: more), DarkHighContrastTheme.php:36-37", "m365-branding": "not checked: no OS dark-mode/high-contrast auto-follow behaviour documented for M365/SharePoint org branding", - "opendesk": "not checked in openDesk-specific docs", + "opendesk": "nextcloud/server@v33.0.9 apps/theming/lib/Themes (DarkTheme, HighContrastTheme prefers-contrast, DarkHighContrastTheme) follow the OS through the default theme, stock and left enabled by openDesk; openDesk's portal stylesheet has no prefers-color-scheme rule (grep stylesheet.css: none)", "liferay-dxp": "not checked: no prefers-color-scheme/forced-colors auto-follow behaviour documented for Liferay's accessibility menu or style books", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -3224,9 +3326,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Group theming' section -- but only for authenticated members of the mapped group", "evidence": { - "nextcloud-theming": "outside the product: Nextcloud theming is instance-wide, no per-site/portal/department theme exists", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ThemingDefaults.php:237-258 reads one instance-wide primary_color and background_color from app config, overridable only by the individual user (185-232); no per-site or per-department theme exists", "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : each SharePoint site selects and can customise its own theme independently", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : openDesk applies exactly one deployment-configured brand (productName, slogan, primary colour, logos) via theme.yaml.gotmpl; there is no in-product catalogue, picker or gallery of alternative ready-made house styles to choose between; a deployment is one brand, not multiple sites/departments", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); one brand per deployment", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style books (and themes) are assigned per Site, so each site/department can have its own", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -3254,9 +3356,9 @@ }, "reachedOn": "nothing reaches it", "evidence": { - "nextcloud-theming": "outside the product: no domain-based brand switching exists", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ThemingDefaults.php:237-258 reads one instance-wide primary_color and background_color from app config, overridable only by the individual user (185-232); nothing in apps/theming reads the request host to pick a brand", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : Home Realm Discovery lets company branding show immediately 'For customers who access applications from a custom URL, the whr query string parameter, or a domain variable', and B2B cross-tenant sign-ins show the visiting user's own home-tenant branding by domain", - "opendesk": "not documented", + "opendesk": "opendesk@v1.18.2 global.yaml.gotmpl:11 one domain per deployment and one theme tree", "liferay-dxp": "https://learn.liferay.com/w/dxp/security-and-administration/administration/configuring-liferay/virtual-instances : virtual instances are each reached via their own domain name with independent configuration, so the brand shown depends on which domain/instance the user arrives on", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -3272,7 +3374,7 @@ "thematiq": "no", "nextcloud-theming": "no", "m365-branding": "unknown", - "opendesk": "unknown", + "opendesk": "no", "liferay-dxp": "yes", "tokens-studio": "no", "built": { @@ -3283,9 +3385,9 @@ }, "reachedOn": "nothing reaches it as real tenant isolation", "evidence": { - "nextcloud-theming": "outside the product: appconfig-backed theming values (apps/theming/lib/ThemingDefaults.php) are global to the single Nextcloud instance, no multi-tenant isolation", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ThemingDefaults.php:237-258 reads one instance-wide primary_color and background_color from app config, overridable only by the individual user (185-232); one set of values per installation", "m365-branding": "not checked: Microsoft 365 organisational branding is scoped to one Azure/Entra tenant; running fully separate isolated brands 'on one installation' is not how a customer's single M365 tenant works, each brand needs its own Microsoft tenant", - "opendesk": "not checked: Nubus/Univention identity management can host multiple organisations, but per-tenant theming isolation was not covered by the fetched theming docs", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); one brand per deployment, grep -rni tenant docs: none", "liferay-dxp": "https://learn.liferay.com/w/dxp/security-and-administration/administration/configuring-liferay/virtual-instances : 'Liferay DXP can host multiple portals on one installation, called virtual instances, with completely separate data and configurations', which is exactly tenant isolation on one installation", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -3312,9 +3414,9 @@ }, "reachedOn": "machine: any Conduction app's own token-set picker, via useScopedTheme(), with only a logged-in (non-admin) session required", "evidence": { - "nextcloud-theming": "apps/theming/lib/Capabilities.php:114-144 exposes the active theme's colours/logo/background and enabledThemes list to any client without admin rights via the public capabilities API, but this is the single active theme's values, not a browsable catalogue of house styles for a picker", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Capabilities.php:114-144 (IPublicCapability) gives any app or client, without admin rights, the active colours, logo, background and enabledThemes; it is the one active theme, not a list of house styles to pick from", "m365-branding": "https://learn.microsoft.com/en-us/graph/api/organizationalbranding-update : reading organizationalBranding via Microsoft Graph requires an application permission such as OrganizationalBranding.Read.All, which needs admin consent, not something another app can call without admin rights", - "opendesk": "not applicable: no house-style catalogue exists to expose via an API", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no catalogue", "liferay-dxp": "not checked: Liferay's Headless APIs were confirmed to exist generally, but whether a non-admin-scoped endpoint lists the site's style book catalogue was not confirmed in the docs read", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -3341,9 +3443,9 @@ }, "reachedOn": "Settings > Administration > Theming, custom token set upload panel (#nldesign-custom-token-sets), warning banner appears after upload", "evidence": { - "nextcloud-theming": "not applicable: no house-style upload exists; admin colour fields are validated only for hex syntax, not contrast (apps/theming/lib/Controller/ThemingController.php:115-130)", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Controller/ThemingController.php:115-130 checks only the hex syntax of a colour; there is no style upload and no contrast warning", "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : the FAQ documents the exact warning 'Doesn't meet minimum color contrast ratio of 4.5:1' shown when saving theme colours", - "opendesk": "not applicable: there is no upload workflow for house styles", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no contrast check anywhere in the deployment", "liferay-dxp": "not checked: no contrast warning at token-save time was found in the style book editor documentation", "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" }, @@ -3360,7 +3462,7 @@ "thematiq": "yes", "nextcloud-theming": "no", "m365-branding": "unknown", - "opendesk": "unknown", + "opendesk": "no", "liferay-dxp": "unknown", "tokens-studio": "no", "built": { @@ -3371,9 +3473,9 @@ }, "reachedOn": "machine: other apps' theme-picker dialogs (bq-audit, bq-audit2, openbuild ThemePickerDialog.vue) via nextcloud-vue's useScopedTheme().evaluateContrast()", "evidence": { - "nextcloud-theming": "apps/theming/lib/Util.php:35-37 colorContrast()/invertTextColor() are internal helper functions, not exposed as a UI tool for checking an arbitrary pair of colours", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Util.php:36-47 invertTextColor()/getTextColor() are internal helpers; no UI or API checks an arbitrary colour pair", "m365-branding": "not checked: no standalone WCAG contrast-checking tool for arbitrary colour pairs was found in M365/SharePoint admin docs", - "opendesk": "not checked: not documented", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); grep -rni contrast helmfile: only the unused secondaryBlueHighcontrast key (theme.yaml.gotmpl:43)", "liferay-dxp": "not checked: no standalone WCAG contrast-checking tool for arbitrary colour pairs was found in the Liferay docs read", "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" }, @@ -3388,9 +3490,9 @@ "area": "accessibility", "name": "Rely on every shipped house style having been checked automatically for WCAG contrast.", "thematiq": "yes", - "nextcloud-theming": "partial", + "nextcloud-theming": "yes", "m365-branding": "unknown", - "opendesk": "unknown", + "opendesk": "partial", "liferay-dxp": "unknown", "tokens-studio": "no", "built": { @@ -3401,9 +3503,9 @@ }, "reachedOn": "machine: CI (PHPUnit suite run by code-quality.yml on every push/PR)", "evidence": { - "nextcloud-theming": "apps/theming/lib/Util.php:70-99 elementColor() enforces a minimum contrast ratio (3.2:1, 5.6:1 high-contrast) when deriving element colours, and DefaultTheme.php:82-83 documents a 4.5:1 target in comments, but there is no published/automated audit artifact, only these code-level design choices", + "nextcloud-theming": "nextcloud/server@v35.0.1 tests/Themes/AccessibleThemeTestCase.php:24-240 asserts text pairs at 4.5:1 and element pairs at 3:1 for every shipped theme (7:1 text for high contrast: tests/Themes/HighContrastThemeTest.php:37, DarkHighContrastThemeTest.php:36), run by DefaultThemeTest, DarkThemeTest and the high-contrast tests", "m365-branding": "not checked: not applicable, M365 org branding ships no catalogue of preset house styles to audit", - "opendesk": "not checked: no automated WCAG audit of the shipped default palette is documented", + "opendesk": "https://docs.opendesk.eu/legal/barrierefreiheit/ (read 2026-09-26): the one shipped brand was audited per application against BITV 2.0 / EN 301 549 in 07/2024 (70% passed overall); manual, not automatic, not contrast-specific, and a custom brand is not checked", "liferay-dxp": "not checked: SharePoint's/Liferay's own default themes are described only as 'designed for readability', with no explicit statement that every shipped theme is automatically WCAG-contrast-checked", "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" }, @@ -3420,7 +3522,7 @@ "thematiq": "yes", "nextcloud-theming": "no", "m365-branding": "unknown", - "opendesk": "unknown", + "opendesk": "partial", "liferay-dxp": "no", "tokens-studio": "no", "built": { @@ -3431,9 +3533,9 @@ }, "reachedOn": "https://thematiq.conduction.nl/reference/contrast-report (published docs site)", "evidence": { - "nextcloud-theming": "outside the product: no published per-theme contrast report exists", + "nextcloud-theming": "nextcloud/server@v35.0.1 no contrast report is published by apps/theming or in the admin manual theming page (https://docs.nextcloud.com/server/stable/admin_manual/configuration_server/theming.html read 2026-09-26)", "m365-branding": "not checked: no per-house-style published contrast report was found; M365 branding has no catalogue of named house styles", - "opendesk": "not checked", + "opendesk": "https://docs.opendesk.eu/legal/barrierefreiheit/ (read 2026-09-26): published per-application BITV results table (07/2024) with reports added in the repo; not a contrast report per style", "liferay-dxp": "https://www.liferay.com/documents/d/guest/vpat2-5rev_int_february2025_liferay_dxp_sites_experience : Liferay publishes a product-level VPAT, not a per-theme or per-style-book contrast report", "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" }, @@ -3449,7 +3551,7 @@ "thematiq": "partial", "nextcloud-theming": "no", "m365-branding": "unknown", - "opendesk": "unknown", + "opendesk": "no", "liferay-dxp": "partial", "tokens-studio": "no", "built": { @@ -3460,9 +3562,9 @@ }, "reachedOn": "nothing reaches it from the admin UI; the route exists and works if hit directly, but there is no button", "evidence": { - "nextcloud-theming": "outside the product: no downloadable contrast/compliance evidence report exists", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/appinfo/routes.php:10-97 has no report endpoint; no downloadable contrast evidence exists", "m365-branding": "not checked: no exportable contrast-evidence report of the tenant's active branding configuration was found", - "opendesk": "not checked", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no report generator", "liferay-dxp": "https://www.liferay.com/documents/d/guest/vpat2-5rev_int_february2025_liferay_dxp_sites_experience : Liferay publishes a Voluntary Product Accessibility Template (VPAT) conformance report, but it documents the product in general, not the contrast of a specific customer's active style book/theme configuration", "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" }, @@ -3490,9 +3592,9 @@ }, "reachedOn": "occ nldesign:compliance-report", "evidence": { - "nextcloud-theming": "outside the product: apps/theming/lib/Command/UpdateConfig.php is the only occ command, it manages config values, not compliance reporting", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Command/UpdateConfig.php is the only theming command (theming:config); it manages values, not reports", "m365-branding": "not checked: no CLI for generating a contrast compliance report was found", - "opendesk": "not documented", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no report generator", "liferay-dxp": "not checked: no CLI for generating a contrast compliance report was found", "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" }, @@ -3519,9 +3621,9 @@ }, "reachedOn": "Settings > Administration > Theming, house style dropdown, select 'Hoog contrast (WCAG AAA)'", "evidence": { - "nextcloud-theming": "config/config.sample.php:2472-2476 'enforce_theme' lets an admin force the high-contrast theme instance-wide, honoured by apps/theming/lib/Service/ThemesService.php:60,150 getThemes()/getEnabledThemes()", + "nextcloud-theming": "nextcloud/server@v35.0.1 config/config.sample.php:2471-2476 enforce_theme forces a theme such as light-highcontrast for everyone, applied by apps/theming/lib/Service/ThemesService.php:58-79,149-163; that theme is tested at 7:1 (tests/Themes/HighContrastThemeTest.php:37)", "m365-branding": "not checked: no maximum-contrast/WCAG AAA instance-wide theme option was found for M365/SharePoint org branding, which only offers arbitrary admin-chosen colours", - "opendesk": "https://www.openproject.org/blog/accessibility-high-contrast-mode/ (search snippet): \"High contrast mode was commissioned by the German Federal Ministry of the Interior and Home Affairs (BMI) as part of openDesk\" - one component (OpenProject) gained a BMI-commissioned high-contrast mode, not a suite-wide instance theme", + "opendesk": "nextcloud/server@v33.0.9 apps/theming/lib/Service/ThemesService.php:33-34 high contrast themes stay user-selectable (openDesk disables only colour and background, image nextcloud_configure_theming.php:16-17); theme.yaml.gotmpl:43 secondaryBlueHighcontrast is unused; no instance-wide high contrast brand", "liferay-dxp": "https://learn.liferay.com/kb-article/creating-high-contrast-color-themes-in-liferay-dxp-7.0 : since Fix Pack 58, 'navigate to Control Panel > Configuration > System Settings > Web Experience > Product Menu Accessibility, and check the Use High Contrast option' turns on an instance-wide high-contrast colour scheme, though the docs read do not label it explicitly as WCAG AAA", "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" }, @@ -3548,9 +3650,9 @@ }, "reachedOn": "any page, but only once the admin has selected the 'Hoog contrast' token set; not present for the default nldesign/rijkshuisstijl theme or any other set", "evidence": { - "nextcloud-theming": "themes are scoped to '(prefers-contrast: more)' and '(prefers-color-scheme: dark/light)' media queries (apps/theming/lib/Themes/HighContrastTheme.php, LightTheme.php:37, DarkTheme.php:39), which cooperate with OS accessibility signals, but no use of the CSS 'forced-colors' media feature itself was found in lib/ or core/css", + "nextcloud-theming": "nextcloud/server@v35.0.1 themes honour prefers-contrast and prefers-color-scheme (apps/theming/lib/Themes/HighContrastTheme.php:36-37, DarkTheme.php:38-39), but grep of apps/theming and core/css finds no forced-colors media query", "m365-branding": "not checked: no forced-colors/OS high-contrast-mode cooperation documented for M365/SharePoint branding", - "opendesk": "not checked", + "opendesk": "not checked: unknown: the openDesk layer adds no forced-colors rule (grep stylesheet.css: none); the stock behaviour of the bundled components was not audited", "liferay-dxp": "not checked: no forced-colors media-query cooperation documented for Liferay's accessibility menu or style books", "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" }, @@ -3567,7 +3669,7 @@ "thematiq": "yes", "nextcloud-theming": "yes", "m365-branding": "partial", - "opendesk": "unknown", + "opendesk": "partial", "liferay-dxp": "unknown", "tokens-studio": "no", "built": { @@ -3578,9 +3680,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Enable dark mode variants for the active token set' checkbox", "evidence": { - "nextcloud-theming": "apps/theming/lib/Themes/DarkTheme.php is a full built-in theme, user-selectable or auto-applied via prefers-color-scheme", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Themes/DarkTheme.php:52-147 is a full dark theme with the brand primary colour, selectable per user or applied by (prefers-color-scheme: dark)", "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme ; https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : dark-mode logos are supported ('alternate logo... optimized for use in Microsoft 365 dark themes', 'Square logo (dark theme)'), and SharePoint ships 2 dark/'inverted' default site themes, but the M365 organisation theme's nav-bar/accent/text colours have only one value each, no separate dark palette", - "opendesk": "not checked in openDesk-specific theming docs (component apps such as Nextcloud/Element have their own dark modes independent of the shared house-style file)", + "opendesk": "nextcloud/server@v33.0.9 DarkTheme stays user-selectable and follows the OS, using the primary colour openDesk sets; the brand has no dark variant (opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:27-47) and the portal stylesheet no dark rule", "liferay-dxp": "not checked: no full dark-mode variant of a style book/house style was found in the docs read; the accessibility menu (https://learn.liferay.com/w/dxp/personalization/experiences/using-the-accessibility-menu) does not list a dark-mode toggle", "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" }, @@ -3608,9 +3710,9 @@ }, "reachedOn": "occ nldesign:generate-dark-variants", "evidence": { - "nextcloud-theming": "the dark variant is a hand-written PHP class shipped with the app (apps/theming/lib/Themes/DarkTheme.php), not something regenerated from a house style by an occ command; no such command exists in lib/Command/", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Command holds only UpdateConfig.php; no dark-variant command exists (the dark palette is computed on each stylesheet request by lib/Themes/DarkTheme.php:52-78, so none is needed)", "m365-branding": "not checked: no CLI to regenerate dark variants was found", - "opendesk": "not documented", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:27-47 no dark variants to generate", "liferay-dxp": "not checked: no CLI to regenerate dark variants was found", "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" }, @@ -3624,7 +3726,7 @@ "area": "accessibility", "name": "Show visible focus indicators in the house style's colours.", "thematiq": "yes", - "nextcloud-theming": "no", + "nextcloud-theming": "partial", "m365-branding": "unknown", "opendesk": "unknown", "liferay-dxp": "partial", @@ -3637,9 +3739,9 @@ }, "reachedOn": "every page, once a token set with design_system nldesign is active (the default)", "evidence": { - "nextcloud-theming": "no dedicated focus-indicator colour token scoped to the active house style was found in apps/theming/lib/Themes/DefaultTheme.php's CSS-variable list; focus styling is core Nextcloud CSS, not theming-app-managed", + "nextcloud-theming": "nextcloud/server@v35.0.1 core/css/apps.scss:445,905,1186 draw focus-visible rings in var(--color-primary-element), which follows the brand primary colour, while other focus rings use var(--color-main-text) (apps.scss:226, inputs.scss:97)", "m365-branding": "not checked: no focus-indicator styling tied to house-style colours was found in M365/SharePoint branding docs", - "opendesk": "not checked", + "opendesk": "not checked: unknown: opendesk@v1.18.2 helmfile/files/theme/portal/stylesheet.css:192-194 only unsets text-decoration-thickness on login link focus and sets no brand focus ring; stock component focus styles were not audited", "liferay-dxp": "https://learn.liferay.com/w/dxp/personalization/experiences/using-the-accessibility-menu : DXP 2026.Q3+ ships a 'Focus Ring Animation' accessibility option where 'the ring appears at a larger size and then contracts to its normal size, drawing your eye to the new element', showing focus indicators are a first-class feature, though the docs read do not confirm the ring colour is drawn from the house style's own tokens", "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" }, @@ -3666,9 +3768,9 @@ }, "reachedOn": "any page (login and app pages) and the theming settings page itself, automatically when the OS/browser reports prefers-reduced-motion", "evidence": { - "nextcloud-theming": "apps/theming/lib/Themes/ReducedMotion.php sets --animation-quick/--animation-slow to 0 and is auto-applied via '(prefers-reduced-motion: reduce)'", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Themes/ReducedMotion.php:57-68 sets --animation-quick and --animation-slow to 0 under (prefers-reduced-motion: reduce) and can be enabled per user as a supplementary theme (37-38)", "m365-branding": "not checked: no reduced-motion preference support documented for M365/SharePoint org branding surfaces", - "opendesk": "not checked", + "opendesk": "not checked: unknown: the openDesk layer has no prefers-reduced-motion rule, and the pinned nextcloud/server@v33.0.9 has no ReducedMotion theme (apps/theming/lib/Themes/ReducedMotion.php 404 at that tag, added later); Element, OX and OpenProject not checked", "liferay-dxp": "https://learn.liferay.com/w/dxp/personalization/experiences/using-the-accessibility-menu : 'Reduced Motion: Stop all motion and animations to hide transitions and other movement effects' is a documented accessibility menu option", "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" }, @@ -3696,9 +3798,9 @@ }, "reachedOn": "Settings > Administration > Theming, the whole page", "evidence": { - "nextcloud-theming": "not checked: verifying full keyboard operability of the rendered settings page requires driving a live browser, out of scope for a source/docs-only reading", + "nextcloud-theming": "not checked: nextcloud/server@v35.0.1 not checked: the settings page is built from @nextcloud/vue NcColorPicker, NcTextField, NcCheckboxRadioSwitch and NcButton (apps/theming/src/components/AdminSectionThemingAdvanced.vue:72-124), which are keyboard-operable by design, but full keyboard operation needs a live browser run, not done in this source reading", "m365-branding": "not checked: keyboard-only operability of the Entra/SharePoint/M365 theming admin screens specifically was not confirmed in the docs read", - "opendesk": "not applicable: theming has no admin settings page (it is a YAML values file), so no keyboard-operability question applies", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page", "liferay-dxp": "not checked: keyboard-only operability of the style book editor specifically was not confirmed in the docs read, beyond Liferay's general accessibility conformance claims in its VPAT", "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" }, @@ -3726,9 +3828,9 @@ }, "reachedOn": "Settings > Administration > Theming, custom token set upload/list panel, 'Incomplete set' warning banner", "evidence": { - "nextcloud-theming": "not applicable: there is no house-style token vocabulary object in this product to check for completeness, only two required colour fields plus optional images", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ConfigLexicon.php:53-114 has no token vocabulary; the only fallbacks are the built-in defaults", "m365-branding": "not checked: no token-vocabulary-completeness audit was found for M365/SharePoint theme configuration", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : the fetched \"used by\" table itself shows several colour keys (primary65, primary35, secondaryBlue, secondaryBlueHighcontrast, secondaryRed, secondaryYellow, secondaryGreen, secondaryGrey) marked \"Not yet implemented\" - i.e. an incomplete vocabulary is openly documented, with no audit gate on it", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no vocabulary check", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books : since DXP 2025.Q2, style books are strictly tied to one theme's token definition ('Token Isolation and Restricted Application'), which constrains which tokens exist but was not documented as an audit that flags an incomplete vocabulary", "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" }, @@ -3742,7 +3844,7 @@ "area": "accessibility", "name": "Be prevented from publishing a theme whose contrast fails WCAG.", "thematiq": "no", - "nextcloud-theming": "no", + "nextcloud-theming": "partial", "m365-branding": "no", "opendesk": "no", "liferay-dxp": "unknown", @@ -3755,9 +3857,9 @@ }, "reachedOn": "nothing reaches it; no such block exists", "evidence": { - "nextcloud-theming": "apps/theming/lib/Controller/ThemingController.php:115-130 updateStylesheet() validates only hex-colour syntax for primary_color/background_color, not contrast; publishing a low-contrast pair is not blocked", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Controller/ThemingController.php:115-130 accepts any valid hex colour, but the derived element colour is lightened or darkened until it reaches 3.2:1 (lib/Util.php:70-91, used by lib/Themes/CommonThemeTrait.php:30), as the admin page says (src/components/AdminSectionThemingAdvanced.vue:79)", "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : 'You can override this recommendation and still save your theme as this is not a requirement', i.e. a failing contrast ratio does NOT block publishing", - "opendesk": "not documented", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no gate", "liferay-dxp": "not checked: no publish-time WCAG contrast gate was found for style books", "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" }, @@ -3785,9 +3887,9 @@ }, "reachedOn": "nothing reaches it; the token editor has no live per-swatch contrast readout", "evidence": { - "nextcloud-theming": "apps/theming/src/components/admin/ColorPickerField.vue shows only a live colour swatch/preview button, no numeric contrast ratio next to it", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/components/admin/ColorPickerField.vue:47-86 shows the colour and its label, no contrast ratio", "m365-branding": "not checked: no live contrast-ratio readout next to the colour picker was found; the contrast warning in M365 org theme (acc-contrast-on-upload) appears on save, not while picking the colour", - "opendesk": "not applicable: theming is edited as YAML, not through a colour-picker UI", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page", "liferay-dxp": "not checked: no live contrast-ratio readout next to the style book colour picker was found", "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" }, @@ -3815,9 +3917,9 @@ }, "reachedOn": "nothing generates or hosts a statement; only a link field to an externally-authored one", "evidence": { - "nextcloud-theming": "outside the product: no accessibility-statement generator/host exists; only imprint/privacy URL fields are provided (apps/theming/lib/ThemingDefaults.php:112-118)", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ConfigLexicon.php:53-114 has only imprint and privacy URLs; no accessibility-statement generator or field", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "https://www.opendesk.eu/en/accessibility : the published accessibility statement (BITV 2.0 / EN 301 549) covers only the opendesk.eu marketing website itself, not a feature that generates/hosts a statement for an operator's own deployment", + "opendesk": "opendesk@v1.18.2 functional.yaml.gotmpl:448-457 has no accessibility statement link; openDesk publishes its own statement (docs.opendesk.eu/legal/barrierefreiheit/) but nothing generates or hosts one for the deployer", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" }, @@ -3845,9 +3947,9 @@ }, "reachedOn": "Settings > Administration > Theming, the section is only listed/reachable for admins (and delegated groups)", "evidence": { - "nextcloud-theming": "apps/theming/lib/Controller/ThemingController.php : every value-changing endpoint carries #[AuthorizedAdminSetting(settings: Admin::class)]", + "nextcloud-theming": "nextcloud/server@v35.0.1 every write endpoint in apps/theming/lib/Controller/ThemingController.php (69, 172, 220, 302, 331) carries #[AuthorizedAdminSetting(settings: Admin::class)]", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : 'The Organizational Branding Administrator role is the minimum role required to customize company branding'", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : branding is declared as Helm/helmfile values (theme.yaml.gotmpl, customization.yaml.gotmpl) and rolled out with `helmfile apply`; changing it is a deployment/redeploy operation, not a runtime admin action : theming can only be changed by whoever holds access to the deployment's Helm values and CI (a stricter gate than in-app admin rights - there is no in-app theming control at all)", + "opendesk": "opendesk@v1.18.2 docs/baseline-requirements.md:191 theming is controlled with the deployment, so only the operator changes it; opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:16-17 disables user colour theming", "liferay-dxp": "https://learn.liferay.com/w/dxp/users-and-permissions/roles-and-permissions/creating-and-managing-roles : role-based permissions gate administrative actions such as site/style-book management to Site Administrators and other privileged roles", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -3874,9 +3976,9 @@ }, "reachedOn": "Settings > Administration > Security > Administration privileges (core), grant a group access to the Theming settings section", "evidence": { - "nextcloud-theming": "apps/theming/lib/Settings/Admin.php:26,116-120 implements IDelegatedSettings with getAuthorizedAppConfig(), Nextcloud's mechanism for delegating this settings section to a non-admin settings-delegate role", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Settings/Admin.php:26 implements IDelegatedSettings and 115-120 authorises the whole theming app config, so the section can be delegated to a non-admin group; every write endpoint in apps/theming/lib/Controller/ThemingController.php (69, 172, 220, 302, 331) carries #[AuthorizedAdminSetting(settings: Admin::class)]", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : the 'Organizational Branding Administrator' role is a scoped delegation, distinct from Global Administrator; https://learn.microsoft.com/en-us/sharepoint/brand-center-overview : 'a brand manager can create custom themes for your organization' as a role distinct from the global admin", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : branding is declared as Helm/helmfile values (theme.yaml.gotmpl, customization.yaml.gotmpl) and rolled out with `helmfile apply`; changing it is a deployment/redeploy operation, not a runtime admin action; no non-infra \"brand manager\" role is documented", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no role model for theming inside the product", "liferay-dxp": "https://learn.liferay.com/w/dxp/users-and-permissions/roles-and-permissions/creating-and-managing-roles : custom roles with narrower permission sets (e.g. scoped to Sites/Style Books) can be created instead of granting full Administrator access", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -3904,9 +4006,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Theming audit log' table", "evidence": { - "nextcloud-theming": "apps/theming/lib/ThemingDefaults.php:461-475 set() and :495-530 undo() write directly to appconfig with no logging of who changed what from what value to what", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ThemingDefaults.php:461-475 set() and 495-530 undo() write app config with no event or log; the shipped admin_audit app logs occ command lines only (apps/admin_audit/lib/Listener/ConsoleEventListener.php:28-41), not web changes or before/after values", "m365-branding": "not checked: no branding-specific audit trail (who changed which value, from what, to what) was confirmed for Entra/SharePoint/M365 theming in the docs read; general Microsoft Purview audit logging exists but was not verified for this specific resource", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : branding is declared as Helm/helmfile values (theme.yaml.gotmpl, customization.yaml.gotmpl) and rolled out with `helmfile apply`; changing it is a deployment/redeploy operation, not a runtime admin action : because branding lives in a values file, an operator who keeps that file in their own git repo gets who/what/when for free via commit history; this is generic Git mechanics, not a shipped audit-log feature of openDesk", + "opendesk": "opendesk@v1.18.2: the brand is values files in the operator's repository (docs/enhanced-configuration/gitops.md), so version-control history is the trail; openDesk itself logs nothing about theme changes, and Nextcloud admin changes through its stock page bypass that trail", "liferay-dxp": "https://learn.liferay.com/w/dxp/security-and-administration/administration/audit-framework : the audit framework records 'the user who performed it, the resource on which it was executed, the type of action... and execution date' for add/update/delete actions generally, though the docs read do not confirm field-level before/after values specifically for style book/theme changes", "tokens-studio": "https://docs.tokens.studio/token-storage/remote/sync-git-github : when using git sync, every token push is a commit (author, timestamp, diff), which functions as a change log, though Tokens Studio itself has no dedicated audit-log UI" }, @@ -3933,9 +4035,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Download full log' button", "evidence": { - "nextcloud-theming": "not applicable: no audit log exists to export", + "nextcloud-theming": "nextcloud/server@v35.0.1 no theming audit log exists (apps/theming/lib/ThemingDefaults.php:461-475 logs nothing), so nothing to export", "m365-branding": "not checked: no export-to-file capability for a branding-specific audit log was confirmed", - "opendesk": "same git-history reasoning as gov-audit-log: `git log` on the values repo is exportable", + "opendesk": "same basis as gov-audit-log: VCS history of the values repository is exportable; no product-side export", "liferay-dxp": "https://learn.liferay.com/w/dxp/security-and-administration/administration/audit-framework/searching-and-exporting-audit-events : the audit application lets you 'export audit events to CSV'", "tokens-studio": "same git-history reasoning as gov-audit-log: `git log` on the synced token repo is exportable" }, @@ -3962,9 +4064,9 @@ }, "reachedOn": "n/a (a guarantee about the absence of an edit path, not a screen)", "evidence": { - "nextcloud-theming": "not applicable: no audit log exists to be append-only", + "nextcloud-theming": "nextcloud/server@v35.0.1 no theming audit log exists (apps/theming/lib/ThemingDefaults.php:461-475), so no append-only guarantee", "m365-branding": "not checked: audit-log immutability was not confirmed for M365/SharePoint", - "opendesk": "not documented; a git history can be rewritten/force-pushed by anyone with repo access, so it is not append-only by design", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no product-side log", "liferay-dxp": "not checked: audit-log immutability/append-only guarantee was not confirmed in the audit framework docs read", "tokens-studio": "not documented; git history is not append-only by design" }, @@ -3992,9 +4094,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Complete configuration bundle' panel, download/upload buttons", "evidence": { - "nextcloud-theming": "apps/theming/lib/Command/UpdateConfig.php only gets/sets one key at a time, there is no single file bundling the whole theme configuration to promote across environments", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Command/UpdateConfig.php:58-130 gets or sets one key per call and images are stored in app data (lib/ImageManager.php:218-300); there is no single bundle file", "m365-branding": "not checked: no single-file promotion of the complete branding configuration between tenants/environments was found; each tenant is configured independently", - "opendesk": "https://github.com/opentelekomcloud-blueprints/openDesk-deployment (search snippet, environments/prod/values.yaml.gotmpl) and the helmfile/environments/default structure: the same theme values file structure is promoted across named environments (default/test/prod) as one file", + "opendesk": "opendesk@v1.18.2 helmfile/bases/environments.yaml.gotmpl:4-13 dev, test and prod environments each load their own values over the shared defaults, so one theme file is promoted between them", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/exporting-and-importing-style-books : style books export/import as a single zip or LAR file, which can be used to move a complete style book between environments, though the docs explicitly do not give dev/test/prod promotion guidance", "tokens-studio": "https://docs.tokens.studio/token-storage-and-sync/sync-provider-overview : token JSON can be branched and merged like any git content, but there is no documented named OTAP promotion workflow, only generic git branches" }, @@ -4021,9 +4123,9 @@ }, "reachedOn": "occ nldesign:config:export / occ nldesign:config:import", "evidence": { - "nextcloud-theming": "apps/theming/lib/Command/UpdateConfig.php:21-131 occ theming:config lets each setting/image be scripted individually for deployment automation, but there is no one bundled config file to export/import as a unit", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Command/UpdateConfig.php:22-24,58-130 occ theming:config lists and sets each text key and image (absolute path) for scripted deployments, but not as one export/import unit", "m365-branding": "https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.identity.directorymanagement/update-mgorganizationbranding : Microsoft Graph PowerShell cmdlets (Get-MgOrganizationBranding/Update-MgOrganizationBranding) let you script reading and writing the branding configuration, usable for promoting settings between tenants", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : branding is declared as Helm/helmfile values (theme.yaml.gotmpl, customization.yaml.gotmpl) and rolled out with `helmfile apply`; changing it is a deployment/redeploy operation, not a runtime admin action : `helmfile`/`helm` is the CLI used to apply the same values across environments, i.e. scripted deployment by construction", + "opendesk": "opendesk@v1.18.2 docs/getting-started.md:455 helmfile apply -e ; the theme travels with that command", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/exporting-and-importing-style-books : the export/import documentation for style books contains no mention of CLI tools or scripting; 'both methods appear limited to the user interface'", "tokens-studio": "https://tokens-studio.github.io/studio-app/ (search snippet): the Tokens Studio Platform ships a CLI/API (GraphQL) for connecting tokens to code, usable in scripted pipelines, but this is a separate paid \"Studio\" product, not the core Figma plugin" }, @@ -4050,9 +4152,9 @@ }, "reachedOn": "nothing reaches it: thematiq's contract is real and OpenRegister's engine/routes are real, but neither repo has a UI screen that drives a federated share end to end", "evidence": { - "nextcloud-theming": "outside the product: no federated configuration sharing between instances exists", + "nextcloud-theming": "nextcloud/server@v35.0.1 no federation code in apps/theming/lib; theming values are local app config", "m365-branding": "not checked: no federated cross-instance branding sharing was found", - "opendesk": "not documented", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no federation of config", "liferay-dxp": "not checked: no federated cross-instance style book sharing was found beyond manual zip/LAR export-import", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -4080,9 +4182,9 @@ }, "reachedOn": "nothing reaches it; no such capability exists", "evidence": { - "nextcloud-theming": "occ theming:config commands (apps/theming/lib/Command/UpdateConfig.php) and config.php keys like 'enforce_theme'/'theming.standalone_window.enabled' (config/config.sample.php:2472-2484) can be driven from Helm/Ansible-style deployment scripts, but most theming values live in the appconfig database rather than being declared natively in config.php itself", + "nextcloud-theming": "nextcloud/server@v35.0.1 config/config.sample.php:2463-2484 keys theme, enforce_theme and theming.standalone_window.enabled live in config.php, and occ theming:config (apps/theming/lib/Command/UpdateConfig.php) can be run from Helm or Ansible hooks, but colours, name and images live in the database, not declarative config", "m365-branding": "not checked: Microsoft 365/SharePoint/Entra ID are SaaS services with no customer-controlled deployment manifest (Helm values or similar) that declares tenant branding", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : branding is declared as Helm/helmfile values (theme.yaml.gotmpl, customization.yaml.gotmpl) and rolled out with `helmfile apply`; changing it is a deployment/redeploy operation, not a runtime admin action", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154 and docs/theming.md:18: the theme is Helm/helmfile values", "liferay-dxp": "https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-css-client-extension : theme CSS client extensions are declared in a client-extension.yaml inside a Liferay Workspace project and built/deployed via Gradle, i.e. the styling is code that is versioned and deployed together with the rest of the application", "tokens-studio": "https://docs.tokens.studio/token-storage-and-sync/sync-provider-add : tokens are stored as JSON in a git repository (GitHub/GitLab/Bitbucket/Azure DevOps), i.e. versioned as code by design" }, @@ -4110,9 +4212,9 @@ }, "reachedOn": "nothing reaches it; no such capability exists", "evidence": { - "nextcloud-theming": "outside the product: no second-approver workflow exists before a theming change goes live (ThemingDefaults::set() applies immediately)", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ThemingDefaults.php:461-475 applies a change immediately; no second-approver step exists", "m365-branding": "not checked: no second-approver workflow for saving branding changes was found; Save/Create applies immediately", - "opendesk": "not documented as a product feature; would depend on the deploying organisation's own GitOps/merge-request review process outside openDesk", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no approval step in the product; any review happens in the operator's own repository hosting", "liferay-dxp": "https://www.xtivia.com/blog/liferay-dxp-publications-versus-staging/ : Publications 'enables content authors to create/edit content, possibly have those changes go through a content approval workflow, and publish them to the live site on a schedule', though it was not confirmed whether style book/theme changes specifically flow through this approval step", "tokens-studio": "https://docs.tokens.studio/token-storage/remote/sync-git-github : the plugin's \"Create a Pull Request\" button routes token changes through the git provider's normal PR review/approval flow before merge" }, @@ -4127,7 +4229,7 @@ "area": "governance", "name": "Install and update the theming from the platform's app store.", "thematiq": "yes", - "nextcloud-theming": "yes", + "nextcloud-theming": "partial", "m365-branding": "unknown", "opendesk": "no", "liferay-dxp": "yes", @@ -4140,9 +4242,9 @@ }, "reachedOn": "Nextcloud instance's Apps admin page, App Store listing for thematiq (formerly nldesign)", "evidence": { - "nextcloud-theming": "theming ships as a shipped core app under apps/theming with the standard Nextcloud app lifecycle (appinfo/info.xml), installed/updated the same way as any Nextcloud app", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/appinfo/info.xml ships theming inside the server; it is installed and updated with each server release (latest v35.0.1, 2026-09-24), not through the App Store", "m365-branding": "not checked: organisational branding is a built-in tenant setting, not an app installed/updated from a store", - "opendesk": "not applicable: openDesk is deployed as a Kubernetes/Helm bundle maintained by BMI/ZenDiS, not installed from an app store", + "opendesk": "no: outside the product. openDesk is a helmfile deployment (README, docs/getting-started.md), not a Nextcloud app store app", "liferay-dxp": "https://marketplace.liferay.com/p/materialized-theme : themes such as the Materialized Theme are installed and updated from marketplace.liferay.com, Liferay's own app marketplace", "tokens-studio": "https://www.figma.com/community/plugin/843461159747178978/tokens-studio-for-figma : distributed and updated via the Figma Community plugin directory" }, @@ -4170,9 +4272,9 @@ }, "reachedOn": "the public GitHub repository and the app's own LICENSE/info.xml metadata", "evidence": { - "nextcloud-theming": "apps/theming/lib/ThemingDefaults.php:5 SPDX-License-Identifier: AGPL-3.0-or-later, part of the open-source Nextcloud server source", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ThemingDefaults.php:5 SPDX-License-Identifier: AGPL-3.0-or-later, in the public nextcloud/server repository", "m365-branding": "not checked: Entra ID, Microsoft 365 and SharePoint Online are proprietary closed-source cloud services", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : the theme configuration file itself is \"licensed under Apache-2.0 by the German Federal Ministry of the Interior\", and the whole deployment repo is public on gitlab.opencode.de", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:1-2 Apache-2.0; opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:4 EUPL-1.2; repositories public on gitlab.opencode.de", "liferay-dxp": "not checked: general knowledge caveat: Liferay DXP is Liferay's commercial/enterprise edition under a proprietary licence; only the separate Liferay Portal Community Edition core is open source (Apache-licensed), so DXP itself cannot be freely inspected/changed under an open source licence", "tokens-studio": "https://github.com/tokens-studio/figma-plugin : \"Tokens Studio is proudly open source at its core\" (the core Figma plugin repo is public), but Themes, Modified Colors and the Tokens Studio Platform are paid Pro/Platform tiers" }, @@ -4186,9 +4288,9 @@ "area": "governance", "name": "See the licence of every bundled font and asset stated in the product.", "thematiq": "yes", - "nextcloud-theming": "no", + "nextcloud-theming": "partial", "m365-branding": "unknown", - "opendesk": "unknown", + "opendesk": "yes", "liferay-dxp": "unknown", "tokens-studio": "no", "built": { @@ -4199,9 +4301,9 @@ }, "reachedOn": "https://thematiq.conduction.nl/reference/assets and /reference/compliance (published docs site)", "evidence": { - "nextcloud-theming": "the bundled OpenDyslexic font files (apps/theming/fonts/OpenDyslexic-Regular.otf, -Bold.otf) ship with no in-repo LICENSE file found alongside them, and the product UI does not state the font's or other bundled assets' licence", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/REUSE.toml:12-22 states OFL-1.1-RFN for the OpenDyslexic fonts and AGPL for bundled images, and shipped backgrounds carry an attribution with licence (lib/Service/BackgroundService.php:59-100) shown as a tooltip (src/components/UserSectionBackground.vue:231); the font licence is not shown in the product UI", "m365-branding": "not checked: no in-product statement of the licence of every bundled font/asset was found for M365/SharePoint", - "opendesk": "not checked: no listing of bundled font/asset licences was found in the theming docs", + "opendesk": "opendesk@v1.18.2 REUSE.toml:21-24 states Apache-2.0 for helmfile/files/theme/** (every bundled theme asset), with licence texts in LICENSES/; no fonts are bundled", "liferay-dxp": "not checked: no in-product statement of the licence of every bundled font/asset was found for Liferay", "tokens-studio": "not applicable: Tokens Studio does not bundle fonts or image assets, users reference their own" }, @@ -4229,9 +4331,9 @@ }, "reachedOn": "machine: GitHub Actions (repo maintainer facing, not an admin-facing UI feature)", "evidence": { - "nextcloud-theming": "outside the product: there is no NL Design System token source this app generates house styles from", + "nextcloud-theming": "nextcloud/server@v35.0.1 no token source or generator exists in apps/theming; values come from admin input only (lib/ThemingDefaults.php:461-475)", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "not applicable: openDesk's default styling is BMI's own brand, not derived from NL Design System sources", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); grep -rniE 'rijks|nl-design|nldesign|utrecht|dsfr|marianne' helmfile docs: no hits, so no preset catalogue exists", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance); Tokens Studio does not itself generate or ship NL Design System token sets" }, @@ -4259,9 +4361,9 @@ }, "reachedOn": "machine: GitHub Actions nightly cron, opens a PR on ConductionNL/thematiq", "evidence": { - "nextcloud-theming": "outside the product: no nightly upstream-sync job exists (no such entry in apps/theming/lib/Jobs)", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Jobs holds only MigrateBackgroundImages.php and RestoreBackgroundImageColor.php; no upstream sync job", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "not documented", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no token upstream", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "https://docs.tokens.studio/token-storage/remote/sync-git-github : sync is push/pull on demand (or via a user's own external CI); no built-in nightly upstream-check job is documented" }, @@ -4289,9 +4391,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Upstream token updates' checkbox", "evidence": { - "nextcloud-theming": "outside the product: no upstream-freshness check exists", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Jobs has no upstream check and no upstream exists", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "not documented", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no token upstream", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "not documented" }, @@ -4318,9 +4420,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'Dismiss' button on an upstream-update notice", "evidence": { - "nextcloud-theming": "not applicable: no freshness notice exists to dismiss", + "nextcloud-theming": "nextcloud/server@v35.0.1 no freshness notice exists in apps/theming (lib/Jobs has only background image jobs)", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "not applicable: no freshness-check feature exists", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no token upstream", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "not applicable: no freshness-check feature exists" }, @@ -4347,9 +4449,9 @@ }, "reachedOn": "Settings > Administration > Theming, 'last checked' text and notices list under the upstream-freshness toggle", "evidence": { - "nextcloud-theming": "not applicable: no freshness check exists to report a last-run status", + "nextcloud-theming": "nextcloud/server@v35.0.1 no freshness check exists in apps/theming, so no last-run status", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "not applicable", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no token upstream", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "not applicable" }, @@ -4377,9 +4479,9 @@ }, "reachedOn": "Settings > Administration > Theming, apply dialog's 'Also update Nextcloud theming' section", "evidence": { - "nextcloud-theming": "apps/theming/lib/ThemingDefaults.php IS Nextcloud's built-in theming source of truth for colours/logo, so there is nothing external to keep it 'in sync' with, it is trivially always in sync with itself", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ThemingDefaults.php is itself Nextcloud's theming source for colours and logo, so there is nothing to keep in line", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/components/platform-development/charts/opendesk-nextcloud (charts/opendesk-nextcloud-management/README.md) : the opendesk-nextcloud-management chart sets Nextcloud's own theming app (colour, logo, favicon, background) from the same central theme.yaml.gotmpl brand values", + "opendesk": "opendesk@v1.18.2 helmfile/apps/nextcloud/values-nextcloud-management.yaml.gotmpl:267-296 maps theme.yaml colours, logo, favicon, texts and URLs into the management chart, opendesk-nextcloud@v4.10.6 charts/opendesk-nextcloud-management/templates/job.yaml:300-326 into env vars, and opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:21-118 into occ theming:config; background colour excepted (:42-48)", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -4407,9 +4509,9 @@ }, "reachedOn": "Settings > Administration > Theming, apply dialog's 'Also update Nextcloud theming' section", "evidence": { - "nextcloud-theming": "apps/theming/lib/Settings/Admin.php is the same settings page where Nextcloud's built-in theming colours/logo are edited directly", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/views/AdminTheming.vue:13-16 is the page where Nextcloud's built-in colours, logo and name are edited", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "https://gitlab.opencode.de/bmi/opendesk/components/platform-development/charts/opendesk-nextcloud (charts/opendesk-nextcloud-management/README.md) : Nextcloud's theming values are set by the management chart at deploy time from the central values file, not edited live from Nextcloud's own settings page (a manual edit there would not be the source of truth and could be overwritten on the next reconcile)", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -4437,9 +4539,9 @@ }, "reachedOn": "machine: Nextcloud's own repair-step runner (occ upgrade / app enable), no admin UI action needed", "evidence": { - "nextcloud-theming": "apps/theming/lib/ConfigLexicon.php:41-46 documents legacy keys (url/docBaseUrl) kept for compatibility, and apps/theming/lib/Migration/ manages schema changes across app versions/upgrades so settings survive them", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Migration/Version2006Date20240905111627.php and lib/Jobs/MigrateBackgroundImages.php migrate stored values across versions, and lib/ConfigLexicon.php:41-45 keeps legacy keys url and docBaseUrl readable", "m365-branding": "not checked: not applicable in the way this row frames it (an installable app being renamed/upgraded); M365 organisational branding is a built-in tenant setting with no separate app identity to rename", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : branding is declared as Helm/helmfile values (theme.yaml.gotmpl, customization.yaml.gotmpl) and rolled out with `helmfile apply`; changing it is a deployment/redeploy operation, not a runtime admin action : because values live in the deployer's own file (separate from the chart/app versions), a chart upgrade is designed to keep them intact, though this was not verified against an actual openDesk version-upgrade changelog", + "opendesk": "opendesk@v1.18.2 docs/migrations-manual.md:416-458: 1.18 renamed theme.imagery.logoHeaderSvgB64 to logoHeaderSvg and an old key silently falls back to openDesk's default logos; opendesk-jitsi@v3.10.0 templates/configmap.yaml:12,20 still reads the old names. Manual migration, not automatic", "liferay-dxp": "https://liferay.dev/b/from-theme-to-theme-less-the-smart-path-to-faster-future-ready-liferay-dxp-upgrades : Liferay documents an explicit migration path 'From Theme to Theme-less' for DXP upgrades, moving styling from classic themes to Style Books/Theme CSS Client Extensions across major versions, evidence that keeping styling intact across an upgrade is a named, supported path", "tokens-studio": "not checked: no documentation found on token-set persistence across a Tokens Studio plugin version upgrade" }, @@ -4455,7 +4557,7 @@ "thematiq": "yes", "nextcloud-theming": "yes", "m365-branding": "yes", - "opendesk": "unknown", + "opendesk": "partial", "liferay-dxp": "unknown", "tokens-studio": "no", "built": { @@ -4466,9 +4568,9 @@ }, "reachedOn": "machine: any OCS capabilities consumer (mobile/desktop clients, other apps' JS, login page) via GET /ocs/v2.php/cloud/capabilities", "evidence": { - "nextcloud-theming": "apps/theming/lib/Capabilities.php implements IPublicCapability, exposing the active theme's colour/logo/background/enabledThemes via the OCS capabilities endpoint", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Capabilities.php:80-144 (IPublicCapability, registered at lib/AppInfo/Application.php:34) returns name, colours, logo, background and enabledThemes on the OCS capabilities endpoint", "m365-branding": "https://learn.microsoft.com/en-us/graph/api/organizationalbranding-update : the organizationalBranding resource can be read via Microsoft Graph (GET), letting clients read the active branding configuration", - "opendesk": "not checked: Nextcloud's OCS capabilities API generally reflects theming, but this was not verified against openDesk-specific documentation", + "opendesk": "nextcloud/server@v33.0.9 apps/theming/lib/Capabilities.php:98-108 exposes name, slogan, color, logo and background through the Nextcloud capabilities API, filled with the values openDesk sets; Nextcloud only, nothing suite-wide", "liferay-dxp": "not checked: Liferay's Headless APIs were confirmed to exist generally, but no specific 'active style book/theme' read endpoint analogous to a capabilities API was confirmed in the docs read", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -4495,9 +4597,9 @@ }, "reachedOn": "machine: sibling apps' theme-picker dialogs (e.g. bq-audit/bq-audit2/openbuild ThemePickerDialog.vue) mounted inside CnAppRoot", "evidence": { - "nextcloud-theming": "apps/theming/lib/Capabilities.php:114-144 exposes only the single active theme's values plus enabledThemes ids, not a browsable catalogue of house styles for another app's picker", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/openapi.json lists theme stylesheet, image, manifest, icon, user background and user theme enable/disable paths; no endpoint lists a catalogue of house styles", "m365-branding": "https://learn.microsoft.com/en-us/graph/api/organizationalbranding-update : organizationalBrandingLocalization is a listable Graph collection (one entry per browser-language branding), which is the closest documented equivalent to an API-listable catalogue, though it lists language variants of one brand rather than a catalogue of distinct named house styles", - "opendesk": "not applicable: no house-style catalogue exists to list", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no catalogue", "liferay-dxp": "not checked: no headless endpoint for listing a site's available style books/themes was confirmed in the docs read", "tokens-studio": "https://tokens-studio.github.io/studio-app/ (search snippet): the (paid) Tokens Studio Platform exposes a GraphQL API that can read token sets; the free Figma plugin itself has no such API" }, @@ -4525,9 +4627,9 @@ }, "reachedOn": "Settings > Administration > Theming, token set preview/apply dialog (apply-without-reload)", "evidence": { - "nextcloud-theming": "apps/theming/lib/Controller/ThemingController.php:398-443 getThemeStylesheet(themeId) lets a page fetch one theme's CSS variables plus custom CSS on demand by id, but it returns a single theme's stylesheet, not a manifest describing a cascade of several stylesheets composing one house style", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Controller/ThemingController.php:398-443 serves one theme's variables and custom CSS by id; the cascade order is decided server-side in lib/Service/ThemeInjectionService.php:36-63, with no endpoint that returns that list", "m365-branding": "not checked: no manifest API for fetching a house style's stylesheets in cascade order was found", - "opendesk": "not documented; each component consumes the shared values in its own build/config format, there is no shared stylesheet-manifest endpoint", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no manifest endpoint", "liferay-dxp": "not checked: no manifest API for fetching a style book's stylesheets in cascade order was found", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -4555,9 +4657,9 @@ }, "reachedOn": "machine: Prometheus scraper hitting GET /api/metrics with an admin app-password", "evidence": { - "nextcloud-theming": "outside the product: no Prometheus metrics endpoint exists in apps/theming", + "nextcloud-theming": "nextcloud/server@v35.0.1 grep of apps/theming for metrics or prometheus finds nothing", "m365-branding": "not checked: no Prometheus-style metrics for the branding subsystem were found", - "opendesk": "not documented", + "opendesk": "opendesk@v1.18.2 docs/monitoring.md covers component metrics; grep -ni theme docs/monitoring.md: none", "liferay-dxp": "not checked: no Prometheus-style metrics for the style book/theming subsystem were found", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -4571,7 +4673,7 @@ "area": "integration", "name": "Check that the theming app is healthy from a monitoring system.", "thematiq": "yes", - "nextcloud-theming": "no", + "nextcloud-theming": "partial", "m365-branding": "unknown", "opendesk": "no", "liferay-dxp": "unknown", @@ -4584,9 +4686,9 @@ }, "reachedOn": "machine: any monitoring system hitting GET /api/health (public, no auth required)", "evidence": { - "nextcloud-theming": "outside the product: no dedicated theming health-check endpoint for monitoring exists", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/SetupChecks/PhpImagickModule.php:35-45 is a setup check that warns when imagick or its SVG support is missing for theming, reported in the admin overview and by occ setupchecks; there is no dedicated health endpoint for a monitoring system", "m365-branding": "not checked: Microsoft 365 Service Health covers the service generally, not a dedicated 'theming app' health check", - "opendesk": "not documented", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no theming health check", "liferay-dxp": "not checked: no dedicated health-check endpoint for the theming/style-book subsystem was confirmed in the docs read", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -4602,7 +4704,7 @@ "thematiq": "yes", "nextcloud-theming": "yes", "m365-branding": "unknown", - "opendesk": "no", + "opendesk": "partial", "liferay-dxp": "yes", "tokens-studio": "no", "built": { @@ -4613,9 +4715,9 @@ }, "reachedOn": "any page in the instance, automatically, for any app that writes plain CSS against the --nldesign-* variables", "evidence": { - "nextcloud-theming": "apps/theming/lib/Themes/DefaultTheme.php:124-268 exposes plain CSS custom properties consumable directly by any app's CSS with no build step, served globally via getThemeStylesheet()", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Themes/DefaultTheme.php:80-275 exposes plain CSS custom properties, injected on every page by lib/Service/ThemeInjectionService.php:36-63, usable by any app's CSS with no build step", "m365-branding": "not checked: no evidence that third-party apps can consume the M365/SharePoint theme's colours as ready-made CSS custom properties with no build step", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : each component (Nextcloud, Element, OX App Suite, Xwiki, Jitsi, Portal) consumes the shared theme values through its own deploy-time configuration, not a shared live CSS-variable feed other apps can read", + "opendesk": "Inside Nextcloud, apps read stock theming CSS variables filled from the primary colour openDesk sets (opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:21-23); across components there are no shared variables (Element gets two, values-element.yaml.gotmpl:21-22)", "liferay-dxp": "https://github.com/liferay/liferay-frontend-projects/blob/master/guidelines/dxp/how_to_use_css_custom_properties.md : frontend tokens are implemented as CSS custom properties available at runtime portal-wide, so other portlets/apps can style themselves with the same variables with no build step", "tokens-studio": "confirmed above: Tokens Studio requires a Style Dictionary build step to produce CSS variables; there is no no-build live variable feed for other apps" }, @@ -4642,9 +4744,9 @@ }, "reachedOn": "every ordinary page in the instance (no admin.js/playground.js loaded there)", "evidence": { - "nextcloud-theming": "apps/theming/lib/Controller/ThemingController.php:398-443 getThemeStylesheet() returns a cacheable text/css DataDisplayResponse consumed via a stylesheet, no JS execution required to apply colours on ordinary pages", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Service/ThemeInjectionService.php:72-84 adds tags and colours apply as CSS; the only script added per page (lib/Listener/BeforeTemplateRenderedListener.php:59) just assigns initial state to window.OCA.Theming (src/theming.ts)", "m365-branding": "not checked: whether M365/SharePoint theming is applied as pure CSS with no JS cost was not documented one way or the other", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : \"Portal and Keycloak screen styles... must be applied in the portalStylesheets.css\" - a plain CSS file for those two surfaces; other components (Element, OX App Suite, Jitsi) apply branding through their own build-time configuration, not documented as pure runtime CSS", + "opendesk": "opendesk@v1.18.2: portal and Keycloak take a plain CSS file (values-nubus.yaml.gotmpl:403); other components get config values that their own runtime applies (OX dynamic-theme, Element custom_css_variables, Jitsi branding.json)", "liferay-dxp": "https://liferay.dev/b/from-theme-to-theme-less-the-smart-path-to-faster-future-ready-liferay-dxp-upgrades : the 2025 'theme-less' architecture is built on Style Books, Theme CSS Client Extensions and Master Page templates as CSS, with JS Client Extensions kept as a distinct, separate mechanism, implying the CSS theming path itself carries no JS cost", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" }, @@ -4671,9 +4773,9 @@ }, "reachedOn": "nothing reaches it as a documented external API; only the admin page's own JS calls it, with a CSRF token tied to that session", "evidence": { - "nextcloud-theming": "apps/theming/lib/Controller/ThemingController.php updateStylesheet()/uploadImage()/undo() are callable ajax endpoints but carry no #[OpenAPI] attribute (unlike getImage/getManifest/getThemeStylesheet which do), so they are not documented as a public/OpenAPI'd management API", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Controller/ThemingController.php:69-345 updateStylesheet, uploadImage, undo and undoAll are callable admin endpoints but are absent from apps/theming/openapi.json, which documents only the read and user-theme paths", "m365-branding": "https://learn.microsoft.com/en-us/graph/api/organizationalbranding-update : organizationalBranding can be updated via a documented Microsoft Graph REST endpoint; https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : SharePoint site theming is also documented via 'the SharePoint REST API'", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : branding is declared as Helm/helmfile values (theme.yaml.gotmpl, customization.yaml.gotmpl) and rolled out with `helmfile apply`; changing it is a deployment/redeploy operation, not a runtime admin action : there is no REST/management API, only Helm values + redeploy", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no theming API", "liferay-dxp": "not checked: Liferay's Headless APIs exist generally, but a documented REST endpoint specifically for changing a site's active style book/theme was not confirmed in the docs read", "tokens-studio": "https://tokens-studio.github.io/studio-app/ (search snippet): the paid Tokens Studio Platform exposes a documented GraphQL API and CLI for managing token sets, though it manages token values, not a live app's active theme" }, @@ -4701,9 +4803,9 @@ }, "reachedOn": "occ nldesign:config:import , where the bundle's tokenSet field becomes the active theme", "evidence": { - "nextcloud-theming": "apps/theming/lib/Command/UpdateConfig.php sets individual values (colors, images, name, etc.) from the CLI, and config.php 'enforce_theme' can force a personal theme id instance-wide, but there is no single 'set active theme ' command since no house-style catalogue exists to select from", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Command/UpdateConfig.php:22-24 sets name, colours, URLs and images from the CLI and config/config.sample.php:2471-2476 enforce_theme picks a built-in theme instance-wide via occ config:system:set; there is no house-style id to set", "m365-branding": "https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.identity.directorymanagement/update-mgorganizationbranding : Update-MgOrganizationBranding (Microsoft Graph PowerShell) and PnP PowerShell cmdlets let you set branding/site theme values from the command line", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : branding is declared as Helm/helmfile values (theme.yaml.gotmpl, customization.yaml.gotmpl) and rolled out with `helmfile apply`; changing it is a deployment/redeploy operation, not a runtime admin action : the theme is set/changed via the `helmfile`/`helm` command line applying the edited values file - this is the only documented way to change it", + "opendesk": "opendesk@v1.18.2 docs/getting-started.md:455 helmfile apply sets the theme from values", "liferay-dxp": "Liferay DXP style book export/import docs: both methods 'appear limited to the user interface', so activating a style book on a site from the CLI is not documented; theme CSS client extensions are deployed via Gradle from the command line, which is the partial", "tokens-studio": "the Tokens Studio Platform CLI manages token sets/pushes, but there is no live app for it to \"set the active theme\" on" }, @@ -4731,9 +4833,9 @@ }, "reachedOn": "https://thematiq.conduction.nl", "evidence": { - "nextcloud-theming": "apps/theming/lib/Settings/Admin.php:62 links to https://docs.nextcloud.com/server/stable/admin_manual/configuration_server/theming.html, Nextcloud's published admin manual page for theming", + "nextcloud-theming": "https://docs.nextcloud.com/server/stable/admin_manual/configuration_server/theming.html (read 2026-09-26, Nextcloud 35 manual) documents the GUI fields, occ theming:config, icon theming and branded client links; linked from apps/theming/lib/Settings/Admin.php:62", "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding ; https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme ; https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview ; https://learn.microsoft.com/en-us/sharepoint/brand-center-overview ; https://learn.microsoft.com/en-us/sharepoint/organization-assets-library ; https://learn.microsoft.com/en-us/sharepoint/brand-fonts : extensive end-user and admin documentation exists for every theming feature covered in this review", - "opendesk": "https://docs.opendesk.eu/operations/theming/ : a dedicated operations/theming page exists, but it is short and itself does not fully enumerate per-component coverage (\"most of the components adhere to these settings\")", + "opendesk": "opendesk@v1.18.2 docs/theming.md:16-31 (published at https://docs.opendesk.eu/operations/theming/): three short paragraphs, and its link to portalStylesheets.css points at a file that does not exist (actual helmfile/files/theme/portal/stylesheet.css)", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance ; https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-css-client-extension ; https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/exporting-and-importing-style-books ; https://learn.liferay.com/w/dxp/security-and-administration/administration/configuring-liferay/virtual-instances ; https://learn.liferay.com/w/dxp/security-and-administration/administration/audit-framework ; https://learn.liferay.com/w/dxp/personalization/experiences/using-the-accessibility-menu : extensive end-user, admin and developer documentation exists for every theming feature covered in this review", "tokens-studio": "https://docs.tokens.studio/ : a full documentation site covers every token type, theming, sync provider and export path" }, @@ -4760,9 +4862,9 @@ }, "reachedOn": "Settings > Administration > Theming, select the 'La Suite numérique' token set, so this Nextcloud instance visually matches a surrounding La Suite (MijnBureau/EDIC) bundle", "evidence": { - "nextcloud-theming": "outside the product: stock Nextcloud theming has no concept of a sovereign-workplace bundle brand shared across multiple products", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming has no notion of a multi-product bundle; it brands the one Nextcloud instance only (lib/ThemingDefaults.php:237-258)", "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", - "opendesk": "https://docs.opendesk.eu/operations/theming/ + https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk (helmfile/environments/default/theme.yaml.gotmpl, fetched via GitLab raw) : openDesk IS the sovereign workplace bundle, and theme.yaml.gotmpl is explicitly the shared brand definition applied across Element, OX App Suite, Xwiki, Jitsi, Portal/Keycloak and (via the management chart) Nextcloud", + "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:4-8 one brand definition for the bundle, consumed by Nextcloud, OX, Element, XWiki, OpenProject, Jitsi, portal and Keycloak; gaps: Collabora (collabora/values.yaml.gotmpl:45) and Notes (notes/values.yaml.gotmpl:124), and issue #27 (open) lists components where theming does not reach", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance); Tokens Studio is a standalone design tool, not shipped as part of any workspace bundle" }, @@ -4771,6 +4873,390 @@ "feature": "lasuite-stack", "featureConfidence": "high", "note": "origin:competitor row: thematiq makes Nextcloud's own chrome match a sovereign-workplace bundle's brand, which is what a Nextcloud-only app can do; it does not itself assemble or ship the multi-component bundle (Docs/Meet/Chat + Nextcloud) that answer, that packaging is MijnBureau/EDIC's job." + }, + { + "id": "sur-help-links", + "area": "surfaces", + "name": "Point the help and documentation links in the user menu at the organisation's own documentation.", + "thematiq": "no", + "nextcloud-theming": "partial", + "m365-branding": "unknown", + "opendesk": "unknown", + "liferay-dxp": "unknown", + "tokens-studio": "unknown", + "built": { + "state": "none", + "evidence": "grep -rniE 'docBaseUrl|doc_base|helpUrl' in lib/, src/, templates/, appinfo/ finds nothing; thematiq does not touch the help or documentation links", + "owner": "ConductionNL/thematiq", + "origin": "competitor" + }, + "reachedOn": "nothing reaches it", + "evidence": { + "nextcloud-theming": "nextcloud/server@v35.0.1 lib/private/URLGenerator.php:229-231 builds doc links through ThemingDefaults, and apps/theming/lib/ThemingDefaults.php:120-123 reads a docBaseUrl app config key (legacy key, lib/ConfigLexicon.php:44-45), settable only with occ config:app:set and still suffixed with /server//go.php (lib/private/legacy/OC_Defaults.php:259-264); the embedded help page serves core/doc (apps/settings/lib/Controller/HelpController.php:56-57); no admin UI field", + "m365-branding": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "opendesk": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "liferay-dxp": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "tokens-studio": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read" + }, + "provider": "thematiq", + "providerHow": "read-from-code", + "feature": "theming-capability", + "featureConfidence": "high", + "origin": "featureRequest", + "originUrl": "https://github.com/nextcloud/server/issues/58909", + "note": "A municipality wants the help button to open its own intranet manual, not nextcloud.com, without breaking the integrity check." + }, + { + "id": "sur-support-link", + "area": "surfaces", + "name": "Add a support or helpdesk link next to the legal notice and privacy links.", + "thematiq": "no", + "nextcloud-theming": "no", + "m365-branding": "unknown", + "opendesk": "unknown", + "liferay-dxp": "unknown", + "tokens-studio": "unknown", + "built": { + "state": "none", + "evidence": "lib/Service/EmailThemingService.php:83-97 stores only an organisation name, an accessibility URL and a privacy URL for the email footer; no support or helpdesk link exists for the web footer or login page (grep -niE 'support|helpdesk|servicedesk' in templates/settings/admin.php and lib/Controller finds nothing)", + "owner": "ConductionNL/thematiq", + "origin": "competitor" + }, + "reachedOn": "nothing reaches it", + "evidence": { + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ThemingDefaults.php:142-151 hard-codes only Legal notice and Privacy policy; extra footer links come only from apps registering guest navigation entries in code (153-160), and the admin form has no such field (src/components/AdminSectionTheming.vue:44-57)", + "m365-branding": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "opendesk": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "liferay-dxp": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "tokens-studio": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read" + }, + "provider": "thematiq", + "providerHow": "read-from-code", + "feature": "theming-capability", + "featureConfidence": "high", + "origin": "featureRequest", + "originUrl": "https://github.com/nextcloud/server/issues/39047", + "note": "Government services must point users to their own service desk; a third footer link is a common branding requirement." + }, + { + "id": "sur-localised-name", + "area": "surfaces", + "name": "Show the instance name and slogan in the user's own language.", + "thematiq": "no", + "nextcloud-theming": "no", + "m365-branding": "unknown", + "opendesk": "unknown", + "liferay-dxp": "unknown", + "tokens-studio": "unknown", + "built": { + "state": "none", + "evidence": "thematiq edits Nextcloud's single stored name and slogan (syn-nc-theming-edit) and can hide the slogan (lib/Controller/SettingsController.php:300-310); no per-language value exists", + "owner": "ConductionNL/thematiq", + "origin": "competitor" + }, + "reachedOn": "nothing reaches it", + "evidence": { + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/ThemingDefaults.php:72-75 getName() returns one stored value; getSlogan($lang) (107-110) passes the language only to the built-in default, a stored slogan is the same for every language", + "m365-branding": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "opendesk": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "liferay-dxp": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "tokens-studio": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read" + }, + "provider": "thematiq", + "providerHow": "read-from-code", + "feature": "theming-capability", + "featureConfidence": "high", + "origin": "featureRequest", + "originUrl": "https://github.com/nextcloud/server/issues/37550", + "note": "Bilingual bodies (Frisian, border municipalities, EU-facing agencies) need the brand name and tagline per language." + }, + { + "id": "sur-login-wording", + "area": "surfaces", + "name": "Change the wording on the login page, such as the label of the account field.", + "thematiq": "no", + "nextcloud-theming": "no", + "m365-branding": "unknown", + "opendesk": "unknown", + "liferay-dxp": "unknown", + "tokens-studio": "unknown", + "built": { + "state": "none", + "evidence": "lib/Service/LoginTokens.php:39 getTokens() returns colour and typography tokens for the login page only; no login text or label is configurable", + "owner": "ConductionNL/thematiq", + "origin": "competitor" + }, + "reachedOn": "nothing reaches it", + "evidence": { + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Controller/ThemingController.php:74-147 accepts no login text keys; login strings are fixed translations in core, changeable only by overriding templates in a legacy theme folder (lib/private/Template/Template.php:74-84)", + "m365-branding": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "opendesk": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "liferay-dxp": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "tokens-studio": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read" + }, + "provider": "thematiq", + "providerHow": "read-from-code", + "feature": "theming-capability", + "featureConfidence": "high", + "origin": "featureRequest", + "originUrl": "https://github.com/nextcloud/server/issues/38831", + "note": "Organisations want the login screen to say 'personeelsnummer' or refer to their own identity provider, in their own tone of voice." + }, + { + "id": "gov-enforce-appearance", + "area": "governance", + "name": "Force one appearance theme (for example light or high contrast) for every user from the admin settings page.", + "thematiq": "no", + "nextcloud-theming": "partial", + "m365-branding": "unknown", + "opendesk": "unknown", + "liferay-dxp": "unknown", + "tokens-studio": "unknown", + "built": { + "state": "none", + "evidence": "no setting in lib/ or templates/settings/admin.php forces one appearance theme; thematiq reads the user's own theme choice (lib/Service/StockTokensService.php:335-336 notes user theming stays on by default) and renders dark variants for it (lib/Service/DarkPaletteService.php:806-833)", + "owner": "ConductionNL/thematiq", + "origin": "competitor" + }, + "reachedOn": "nothing reaches it", + "evidence": { + "nextcloud-theming": "nextcloud/server@v35.0.1 config/config.sample.php:2471-2476 enforce_theme forces a theme only through config.php (applied in apps/theming/lib/Service/ThemesService.php:58-79 and filtered in lib/Settings/Personal.php:36-53); the admin page only offers Disable user theming for colours and background (src/components/AdminSectionThemingAdvanced.vue:118-124)", + "m365-branding": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "opendesk": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "liferay-dxp": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "tokens-studio": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read" + }, + "provider": "thematiq", + "providerHow": "read-from-code", + "feature": "theming-capability", + "featureConfidence": "high", + "origin": "featureRequest", + "originUrl": "https://github.com/nextcloud/server/issues/38966", + "note": "A brand manager without server access cannot lock the look; today it needs a config.php change by operations." + }, + { + "id": "acc-toast-timeout", + "area": "accessibility", + "name": "Let each user choose how long toast notifications stay visible, including never dismissing them.", + "thematiq": "no", + "nextcloud-theming": "yes", + "m365-branding": "unknown", + "opendesk": "unknown", + "liferay-dxp": "unknown", + "tokens-studio": "unknown", + "built": { + "state": "none", + "evidence": "css/component-scopes.css:719-721 styles toasts in the house style, but no toast timeout setting exists in lib/ or src/; the timing is the platform's", + "owner": "ConductionNL/thematiq", + "origin": "competitor" + }, + "reachedOn": "nothing reaches it", + "evidence": { + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/components/UserSectionToastTimeout.vue:116-120 mounted by src/views/UserTheming.vue:52; allowed values 7, 15, 30 seconds or never in lib/Capabilities.php:32, stored as user config toast_timeout (lib/ConfigLexicon.php:118-127)", + "m365-branding": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "opendesk": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "liferay-dxp": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "tokens-studio": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read" + }, + "provider": "thematiq", + "providerHow": "read-from-code", + "feature": "theming-capability", + "featureConfidence": "high", + "origin": "changelog", + "originUrl": "https://github.com/nextcloud/server/pull/62689", + "note": "WCAG 2.2.1 timing adjustable: government accessibility audits check that status messages do not vanish too fast." + }, + { + "id": "sur-selection-colour", + "area": "surfaces", + "name": "Have selected and highlighted text take the brand colour in a readable, translucent form.", + "thematiq": "yes", + "nextcloud-theming": "yes", + "m365-branding": "unknown", + "opendesk": "unknown", + "liferay-dxp": "unknown", + "tokens-studio": "unknown", + "built": { + "state": "built", + "evidence": "css/systems/nldesign/overrides.css:220-225 deliberately leaves --color-background-selection to core, which derives it from --color-primary-element, mapped to the brand primary at the top of that file, so the selection wash follows the house style", + "owner": "ConductionNL/thematiq", + "origin": "competitor" + }, + "reachedOn": "any page: selected text takes the brand primary at 20 percent", + "evidence": { + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Themes/DefaultTheme.php:178 --color-background-selection is rgb(from var(--color-primary-element) r g b / 0.2) (0.4 in DarkTheme.php:127), and DefaultTheme.php:177 adds --color-mark for highlighted text", + "m365-branding": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "opendesk": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "liferay-dxp": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "tokens-studio": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read" + }, + "provider": "thematiq", + "providerHow": "read-from-code", + "feature": "nextcloud-variable-mapping", + "featureConfidence": "high", + "origin": "changelog", + "originUrl": "https://github.com/nextcloud/server/pull/58834", + "note": "Small but visible: text selection in the house colour is one more place where the brand shows without breaking contrast." + }, + { + "id": "sur-coverage-report", + "area": "surfaces", + "name": "See, per component of the suite, whether the logo, the brand colours and the profile picture actually follow the central theme, so gaps are visible before users find them.", + "thematiq": "no", + "nextcloud-theming": "unknown", + "m365-branding": "unknown", + "opendesk": "no", + "liferay-dxp": "unknown", + "tokens-studio": "unknown", + "built": { + "state": "none", + "evidence": "lib/Service/AppThemingService.php:28-36 keeps only a per-app exclusion list; acc-vocabulary-audit checks a token set's vocabulary, not which apps or surfaces actually follow it; no per-app coverage view exists", + "owner": "ConductionNL/thematiq", + "origin": "competitor" + }, + "reachedOn": "nothing reaches it", + "evidence": { + "nextcloud-theming": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "m365-branding": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "opendesk": "Issue #27 (open since 2024-01, labels type: Improvement, incharge: Upstream) tabulates logo and colour support per component with several gaps; at v1.18.2 Collabora is still started with use_integration_theme=false (helmfile/apps/collabora/values.yaml.gotmpl:45) and Notes keeps a fixed openDesk theme (helmfile/apps/notes/values.yaml.gotmpl:124). No coverage report exists.", + "liferay-dxp": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "tokens-studio": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read" + }, + "provider": "thematiq", + "providerHow": "read-from-code", + "feature": "per-app-theming", + "featureConfidence": "high", + "origin": "featureRequest", + "originUrl": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/work_items/27", + "note": "A government buyer rebranding a whole sovereign workplace needs to know which surfaces will still show the vendor brand; an open issue for over two years shows the gap is real." + }, + { + "id": "sco-suite-wide-appearance", + "area": "scoping", + "name": "Respect a user's light or dark choice from the central portal in every application of the suite.", + "thematiq": "partial", + "nextcloud-theming": "unknown", + "m365-branding": "unknown", + "opendesk": "partial", + "liferay-dxp": "unknown", + "tokens-studio": "unknown", + "built": { + "state": "built", + "evidence": "lib/Service/DarkPaletteService.php:806-833 renders the dark palette for body[data-theme-dark] and prefers-color-scheme, so one user choice applies on every Nextcloud app page; it does not reach a separate office editor or chat server (see sur-office-suite)", + "owner": "ConductionNL/thematiq", + "origin": "competitor" + }, + "reachedOn": "any Nextcloud page after the user picks dark or high contrast once in personal settings", + "evidence": { + "nextcloud-theming": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "m365-branding": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "opendesk": "docs/baseline-requirements.md:201 says the theme (light/dark) chosen in the IAM portal SHOULD be respected in all components, with 'Reference: No reference yet'; only stock per-app choices exist today (Nextcloud theme list still enabled, image nextcloud_configure_theming.php:16-17 disables colour and background only).", + "liferay-dxp": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "tokens-studio": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read" + }, + "provider": "thematiq", + "providerHow": "read-from-code", + "feature": "dark-mode", + "featureConfidence": "high", + "origin": "roadmap", + "originUrl": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/blob/v1.18.2/docs/baseline-requirements.md", + "note": "A single dark-mode switch across all apps is an accessibility expectation; per-app switches mean users set it six times." + }, + { + "id": "ast-mobile-logo", + "area": "assets", + "name": "Set a separate mobile logo and home-screen touch icon for the project management app without changing its browser tab icon.", + "thematiq": "no", + "nextcloud-theming": "unknown", + "m365-branding": "unknown", + "opendesk": "yes", + "liferay-dxp": "unknown", + "tokens-studio": "unknown", + "built": { + "state": "none", + "evidence": "grep -rniE 'apple-touch|touchicon|touch-icon|logoMobile' in lib/, src/, templates/, css/, appinfo/ finds nothing; thematiq sets the favicon (ast-favicon) but no separate small-screen logo or touch icon", + "owner": "ConductionNL/thematiq", + "origin": "competitor" + }, + "reachedOn": "nothing reaches it", + "evidence": { + "nextcloud-theming": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "m365-branding": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "opendesk": "CHANGELOG 1.17.0 (2026-07-22) 'openproject: Set mobile logo using theme icon of project module' and docs/updates.md:162-173; theme.yaml.gotmpl:124-127 logoMobileSvg and touchiconSvg served via values-opendesk-static-files.yaml.gotmpl:128-134.", + "liferay-dxp": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "tokens-studio": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read" + }, + "provider": "thematiq", + "providerHow": "read-from-code", + "feature": "icon-assets", + "featureConfidence": "high", + "origin": "changelog", + "originUrl": "https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/blob/v1.18.2/CHANGELOG.md", + "note": "Small-screen and pinned-app surfaces are where a wrong logo is most noticed on phones issued to staff." + }, + { + "id": "gov-environment-marker", + "area": "governance", + "name": "Show a visible difference between the test and the production environment, so nobody works in the wrong one.", + "thematiq": "no", + "nextcloud-theming": "unknown", + "m365-branding": "unknown", + "opendesk": "unknown", + "liferay-dxp": "unknown", + "tokens-studio": "unknown", + "built": { + "state": "none", + "evidence": "the only per-environment feature is promoting the configuration bundle between OTAP stages (lib/Service/ConfigBundleService.php:31); the trial banner (lib/Service/ThemePreviewBannerService.php) marks a session trial, not an environment; no environment label or colour exists", + "owner": "ConductionNL/thematiq", + "origin": "competitor" + }, + "reachedOn": "nothing reaches it", + "evidence": { + "nextcloud-theming": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "m365-branding": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "opendesk": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "liferay-dxp": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "tokens-studio": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read" + }, + "provider": "thematiq", + "providerHow": "read-from-code", + "feature": "config-portability", + "featureConfidence": "high", + "origin": "tender", + "originUrl": "https://www.tenderned.nl/aankondigingen/overzicht/407031", + "note": "TenderNed 407031 (Gemeente Gulpen-Wittem, Zaaksysteem, 2026-01-06) requires one look-and-feel in the house style for all users with a clear difference between test and production; requirement 23655 in the intelligence database." + }, + { + "id": "sur-generated-documents", + "area": "surfaces", + "name": "Have documents the system generates (letters, PDF exports, reports) carry the house style: logo, cover, footer and fonts.", + "thematiq": "no", + "nextcloud-theming": "unknown", + "m365-branding": "unknown", + "opendesk": "partial", + "liferay-dxp": "unknown", + "tokens-studio": "unknown", + "built": { + "state": "none", + "evidence": "grep -rliE 'pdf|docx|documenttemplate' lib/ src/ finds no document generation; thematiq styles the web interface and emails only (sur-email), document templates belong to a document app", + "owner": "ConductionNL/thematiq", + "origin": "competitor" + }, + "reachedOn": "nothing reaches it", + "evidence": { + "nextcloud-theming": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "m365-branding": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "opendesk": "partial: only OpenProject PDF exports are branded. CHANGELOG 1.18.0 (2026-08-19) 'openproject: Add more theming options'; theme.yaml.gotmpl:128-145 pdfExportLogoPath, pdfExportCoverPath, pdfExportFooterPath and pdfExportFont*Url, wired in helmfile/apps/openproject/values.yaml.gotmpl:103-116; overwritten on every deployment (theme.yaml.gotmpl:130-131).", + "liferay-dxp": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "tokens-studio": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read" + }, + "provider": "thematiq", + "providerHow": "read-from-code", + "feature": "theming-capability", + "featureConfidence": "high", + "origin": "tender", + "originUrl": "https://www.tenderned.nl/aankondigingen/overzicht/404703", + "note": "Demand from tenders: TenderNed 404703 (Hilversum VTH, 2025-12-12), 415897 (FUMO, 2026-03-13) and 298070 (BUCH, several house styles per municipality) require generated documents in the house style. openDesk added OpenProject PDF export branding in 1.18.0." } ], "pending": [] From 92d9311bb3f8b80ea07f0a693050166285e89af6 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Sat, 26 Sep 2026 15:39:57 +0200 Subject: [PATCH 2/8] docs(parity): nextcloud-theming rated on the mined rows (wip) --- openspec/parity/capabilities.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/openspec/parity/capabilities.json b/openspec/parity/capabilities.json index 4ed828fa..776939e7 100644 --- a/openspec/parity/capabilities.json +++ b/openspec/parity/capabilities.json @@ -5103,7 +5103,7 @@ "area": "surfaces", "name": "See, per component of the suite, whether the logo, the brand colours and the profile picture actually follow the central theme, so gaps are visible before users find them.", "thematiq": "no", - "nextcloud-theming": "unknown", + "nextcloud-theming": "no", "m365-branding": "unknown", "opendesk": "no", "liferay-dxp": "unknown", @@ -5116,7 +5116,7 @@ }, "reachedOn": "nothing reaches it", "evidence": { - "nextcloud-theming": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/appinfo/routes.php:10-97 and lib/SetupChecks (only PhpImagickModule.php:35-45, about imagick) contain no report of which apps or components follow the theme; nothing checks logo, colour or avatar adoption per app", "m365-branding": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", "opendesk": "Issue #27 (open since 2024-01, labels type: Improvement, incharge: Upstream) tabulates logo and colour support per component with several gaps; at v1.18.2 Collabora is still started with use_integration_theme=false (helmfile/apps/collabora/values.yaml.gotmpl:45) and Notes keeps a fixed openDesk theme (helmfile/apps/notes/values.yaml.gotmpl:124). No coverage report exists.", "liferay-dxp": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", @@ -5135,7 +5135,7 @@ "area": "scoping", "name": "Respect a user's light or dark choice from the central portal in every application of the suite.", "thematiq": "partial", - "nextcloud-theming": "unknown", + "nextcloud-theming": "partial", "m365-branding": "unknown", "opendesk": "partial", "liferay-dxp": "unknown", @@ -5148,7 +5148,7 @@ }, "reachedOn": "any Nextcloud page after the user picks dark or high contrast once in personal settings", "evidence": { - "nextcloud-theming": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "nextcloud-theming": "nextcloud/server@v35.0.1 a user's light or dark choice is stored once (apps/theming/lib/Service/ThemesService.php:149-181) and injected on every Nextcloud app page (lib/Service/ThemeInjectionService.php:36-63), and the OS preference is followed via media queries (lib/Themes/DarkTheme.php:38-39); a portal can set the choice through the OCS endpoint /api/v1/theme/{themeId}/enable (appinfo/routes.php:86-96, lib/Controller/UserThemeController.php:69-105), but Nextcloud does not read a choice made elsewhere", "m365-branding": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", "opendesk": "docs/baseline-requirements.md:201 says the theme (light/dark) chosen in the IAM portal SHOULD be respected in all components, with 'Reference: No reference yet'; only stock per-app choices exist today (Nextcloud theme list still enabled, image nextcloud_configure_theming.php:16-17 disables colour and background only).", "liferay-dxp": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", @@ -5167,7 +5167,7 @@ "area": "assets", "name": "Set a separate mobile logo and home-screen touch icon for the project management app without changing its browser tab icon.", "thematiq": "no", - "nextcloud-theming": "unknown", + "nextcloud-theming": "no", "m365-branding": "unknown", "opendesk": "yes", "liferay-dxp": "unknown", @@ -5180,7 +5180,7 @@ }, "reachedOn": "nothing reaches it", "evidence": { - "nextcloud-theming": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/lib/Controller/ThemingController.php:48 has no touch-icon upload key, and lib/Controller/IconController.php:146-151 serves the uploaded favicon as the touch icon for every app, so a separate home-screen icon cannot be set without changing the tab icon", "m365-branding": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", "opendesk": "CHANGELOG 1.17.0 (2026-07-22) 'openproject: Set mobile logo using theme icon of project module' and docs/updates.md:162-173; theme.yaml.gotmpl:124-127 logoMobileSvg and touchiconSvg served via values-opendesk-static-files.yaml.gotmpl:128-134.", "liferay-dxp": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", @@ -5199,7 +5199,7 @@ "area": "governance", "name": "Show a visible difference between the test and the production environment, so nobody works in the wrong one.", "thematiq": "no", - "nextcloud-theming": "unknown", + "nextcloud-theming": "partial", "m365-branding": "unknown", "opendesk": "unknown", "liferay-dxp": "unknown", @@ -5212,7 +5212,7 @@ }, "reachedOn": "nothing reaches it", "evidence": { - "nextcloud-theming": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "nextcloud-theming": "nextcloud/server@v35.0.1 theming values are per instance (apps/theming/lib/ThemingDefaults.php:237-258, set via lib/Controller/ThemingController.php:74-130 or occ theming:config), so a test instance can be given its own name, colour and logo; there is no dedicated environment banner or marker setting in apps/theming", "m365-branding": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", "opendesk": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", "liferay-dxp": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", @@ -5231,7 +5231,7 @@ "area": "surfaces", "name": "Have documents the system generates (letters, PDF exports, reports) carry the house style: logo, cover, footer and fonts.", "thematiq": "no", - "nextcloud-theming": "unknown", + "nextcloud-theming": "no", "m365-branding": "unknown", "opendesk": "partial", "liferay-dxp": "unknown", @@ -5244,7 +5244,7 @@ }, "reachedOn": "nothing reaches it", "evidence": { - "nextcloud-theming": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", + "nextcloud-theming": "nextcloud/server@v35.0.1 grep of apps/theming/lib and src for pdf finds nothing; the only generated output the theme reaches is email (lib/private/Mail/EMailTemplate.php:360-369), not letters, PDF exports or reports", "m365-branding": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", "opendesk": "partial: only OpenProject PDF exports are branded. CHANGELOG 1.18.0 (2026-08-19) 'openproject: Add more theming options'; theme.yaml.gotmpl:128-145 pdfExportLogoPath, pdfExportCoverPath, pdfExportFooterPath and pdfExportFont*Url, wired in helmfile/apps/openproject/values.yaml.gotmpl:103-116; overwritten on every deployment (theme.yaml.gotmpl:130-131).", "liferay-dxp": "not checked: row mined on 2026-09-26 after this column was read; queued for the re-read", From 99592967d5519b713f49754479e9ae891597c03a Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Sat, 26 Sep 2026 15:51:03 +0200 Subject: [PATCH 3/8] docs(parity): tokens-studio re-read from source at 2.12.1, its sources object, eight mined rows (wip) --- openspec/parity/capabilities.json | 716 +++++++++++++++++++++--------- 1 file changed, 511 insertions(+), 205 deletions(-) diff --git a/openspec/parity/capabilities.json b/openspec/parity/capabilities.json index 776939e7..2b441538 100644 --- a/openspec/parity/capabilities.json +++ b/openspec/parity/capabilities.json @@ -241,8 +241,58 @@ "readOn": "2026-09-26", "columnAddedOn": "2026-09-26", "evidenceGrade": "docs-only", - "unknownReason": "Tokens Studio's documentation is thorough for its actual domain (token authoring, types, references/math, themes, sync, export), so most 'unknown' cells here are not documentation gaps but rows describing behaviour of a live, rendered workspace (login page, email, favicon-in-browser, per-user/per-group runtime theming, accessibility auditing of a shipped UI, monitoring). Tokens Studio is a Figma plugin plus an optional paid 'Studio' platform/API for connecting tokens to code; it authors and syncs token values, it does not render or apply them to any running application, so those rows are rated 'no: outside the product' per the brief's own worked example, not left 'unknown'.", - "sources": [ + "unknownReason": "Each unknown cell carries its own not-checked reason. The plugin cells were read from source at 2.12.1; cells resting on the paid Studio platform are docs-only (docs.tokens.studio), and the evidence of each such cell says so.", + "sources": { + "docs": [ + "https://docs.tokens.studio/", + "https://documentation-v2.tokens.studio/" + ], + "sourceRepo": "https://github.com/tokens-studio/figma-plugin/tree/2.12.1 (tag 2.12.1, commit a28cadd)", + "featurePage": "https://tokens.studio/studio-platform", + "featureRequests": [ + "https://feedback.tokens.studio/", + "https://github.com/tokens-studio/figma-plugin/issues?q=is%3Aopen+label%3A%22%F0%9F%92%A1request%22" + ], + "issueTracker": { + "url": "https://github.com/tokens-studio/figma-plugin/issues", + "featureLabel": "💡request" + }, + "roadmap": "https://feedback.tokens.studio/roadmap", + "changelog": [ + "https://github.com/tokens-studio/figma-plugin/blob/2.12.1/packages/tokens-studio-for-figma/CHANGELOG.md", + "https://github.com/tokens-studio/figma-plugin/releases" + ], + "apiReference": "https://tokens-studio.github.io/studio-app/", + "marketplace": "https://www.figma.com/community/plugin/843461159747178978/tokens-studio-for-figma", + "pricing": "https://tokens.studio/pricing", + "accessibilityStatement": null, + "securityDocs": null, + "demoInstance": "https://tokens.studio/trial", + "community": [ + "https://tokens.studio/slack", + "https://github.com/tokens-studio/figma-plugin/discussions" + ], + "reviews": null, + "videos": [ + "https://www.youtube.com/@tokensstudio" + ], + "caseStudies": null, + "partnerDirectory": null, + "trainingCurriculum": "https://tokens.studio/coaching", + "jobPostings": null, + "tenders": null, + "nullReasons": { + "accessibilityStatement": "searched tokens.studio nav links, tokens.studio/accessibility (404) and both doc sites for accessib/wcag on 2026-09-26: none published", + "securityDocs": "tokens.studio/security and /trust return 404 and the docs nav has no security page on 2026-09-26; pricing only lists 'Security & Compliance support' in the Organization plan", + "reviews": "G2 (g2.com/products/tokens-studio/reviews) returned 403 to a scripted read on 2026-09-26; no other review site found", + "caseStudies": "tokens.studio/case-studies and /customers return 404 on 2026-09-26; the homepage has only a logo wall", + "partnerDirectory": "tokens.studio/partners returns 404 on 2026-09-26; pricing says an agency partner programme is being worked on", + "jobPostings": "tokens.studio/jobs redirects to careers.tokens.studio, which did not answer (no connection) on 2026-09-26", + "tenders": "intelligence database searched 2026-09-26: no tender name, description or requirement mentions Tokens Studio" + } + }, + "readingNotes": "Several genuinely strong capabilities are Pro/Platform-gated, not free: Themes/multi-brand switching, Modified Colors (dark-variant derivation), multi-file git sync and branch switching. The core plugin (github.com/tokens-studio/figma-plugin) is open source; the Tokens Studio Platform (GraphQL API/CLI, multi-file sync for non-Pro teammates) is a separate commercial product. Multi-platform export (CSS/iOS/Android/JSON) always requires an external Style Dictionary build step with the @tokens-studio/sd-transforms package - there is no direct no-build CSS-variable export.", + "readSources": [ "https://docs.tokens.studio/ (overview)", "https://docs.tokens.studio/manage-tokens/token-types/ (24 token types: color, dimension, typography composites, asset, boolean, etc.)", "https://docs.tokens.studio/manage-tokens/token-types/asset (Asset token = external URL reference, no hosting)", @@ -261,7 +311,7 @@ "https://tokens-studio.github.io/studio-app/ (search snippet: Tokens Studio Platform GraphQL API + CLI, a separate paid product from the core plugin)", "https://www.figma.com/community/plugin/843461159747178978/tokens-studio-for-figma (distribution channel)" ], - "readingNotes": "Several genuinely strong capabilities are Pro/Platform-gated, not free: Themes/multi-brand switching, Modified Colors (dark-variant derivation), multi-file git sync and branch switching. The core plugin (github.com/tokens-studio/figma-plugin) is open source; the Tokens Studio Platform (GraphQL API/CLI, multi-file sync for non-Pro teammates) is a separate commercial product. Multi-platform export (CSS/iOS/Android/JSON) always requires an external Style Dictionary build step with the @tokens-studio/sd-transforms package - there is no direct no-build CSS-variable export." + "readNote": "plugin source read at tokens-studio/figma-plugin 2.12.1 (a28cadd, 2026-09-23), not driven; cells resting on the paid Studio platform are docs-only from docs.tokens.studio, plugin cells are source-read" } ], "areas": [ @@ -371,7 +421,7 @@ "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); grep -rniE 'rijks|nl-design|nldesign|utrecht|dsfr|marianne' helmfile docs: no hits, so no preset catalogue exists", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface; the only bundled token source is the generic demo preset (src/app/components/PresetProvider/DefaultPreset.tsx:17), no government or organisation house style" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -400,7 +450,7 @@ "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); grep -rniE 'rijks|nl-design|nldesign|utrecht|dsfr|marianne' helmfile docs: no hits, so no preset catalogue exists or picker", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface; the only bundled token source is the generic demo preset (src/app/components/PresetProvider/DefaultPreset.tsx:17), no government or organisation house style" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -429,7 +479,7 @@ "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); grep -rniE 'rijks|nl-design|nldesign|utrecht|dsfr|marianne' helmfile docs: no hits, so no preset catalogue exists", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface; the only bundled token source is the generic demo preset (src/app/components/PresetProvider/DefaultPreset.tsx:17), no government or organisation house style" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -459,7 +509,7 @@ "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); grep -rniE 'rijks|nl-design|nldesign|utrecht|dsfr|marianne' helmfile docs: no hits, so no preset catalogue exists", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface; the only bundled token source is the generic demo preset (src/app/components/PresetProvider/DefaultPreset.tsx:17), no government or organisation house style" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -488,7 +538,7 @@ "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", "opendesk": "opendesk@v1.18.2 helmfile/apps/notes/values.yaml.gotmpl:124 sets the La Suite Docs (impress) frontendTheme to 'openDesk' and :78 hardcodes brandName 'openDesk'; opendesk-impress-customization@v1.0.0 charts/impress-customization/files/notes/theme.json holds only translation overrides. The La Suite component is restyled toward openDesk, not the reverse; no La Suite preset in theme.yaml.gotmpl:13-154", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface; the only bundled token source is the generic demo preset (src/app/components/PresetProvider/DefaultPreset.tsx:17), no government or organisation house style" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -517,7 +567,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : theme picker is a fixed gallery of 8 light + 2 dark default themes plus any custom org themes, not a searchable-by-name picker scaling to hundreds", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); nothing to pick from; theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : a site's style book picker lists the style books available for that site/theme, not a searchable catalogue of hundreds of named house styles", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/app/components/ThemeSelector/ThemeSelector.tsx:27,87-90: the theme picker is a dropdown grouped by theme group with no search field; the search added in 2.12.0 (CHANGELOG.md da5151c98) filters the duplicate-token set picker only; there is no catalogue of house styles to pick from" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -547,7 +597,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : the default-themes gallery shows each theme's colour settings and 'those color settings are instantly applied to the page' when picked, i.e. a swatch/preview in the SharePoint theme picker; Entra ID sign-in branding has no such gallery, it is a single custom configuration", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style book editor lets you 'preview the effects of a style book on your pages... before publishing', i.e. a live preview, but the picker itself was not documented as showing a colour swatch before opening a style book", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface; ThemeSelector.tsx:87-90 lists theme names only, no swatch" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -577,7 +627,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : 'Reset color: Select this link to reset colors to the default colors' (per-tab reset, not one action that also removes uploaded logos/CSS everywhere)", "opendesk": "opendesk-nextcloud-image@v2.17.2 src/files/usr/local/bin/entrypoint/php/nextcloud_configure_theming.php:21-114 only issues theming:config set commands for keys present, and functions.php:791-801 reruns them only when they change; nothing resets Nextcloud theming to stock (only background has a --reset path, :50-56). Removing overrides redeploys openDesk's own brand, not stock Nextcloud", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : every site has a default 'Styles from X Theme' style book 'with all of the default values', selectable to revert a site, but this is per-site not an instance-wide one-click stock switch", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface; the nearest action removes tokens from Figma layers (docs.tokens.studio/figma/remove-tokens), not stylesheets from a workspace" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -606,7 +656,7 @@ "m365-branding": "not checked: no token-vocabulary-completeness indicator found in Entra ID, M365 org theme or SharePoint theming docs read on 2026-09-26", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no vocabulary or completeness concept", "liferay-dxp": "not checked: no token-vocabulary-completeness indicator found in the style book or frontend-token-definition docs read on 2026-09-26", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "searched tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/app/components: no vocabulary completeness metric; only a per-token broken-reference marker (app/components/BrokenReferenceIndicator.tsx:13-17) and no bundled house styles to rate" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -635,7 +685,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme / https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : both only expose colour/logo fields, not a choice between whole named design systems", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); the only alternatives are the per-user stock Nextcloud themes (light, dark, high contrast), which are not design systems", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : since DXP 2025.Q2 'every style book is explicitly tied to a specific theme' (Token Isolation), so switching theme effectively switches the whole design system, but Liferay ships no NL Design System/high-contrast/soft-light design-system catalogue itself", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface; the only bundled token source is the generic demo preset (src/app/components/PresetProvider/DefaultPreset.tsx:17), no government or organisation house style" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -664,7 +714,7 @@ "m365-branding": "not checked: no 'link to the design system's own documentation' field found in the branding admin screens documented", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page", "liferay-dxp": "not checked: no such link found in the style book editor documentation", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface; the only bundled token source is the generic demo preset (src/app/components/PresetProvider/DefaultPreset.tsx:17), no government or organisation house style; the plugin links only to its own docs (src/constants/docUrls.ts)" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -694,7 +744,7 @@ "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); grep -rniE 'rijks|nl-design|nldesign|utrecht|dsfr|marianne' helmfile docs: no hits, so no preset catalogue exists", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface; the only bundled token source is the generic demo preset (src/app/components/PresetProvider/DefaultPreset.tsx:17), no government or organisation house style" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -710,7 +760,7 @@ "m365-branding": "partial", "opendesk": "yes", "liferay-dxp": "yes", - "tokens-studio": "no", + "tokens-studio": "yes", "built": { "state": "built", "evidence": "templates/settings/admin.php:63 hint text: 'Select a Dutch government design token set as a base, or customize individual Nextcloud CSS tokens below'; overrides editor persists per-token customisations on top of the selected base via POST /settings/overrides", @@ -723,7 +773,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : SharePoint's default themes (Teal, Blue, Orange...) 'have been designed for readability, so you might find them to be useful starting points for creating custom themes'; Entra ID sign-in branding has no such starter gallery, only a blank form", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:4-11 and docs/theming.md:18-22: the shipped defaults are the template ('review the default configuration... update the files in helmfile/files/theme'); helmfile/environments/{dev,test,prod}/sample.yaml.gotmpl are the override starting points", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : every theme ships a default 'Styles from X Theme' style book that can be duplicated/edited as a starting point instead of building from scratch", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/app/components/PresetProvider/DefaultPreset.tsx:13-34: \"Load Preset\" replaces the tokens with an example set containing \"a wide variety of tokens and some token sets\", mounted from app/components/ToolsDropdown.tsx:9,46 via modals/PresetLoadModal.tsx:5 (own menu item since 2.10.0, CHANGELOG.md be28ebdcd); a generic demo, not a government style" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -753,7 +803,7 @@ "m365-branding": "not checked: no vendor/community marketplace for SharePoint or Entra sign-in themes found in the docs read", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no gallery or download mechanism", "liferay-dxp": "https://marketplace.liferay.com/p/materialized-theme : marketplace.liferay.com lists installable themes (e.g. Materialized Theme, Seven Theme, Mercury Theme) maintained by Liferay and third parties", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface; the only bundled token source is the generic demo preset (src/app/components/PresetProvider/DefaultPreset.tsx:17), no government or organisation house style" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -783,7 +833,7 @@ "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); grep -rniE 'rijks|nl-design|nldesign|utrecht|dsfr|marianne' helmfile docs: no hits, so no preset catalogue exists", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface; the only bundled token source is the generic demo preset (src/app/components/PresetProvider/DefaultPreset.tsx:17), no government or organisation house style" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -813,7 +863,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding ; https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme ; https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : sign-in branding, the M365 suite-header theme and SharePoint site themes are three separate admin surfaces with no single action that rebrands all of them plus every app at once", "opendesk": "opendesk@v1.18.2: one values change plus helmfile apply reaches Nextcloud (values-nextcloud-management.yaml.gotmpl:267-296), OX (values-openxchange.yaml.gotmpl:1150-1158), Element (values-element.yaml.gotmpl:20-22), XWiki (xwiki/values.yaml.gotmpl:196,226-228), OpenProject (openproject/values.yaml.gotmpl:92-116), Jitsi (jitsi/values.yaml.gotmpl:68-70); but portal and Keycloak colours need a separate CSS edit (docs/theming.md:31, stylesheet.css:7 hardcodes #571EFA), Collabora is not themed (collabora/values.yaml.gotmpl:45)", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : a style book applies to the pages of one site via its theme; login/administrative themes are excluded ('Style books cannot be used in administrative themes'), so one style book does not cover the whole workspace including login", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -829,7 +879,7 @@ "m365-branding": "unknown", "opendesk": "partial", "liferay-dxp": "unknown", - "tokens-studio": "no", + "tokens-studio": "partial", "built": { "state": "built", "evidence": "js/admin.js:2998-3130 showApplyDialog() renders a table (Token | Current | New) per changed CSS variable, with swatches for colour tokens (js/admin.js:3019-3025), before any save happens; opened from the dropdown 'change' handler (js/admin.js:984) via openTokenSetApplyDialog", @@ -842,7 +892,7 @@ "m365-branding": "not checked: no before/after colour-diff dialog found, only instant live substitution when a theme is chosen", "opendesk": "opendesk@v1.18.2 docs/requirements.md:177: helmfile requires helm-diff to compare desired against deployed state, and docs/getting-started.md:455 shows helmfile apply with an optional --suppress-diff, so changed values are printed as a manifest diff before they roll out; a CLI diff, not a dialog", "liferay-dxp": "not checked: no before/after colour-diff dialog found in the style book docs, only live preview", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/app/components/PushDialog.tsx:24,189: the push dialog has a Diff tab listing every changed token (ChangedStateList) before it is committed; Studio branch reviews show a Changes view with before and after values (https://documentation-v2.tokens.studio/branching/branch-reviews.html); this diffs the token source, not an applied workspace" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -858,7 +908,7 @@ "m365-branding": "unknown", "opendesk": "partial", "liferay-dxp": "unknown", - "tokens-studio": "no", + "tokens-studio": "partial", "built": { "state": "built", "evidence": "js/admin.js:3032 ' savePrimaryDrivesComponentsSetting() POSTs /settings/primary-drives-components; js/admin.js:2568-2578 isTokenLocked(name) disables a component's own colour row (with an explanatory title) while this setting is on, letting it flow from the primary colour instead", @@ -1134,7 +1184,7 @@ "m365-branding": "not checked: M365/SharePoint theme colours (nav bar, accent, text/icon / accent-background pairs) are global settings, not a per-component lock/unlock choice", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:28-29: one 'primary' key fans out to Element (values-element.yaml.gotmpl:21-22), OX (values-openxchange.yaml.gotmpl:571-572,1150), XWiki (:226), OpenProject (:92-97), Jitsi and Nextcloud (values-nextcloud-management.yaml.gotmpl:277); opting a component out takes a per-release customization file (customization.yaml.gotmpl:4-24), and Collabora is deliberately left on its own theme (collabora/values.yaml.gotmpl:45). No switch", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/creating-pages/building-and-managing-content-pages/configuring-fragment-styles.html : 'Users can edit fragment styles only inside the brand/style book limits', implying components normally follow the style book's tokens but a page builder can still adjust individual fragment styles within limits", - "tokens-studio": "not checked: no documentation found describing a primary-colour-drives-everything toggle" + "tokens-studio": "searched tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/app/components and store for a primary-colour lock or toggle: none; references (src/utils/alias/getAliasValue.ts) let a token source route component tokens to one brand token, but the product renders no components to lock; outside the product:" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1163,7 +1213,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding ; https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme ; https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : all three are configured from admin portals at runtime with no application redeployment", "opendesk": "opendesk@v1.18.2 docs/baseline-requirements.md:191 'Theming MUST be controlled with the deployment'; docs/theming.md:18-22 values only. The stock Nextcloud admin theming page stays enabled (opendesk-nextcloud-image@v2.17.2 config_apps.php:62), so a Nextcloud admin could change Nextcloud-only branding by hand, but that is not what openDesk configures and reaches no other component", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : 'With style books, you can customize the values of frontend tokens without touching any code', a pure admin-UI runtime action", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1192,7 +1242,7 @@ "m365-branding": "not checked: no scheduled/date-triggered branding switch found for Entra ID or SharePoint theming", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no scheduling", "liferay-dxp": "https://www.xtivia.com/blog/liferay-dxp-publications-versus-staging/ : Publications group changes into a change set that authors 'publish them to the live site on a schedule', but the docs read do not confirm style book/theme configuration is itself trackable inside a Publication change set", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "https://documentation-v2.tokens.studio/releases/creating-a-release.html: a Studio release is created by hand (version, notes, Release) with no scheduling option; the plugin has no scheduler (tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9 Figma plugin)" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1208,7 +1258,7 @@ "m365-branding": "partial", "opendesk": "partial", "liferay-dxp": "partial", - "tokens-studio": "no", + "tokens-studio": "partial", "built": { "state": "none", "evidence": "lib/Controller/AuditController.php only exposes list() and export() (both #[AuthorizedAdminSetting]); lib/Service/ThemingAuditService.php has log()/getRecent()/exportAll() but no restore/revert method; grep -rniF 'rollback' in lib/ only turns up comments about the app-id migration rollback, not a theme-version rollback feature", @@ -1221,7 +1271,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/organization-assets-library ; https://learn.microsoft.com/en-us/sharepoint/brand-center-overview : brand assets live in ordinary SharePoint document libraries, which carry SharePoint's standard file version history, but the Entra sign-in and M365 org-theme settings themselves have no documented version history", "opendesk": "opendesk@v1.18.2: the brand is Helm release values (theme.yaml.gotmpl), so reverting the values and redeploying (or helm rollback) restores it; opendesk-nextcloud-image@v2.17.2 functions.php:791-801 reapplies Nextcloud theming when commands change; docs/migrations.md:18 warns app-level rollbacks may need backups. Release history, not a theme history UI", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/publishing-tools/staging : Publications track and can be reverted as change sets over time, which could include site design changes, but no dedicated 'style book version history' UI was found in the style book docs", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/app/components/NavbarUndoButton/NavbarUndoButton.tsx:31 undoes the last change; git sync branches keep history; Studio keeps immutable releases with per-release token diffs (https://documentation-v2.tokens.studio/releases/version-history.html) and the CLI can pin a source to an earlier release (`studio config set-ref`, https://documentation-v2.tokens.studio/cli/overview.html); no one-click restore of a live theme" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1251,7 +1301,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : 'Reset color: Select this link to reset colors to the default colors'", "opendesk": "opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:21-114 only sets keys; no reset-all of Nextcloud theming in openDesk. Stock occ theming:config --reset exists per key but openDesk does not use it except for background (:56)", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : selecting the theme's default 'Styles from X Theme' style book restores 'all of the default values'", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1280,7 +1330,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : 'Custom CSS: Upload a custom CSS file to replace the Microsoft default style of the page', but 'Tenants created after January 5, 2026, don't have custom CSS available' and it is being retired entirely", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:152-154 styles.portal.main takes a whole CSS file (default opendesk@v1.18.2 helmfile/files/theme/portal/stylesheet.css:5-97, a :root block of custom properties such as --color-accent, --button-primary-bgc) and opendesk@v1.18.2 helmfile/apps/nubus/values-nubus.yaml.gotmpl:403 hands it to the portal; it also styles the Keycloak screens (docs/theming.md:31). Portal and login only", "liferay-dxp": "https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-css-client-extension : a theme CSS client extension overrides 'main.css and clay.css', but it is authored/deployed as a packaged client extension via Gradle (client-extension.yaml + zip to the deploy folder), not a simple admin-facing CSS file upload", - "tokens-studio": "https://docs.tokens.studio/manage-settings/token-format and /manage-tokens/token-types/ : Tokens Studio imports/exports token JSON (legacy or W3C DTCG); no CSS-file import path is documented" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/app/components/PresetProvider/FilePreset.tsx:76-81: file import is accept=\".json\" only; Studio import formats are DTCG JSON, Tokens Studio JSON and Figma variables (https://documentation-v2.tokens.studio/tokens/importing-tokens.html); no CSS import" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1309,7 +1359,7 @@ "m365-branding": "not checked: Entra custom CSS is plain CSS, not a W3C Design Tokens (DTCG) JSON file, and no such upload path was found", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no JSON token format, grep -rni 'dtcg\\|\\$value' helmfile: none", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/developer-guide/style-book-token-definitions : Liferay's frontend-token-definition.json is Liferay's own proprietary schema (frontendTokenCategories/tokens), not the W3C DTCG format, and no DTCG import was found", - "tokens-studio": "https://docs.tokens.studio/manage-settings/token-format : \"Tokens Studio supports two JSON formatting standards... W3C DTCG format\", switchable in settings, tokens use $value/$type/$description" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/app/components/PresetProvider/FilePreset.tsx:52-81 imports a JSON file or folder; storage/schemas/singleTokenSchema.ts:9-15 accepts $value/$type tokens; DTCG is the default format since 2.11.0 (CHANGELOG.md f9a3f61de)" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1325,7 +1375,7 @@ "m365-branding": "unknown", "opendesk": "no", "liferay-dxp": "unknown", - "tokens-studio": "partial", + "tokens-studio": "yes", "built": { "state": "built", "evidence": "lib/Controller/CustomTokenSetController.php:242-289 returns 422 with imported/skipped/errors when zero tokens map; lib/Service/CustomTokenSetValidator.php:78 validateDeclarations() rejects unknown/forbidden declarations with a message; js/admin.js:4206-4269 renders 'X tokens imported, Y skipped' plus a diagnostics fragment (buildDiagnosticsFragment) in #nldesign-upload-result", @@ -1338,7 +1388,7 @@ "m365-branding": "not checked: no 'missing/invalid tokens' upload feedback found; Entra branding fields are validated individually (image size/file-size limits), not as a token set", "opendesk": "opendesk@v1.18.2: the portal CSS is passed through verbatim (values-nubus.yaml.gotmpl:403); the only check is Nextcloud's own hex test on primary_color (nextcloud/server theming UpdateConfig.php primary_color regex), no token validation", "liferay-dxp": "not checked: no documented message that names which tokens are missing/invalid on deploy of a theme CSS client extension; a malformed extension would fail the Gradle/module deploy generically", - "tokens-studio": "https://docs.tokens.studio/token-storage/troubleshooting-common-sync-provider-errors : pulling a malformed/invalid token file surfaces a schema validation error and blocks the load; not itemised per missing token" + "tokens-studio": "Studio import marks each token with a schema error or warning icon, shows counts per set and offers a downloadable report before you confirm (https://documentation-v2.tokens.studio/tokens/importing-tokens.html); the plugin itself only rejects a file with one generic \"Contents don't pass schema validation\" (tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/storage/FileTokenStorage.ts:100-126, constants/ErrorMessages.ts:15)" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1367,7 +1417,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : Microsoft is 'retiring support for custom CSS layout and positioning properties (such as position, margin, transform, and overflow)... to align with the Microsoft Secure Future Initiative and its focus on identity security and phishing resistance', i.e. specific CSS capabilities are being stripped for security, though this is a property-level restriction/retirement, not a general upload-time sanitiser", "opendesk": "opendesk@v1.18.2 values-nubus.yaml.gotmpl:403 passes styles.portal.main unmodified to the portal frontend; no sanitising step in the deployment", "liferay-dxp": "https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-css-client-extension : theme CSS client extensions are code deployed by developers via a build pipeline into the deploy folder, a trusted deployment path with no documented stripping/sanitisation step for script or external-resource loading", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance); tokens are structured JSON values, not executable CSS, and no sanitisation step is documented because nothing is rendered" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:17-20 allows network access to \"*\" and src/plugin/setImageValuesOnTarget.ts:11 fetches any asset URL in a token; nothing refuses external resources with reasons; token files carry no script or CSS to sanitise" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1397,7 +1447,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview ; https://learn.microsoft.com/en-us/sharepoint/brand-center-overview : custom SharePoint themes created via the brand center appear in the 'Change the Look' picker for site owners; Entra ID has only one default plus per-language brandings, not a general list/delete of uploaded styles", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); one active set, no list", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style books are created, listed and one marked default under Site Menu -> Design -> Style Books, matching list/activate/delete", - "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/ and /manage-tokens/token-sets/ : token sets can be created, enabled/disabled, renamed and deleted from the Tokens Studio sidebar" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/app/components/TokenSetSelector.tsx:69: token sets are listed in the set tree and deleted with deleteTokenSet; sets are enabled or disabled per theme (types/ThemeObject.ts:10)" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1426,7 +1476,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/dev/general-development/how-to-deploy-a-custom-theme-in-sharepoint : SharePoint theme JSON can be exported/deployed with PnP PowerShell/CSOM, but this needs developer tooling, not an admin 'download' button", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); the operator's own values file is the only copy, there is no export function", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/exporting-and-importing-style-books : style books can be exported as a zip (style-book.json + frontend-token-values.json) or LAR file 'to share them between Liferay installations'", - "tokens-studio": "https://docs.tokens.studio/token-storage/remote-push-pull-changes : tokens can be pushed/exported as JSON files for reuse elsewhere" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/app/components/ExportProvider/SingleFileExport.tsx:159-161 downloads tokens.json; MultiFilesExport.tsx:39-46 downloads a tokens.zip of set files" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1455,7 +1505,7 @@ "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); grep -rniE 'rijks|nl-design|nldesign|utrecht|dsfr|marianne' helmfile docs: no hits, so no preset catalogue exists", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", - "tokens-studio": "https://docs.tokens.studio/manage-settings/token-format : generic legacy/DTCG JSON import will accept any spec-conformant token source including an NL Design System export, but no dedicated NLDS converter is documented" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/storage/schemas/singleTokenSchema.ts:3-15: any JSON token file with value+type or $value+$type loads; grep for nlds/nl-design in src finds nothing, so there is no NL Design System converter and a source without type fields fails validation" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1484,7 +1534,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/brand-center-overview : brand center lets you 'select your primary, secondary colors using your brand colors or by adding a custom color'; https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : Colors tab has pickers for nav bar/text/icon/accent colours", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : 'colors support hex codes, custom pickers', and since DXP 2025.Q4 the style book colour editor supports 8-digit hex with alpha", - "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/ : colour tokens are edited via an in-plugin colour picker" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/app/components/ColorTokenForm.tsx:15,214: colour tokens are edited with a ColorPicker opened from a swatch trigger" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1513,7 +1563,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : the theme editor is organised into General / Logos / Colors tabs, a coarser grouping than per-token-category tabs", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : the style book editor is organised into sections such as colour, typography, spacing, buttons and general settings, matching grouped/tabbed token browsing", - "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/ : the plugin groups the 24 token types (colour, typography, dimension, etc.) into categorised sections/token sets in its sidebar UI" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/app/components/Tokens.tsx:333-344: the token panel renders one labelled TokenListing section per token type (colour, spacing, typography...), inside the selected token set" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1529,7 +1579,7 @@ "m365-branding": "partial", "opendesk": "partial", "liferay-dxp": "unknown", - "tokens-studio": "unknown", + "tokens-studio": "partial", "built": { "state": "built", "evidence": "js/admin.js:2701-2739 wireTokenRows() reset-button handler reads tokenEditorState[name].resolved (the house-style default), writes it back into the text/colour inputs, removes the custom badge, calls document.documentElement.style.removeProperty(name) and marks only that token dirty for save", @@ -1542,7 +1592,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : only one 'Reset color' link is documented, which resets colours together rather than confirming a per-token reset", "opendesk": "opendesk@v1.18.2 helmfile/bases/environments.yaml.gotmpl:4-13 layers environment values over helmfile/environments/default/theme.yaml.gotmpl, so deleting one override key reverts that key to the default on the next deploy while others stay; a file edit, not a reset control", "liferay-dxp": "not checked: no explicit 'reset this one token only' control documented for the style book editor", - "tokens-studio": "not checked: no documentation found describing a per-token \"reset to source value\" action distinct from git/version revert" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/app/components/NavbarUndoButton/NavbarUndoButton.tsx:31 undoes the last edit and app/components/BranchSelector.tsx:92-113 discards all unsaved local changes against the remote; no per-token \"reset to source value\" action found in EditTokenForm.tsx" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1571,7 +1621,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : 'those color settings are instantly applied to the page' when a theme is chosen, before saving", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style book token edits are previewed live on pages/templates/fragments before publishing", - "tokens-studio": "https://docs.tokens.studio/manage-settings/token-format (and general plugin behaviour docs): edited token values apply immediately to the Figma canvas as you type, before any push/save" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/app/components/SettingsDropdown.tsx:30-33,75: an \"update on change\" setting; app/store/models/tokenState.tsx:801 then calls updateDocument with shouldUpdateNodes so edits repaint the Figma canvas before any push" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1600,7 +1650,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding ; https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : saved branding/theme settings are tenant configuration that persists and applies to everyone", "opendesk": "opendesk@v1.18.2: overrides live in the operator's values files and are re-rendered on every helmfile apply for all users; opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:118 writes them into Nextcloud's config, OpenProject seeds them on every deployment (theme.yaml.gotmpl:130-131)", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : published style book token values are saved site configuration that persists and applies to every visitor", - "tokens-studio": "https://docs.tokens.studio/token-storage/remote-push-pull-changes : token edits are saved to the document / pushed to the sync provider and are then pulled by every team member" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/plugin/node.ts:140-153: token values and themes are stored in the Figma document or client storage and reloaded on open; pushes to a sync provider share them with the team (app/components/PushDialog.tsx)" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1629,7 +1679,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/dev/general-development/how-to-deploy-a-custom-theme-in-sharepoint : SharePoint theme JSON can be uploaded to the Theme Gallery and deployed to another site/tenant via PnP tooling, which needs developer/PowerShell skills rather than a built-in export-then-import admin flow", "opendesk": "opendesk@v1.18.2 helmfile/bases/environments.yaml.gotmpl:4-13: overrides are plain files (helmfile/environments//*.yaml.gotmpl) that are reused as-is on another deployment", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/exporting-and-importing-style-books : style books export to a zip or LAR file and can be imported 'to share them between Liferay installations'", - "tokens-studio": "https://docs.tokens.studio/token-storage/remote-push-pull-changes : tokens export/import as JSON files, portable to another Figma file or instance" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/app/components/ExportProvider/SingleFileExport.tsx:161 exports tokens.json and PresetProvider/FilePreset.tsx:52-57 imports it into another Figma file" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1658,7 +1708,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : custom CSS upload exists for things the branding form fields cannot express, but is deprecated for new tenants and being retired", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:152-154 free-form CSS for the portal and Keycloak screens (values-nubus.yaml.gotmpl:403); XWiki takes a lessCode property (xwiki/values.yaml.gotmpl:230) overridable per release; Nextcloud gets no custom CSS (image config_apps.php lists no custom CSS app), Element only two CSS variables (values-element.yaml.gotmpl:20-22)", "liferay-dxp": "https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-css-client-extension : 'the CSS in these files is added to the styling already used in your theme... the client extension's CSS overrides the styling already on the page', explicitly for cases tokens cannot express", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance); Tokens Studio only defines structured, typed tokens, not free-form CSS" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/constants/TokenTypes.ts:1-34: no free-form CSS token or field; the product authors tokens, not stylesheets" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1687,7 +1737,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : Microsoft is removing specific 'layout and positioning' CSS properties from allowed custom CSS for security reasons, which is a restriction/removal rather than an active clean-on-save sanitiser, and custom CSS is being retired altogether", "opendesk": "opendesk@v1.18.2 values-nubus.yaml.gotmpl:403: CSS is passed verbatim, no server check", "liferay-dxp": "not checked: no server-side checking/cleaning of theme CSS client extension content was documented; it is developer-authored code deployed through the build pipeline", - "tokens-studio": "not applicable: no free-form CSS authoring feature exists to sanitise" + "tokens-studio": "not applicable: no free-form CSS authoring exists (tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/constants/TokenTypes.ts:1-34)" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1717,7 +1767,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : colours (nav bar, accent, text, icon) are single global settings, no per-component-type token layer documented", "opendesk": "opendesk@v1.18.2 helmfile/files/theme/portal/stylesheet.css:68-85 defines button-scoped tokens (--button-primary-bgc, --button-bgc-hover, ...) separate from the palette, and OX and OpenProject take component keys (values-openxchange.yaml.gotmpl:1154-1158 list and folder colours, openproject/values.yaml.gotmpl:92 primary button colour); theme.yaml itself exposes only a palette", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : the style book has a distinct buttons section ('individual customization of primary, secondary, dark, and light button styling') separate from the general colour palette", - "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-sets/ : tokens can be split into multiple token sets (e.g. a button-only set) applied independently in Figma, though this scopes design tokens, not a live app's rendered components" + "tokens-studio": "https://documentation-v2.tokens.studio/getting-started/what-is-studio.html: token sets can be organised \"by component (button, card)\" and enabled per theme (tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/types/ThemeObject.ts:10); this scopes token sets, not rendered components" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1746,7 +1796,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme ; https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : dark-theme logos ('Square logo (dark theme)', 'alternate logo... optimized for use in Microsoft 365 dark themes') must be uploaded manually, there is no automatic derivation of a dark palette from the light one", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:27-47 has no dark variant and nothing derives one; grep -rni dark helmfile/apps: no hits", "liferay-dxp": "not checked: no automatic dark-variant generation for style book token values was found; SharePoint's own inverted themes derive dark neutrals from an isInverted flag, but that mechanism was documented for SharePoint site theming (the m365-branding key), not for Liferay style books", - "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/color/modified : \"Modified Colors\" (pro) lets you darken/lighten a base colour by a percentage, useful for building a dark variant, but it is a manual per-token modifier, not a one-click \"generate dark theme\" action" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/constants/ColorModifierTypes.ts:2-5 lighten, darken, mix, alpha modifiers per colour token, pro-gated in app/components/ColorTokenForm.tsx:227 and hidden for Studio users since 2.11.10 (CHANGELOG.md e15a93048); manual per token, no generate-dark action" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1775,7 +1825,7 @@ "m365-branding": "not checked: M365/SharePoint colour fields are independent values, no token-references-token mechanism documented", "opendesk": "opendesk@v1.18.2 helmfile/files/theme/portal/stylesheet.css:16-27,68-85 builds semantic tokens as var() references (--bgc-content-header: var(--bgc-content-container), --button-bgc: var(--color-accent)); opendesk@v1.18.2 xwiki/values.yaml.gotmpl:218-225 points link and button colours at @brand-primary; the theme.yaml colours themselves are flat values", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style book colours support 'linking to other style book token values', i.e. one token can reference another so a change flows through", - "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-values/references : \"When the value of a Token is the Name of an existing Token... wrapped in curly brackets, it will inherit its value\" - unlimited reference layers, described as the W3C \"alias token\" concept" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/utils/alias/getAliasValue.ts and utils/TokenResolver.ts resolve {token} references through any number of layers" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1804,7 +1854,7 @@ "m365-branding": "not checked: no expression/computed-value support found for M365/SharePoint theme values", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:31,40-41: tints primary15/35/65 are hand-entered hex values, not computed; no expressions", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/developer-guide/style-book-token-definitions : frontend token definitions describe simple typed values (defaultValue/label/type/validValues), no arithmetic-expression support was found", - "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-values/math : math equations like `{spacing.md} * 2` are supported for any numeric token type (dimension, spacing, sizing, font size, etc.)" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/utils/math/checkAndEvaluateMath.ts with tests in utils/math/__tests__/checkAndEvaluateMath.test.ts: expressions such as {spacing.md} * 2 are evaluated" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1833,7 +1883,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : 'you can create multiple themes for the people in your organization... add or update a default theme... and create up to four additional group themes'", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); one theme tree per deployment", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : a site can hold several style books (one default) that can be switched, and virtual instances add fully separate brands per tenant", - "tokens-studio": "https://docs.tokens.studio/manage-themes/themes-overview : Themes (pro) let you maintain and switch between any number of brands/themes from one token source; \"a multi-brand design system may have four or forty brands to switch between\"" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/types/ThemeObject.ts:3-10: themes group token sets; app/components/ThemeSelector/ThemeSelector.tsx:27-40 keeps one active theme per group (multi-dimensional), pro-gated at :131-135" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1862,7 +1912,7 @@ "m365-branding": "not checked: no Figma synchronisation found in Entra/SharePoint/M365 branding docs", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no design-tool integration", "liferay-dxp": "not checked: no Figma synchronisation found in the style book/frontend-token-definition docs", - "tokens-studio": "https://docs.tokens.studio/ : Tokens Studio for Figma is precisely the plugin that keeps a token source in sync with Figma design files (its core purpose)" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9 a Figma plugin; src/plugin/node.ts reads and writes tokens in the Figma document and exports them to Figma variables and styles" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1890,7 +1940,7 @@ "m365-branding": "not checked: no git-based token source/PR workflow found for Entra/SharePoint/M365 branding, which is configured through admin portals", "opendesk": "opendesk@v1.18.2: the token source is plain files in the helmfile repository (theme.yaml.gotmpl, helmfile/files/theme/**), and docs/enhanced-configuration/gitops.md documents deploying from Git with Argo CD", "liferay-dxp": "https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-css-client-extension : theme CSS client extensions are built and deployed from a Liferay Workspace project (Gradle-based), a source layout that is normally kept in git, though the docs do not describe a PR-based sync feature as such", - "tokens-studio": "https://docs.tokens.studio/token-storage/remote/sync-git-github : two-way GitHub sync with branches, plus a \"Create a Pull Request\" button that opens the provider's PR flow; GitLab, Bitbucket and Azure DevOps are also supported (https://docs.tokens.studio/token-storage-and-sync/sync-provider-add)" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/constants/StorageProviderType.ts:5-10 GitHub, GitLab, Azure DevOps, Bitbucket storage (storage/GithubTokenStorage.ts etc.); app/components/PushDialog.tsx:46-60 links to the provider's create-pull-request page" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1918,7 +1968,7 @@ "m365-branding": "not checked: no cross-platform (iOS/Android) token export found for M365/SharePoint branding", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); values are rendered only into the bundled components", "liferay-dxp": "not checked: frontend token definitions target the web portal's CSS only; no iOS/Android export was found", - "tokens-studio": "https://docs.tokens.studio/transform-tokens/style-dictionary : Style Dictionary + the @tokens-studio/sd-transforms package export the same token source to CSS, iOS, Android, JSON and other platforms" + "tokens-studio": "https://documentation-v2.tokens.studio/cli/overview.html: the Studio CLI exports to CSS, SCSS, DTCG, Figma, TypeScript, Swift, Android, Compose, React Native and Flutter; the plugin alone exports JSON (tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/app/components/ExportProvider/SingleFileExport.tsx:161) for Style Dictionary with @tokens-studio/sd-transforms (docs.tokens.studio/transform-tokens/style-dictionary)" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1946,7 +1996,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : the theme form is essentially logo + a handful of colour fields (nav bar, accent, text/icon), matching a simple primary-colour/background/logo form", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page; the stock Nextcloud form stays enabled but openDesk sets the brand through deploy values", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : a style book exposes many token categories beyond colour/logo (typography, spacing, buttons...), so setting only 3 fields is possible but is not a distinct 'simple mode'", - "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/ : Tokens Studio is a full structured token editor; no simplified \"colour + background + logo\" quick-brand form is documented" + "tokens-studio": "searched tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/app/components: token forms are per type (ColorTokenForm.tsx etc.) with no quick brand form of primary, background and logo" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -1975,7 +2025,7 @@ "m365-branding": "not checked: M365/SharePoint default typography is Microsoft's own fonts (e.g. Segoe UI), not Fira Sans/Inter, and no self-hosted open-font bundle for org branding was found", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl: no font key for the web UI (only OpenProject PDF export fonts by URL, :135-145); grep -n font-family opendesk@v1.18.2 helmfile/files/theme/portal/stylesheet.css: none", "liferay-dxp": "not checked: Liferay's default Clay/Lexicon typography was not documented as Fira Sans/Inter, and font tokens reference font-family names such as 'sans-serif'/'Courier New', not a bundled open-font set", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance); Tokens Studio stores a font family name as a token value, it does not bundle or serve font files" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2004,7 +2054,7 @@ "m365-branding": "not checked: Microsoft 365/SharePoint/Entra ID are cloud SaaS services; an air-gapped instance is outside the product", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:135-145: the only font setting is OpenProject PDF export fonts as http(s) URLs; there is no brand web typography to keep working, and issue #420 notes XWiki EE needs internet to start", "liferay-dxp": "not checked: Liferay DXP can run on-premises/air-gapped, but whether style book fonts (and any external Google-Fonts-style references) keep working under a strict default CSP with no internet access was not confirmed in the docs read", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2033,7 +2083,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/brand-fonts : brand fonts are 'uploaded and managed within the SharePoint brand center'; supported file types are TrueType (.ttf), OpenType (.otf), WOFF and WOFF2, up to 10 MB", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:135-145: fonts only for OpenProject PDF exports, as .ttf URLs (openproject/values.yaml.gotmpl:106-116); no webfont for any UI", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/developer-guide/style-book-token-definitions : font tokens are typed string values with a defaultValue and a list of valid font-family names (e.g. 'sans-serif', 'Courier New'); no font-FILE upload mechanism for style books was found", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/constants/TokenTypes.ts:13: a font family token holds a family name; no font file upload in the plugin or the Studio docs nav (https://documentation-v2.tokens.studio/)" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2062,7 +2112,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/brand-fonts : only .ttf/.otf/.woff/.woff2 are accepted and 'Font file Size Limit: 10 MB'", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:140 'Only .ttf font files are supported' is a comment; no check in openproject/values.yaml.gotmpl:106-116", "liferay-dxp": "not checked: no font-file upload/validation exists for style book font tokens (see typ-upload-font)", - "tokens-studio": "not applicable: no font upload feature" + "tokens-studio": "not applicable: no font upload (tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/constants/TokenTypes.ts:13 font family is a name)" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2091,7 +2141,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/brand-fonts : custom fonts live in the Brand Fonts library where you can 'Edit the Visible property... to control the availability' and remove a font tenant-wide with Remove-SPOFontFile", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:135-145: fonts are URLs in values, no font store", "liferay-dxp": "not checked: no font-file library to list/delete exists for style books (fonts are referenced by name in tokens, not uploaded files)", - "tokens-studio": "not applicable: no font upload feature" + "tokens-studio": "not applicable: no font upload (tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/constants/TokenTypes.ts:13 font family is a name)" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2120,7 +2170,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : sign-in page font could only be affected via the deprecated custom-CSS override, since the SharePoint brand-center Brand Fonts library is a separate surface not documented as reaching the Entra sign-in page", "opendesk": "opendesk@v1.18.2 helmfile/files/theme/portal/stylesheet.css:124-197 Keycloak login rules set no font-family; no font key in theme.yaml", "liferay-dxp": "Liferay DXP style book docs: style books 'cannot be used in administrative themes', so a style-book font token cannot reach the login page", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2149,7 +2199,7 @@ "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); grep -rniE 'rijks|nl-design|nldesign|utrecht|dsfr|marianne' helmfile docs: no hits, so no preset catalogue exists", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", - "tokens-studio": "not applicable / outside the product" + "tokens-studio": "not applicable: no bundled typefaces; outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2178,7 +2228,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/brand-fonts ; https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : brand fonts are applied via font packages, but the SharePoint theme JSON schema documented is colour/accent focused (up to 16 accent-and-background pairs), not a unified family+size+weight token set", "opendesk": "opendesk@v1.18.2 helmfile/files/theme/portal/stylesheet.css:48-58 defines --font-size-1..5, --font-weight-bold and line-height tokens for portal and Keycloak; no family token and nothing reaches the other components", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : the style book Typography section lets you 'define new fonts for your pages' and 'adjust header sizing', i.e. family and size are both style-book tokens", - "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/ : Font Family, Font Weight and Font Size are core token types, settable per token set (i.e. per house style)" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/constants/TokenTypes.ts:13-16: fontFamilies, fontWeights, lineHeights, fontSizes token types, set per token set and theme" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2207,7 +2257,7 @@ "m365-branding": "not checked: no dyslexia-friendly font toggle found for end users in M365/SharePoint branding docs", "opendesk": "nextcloud/server@v33.0.9 apps/theming/lib/Service/ThemesService.php:35 registers DyslexiaFont; openDesk only sets disable-user-theming (opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:16-17), which in nextcloud/server@v33.0.9 apps/theming/src/views/UserTheming.vue:48-52 hides colour and background only, so Nextcloud users can still pick it (stock, left enabled); other components not", "liferay-dxp": "https://learn.liferay.com/w/dxp/personalization/experiences/using-the-accessibility-menu : the Accessibility Menu offers underlined links, increased text spacing, expanded text, reduced motion and focus ring animation, but no dyslexia-friendly font option", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2236,7 +2286,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/brand-fonts : the SharePoint brand center's Brand Fonts library is exactly 'a central library of approved organisation fonts' for site owners, also reaching Viva Connections and PowerPoint for the web", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no font library", "liferay-dxp": "not checked: no curated, shared 'approved fonts library' feeding the style book font token picker was found; font tokens are typed values defined per theme", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2266,7 +2316,7 @@ "m365-branding": "not checked: there is no catalogue of pickable house styles to sync a logo from (see cat-* rows); the org's single logo is set directly, not synced from a style pick", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:52 logoHeaderSvg feeds Nextcloud (opendesk@v1.18.2 helmfile/apps/nextcloud/values-nextcloud-management.yaml.gotmpl:283 -> opendesk-nextcloud@v4.10.6 charts/opendesk-nextcloud-management/templates/job.yaml:320-322 -> opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:87-97 occ theming:config logo), the portal (values-nubus.yaml.gotmpl:1403; static files :28-29, reused by OX dynamic-theme logoURL values-openxchange.yaml.gotmpl:1151) and XWiki (xwiki/values.yaml.gotmpl:196)", "liferay-dxp": "not checked: same reasoning, no catalogue of named house styles to sync a logo from", - "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/asset : an Asset token stores a URL pointing to an externally hosted image (or a local file path in dev); Tokens Studio does not host/upload the file itself and does not render it into a live workspace, login page or favicon" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/types/tokens/SingleAssetToken.ts:4: an asset token is a URL string that src/plugin/setImageValuesOnTarget.ts:11-18 fetches onto a Figma layer fill; nothing sets a workspace logo, login background or favicon" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2296,7 +2346,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : background image is one of the branding elements configured alongside logo/colours as part of the same sign-in branding, so it is set consistently with the rest, though not 'synced' from a separate catalogue pick", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:67 login.backgroundJpg is served as /opendesk-static-files/login/background.jpg (values-opendesk-static-files.yaml.gotmpl:34-35) and used by the Keycloak login (stylesheet.css:196-197). Nextcloud's own background colour is not applied (opendesk@v1.18.2 helmfile/apps/nextcloud/values-nextcloud-management.yaml.gotmpl:270-272, image nextcloud_configure_theming.php:42-48 'NOT AVAILABLE YET')", "liferay-dxp": "not checked: a login background can be styled through a theme/theme CSS client extension consistent with the rest of the site's style book tokens, but no dedicated 'sync login background to style book' feature was documented", - "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/asset : an Asset token stores a URL pointing to an externally hosted image (or a local file path in dev); Tokens Studio does not host/upload the file itself and does not render it into a live workspace, login page or favicon" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/types/tokens/SingleAssetToken.ts:4: an asset token is a URL string that src/plugin/setImageValuesOnTarget.ts:11-18 fetches onto a Figma layer fill; nothing sets a workspace logo, login background or favicon" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2312,7 +2362,7 @@ "m365-branding": "yes", "opendesk": "partial", "liferay-dxp": "yes", - "tokens-studio": "no", + "tokens-studio": "unknown", "built": { "state": "built", "evidence": "Upload happens on Nextcloud core's own Theming admin page, not a thematiq page: apps/theming/src/components/AdminSectionThemingAdvanced.vue and apps/theming/lib/ImageManager.php:25 SUPPORTED_IMAGE_KEYS=['background','logo','logoheader','favicon']. thematiq composes with it: lib/Service/CssInjectionService.php:673-681,730-735 checks theming.logoheaderMime/logoMime and, when an admin uploaded a logo through core, shows it as-is instead of the token set's own logo.", @@ -2325,7 +2375,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding ; https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : banner logo, header logo, square light/dark logos (Entra) and default/alternate logo (M365 org theme) are all uploadable", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:9-11,52: logos are base64 files read from helmfile/files/theme into values and ConfigMaps (1 MiB limit), a file swap plus redeploy (docs/theming.md:22), not an admin upload", "liferay-dxp": "https://help.liferay.com/hc/en-us/articles/360018171691-Page-Set-Look-and-Feel : 'If you want to use your own logo for a specific Site, you can select the Logo tab from the Configure interface and browse to the location of your logo'", - "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/asset : an Asset token stores a URL pointing to an externally hosted image (or a local file path in dev); Tokens Studio does not host/upload the file itself and does not render it into a live workspace, login page or favicon" + "tokens-studio": "not checked: unknown: the plugin cannot upload, an asset token is only a URL (tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/types/tokens/SingleAssetToken.ts:4); the Studio platform lists \"Asset management\" in its Organization plan (https://tokens.studio/pricing) and its CLI pulls \"tokens and assets\" (https://documentation-v2.tokens.studio/cli/overview.html), but no Studio doc page read on 2026-09-26 describes uploading or hosting images, so it could not be settled" }, "provider": "nextcloud", "providerHow": "read-from-code", @@ -2342,7 +2392,7 @@ "m365-branding": "yes", "opendesk": "partial", "liferay-dxp": "unknown", - "tokens-studio": "no", + "tokens-studio": "unknown", "built": { "state": "built", "evidence": "Same core Theming panel and ImageManager as ast-upload-logo (apps/theming/lib/ImageManager.php:25 includes 'background'); thematiq's own resetToDefaults()/RESETTABLE (lib/Service/ThemingService.php:255-277) treats 'background' as one of the settings it can undo, confirming it shares the same core slot.", @@ -2355,7 +2405,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : 'Background image: Select a PNG or JPG to display as the main image on your sign-in page... Image size: 1920x1080 px, Max file size: 300 KB'", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:61-63,67: login and Nextcloud backgrounds are base64 files in values (PNG/JPEG/SVG tested), file swap plus redeploy", "liferay-dxp": "not checked: a login/page background image can be set through theme/master-page customisation, but no simple admin 'upload a login background image' UI was documented the way Entra ID has one", - "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/asset : an Asset token stores a URL pointing to an externally hosted image (or a local file path in dev); Tokens Studio does not host/upload the file itself and does not render it into a live workspace, login page or favicon" + "tokens-studio": "not checked: unknown: the plugin cannot upload, an asset token is only a URL (tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/types/tokens/SingleAssetToken.ts:4); the Studio platform lists \"Asset management\" in its Organization plan (https://tokens.studio/pricing) and its CLI pulls \"tokens and assets\" (https://documentation-v2.tokens.studio/cli/overview.html), but no Studio doc page read on 2026-09-26 describes uploading or hosting images, so it could not be settled" }, "provider": "nextcloud", "providerHow": "read-from-code", @@ -2385,7 +2435,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : 'Favicon: Select a PNG or JPG of your logo that appears in the web browser tab. Image size: 32x32 px, Max file size: 5 KB'", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:55-148 per-module favicons; Nextcloud via opendesk-nextcloud@v4.10.6 charts/opendesk-nextcloud-management/templates/job.yaml:324-326 -> image nextcloud_configure_theming.php:104-114; Jitsi via static files (values-opendesk-static-files.yaml.gotmpl:85-86); portal favicons values-nubus.yaml.gotmpl:404-409", "liferay-dxp": "https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-favicon-client-extension : a theme favicon client extension lets you set a custom favicon image via a client-extension.yaml url property, available as a favicon option for every page", - "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/asset : an Asset token stores a URL pointing to an externally hosted image (or a local file path in dev); Tokens Studio does not host/upload the file itself and does not render it into a live workspace, login page or favicon" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/types/tokens/SingleAssetToken.ts:4: an asset token is a URL string that src/plugin/setImageValuesOnTarget.ts:11-18 fetches onto a Figma layer fill; nothing sets a workspace logo, login background or favicon" }, "provider": "nextcloud", "providerHow": "read-from-code", @@ -2415,7 +2465,7 @@ "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:92-122 portalTiles are per-tile SVGs for the portal only; no named icon library for other apps", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2445,7 +2495,7 @@ "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); only openDesk's own logos ship", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2474,7 +2524,7 @@ "m365-branding": "not checked: no switchable icon pack tied to a chosen design system was found in M365/SharePoint branding docs", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:92-122: the portal tile icons can be swapped as files, but no icon pack is tied to a design system and component icons are untouched (OX coloredIcons false, values-openxchange.yaml.gotmpl:1146)", "liferay-dxp": "not checked: no switchable icon pack tied to a theme/style book was found in the docs read", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2504,7 +2554,7 @@ "m365-branding": "not checked: follows from ast-icon-pack, no icon pack concept exists to indicate", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); theming is set only in deploy-time values rendered by helmfile (docs/theming.md:18-22, baseline-requirements.md:191 'Theming MUST be controlled with the deployment'), there is no theming settings page", "liferay-dxp": "not checked: follows from ast-icon-pack, no icon pack concept exists to indicate", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2533,7 +2583,7 @@ "m365-branding": "not checked: no automated icon-contrast-fix feature found in the branding docs read", "opendesk": "opendesk@v1.18.2: no icon contrast handling in theme or stylesheet; issue #355 (users with low vision could not tell OX attachment viewer icons apart) was handed upstream to Open-Xchange", "liferay-dxp": "not checked: no automated icon-contrast-fix feature found in the style book/accessibility docs read", - "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface; searched src/ for contrast/wcag/luminance: only Tailwind filter vars in src/app/styles/main.css:35; a crawl of the 102 p" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2563,7 +2613,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : 'Square logo (dark theme): Select a square PNG or JPG image file of your logo to be used in browsers that are using a dark color theme'; https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : 'Alternate logo: ...optimized for use in Microsoft 365 dark themes'", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:53 defines logoHeaderInvertedSvg but grep -rn logoHeaderInverted helmfile/apps finds no consumer; opendesk-jitsi@v3.10.0 charts/opendesk-jitsi/templates/configmap.yaml:20 still reads the old name logoHeaderInvertedSvgB64 (renamed in 1.18, docs/migrations-manual.md:416-430), so Jitsi gets its 1x1 blank default (values.yaml:714)", "liferay-dxp": "not checked: no dedicated dark-mode logo slot was found in the style book/Site Logo documentation read", - "tokens-studio": "https://docs.tokens.studio/manage-tokens/token-types/asset : an Asset token stores a URL pointing to an externally hosted image (or a local file path in dev); Tokens Studio does not host/upload the file itself and does not render it into a live workspace, login page or favicon" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/types/tokens/SingleAssetToken.ts:4: an asset token is a URL string that src/plugin/setImageValuesOnTarget.ts:11-18 fetches onto a Figma layer fill; nothing sets a workspace logo, login background or favicon" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2580,7 +2630,7 @@ "m365-branding": "yes", "opendesk": "no", "liferay-dxp": "unknown", - "tokens-studio": "no", + "tokens-studio": "unknown", "built": { "state": "none", "evidence": "no route, controller, service or UI found; searched for 'banner', 'brand image', 'image library' across lib/, js/admin.js, templates/settings/admin.php", @@ -2593,7 +2643,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/organization-assets-library : the organization assets library lets users 'select \"Your organization\" in the left pane to browse the libraries you've specified' when adding an image to any modern page, i.e. a central set of approved brand images for use in their own content", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no shared image library for users", "liferay-dxp": "not checked: no curated 'approved brand images library' surfaced to page builders was found for Liferay beyond generic Documents and Media libraries", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "not checked: unknown: the plugin cannot upload, an asset token is only a URL (tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/types/tokens/SingleAssetToken.ts:4); the Studio platform lists \"Asset management\" in its Organization plan (https://tokens.studio/pricing) and its CLI pulls \"tokens and assets\" (https://documentation-v2.tokens.studio/cli/overview.html), but no Studio doc page read on 2026-09-26 describes uploading or hosting images, so it could not be settled" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2623,7 +2673,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/answers/questions/5985270/microsoft-365-organisational-theme-no-longer-appli : the M365 organisation theme is meant to appear across the whole 'Microsoft 365 suite header', but a Microsoft Q&A thread reports it 'no longer applied in New Outlook and Outlook on the web', showing inconsistent reach across first-party surfaces, let alone third-party ISV apps", "opendesk": "opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:21-114 sets Nextcloud's stock theming (primary colour, logo, favicon, name) instance-wide, which every Nextcloud app inherits; what openDesk configures, background colour excepted (:42-48)", "liferay-dxp": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : theming is portal-wide for native Liferay pages/widgets via shared frontend tokens, but the docs read do not confirm third-party/embedded (non-Liferay) apps automatically pick up the same tokens", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2652,7 +2702,7 @@ "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", "opendesk": "no: outside the product. opendesk-nextcloud-image@v2.17.2 src/files/apps.yaml lists the bundled Nextcloud apps (integration_swp, richdocuments, spreed, ...), no Conduction app ships", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", - "tokens-studio": "not applicable: Tokens Studio is not a Nextcloud app and has no relationship to Conduction apps" + "tokens-studio": "not applicable: outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "nextcloud-vue", "providerHow": "read-from-code", @@ -2682,7 +2732,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : the whole article is about branding 'the sign-in page' before any authentication has happened", "opendesk": "opendesk@v1.18.2 helmfile/files/theme/portal/stylesheet.css:124-197 styles the Keycloak login (the openDesk sign-in, before any session), logo from values-opendesk-static-files.yaml.gotmpl:20-21, title from values-nubus.yaml.gotmpl:208-213", "liferay-dxp": "Liferay DXP style book docs: style books 'cannot be used in administrative themes', so restyling the Sign In portlet/login page needs a custom theme or theme CSS client extension (developer work), not the no-code style book path", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2711,7 +2761,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : 'Navigation bar color: Select a color to use for the background of the navigation bar. The navigation bar appears at the top on every page'", "opendesk": "opendesk@v1.18.2: header colours reach OX topbar (values-openxchange.yaml.gotmpl:1152-1153), OpenProject header and menu (openproject/values.yaml.gotmpl:94-98), XWiki navbar (xwiki/values.yaml.gotmpl:227-228); Nextcloud's header colour is overridden by integration_swp (values-nextcloud-management.yaml.gotmpl:285-287, image config_struct.php:122), not from theme keys; portal header needs the CSS file", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style books style header/navigation chrome as part of the site's overall look through the theme's master page and tokens", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2740,7 +2790,7 @@ "m365-branding": "not checked: no text-labels-vs-icons-only app-menu setting found in the branding docs read", "opendesk": "not checked: unknown: Nextcloud's app menu is replaced by integration_swp central navigation (opendesk-nextcloud-image@v2.17.2 config_struct.php:110-122); I did not read integration_swp 4.8.1 source to see how entries are labelled, and openDesk sets no menu option", "liferay-dxp": "not checked: no such setting found in the style book/site docs read", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2769,7 +2819,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : the documented sign-in elements (title, description, username hint, sign-in text) do not include a Microsoft product slogan to hide", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:18 slogan -> opendesk-nextcloud@v4.10.6 charts/opendesk-nextcloud-management/templates/job.yaml:310-311 -> opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:60-61; env_all_available (functions.php:125-135) only tests presence, so slogan: \"\" runs theming:config slogan '' and blanks it. A side effect of an empty value, and openDesk's real login is Keycloak, which shows no slogan", "liferay-dxp": "not checked: no product-slogan element was found in Liferay's login/theme documentation", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2798,7 +2848,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : a SharePoint site's theme is a site-wide setting that would apply to that site's pages including externally shared/anonymous-access pages, though this was not explicitly confirmed for anonymous visitors in the docs read", "opendesk": "opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:21-114 sets the instance-level theming values, which nextcloud/server@v33.0.9 ThemingDefaults serves to visitors without a session (the admin default is used when no user is set), so Nextcloud public share pages carry the brand; Jitsi guests get branding.json colours (opendesk-jitsi@v3.10.0 files/web/branding.json:11-21)", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/creating-pages : Liferay sites have a first-class distinction between public and private pages, and public pages are themed the same as any other page in the site via its style book", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2827,7 +2877,7 @@ "m365-branding": "not checked: the M365 organisation theme documentation states it appears 'in the top navigation bar for everyone in the organization', with no mention of notification emails", "opendesk": "opendesk@v1.18.2: Nextcloud mails use its stock theming colour and logo set by openDesk; OX notification mail buttons take primary (values-openxchange.yaml.gotmpl:568-572); Keycloak new-device mail subject uses productName (values-nubus.yaml.gotmpl:525); Notes mail brandName is hardcoded 'openDesk' (notes/values.yaml.gotmpl:78)", "liferay-dxp": "not checked: no email-template theming tied to style books/frontend tokens was found in the docs read", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2857,7 +2907,7 @@ "m365-branding": "not checked: no compliance-footer-for-email feature found in the branding docs read", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no mail footer key", "liferay-dxp": "not checked: no compliance-footer-for-email feature found in the docs read", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2886,7 +2936,7 @@ "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); grep -rniE 'rijks|nl-design|nldesign|utrecht|dsfr|marianne' helmfile docs: no hits, so no preset catalogue exists; no mapping of community component tokens", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2915,7 +2965,7 @@ "m365-branding": "outside the product: Microsoft 365 organisational branding (Entra sign-in, org theme, SharePoint theme/brand center) ships no catalogue of Dutch government or country-specific house styles, read across all core branding docs on 2026-09-26", "opendesk": "opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:21-114 sets only primary_color, background, name, slogan, url, imprintUrl, privacyUrl, logo and favicon; every other Nextcloud variable is derived by stock theming", "liferay-dxp": "outside the product: Liferay DXP style books/themes ship generic default palettes (Teal, Blue, Orange...), not Dutch-government or country-specific house styles, per the style book and site theming docs read on 2026-09-26", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2944,7 +2994,7 @@ "m365-branding": "not checked: no per-house-style audit of error/status message contrast was found", "opendesk": "not checked: unknown: openDesk does not touch status colours (opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:39-46 'Not in use yet', no consumers), so readability is each component's stock behaviour, which I did not audit; the published BITV audit (docs.opendesk.eu/legal/barrierefreiheit/, 07/2024) reports 17% failing criteria overall without a contrast breakdown", "liferay-dxp": "not checked: general accessibility conformance is covered by Liferay's VPAT (https://www.liferay.com/documents/d/guest/vpat2-5rev_int_february2025_liferay_dxp_sites_experience), but not broken out per house style/status message", - "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface; no contrast check: searched src/ for contrast/wcag/luminance: only Tailwind filter vars in src/app/styles/main.css:35; a crawl of the 102 pages in docs.tokens.studio/sitemap.xml a" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -2974,7 +3024,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : the only theme colour tokens documented are navigation bar, accent, text and icon colours, with no separate success/warning/error tokens", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:39-46 secondaryRed/Yellow/Green are 'Not in use yet' (no consumer in helmfile/apps), but opendesk@v1.18.2 helmfile/files/theme/portal/stylesheet.css:12-15,45-47,62-67 define error, warning and success tokens for portal and Keycloak", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : the style book's colour options include 'alert-related element colours' in addition to body/background/text, i.e. status colours are part of the token set", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3004,7 +3054,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : the organisation theme is documented to appear 'in the top navigation bar for everyone in the organization' as part of the web suite header, with no mention of the OneDrive/desktop sync client or mobile apps", "opendesk": "not checked: unknown: openDesk ships no client builds (grep docs for desktop/mobile client branding: none); stock clients may read the Nextcloud theming capabilities openDesk sets (nextcloud/server@v33.0.9 apps/theming/lib/Capabilities.php:98-108), but I did not read client source", "liferay-dxp": "not checked: Liferay DXP is a web portal/CMS with no documented desktop or mobile file-sync client to carry a brand into", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "nextcloud", "providerHow": "read-from-code", @@ -3034,7 +3084,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : the organisation theme is shared across the Microsoft 365 suite header used by Office web apps, though the Outlook regression noted above shows inconsistent reach", "opendesk": "opendesk@v1.18.2: chat (Element, values-element.yaml.gotmpl:20-22) and groupware (OX, values-openxchange.yaml.gotmpl:1150-1158) take the brand, but the office editor Collabora is started with --o:user_interface.use_integration_theme=false (collabora/values.yaml.gotmpl:45) and Notes keeps a fixed 'openDesk' theme (notes/values.yaml.gotmpl:124)", "liferay-dxp": "not checked: Liferay DXP has no bundled office editor/chat suite of its own to carry a brand into", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3063,7 +3113,7 @@ "m365-branding": "not checked: whether a SharePoint/M365 tenant can be served on a fully custom (non- *.sharepoint.com/*.onmicrosoft.com) domain was not confirmed in the docs read", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/global.yaml.gotmpl:11 domain from DOMAIN, with per-app hosts; every themed URL is built from global.domain", "liferay-dxp": "https://learn.liferay.com/w/dxp/security-and-administration/administration/configuring-liferay/virtual-instances : each virtual instance is 'accessed via a unique domain name', i.e. the branded workspace is served on the organisation's own domain", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "nextcloud", "providerHow": "read-from-code", @@ -3093,7 +3143,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : the Footer section explicitly supports custom 'Privacy & Cookies' and 'Terms of Use' display text and links", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/functional.yaml.gotmpl:448-457 legal notice, privacy, documentation, support and feedback links, passed to Nextcloud (values-nextcloud-management.yaml.gotmpl:294-295) and portal (values-nubus.yaml.gotmpl:1414-1418); there is no accessibility statement link key", "liferay-dxp": "not checked: legal footer links can be added through theme/master-page development, but no built-in admin UI field for privacy/imprint/accessibility-statement footer links was found for style books", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "nextcloud", "providerHow": "read-from-code", @@ -3123,7 +3173,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : sign-in title/description text can be customised, but the underlying Microsoft 365/Entra product name and web address are not rebrandable", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:16-18 productName and slogan -> Nextcloud name and slogan (opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:60-66), Keycloak title (values-nubus.yaml.gotmpl:211-213), portal and tab titles (values-nubus.yaml.gotmpl:1370,1412-1413; element :175; jitsi :69; openproject :43; xwiki :248); web address via global.domain", "liferay-dxp": "https://learn.liferay.com/w/dxp/security-and-administration/administration/configuring-liferay/virtual-instances : a virtual instance has its own domain name, and sites have their own configurable name, but the Liferay product name itself is not rebranded by this", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "nextcloud", "providerHow": "read-from-code", @@ -3153,7 +3203,7 @@ "m365-branding": "not checked: no per-app opt-out of org branding was found", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/customization.yaml.gotmpl:4-24 loads a custom values file per release, so one app's theme values can be overridden back to stock; documented as unsupported by openDesk (:10-14). Collabora is already excluded (collabora/values.yaml.gotmpl:45)", "liferay-dxp": "not checked: theme CSS client extensions and style books are scoped per site, not per individual app/widget, so no documented way to exclude one app while the rest of the site is themed", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3182,7 +3232,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : 'you can also create up to four additional group themes that can be assigned to multiple Microsoft 365 groups'", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no group dimension", "liferay-dxp": "not checked: Liferay themes/style books are assigned per site, not per user group on a shared site; no per-group theming was found", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3212,7 +3262,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : 'What happens if a user is assigned to multiple group themes? Users who are assigned to multiple group themes will be shown the default theme.' -- a fixed fallback rule, not an admin-chosen priority order", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no group dimension", "liferay-dxp": "not checked: not applicable, Liferay has no per-user-group theme feature to prioritise (see sco-per-group)", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3241,7 +3291,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding ; https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : the sign-in page branding is one shared tenant-wide configuration, independent of the M365 group themes that only change the suite-header nav bar", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no group themes exist", "liferay-dxp": "not checked: not applicable, no per-group theming exists to be unaffected by", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3270,7 +3320,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : 'you can prevent users from overriding their theme', implying that by default end users CAN override their assigned organisation theme unless the admin locks it", "opendesk": "opendesk-nextcloud-image@v2.17.2 nextcloud_configure_theming.php:16-17 disables only user colour and background; nextcloud/server@v33.0.9 apps/theming/src/views/UserTheming.vue:17-22,48-52 still offers the theme list (light, dark, high contrast), stock and left enabled; docs/baseline-requirements.md:201 wants the portal's light/dark choice respected by all components with 'Reference: No reference yet'", "liferay-dxp": "https://learn.liferay.com/w/dxp/personalization/experiences/using-the-accessibility-menu : the personal Accessibility Menu (underlined links, text spacing, expanded text, reduced motion, focus ring animation) lets a user self-select display preferences, though it is not literally a light/dark/high-contrast theme switch", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "nextcloud", "providerHow": "read-from-code", @@ -3300,7 +3350,7 @@ "m365-branding": "not checked: no OS dark-mode/high-contrast auto-follow behaviour documented for M365/SharePoint org branding", "opendesk": "nextcloud/server@v33.0.9 apps/theming/lib/Themes (DarkTheme, HighContrastTheme prefers-contrast, DarkHighContrastTheme) follow the OS through the default theme, stock and left enabled by openDesk; openDesk's portal stylesheet has no prefers-color-scheme rule (grep stylesheet.css: none)", "liferay-dxp": "not checked: no prefers-color-scheme/forced-colors auto-follow behaviour documented for Liferay's accessibility menu or style books", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3330,7 +3380,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview : each SharePoint site selects and can customise its own theme independently", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); one brand per deployment", "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style books (and themes) are assigned per Site, so each site/department can have its own", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3360,7 +3410,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : Home Realm Discovery lets company branding show immediately 'For customers who access applications from a custom URL, the whr query string parameter, or a domain variable', and B2B cross-tenant sign-ins show the visiting user's own home-tenant branding by domain", "opendesk": "opendesk@v1.18.2 global.yaml.gotmpl:11 one domain per deployment and one theme tree", "liferay-dxp": "https://learn.liferay.com/w/dxp/security-and-administration/administration/configuring-liferay/virtual-instances : virtual instances are each reached via their own domain name with independent configuration, so the brand shown depends on which domain/instance the user arrives on", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3389,7 +3439,7 @@ "m365-branding": "not checked: Microsoft 365 organisational branding is scoped to one Azure/Entra tenant; running fully separate isolated brands 'on one installation' is not how a customer's single M365 tenant works, each brand needs its own Microsoft tenant", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); one brand per deployment, grep -rni tenant docs: none", "liferay-dxp": "https://learn.liferay.com/w/dxp/security-and-administration/administration/configuring-liferay/virtual-instances : 'Liferay DXP can host multiple portals on one installation, called virtual instances, with completely separate data and configurations', which is exactly tenant isolation on one installation", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3418,7 +3468,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/graph/api/organizationalbranding-update : reading organizationalBranding via Microsoft Graph requires an application permission such as OrganizationalBranding.Read.All, which needs admin consent, not something another app can call without admin rights", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no catalogue", "liferay-dxp": "not checked: Liferay's Headless APIs were confirmed to exist generally, but whether a non-admin-scoped endpoint lists the site's style book catalogue was not confirmed in the docs read", - "tokens-studio": "outside the product: Tokens Studio (docs.tokens.studio) is a Figma design-token authoring/sync plugin and platform; it does not render or apply theming to any live workspace, login page, email or app surface (confirmed across docs.tokens.studio/manage-tokens, /token-storage-and-sync, /manage-themes: every feature acts on a token JSON source or a Figma file, never a running instance)" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3447,7 +3497,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : the FAQ documents the exact warning 'Doesn't meet minimum color contrast ratio of 4.5:1' shown when saving theme colours", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no contrast check anywhere in the deployment", "liferay-dxp": "not checked: no contrast warning at token-save time was found in the style book editor documentation", - "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" + "tokens-studio": "searched src/ for contrast/wcag/luminance: only Tailwind filter vars in src/app/styles/main.css:35; a crawl of the 102 pages in docs.tokens.studio/sitemap.xml and the Studio docs nav at https://documentation-v2.tokens.studio/ finds no contrast checker or audit" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3477,7 +3527,7 @@ "m365-branding": "not checked: no standalone WCAG contrast-checking tool for arbitrary colour pairs was found in M365/SharePoint admin docs", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); grep -rni contrast helmfile: only the unused secondaryBlueHighcontrast key (theme.yaml.gotmpl:43)", "liferay-dxp": "not checked: no standalone WCAG contrast-checking tool for arbitrary colour pairs was found in the Liferay docs read", - "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" + "tokens-studio": "searched src/ for contrast/wcag/luminance: only Tailwind filter vars in src/app/styles/main.css:35; a crawl of the 102 pages in docs.tokens.studio/sitemap.xml and the Studio docs nav at https://documentation-v2.tokens.studio/ finds no contrast checker or audit" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3507,7 +3557,7 @@ "m365-branding": "not checked: not applicable, M365 org branding ships no catalogue of preset house styles to audit", "opendesk": "https://docs.opendesk.eu/legal/barrierefreiheit/ (read 2026-09-26): the one shipped brand was audited per application against BITV 2.0 / EN 301 549 in 07/2024 (70% passed overall); manual, not automatic, not contrast-specific, and a custom brand is not checked", "liferay-dxp": "not checked: SharePoint's/Liferay's own default themes are described only as 'designed for readability', with no explicit statement that every shipped theme is automatically WCAG-contrast-checked", - "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" + "tokens-studio": "searched src/ for contrast/wcag/luminance: only Tailwind filter vars in src/app/styles/main.css:35; a crawl of the 102 pages in docs.tokens.studio/sitemap.xml and the Studio docs nav at https://documentation-v2.tokens.studio/ finds no contrast checker or audit" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3537,7 +3587,7 @@ "m365-branding": "not checked: no per-house-style published contrast report was found; M365 branding has no catalogue of named house styles", "opendesk": "https://docs.opendesk.eu/legal/barrierefreiheit/ (read 2026-09-26): published per-application BITV results table (07/2024) with reports added in the repo; not a contrast report per style", "liferay-dxp": "https://www.liferay.com/documents/d/guest/vpat2-5rev_int_february2025_liferay_dxp_sites_experience : Liferay publishes a product-level VPAT, not a per-theme or per-style-book contrast report", - "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" + "tokens-studio": "searched src/ for contrast/wcag/luminance: only Tailwind filter vars in src/app/styles/main.css:35; a crawl of the 102 pages in docs.tokens.studio/sitemap.xml and the Studio docs nav at https://documentation-v2.tokens.studio/ finds no contrast checker or audit" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3566,7 +3616,7 @@ "m365-branding": "not checked: no exportable contrast-evidence report of the tenant's active branding configuration was found", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no report generator", "liferay-dxp": "https://www.liferay.com/documents/d/guest/vpat2-5rev_int_february2025_liferay_dxp_sites_experience : Liferay publishes a Voluntary Product Accessibility Template (VPAT) conformance report, but it documents the product in general, not the contrast of a specific customer's active style book/theme configuration", - "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" + "tokens-studio": "searched src/ for contrast/wcag/luminance: only Tailwind filter vars in src/app/styles/main.css:35; a crawl of the 102 pages in docs.tokens.studio/sitemap.xml and the Studio docs nav at https://documentation-v2.tokens.studio/ finds no contrast checker or audit" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3596,7 +3646,7 @@ "m365-branding": "not checked: no CLI for generating a contrast compliance report was found", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-154: the whole theming surface is one values tree (texts, colors, imagery, styles.portal) holding the single openDesk brand (primary #571EFA :29, logos from helmfile/files/theme/); no report generator", "liferay-dxp": "not checked: no CLI for generating a contrast compliance report was found", - "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" + "tokens-studio": "searched src/ for contrast/wcag/luminance: only Tailwind filter vars in src/app/styles/main.css:35; a crawl of the 102 pages in docs.tokens.studio/sitemap.xml and the Studio docs nav at https://documentation-v2.tokens.studio/ finds no contrast checker or audit" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3625,7 +3675,7 @@ "m365-branding": "not checked: no maximum-contrast/WCAG AAA instance-wide theme option was found for M365/SharePoint org branding, which only offers arbitrary admin-chosen colours", "opendesk": "nextcloud/server@v33.0.9 apps/theming/lib/Service/ThemesService.php:33-34 high contrast themes stay user-selectable (openDesk disables only colour and background, image nextcloud_configure_theming.php:16-17); theme.yaml.gotmpl:43 secondaryBlueHighcontrast is unused; no instance-wide high contrast brand", "liferay-dxp": "https://learn.liferay.com/kb-article/creating-high-contrast-color-themes-in-liferay-dxp-7.0 : since Fix Pack 58, 'navigate to Control Panel > Configuration > System Settings > Web Experience > Product Menu Accessibility, and check the Use High Contrast option' turns on an instance-wide high-contrast colour scheme, though the docs read do not label it explicitly as WCAG AAA", - "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface; no shipped high-contrast set; Studio only names high contrast as a theme you could author (https://documentation-v2.tokens.studio/theming/multi-dimensional-theming.html)" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3654,7 +3704,7 @@ "m365-branding": "not checked: no forced-colors/OS high-contrast-mode cooperation documented for M365/SharePoint branding", "opendesk": "not checked: unknown: the openDesk layer adds no forced-colors rule (grep stylesheet.css: none); the stock behaviour of the bundled components was not audited", "liferay-dxp": "not checked: no forced-colors media-query cooperation documented for Liferay's accessibility menu or style books", - "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3671,7 +3721,7 @@ "m365-branding": "partial", "opendesk": "partial", "liferay-dxp": "unknown", - "tokens-studio": "no", + "tokens-studio": "partial", "built": { "state": "built", "evidence": "openspec/specs/dark-mode/spec.md; route GET/POST /settings/dark-variants -> settings#getDarkVariants/setDarkVariants; templates/settings/admin.php:441-449 #nldesign-dark-variants checkbox; js/admin.js:2097 saveDarkVariantsSetting() posts to /apps/thematiq/settings/dark-variants; css/tokens/dark/*.css are the generated variants DarkPaletteService/ThemeInjectionListener swap in", @@ -3684,7 +3734,7 @@ "m365-branding": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme ; https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding : dark-mode logos are supported ('alternate logo... optimized for use in Microsoft 365 dark themes', 'Square logo (dark theme)'), and SharePoint ships 2 dark/'inverted' default site themes, but the M365 organisation theme's nav-bar/accent/text colours have only one value each, no separate dark palette", "opendesk": "nextcloud/server@v33.0.9 DarkTheme stays user-selectable and follows the OS, using the primary colour openDesk sets; the brand has no dark variant (opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:27-47) and the portal stylesheet no dark rule", "liferay-dxp": "not checked: no full dark-mode variant of a style book/house style was found in the docs read; the accessibility menu (https://learn.liferay.com/w/dxp/personalization/experiences/using-the-accessibility-menu) does not list a dark-mode toggle", - "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" + "tokens-studio": "https://documentation-v2.tokens.studio/theming/multi-dimensional-theming.html: a Color Mode theme group with Light and Dark options is the documented base case, combined with brand groups; tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/app/components/ThemeSelector/ThemeSelector.tsx:27-40 switches them; the product authors the dark mode but offers it to no end user" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3714,7 +3764,7 @@ "m365-branding": "not checked: no CLI to regenerate dark variants was found", "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:27-47 no dark variants to generate", "liferay-dxp": "not checked: no CLI to regenerate dark variants was found", - "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3743,7 +3793,7 @@ "m365-branding": "not checked: no focus-indicator styling tied to house-style colours was found in M365/SharePoint branding docs", "opendesk": "not checked: unknown: opendesk@v1.18.2 helmfile/files/theme/portal/stylesheet.css:192-194 only unsets text-decoration-thickness on login link focus and sets no brand focus ring; stock component focus styles were not audited", "liferay-dxp": "https://learn.liferay.com/w/dxp/personalization/experiences/using-the-accessibility-menu : DXP 2026.Q3+ ships a 'Focus Ring Animation' accessibility option where 'the ring appears at a larger size and then contracts to its normal size, drawing your eye to the new element', showing focus indicators are a first-class feature, though the docs read do not confirm the ring colour is drawn from the house style's own tokens", - "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" + "tokens-studio": "outside the product: tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/manifest.json:2-9: a Figma plugin (editorType figma, dev) whose output is token JSON for the stores in src/constants/StorageProviderType.ts:1-12; it renders no workspace, login page, email or app surface" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3759,7 +3809,7 @@ "m365-branding": "unknown", "opendesk": "unknown", "liferay-dxp": "yes", - "tokens-studio": "no", + "tokens-studio": "partial", "built": { "state": "built", "evidence": "css/systems/nldesign/theme.css:1139 @media (prefers-reduced-motion: reduce) removes button/login transitions; css/admin.css:1318 same for the settings page's own controls; css/playground.css:1875 same for the token-set preview widgets, all with transition:none!important; animation:none!important", @@ -3772,7 +3822,7 @@ "m365-branding": "not checked: no reduced-motion preference support documented for M365/SharePoint org branding surfaces", "opendesk": "not checked: unknown: the openDesk layer has no prefers-reduced-motion rule, and the pinned nextcloud/server@v33.0.9 has no ReducedMotion theme (apps/theming/lib/Themes/ReducedMotion.php 404 at that tag, added later); Element, OX and OpenProject not checked", "liferay-dxp": "https://learn.liferay.com/w/dxp/personalization/experiences/using-the-accessibility-menu : 'Reduced Motion: Stop all motion and animations to hide transitions and other movement effects' is a documented accessibility menu option", - "tokens-studio": "outside the product: Tokens Studio manages token values, it does not render a UI or audit a live workspace; no contrast-checker, compliance report, or accessibility-statement feature is documented on docs.tokens.studio" + "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/app/components/Accordion/Accordion.tsx:4,23,69 honours prefers-reduced-motion via framer-motion useReducedMotion; other animated parts not checked; motion tokens exist (constants/TokenTypes.ts:28-33) but nothing applies them to a workspace" }, "provider": "thematiq", "providerHow": "read-from-code", @@ -3789,7 +3839,7 @@ "m365-branding": "unknown", "opendesk": "no", "liferay-dxp": "unknown", - "tokens-studio": "no", + "tokens-studio": "unknown", "built": { "state": "built", "evidence": "tests/vitest/admin-a11y.spec.js: dedicated keyboard-accessibility suite for the hand-rolled dialog (focus trap, Tab wrap, Escape-closes-and-returns-focus, WCAG 2.4.3/2.1.1 cited in comments at js/admin.js:1943-1945,3597,3842); the one other hand-rolled widget, the per-app theming dropdown (js/admin.js:3491-3600), has its own keydown handler with Escape support (comment at js/admin.js:3597); all other controls on the page are native /