diff --git a/openspec/parity/capabilities.json b/openspec/parity/capabilities.json
index 5fce7ef8..4599192a 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",
@@ -66,7 +118,61 @@
"columnAddedOn": "2026-09-26",
"evidenceGrade": "docs-only",
"unknownReason": "not checked beyond Entra ID sign-in branding, Microsoft 365 organization theme (suite header), SharePoint site theming/brand center and the SharePoint organization assets library documentation read on 2026-09-26; Teams/Outlook client-internal theming, notification-email templates, monitoring/metrics for the branding subsystem, and any NL-government-specific presets were not covered by that documentation.",
- "sources": [
+ "sources": {
+ "docs": [
+ "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/brand-center-overview",
+ "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview",
+ "https://learn.microsoft.com/en-us/microsoftteams/meeting-themes"
+ ],
+ "sourceRepo": null,
+ "featurePage": "https://learn.microsoft.com/en-us/sharepoint/brand-center-overview",
+ "featureRequests": "https://feedbackportal.microsoft.com/",
+ "issueTracker": null,
+ "roadmap": "https://www.microsoft.com/microsoft-365/roadmap",
+ "changelog": [
+ "https://learn.microsoft.com/en-us/entra/fundamentals/whats-new",
+ "https://learn.microsoft.com/en-us/entra/fundamentals/whats-new-archive"
+ ],
+ "apiReference": [
+ "https://learn.microsoft.com/en-us/graph/api/resources/organizationalbranding?view=graph-rest-1.0",
+ "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-rest-api",
+ "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-powershell"
+ ],
+ "marketplace": null,
+ "pricing": null,
+ "accessibilityStatement": null,
+ "securityDocs": "https://learn.microsoft.com/en-us/entra/architecture/security-operations-introduction",
+ "demoInstance": null,
+ "community": [
+ "https://techcommunity.microsoft.com/category/microsoft-entra",
+ "https://techcommunity.microsoft.com/category/sharepoint",
+ "https://learn.microsoft.com/en-us/answers/tags/455/entra-id"
+ ],
+ "reviews": null,
+ "videos": "https://learn.microsoft.com/en-us/shows/",
+ "caseStudies": null,
+ "partnerDirectory": null,
+ "trainingCurriculum": "https://learn.microsoft.com/en-us/credentials/certifications/identity-and-access-administrator/",
+ "jobPostings": "https://jobs.careers.microsoft.com/global/en/search?q=branding",
+ "tenders": [
+ "130 tenders in the intelligence database carry a requirement naming Microsoft 365 or Office 365 (integration, not branding); two tie it to house style: TenderNed 399455 (Zaaksysteem, https://www.tenderned.nl/aankondigingen/overzicht/399455) and TenderNed 415112 (Leermanagementsysteem, https://www.tenderned.nl/aankondigingen/overzicht/415112)"
+ ],
+ "nullReasons": {
+ "sourceRepo": "closed source: Entra ID, Microsoft 365 and SharePoint Online are proprietary hosted services; the only related repo is the community tool github.com/microsoft/Microsoft365DSC, not the product (checked 2026-09-26)",
+ "issueTracker": "no public issue tracker for these services; defects go through admin-center support requests, and feature ideas through feedbackportal.microsoft.com (checked 2026-09-26)",
+ "marketplace": "no theme marketplace; appsource.microsoft.com (apps, not themes) returned 403 to curl on 2026-09-26",
+ "pricing": "not verified: www.microsoft.com Entra and Microsoft 365 pricing pages returned 403 to curl on 2026-09-26; licence prerequisites (Entra ID P1/P2, M365 Business Standard, SharePoint Plan 1, Teams Premium) are stated in the feature docs",
+ "accessibilityStatement": "not verified: https://www.microsoft.com/en-us/accessibility/conformance-reports returned 403 to curl on 2026-09-26, and no branding-specific accessibility statement was found on learn.microsoft.com",
+ "demoInstance": "none: no public demo tenant; trial accounts were out of scope for this read (2026-09-26)",
+ "reviews": "not verified: Gartner Peer Insights and G2 pages returned 403 to curl on 2026-09-26",
+ "caseStudies": "not verified: customers.microsoft.com and www.microsoft.com/en-us/customers returned 403 to curl on 2026-09-26",
+ "partnerDirectory": "not verified: partner.microsoft.com find-a-partner timed out and appsource partner directory returned 403 on 2026-09-26"
+ }
+ },
+ "readingNotes": "Custom CSS for Entra ID sign-in pages needs Entra ID P1/P2, Microsoft 365 Business Standard or SharePoint Plan 1 licensing plus the Organizational Branding Administrator role, and it is being retired: tenants created after 2026-01-05 no longer get custom CSS, and layout/positioning CSS properties (position, margin, transform, overflow) are being removed fleet-wide under Microsoft's Secure Future Initiative, with full retirement planned. SharePoint brand center features (custom fonts, org-wide brand asset libraries) require enabling a Public CDN and are unavailable on 21Vianet (China) and Microsoft 365 US Government plans. Ratings score only the organisational/company-branding surfaces named in the brief (Entra sign-in, M365 org theme, SharePoint site themes/brand center); general per-user Office personalization (e.g. the personal 'colorful/dark/light' Office theme) is a separate feature, scored here only where the org-branding docs themselves mention user override (see sco-user-choice).",
+ "readSources": [
"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",
@@ -78,7 +184,7 @@
"https://learn.microsoft.com/en-us/sharepoint/dev/general-development/how-to-deploy-a-custom-theme-in-sharepoint",
"https://learn.microsoft.com/en-us/answers/questions/5985270/microsoft-365-organisational-theme-no-longer-appli"
],
- "readingNotes": "Custom CSS for Entra ID sign-in pages needs Entra ID P1/P2, Microsoft 365 Business Standard or SharePoint Plan 1 licensing plus the Organizational Branding Administrator role, and it is being retired: tenants created after 2026-01-05 no longer get custom CSS, and layout/positioning CSS properties (position, margin, transform, overflow) are being removed fleet-wide under Microsoft's Secure Future Initiative, with full retirement planned. SharePoint brand center features (custom fonts, org-wide brand asset libraries) require enabling a Public CDN and are unavailable on 21Vianet (China) and Microsoft 365 US Government plans. Ratings score only the organisational/company-branding surfaces named in the brief (Entra sign-in, M365 org theme, SharePoint site themes/brand center); general per-user Office personalization (e.g. the personal 'colorful/dark/light' Office theme) is a separate feature, scored here only where the org-branding docs themselves mention user override (see sco-user-choice)."
+ "readNote": "public vendor documents read on 2026-09-26 (learn.microsoft.com, the Microsoft 365 roadmap feed); closed source, not driven"
},
{
"key": "opendesk",
@@ -87,8 +193,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 +256,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",
@@ -110,7 +266,50 @@
"columnAddedOn": "2026-09-26",
"evidenceGrade": "docs-only",
"unknownReason": "not checked beyond style books, theme CSS/favicon client extensions, staging/publications, style book export-import, virtual instances, the audit framework, roles/permissions, the accessibility menu and the DXP Sites Experience VPAT read on 2026-09-26; headless REST API coverage for style books specifically, font-file upload for style book typography tokens, email templating, and Prometheus/health-check integration were not found in that documentation.",
- "sources": [
+ "sources": {
+ "docs": "https://learn.liferay.com/w/dxp",
+ "sourceRepo": "https://github.com/liferay/liferay-portal/tree/2026.q3.0 (LGPL source per https://liferay.dev/b/one-platform-one-liferay-the-2026-release-model; tag 2026.q3.0 exists; this column was rated from public docs, the source was not read)",
+ "featurePage": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books",
+ "featureRequests": "https://liferay.atlassian.net/jira/software/c/projects/LPD/issues",
+ "issueTracker": {
+ "url": "https://liferay.atlassian.net/jira/software/c/projects/LPD/issues",
+ "featureLabel": "issue types Epic, Story and Spike in project LPD (no separate feature label; the public REST search /rest/api/3/search/jql works anonymously)"
+ },
+ "roadmap": "https://www.liferay.com/roadmap",
+ "changelog": [
+ "https://liferay.dev/b/liferay-dxp-2026-q3-release-webinar-replay",
+ "https://learn.liferay.com/w/dxp/self-hosted-installation-and-upgrades/upgrading-liferay/deprecations-and-breaking-changes-reference/2026-deprecations-and-breaking-changes/2026-q3-default-setting-and-feature-flag-changes",
+ "https://liferay.dev/b/liferay-dxp-2026-q2-is-now-available-"
+ ],
+ "apiReference": "https://learn.liferay.com/w/dxp/integration/headless-apis",
+ "marketplace": "https://marketplace.liferay.com/",
+ "pricing": "https://www.liferay.com/pricing",
+ "accessibilityStatement": [
+ "https://www.liferay.com/accessibility-compliance/digital-experience-platform",
+ "https://www.liferay.com/documents/d/guest/vpat2-5rev_int_february2025_liferay_dxp_sites_experience"
+ ],
+ "securityDocs": "https://learn.liferay.com/w/dxp/security-and-administration/security",
+ "demoInstance": "https://learn.liferay.com/w/dxp/getting-started/liferay-dxp-free-tier",
+ "community": [
+ "https://liferay.dev/",
+ "https://liferay.dev/ask"
+ ],
+ "reviews": null,
+ "videos": "https://www.youtube.com/@liferay",
+ "caseStudies": "https://www.liferay.com/resources/case-studies",
+ "partnerDirectory": "https://www.liferay.com/partners",
+ "trainingCurriculum": "https://learn.liferay.com/education/index",
+ "jobPostings": "https://www.liferay.com/careers",
+ "tenders": [
+ "34 tenders name Liferay, all Spanish PLACSP portal maintenance or subscription renewals, e.g. ES-PLACSP-19525683 (renewal of Liferay DXP subscription and support, https://contrataciondelestado.es/wps/poc?uri=deeplink:detalle_licitacion&idEvl=0sX1dCzTZxzECtSnloz%2BZQ%3D%3D) and ES-PLACSP-19931298 (2026-07-16)"
+ ],
+ "nullReasons": {
+ "reviews": "2026-09-26: https://www.g2.com/products/liferay-dxp/reviews returned 403 to a plain request and no other review site was checked, so no review page was confirmed"
+ },
+ "notes": "www.liferay.com pages answer a bot challenge to curl on 2026-09-26; roadmap, pricing, accessibility, case studies, partners and careers URLs were confirmed by web search results or HTTP status, not by reading the page body; demoInstance is the free tier self-install, Liferay offers no public demo instance"
+ },
+ "readingNotes": "Since Liferay DXP 2025.Q2, every style book is tied to one specific theme (Token Isolation) and style books explicitly 'cannot be used in administrative themes', so the login/control-panel look still needs a theme or a theme CSS client extension (a developer-built and Gradle-deployed artifact), not the no-code style book editor. Style book export/import is documented as UI-only ('both methods appear limited to the user interface'), which is the direct source for several 'no CLI' ratings. Liferay DXP is Liferay's commercial/enterprise edition; the Apache-licensed open-source core is the separate Liferay Portal Community Edition product, not DXP itself.",
+ "readSources": [
"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/sites/site-appearance/style-books/developer-guide/style-book-token-definitions",
"https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-css-client-extension",
@@ -130,7 +329,7 @@
"https://github.com/liferay/liferay-frontend-projects/blob/master/guidelines/dxp/how_to_use_css_custom_properties.md",
"https://help.liferay.com/hc/en-us/articles/360018171691-Page-Set-Look-and-Feel"
],
- "readingNotes": "Since Liferay DXP 2025.Q2, every style book is tied to one specific theme (Token Isolation) and style books explicitly 'cannot be used in administrative themes', so the login/control-panel look still needs a theme or a theme CSS client extension (a developer-built and Gradle-deployed artifact), not the no-code style book editor. Style book export/import is documented as UI-only ('both methods appear limited to the user interface'), which is the direct source for several 'no CLI' ratings. Liferay DXP is Liferay's commercial/enterprise edition; the Apache-licensed open-source core is the separate Liferay Portal Community Edition product, not DXP itself."
+ "readNote": "public vendor documents read on 2026-09-26 (learn.liferay.com, liferay.dev, public LPD issues on liferay.atlassian.net); several ratings rest on public Jira issues rather than product docs; www.liferay.com answered a bot challenge, so its roadmap, pricing, accessibility, case study, partner and careers source fields are confirmed by status code or search result, not by reading the page; closed edition not driven, source not read"
},
{
"key": "tokens-studio",
@@ -139,8 +338,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)",
@@ -159,7 +408,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": [
@@ -265,11 +514,11 @@
},
"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",
- "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)"
+ "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": "no: outside the product. https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style books only carry values for the token definition of a theme the organisation supplies (Classic, Prism or its own); Liferay ships no Dutch or other government house styles, and its public-sector design system work (https://liferay.atlassian.net/browse/LPD-82026) covers USWDS, GOV.UK and a Spanish system as a reference site, not a selectable catalogue",
+ "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",
@@ -294,11 +543,11 @@
},
"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",
- "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)"
+ "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": "no: outside the product. https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style books only carry values for the token definition of a theme the organisation supplies (Classic, Prism or its own); Liferay ships no Dutch or other government house styles, and its public-sector design system work (https://liferay.atlassian.net/browse/LPD-82026) covers USWDS, GOV.UK and a Spanish system as a reference site, not a selectable catalogue",
+ "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",
@@ -323,11 +572,11 @@
},
"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",
- "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)"
+ "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": "no: outside the product. https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style books only carry values for the token definition of a theme the organisation supplies (Classic, Prism or its own); Liferay ships no Dutch or other government house styles, and its public-sector design system work (https://liferay.atlassian.net/browse/LPD-82026) covers USWDS, GOV.UK and a Spanish system as a reference site, not a selectable catalogue",
+ "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",
@@ -353,11 +602,11 @@
},
"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",
- "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)"
+ "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": "no: outside the product. https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style books only carry values for the token definition of a theme the organisation supplies (Classic, Prism or its own); Liferay ships no Dutch or other government house styles, and its public-sector design system work (https://liferay.atlassian.net/browse/LPD-82026) covers USWDS, GOV.UK and a Spanish system as a reference site, not a selectable catalogue",
+ "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",
@@ -371,7 +620,7 @@
"thematiq": "yes",
"nextcloud-theming": "no",
"m365-branding": "no",
- "opendesk": "partial",
+ "opendesk": "no",
"liferay-dxp": "no",
"tokens-studio": "no",
"built": {
@@ -382,11 +631,11 @@
},
"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",
- "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)"
+ "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": "no: outside the product. https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style books only carry values for the token definition of a theme the organisation supplies (Classic, Prism or its own); Liferay ships no Dutch or other government house styles, and its public-sector design system work (https://liferay.atlassian.net/browse/LPD-82026) covers USWDS, GOV.UK and a Spanish system as a reference site, not a selectable catalogue",
+ "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",
@@ -401,7 +650,7 @@
"nextcloud-theming": "no",
"m365-branding": "no",
"opendesk": "no",
- "liferay-dxp": "no",
+ "liferay-dxp": "partial",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -411,11 +660,11 @@
},
"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",
- "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)"
+ "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/design-libraries/sharing-design-resources-across-sites : the Select Style Book dialog has a table view listing site and design library style books (with a Design Library column), and https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance offers search in the colour picker; the picker lists only style books built for the page theme, not a catalogue of hundreds of named house styles",
+ "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",
@@ -441,11 +690,11 @@
},
"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",
- "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)"
+ "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 the chosen style book on pages, templates and fragments before publishing, but no swatch or primary colour per style book in the selection list is described",
+ "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",
@@ -458,9 +707,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,11 +720,11 @@
},
"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",
- "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)"
+ "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 non-editable \"Styles from X Theme\" style book with all default values, used when nothing else is set; this resets tokens per page or site, while a theme CSS client extension has to be removed separately (https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-css-client-extension)",
+ "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",
@@ -490,7 +739,7 @@
"nextcloud-theming": "no",
"m365-branding": "unknown",
"opendesk": "no",
- "liferay-dxp": "unknown",
+ "liferay-dxp": "no",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -500,11 +749,11 @@
},
"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",
- "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",
- "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)"
+ "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: unknown: https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-json-schema lists the fixed palette slots and notes the Theme Generator omits nine of them ('can be manually added'), but no doc says whether an incomplete theme is flagged; Entra and the M365 org theme are fixed forms with no completeness indicator described",
+ "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": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : every style book exposes the full token set of its theme token definition and unset tokens fall back to the theme default; no completeness indicator exists. The first planned coverage signal, a console warning when a style book lacks high contrast tokens, is still Ready for Development in https://liferay.atlassian.net/browse/LPD-90810",
+ "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",
@@ -529,11 +778,11 @@
},
"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",
- "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)"
+ "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 : with theme scoped style books (LPD-30204) a style book targets one theme, so choosing a theme (Classic, Prism or a client extension) and its style book switches the design system; no ready-made NL Design System, La Suite or soft light choices ship",
+ "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",
@@ -546,7 +795,7 @@
"name": "Follow a link from the settings page to the design system's own documentation.",
"thematiq": "partial",
"nextcloud-theming": "partial",
- "m365-branding": "unknown",
+ "m365-branding": "partial",
"opendesk": "no",
"liferay-dxp": "unknown",
"tokens-studio": "no",
@@ -558,11 +807,11 @@
},
"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",
- "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",
- "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)"
+ "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": "https://learn.microsoft.com/en-us/sharepoint/brand-center-overview: the brand center is a SharePoint site (suggested name 'Brand Guide') whose assets 'include your logo, colors, fonts, images, voice, and guidelines', so guidelines can sit beside the brand assets; no link field to an external design system's documentation in the Entra or M365 theme forms",
+ "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: unknown: https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance and https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/developer-guide/frontend-token-definitions describe the editor and token definitions; neither mentions a link from the style book settings to a design system documentation site, and a token label is only a language key, so the docs do not settle it",
+ "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",
@@ -588,11 +837,11 @@
},
"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",
- "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)"
+ "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": "no: outside the product. https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style books only carry values for the token definition of a theme the organisation supplies (Classic, Prism or its own); Liferay ships no Dutch or other government house styles, and its public-sector design system work (https://liferay.atlassian.net/browse/LPD-82026) covers USWDS, GOV.UK and a Spanish system as a reference site, not a selectable catalogue",
+ "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",
@@ -605,10 +854,10 @@
"name": "Start from a ready-made template or example theme and adapt it instead of starting blank.",
"thematiq": "yes",
"nextcloud-theming": "no",
- "m365-branding": "partial",
+ "m365-branding": "yes",
"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",
@@ -617,11 +866,11 @@
},
"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",
- "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",
- "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)"
+ "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://support.microsoft.com/en-us/sharepoint/sites-in-sharepoint/change-the-look-of-your-sharepoint-site: 'You can choose one of the default SharePoint themes and customize it as needed'; https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview: default themes 'might be useful starting points for creating custom themes'",
+ "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 brings a \"Styles from X Theme\" style book with all default values, and a new style book starts from the theme token definition; https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-css-client-extension starts from a sample workspace client extension",
+ "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",
@@ -635,7 +884,7 @@
"name": "Download additional themes from a marketplace or gallery maintained by the vendor or community.",
"thematiq": "no",
"nextcloud-theming": "no",
- "m365-branding": "unknown",
+ "m365-branding": "no",
"opendesk": "no",
"liferay-dxp": "yes",
"tokens-studio": "no",
@@ -647,11 +896,11 @@
},
"reachedOn": "nothing reaches it",
"evidence": {
- "nextcloud-theming": "outside the product: no theme marketplace or gallery in the theming 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",
- "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)"
+ "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": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview: themes are the fixed set of 'eight light themes and two dark themes' plus custom themes the tenant defines itself; https://learn.microsoft.com/en-us/sharepoint/site-theme: custom themes are created in the tenant's brand center. No vendor or community theme gallery is part of the documented flow",
+ "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://learn.liferay.com/w/dxp/getting-started/changing-your-sites-appearance : \"There are many themes available on the Liferay Marketplace\"; https://marketplace.liferay.com/p/materialized-theme is one such listing",
+ "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",
@@ -677,11 +926,11 @@
},
"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",
- "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)"
+ "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": "no: outside the product. https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style books only carry values for the token definition of a theme the organisation supplies (Classic, Prism or its own); Liferay ships no Dutch or other government house styles, and its public-sector design system work (https://liferay.atlassian.net/browse/LPD-82026) covers USWDS, GOV.UK and a Spanish system as a reference site, not a selectable catalogue",
+ "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",
@@ -707,11 +956,11 @@
},
"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)",
- "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)"
+ "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/design-libraries/sharing-design-resources-across-sites : a design library style book change reaches every page using it on connected sites, but connecting a site \"does not change how any page looks ... there is no bulk apply\", and administrative pages cannot use style books (https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-css-client-extension)",
+ "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",
@@ -725,9 +974,9 @@
"thematiq": "yes",
"nextcloud-theming": "no",
"m365-branding": "unknown",
- "opendesk": "no",
+ "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",
@@ -736,11 +985,11 @@
},
"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",
- "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",
- "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)"
+ "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: unknown: https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview applies a chosen theme 'instantly' to the page as a preview and https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding ends with a Review list of settings, but neither shows a before/after list of changed colour values",
+ "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: unknown: https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance offers a live preview on pages, templates and fragments, and the editor has a History menu with undo (https://liferay.atlassian.net/browse/LPD-101913), but no list of which values will change before publishing or switching is described",
+ "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",
@@ -753,10 +1002,10 @@
"name": "Tick which individual values to take over when switching house style, and keep the rest.",
"thematiq": "yes",
"nextcloud-theming": "no",
- "m365-branding": "unknown",
+ "m365-branding": "partial",
"opendesk": "partial",
- "liferay-dxp": "unknown",
- "tokens-studio": "no",
+ "liferay-dxp": "no",
+ "tokens-studio": "partial",
"built": {
"state": "built",
"evidence": "js/admin.js:3032 ' Administration > Theming, apply dialog: per-row checkboxes",
"evidence": {
- "nextcloud-theming": "not applicable: there is no house style to selectively apply fields 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",
- "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)"
+ "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": "https://support.microsoft.com/en-us/sharepoint/sites-in-sharepoint/site-branding: 'Copy from another site' lets a site owner 'select the branding assets you wish to copy' (theme and/or font package separately); https://support.microsoft.com/en-us/sharepoint/sites-in-sharepoint/change-the-look-of-your-sharepoint-site classic Change the look picks colours, layout and fonts separately. Selection is per asset, not per individual value",
+ "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": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : a page selects a whole style book (Page Design Options, Style Book tab, Publish), and with theme scoped style books changing the theme resets the page to the new theme default style book; there is no per-token pick when switching",
+ "tokens-studio": "https://documentation-v2.tokens.studio/tokens/importing-tokens.html: Studio import shows a preview of tokens to be created or updated, lets you \"Select or deselect individual tokens\" and choose skip, overwrite or rename for existing ones; the plugin file import replaces whole sets (tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/app/components/PresetProvider/FilePreset.tsx:52-57); no live theme is switched"
},
"provider": "thematiq",
"providerHow": "read-from-code",
@@ -795,11 +1044,11 @@
},
"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)",
- "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)"
+ "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 : while creating or editing a style book you preview \"the way it affects the look of various components of your site\" in the editor, repainting as tokens change",
+ "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; switching a theme in ThemeSelector.tsx:33-40 restyles the Figma document only"
},
"provider": "thematiq",
"providerHow": "read-from-code",
@@ -812,7 +1061,7 @@
"name": "Preview the house style on a mock of the real app shell (header, navigation, buttons) inside the settings page.",
"thematiq": "yes",
"nextcloud-theming": "partial",
- "m365-branding": "unknown",
+ "m365-branding": "yes",
"opendesk": "no",
"liferay-dxp": "yes",
"tokens-studio": "no",
@@ -824,11 +1073,11 @@
},
"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",
- "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",
- "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)"
+ "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": "https://learn.microsoft.com/en-us/sharepoint/site-theme: when creating a theme, 'Name your theme and preview in SharePoint experiences', with a contrast checker 'built into the UI Elements preview'; https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding-themes-apps: Layout and Styling tabs each have a Preview button (live preview of the sign-in page); https://learn.microsoft.com/en-us/microsoftteams/meeting-themes: Preview shows logo, images and colours on desktop",
+ "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 editor previews real pages, page templates, master page templates, display page templates and fragments, so header, navigation and buttons are shown as tokens change",
+ "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",
@@ -843,7 +1092,7 @@
"nextcloud-theming": "no",
"m365-branding": "partial",
"opendesk": "no",
- "liferay-dxp": "unknown",
+ "liferay-dxp": "partial",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -853,11 +1102,11 @@
},
"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",
- "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",
- "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)"
+ "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-themes-apps: Layout and Styling tabs have a Preview button that 'only shows the Sign in page', but for Entra ID workforce tenants branding themes are in PREVIEW; https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding: the default branding flow ends with a settings Review 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/); 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": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : the style book editor previews any page, template or fragment; the Sign In widget lives on an ordinary site page (https://learn.liferay.com/w/dxp/security-and-administration/security/configuring-sign-in), so that page can be previewed, but there is no dedicated login preview",
+ "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",
@@ -883,11 +1132,11 @@
},
"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",
- "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)"
+ "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/design-libraries/sharing-design-resources-across-sites : \"The editor saves your work as a draft as you go ... sites use the style book values only after you publish it\", so the editor sees the draft alone, but it is an editor preview, not a browsing session with a trial theme",
+ "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",
@@ -900,9 +1149,9 @@
"name": "See a banner reminding you that you are looking at a trial theme, with a way back.",
"thematiq": "yes",
"nextcloud-theming": "no",
- "m365-branding": "unknown",
+ "m365-branding": "partial",
"opendesk": "no",
- "liferay-dxp": "unknown",
+ "liferay-dxp": "no",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -912,11 +1161,11 @@
},
"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",
- "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",
- "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)"
+ "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": "https://support.microsoft.com/en-us/sharepoint/sites-in-sharepoint/change-the-look-of-your-sharepoint-site: classic Change the look 'Try it out' shows a full-sized preview where 'the changes are not yet visible to other site users', with 'Start over' and 'Yes, keep it / No, not quite there'; the modern theme picker only offers Save or Cancel",
+ "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/design-libraries/sharing-design-resources-across-sites : the only unpublished state is the style book editor draft (\"The editor saves your work as a draft ... Connected sites use the style book values only after you publish it\"); there is no per-session trial mode to show a banner for",
+ "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",
@@ -941,11 +1190,11 @@
},
"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",
- "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)"
+ "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 : the editor draft goes live for every page using the style book with one Publish action",
+ "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",
@@ -957,10 +1206,10 @@
"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",
+ "liferay-dxp": "partial",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -970,11 +1219,11 @@
},
"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",
- "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)"
+ "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 : unpublished edits stay in the editor draft; the editor History menu offers Undo All back to the published values (https://liferay.atlassian.net/browse/LPD-101913, an open bug in that command), and colours have Reset to Initial Value; no single discard-draft action is documented",
+ "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",
@@ -987,9 +1236,9 @@
"name": "Look at buttons, inputs, note cards, list items and the login card in each of their states while you edit the tokens they read.",
"thematiq": "yes",
"nextcloud-theming": "no",
- "m365-branding": "unknown",
+ "m365-branding": "partial",
"opendesk": "no",
- "liferay-dxp": "partial",
+ "liferay-dxp": "yes",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -999,11 +1248,11 @@
},
"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",
- "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",
- "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)"
+ "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": "https://learn.microsoft.com/en-us/sharepoint/site-theme: the theme creation experience has a 'UI Elements preview' with a built-in colour contrast checker; the docs do not say it shows inputs, cards or the login card in each interaction state",
+ "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 Guide Sample widget \"contains many different UI elements\" to test style book options, and previewing a fragment collection shows each fragment with an instance of each configuration option while you edit tokens",
+ "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",
@@ -1016,10 +1265,10 @@
"name": "Make the brand primary colour drive every component, or deliberately let components keep their own colours.",
"thematiq": "yes",
"nextcloud-theming": "partial",
- "m365-branding": "unknown",
- "opendesk": "unknown",
+ "m365-branding": "partial",
+ "opendesk": "partial",
"liferay-dxp": "partial",
- "tokens-studio": "unknown",
+ "tokens-studio": "no",
"built": {
"state": "built",
"evidence": "templates/settings/admin.php:426-430 checkbox id='nldesign-primary-drives-components'; js/admin.js:2069-2073 change handler -> 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",
@@ -1028,11 +1277,11 @@
},
"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",
- "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",
- "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"
+ "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": "https://support.microsoft.com/en-us/sharepoint/sites-in-sharepoint/change-the-look-of-your-sharepoint-site: 'The button color is based on the site theme accent color and can't be changed independently of the site theme', so the primary drives components, with no documented choice to let components keep their own colours",
+ "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/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : from 2026.Q2 button tokens propagate to Clay components via mapped CSS variables (--primary, --secondary and variants), and https://liferay.atlassian.net/browse/LPD-64186 maps style book tokens to Clay; fragment-level colour overrides remain possible, but there is no explicit lock switch",
+ "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",
@@ -1057,11 +1306,11 @@
},
"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",
- "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)"
+ "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 : style books are created and edited under Site Menu, Design, Style Books and published from the editor, a runtime admin action with no deployment",
+ "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",
@@ -1086,11 +1335,11 @@
},
"reachedOn": "nothing reaches it",
"evidence": {
- "nextcloud-theming": "no scheduling mechanism for theme/value changes exists in the app or its background Jobs",
- "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",
- "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)"
+ "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: unknown: 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, https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview and https://learn.microsoft.com/en-us/microsoftteams/meeting-themes describe only immediate apply on Save/Create/Apply; no scheduling is mentioned, but no doc states its absence",
+ "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://learn.liferay.com/w/dxp/sites/publishing-tools/publications/making-and-publishing-changes : publications can be scheduled for a date and time and content pages are supported, so a page style book selection can go live on schedule; style books themselves are not in the compatibility list (https://learn.liferay.com/w/dxp/sites/publishing-tools/publications) and Publications is in maintenance mode as of 2026.Q1",
+ "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",
@@ -1106,7 +1355,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",
@@ -1115,11 +1364,11 @@
},
"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",
- "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)"
+ "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/publications/reverting-changes : published publications can be reverted from the History tab, covering page changes; style book entities are not in the Publications compatibility list and the editor offers only an undo History (https://liferay.atlassian.net/browse/LPD-101913), no version history of a style book",
+ "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",
@@ -1132,7 +1381,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,17 +1394,49 @@
},
"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",
- "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)"
+ "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 : \"Styles from X Theme\" uses the theme token definition \"with all of the default values\" and can be selected to return to stock values",
+ "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",
"feature": "theming-sync",
"featureConfidence": "high"
},
+ {
+ "id": "app-simple-theme-switch",
+ "area": "apply",
+ "name": "Let people who are not token specialists switch between brand themes without learning the token editor.",
+ "thematiq": "yes",
+ "nextcloud-theming": "partial",
+ "m365-branding": "yes",
+ "opendesk": "no",
+ "liferay-dxp": "yes",
+ "tokens-studio": "partial",
+ "built": {
+ "state": "built",
+ "evidence": "templates/settings/admin.php:66-76 renders one 'Design token set' dropdown of every shipped and uploaded set; choosing one POSTs to settings#setTokenSet (appinfo/routes.php:31) and applies the whole house style, so switching brands needs no token editing (the token editor is a separate section)",
+ "owner": "ConductionNL/thematiq",
+ "origin": "competitor"
+ },
+ "reachedOn": "Settings > Administration > Theming, 'Design token set' dropdown (templates/settings/admin.php:68)",
+ "evidence": {
+ "nextcloud-theming": "nextcloud/server@v35.0.1 apps/theming/src/components/AdminSectionThemingAdvanced.vue:72-81: the admin sets the one instance brand through a plain colour picker and file fields, no token editor; apps/theming/lib/Service/ThemesService.php:41-49 registers only seven appearance themes (default, light, dark, high contrast, dark high contrast, dyslexia font, reduced motion) that users pick as cards in apps/theming/src/views/UserTheming.vue:15-30; there are no multiple brand themes to switch between",
+ "m365-branding": "https://support.microsoft.com/en-us/sharepoint/sites-in-sharepoint/change-the-look-of-your-sharepoint-site : a site owner selects Change the look, Theme, sees a preview and can \"choose a company theme with approved branding for your company\"; https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme : admins keep a default plus up to four group themes filled in through General, Logos and Colors tabs, no token editing",
+ "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:13-29: one brand (texts, colours) is set in deployment values only; docs/theming.md:18-22: logos and favicons change by editing files under helmfile/files/theme and redeploying. grep -rn -i theme over helmfile and docs found no second brand theme and no runtime switcher for anyone",
+ "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : a page editor switches house style by picking a style book in Page Design Options, Style Book tab, then Publish, without touching tokens; https://learn.liferay.com/w/dxp/sites/site-appearance/design-libraries/sharing-design-resources-across-sites : a site administrator can select a library style book but cannot edit it without a library role",
+ "tokens-studio": "tokens-studio/figma-plugin@2.12.1 packages/tokens-studio-for-figma/src/app/components/ThemeSelector/ThemeSelector.tsx:27-40,131-135: a theme dropdown exists inside the full plugin and is pro-gated; no simplified switcher (board post, 8 votes, status Requests)"
+ },
+ "provider": "thematiq",
+ "providerHow": "read-from-code",
+ "feature": "token-sets",
+ "featureConfidence": "high",
+ "origin": "featureRequest",
+ "originUrl": "https://feedback.tokens.studio/p/theme-switcher-for-non-ds-designers",
+ "note": "brand managers in a municipality are not token engineers"
+ },
{
"id": "aut-upload-css",
"area": "authoring",
@@ -1163,7 +1444,7 @@
"thematiq": "yes",
"nextcloud-theming": "no",
"m365-branding": "partial",
- "opendesk": "no",
+ "opendesk": "partial",
"liferay-dxp": "partial",
"tokens-studio": "no",
"built": {
@@ -1174,11 +1455,11 @@
},
"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",
- "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"
+ "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 and can carry a token definition, but it is built and deployed with Gradle; a client extension created in the UI is page-scoped only, and https://learn.liferay.com/w/dxp/site-building/creating-pages/page-settings/configuring-page-sets has a CSS box for pasted CSS",
+ "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",
@@ -1191,7 +1472,7 @@
"name": "Upload your own house style as a W3C Design Tokens (DTCG) JSON file.",
"thematiq": "yes",
"nextcloud-theming": "no",
- "m365-branding": "unknown",
+ "m365-branding": "no",
"opendesk": "no",
"liferay-dxp": "no",
"tokens-studio": "yes",
@@ -1203,11 +1484,11 @@
},
"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/",
- "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",
- "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"
+ "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": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-json-schema: SharePoint themes use Microsoft's own schema (isInverted, palette of named slots, secondaryColors, displayMode) with hex string values; https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding: the sign-in page takes a CSS file; https://learn.microsoft.com/en-us/graph/api/resources/organizationalbranding?view=graph-rest-1.0: branding is a fixed property set. No W3C DTCG format is accepted anywhere",
+ "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/frontend-token-definitions : the token definition uses Liferay own frontendTokenCategories schema; no W3C DTCG import is documented, and a DTCG-style import tool was only a feasibility spike (https://liferay.atlassian.net/browse/LPD-86582)",
+ "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",
@@ -1220,10 +1501,10 @@
"name": "Get told on upload which tokens are missing or invalid before the set is accepted.",
"thematiq": "yes",
"nextcloud-theming": "no",
- "m365-branding": "unknown",
+ "m365-branding": "partial",
"opendesk": "no",
- "liferay-dxp": "unknown",
- "tokens-studio": "partial",
+ "liferay-dxp": "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",
@@ -1232,11 +1513,11 @@
},
"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)",
- "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",
- "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"
+ "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": "https://learn.microsoft.com/en-us/entra/fundamentals/reference-company-branding-css-template: Microsoft offers a 'tenant branding inspector tool' that takes the exported branding JSON and 'lists each locale and the deprecated properties that it uses'; https://learn.microsoft.com/en-us/sharepoint/brand-fonts: font uploads checked for type and size. For SharePoint composed looks, 'no message is recorded' when a file is malformed",
+ "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": "https://liferay.atlassian.net/browse/LPD-101991 : only token key names are validated, as a post-save warning, not the values; https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/exporting-and-importing-style-books : importing a ZIP errors on a name clash unless Overwrite is ticked, and import warns about an undeployed theme (https://liferay.atlassian.net/browse/LPD-101750); no list of missing or invalid tokens before acceptance",
+ "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",
@@ -1261,11 +1542,11 @@
},
"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",
- "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"
+ "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://liferay.atlassian.net/browse/LPD-101991 : style book token values were printed raw into an inline style block, a stored XSS fixed only on 2026-09-03, and https://learn.liferay.com/w/dxp/site-building/creating-pages/page-settings/configuring-page-sets accepts raw CSS and JavaScript; no documented refusal of unsafe content with reasons",
+ "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",
@@ -1279,7 +1560,7 @@
"name": "List, activate and delete the house styles you uploaded.",
"thematiq": "yes",
"nextcloud-theming": "no",
- "m365-branding": "partial",
+ "m365-branding": "yes",
"opendesk": "no",
"liferay-dxp": "yes",
"tokens-studio": "yes",
@@ -1291,11 +1572,11 @@
},
"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",
- "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",
- "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"
+ "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-powershell: Add-SPOTheme, Get-SPOTheme and Remove-SPOTheme create, retrieve and remove custom themes, which appear in Change the look for activation; https://support.microsoft.com/en-us/sharepoint/sites-in-sharepoint/site-branding: site themes can be renamed or deleted; https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding-themes-apps: up to five branding themes listed on a Themes tab",
+ "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 listed under Site Menu, Design, Style Books, one is marked default per theme via the Actions menu, and bulk deletion of design assets exists in design libraries (https://liferay.atlassian.net/browse/LPD-101862)",
+ "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",
@@ -1320,11 +1601,11 @@
},
"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",
- "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"
+ "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 : Actions, Export downloads a ZIP (style-book.json and frontend-token-values.json) \"to share them between Liferay installations\"",
+ "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",
@@ -1349,11 +1630,11 @@
},
"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",
- "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"
+ "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": "no: outside the product. https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style books only carry values for the token definition of a theme the organisation supplies (Classic, Prism or its own); Liferay ships no Dutch or other government house styles, and its public-sector design system work (https://liferay.atlassian.net/browse/LPD-82026) covers USWDS, GOV.UK and a Spanish system as a reference site, not a selectable catalogue",
+ "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",
@@ -1378,11 +1659,11 @@
},
"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",
- "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"
+ "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 : colour fields open a colour picker, accept hex codes (8-digit with alpha from 2025.Q4) or a Value from Stylebook link",
+ "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",
@@ -1407,11 +1688,11 @@
},
"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",
- "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"
+ "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 editor groups tokens by category (colour system, spacing, general, layout, typography, buttons) in a drop-down, with collapsible token sets (https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/developer-guide/frontend-token-definitions)",
+ "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",
@@ -1425,9 +1706,9 @@
"thematiq": "yes",
"nextcloud-theming": "yes",
"m365-branding": "partial",
- "opendesk": "no",
- "liferay-dxp": "unknown",
- "tokens-studio": "unknown",
+ "opendesk": "partial",
+ "liferay-dxp": "yes",
+ "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",
@@ -1436,11 +1717,11 @@
},
"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",
- "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"
+ "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": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : \"Click the Reset to Initial Value button on the right side to reset the color back to the default value defined in the theme\"; on a page it resets to the style book value",
+ "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",
@@ -1465,11 +1746,11 @@
},
"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",
- "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"
+ "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 editor preview shows token edits on pages and fragments before publishing",
+ "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",
@@ -1483,7 +1764,7 @@
"thematiq": "yes",
"nextcloud-theming": "yes",
"m365-branding": "yes",
- "opendesk": "no",
+ "opendesk": "yes",
"liferay-dxp": "yes",
"tokens-studio": "yes",
"built": {
@@ -1494,11 +1775,11 @@
},
"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",
- "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"
+ "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 values are stored and applied to every page using the style book, for all visitors",
+ "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",
@@ -1512,7 +1793,7 @@
"thematiq": "yes",
"nextcloud-theming": "partial",
"m365-branding": "partial",
- "opendesk": "no",
+ "opendesk": "yes",
"liferay-dxp": "yes",
"tokens-studio": "yes",
"built": {
@@ -1523,11 +1804,11 @@
},
"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",
- "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"
+ "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 ZIP or LAR and import on another installation, with an Overwrite Existing Style Books option",
+ "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",
@@ -1539,9 +1820,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,11 +1833,11 @@
},
"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",
- "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"
+ "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/site-building/creating-pages/page-settings/configuring-page-sets : \"You can enter custom CSS in the CSS section for modifying your theme\"; https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-css-client-extension adds client extension CSS on top of the theme",
+ "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",
@@ -1571,7 +1852,7 @@
"nextcloud-theming": "no",
"m365-branding": "partial",
"opendesk": "no",
- "liferay-dxp": "unknown",
+ "liferay-dxp": "no",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -1581,11 +1862,11 @@
},
"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",
- "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"
+ "opendesk": "opendesk@v1.18.2 values-nubus.yaml.gotmpl:403: CSS is passed verbatim, no server check",
+ "liferay-dxp": "https://learn.liferay.com/w/dxp/site-building/creating-pages/page-settings/configuring-page-sets : the page set Look and Feel CSS box and the Advanced JavaScript box take raw code executed on every page; https://liferay.atlassian.net/browse/LPD-101991 (fixed 2026-09-03) shows style book token values were written unescaped into an inline style block, a stored XSS, so values were not checked server side",
+ "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",
@@ -1600,7 +1881,7 @@
"thematiq": "yes",
"nextcloud-theming": "no",
"m365-branding": "no",
- "opendesk": "unknown",
+ "opendesk": "partial",
"liferay-dxp": "yes",
"tokens-studio": "partial",
"built": {
@@ -1611,11 +1892,11 @@
},
"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",
- "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"
+ "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 Buttons category customises background, foreground and border colours per button type, separate from the colour system",
+ "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",
@@ -1630,7 +1911,7 @@
"nextcloud-theming": "yes",
"m365-branding": "no",
"opendesk": "no",
- "liferay-dxp": "unknown",
+ "liferay-dxp": "no",
"tokens-studio": "partial",
"built": {
"state": "built",
@@ -1640,11 +1921,11 @@
},
"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",
- "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"
+ "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": "https://learn.liferay.com/w/dxp/personalization/experiences/using-dark-mode : dark mode restyles the administration interface only and site pages keep their theme; https://liferay.atlassian.net/browse/LPD-104225 : customers decide how to implement dark mode on sites, and style book dark values are entered by hand as light-dark() pairs (https://liferay.atlassian.net/browse/LPD-93514); nothing derives a dark variant",
+ "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",
@@ -1657,9 +1938,9 @@
"name": "Define tokens as references to other tokens so one change flows through the semantic layer.",
"thematiq": "partial",
"nextcloud-theming": "no",
- "m365-branding": "unknown",
- "opendesk": "no",
- "liferay-dxp": "yes",
+ "m365-branding": "no",
+ "opendesk": "partial",
+ "liferay-dxp": "partial",
"tokens-studio": "yes",
"built": {
"state": "built",
@@ -1669,11 +1950,11 @@
},
"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",
- "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",
- "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"
+ "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": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-json-schema: 'The colors in the palette element are specified as 6-digit or 3-digit hexadecimal RGB string values', so a slot cannot reference another slot; Entra and M365 theme colours are single hex fields",
+ "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 : a colour field can be linked to another style book token via Value from Stylebook, but https://liferay.atlassian.net/browse/LPD-107116 (open) shows linking stores a one-time copy that the published site renders, so later changes to the target do not flow through",
+ "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",
@@ -1687,7 +1968,7 @@
"name": "Compute token values from other tokens with expressions (for example spacing times two).",
"thematiq": "no",
"nextcloud-theming": "no",
- "m365-branding": "unknown",
+ "m365-branding": "partial",
"opendesk": "no",
"liferay-dxp": "no",
"tokens-studio": "yes",
@@ -1698,11 +1979,11 @@
},
"reachedOn": "nothing reaches it",
"evidence": {
- "nextcloud-theming": "outside the product: no expression-based token computation exists",
- "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)",
- "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.)"
+ "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": "https://learn.microsoft.com/en-us/sharepoint/dev/design/themes-colors: 'After you select a color, light and dark shades of the accent color are created based on HSB values'; https://learn.microsoft.com/en-us/sharepoint/site-theme: 'the text color is automatically set to black or white based on the contrast ratio'. Derived values exist, but no user-written expressions",
+ "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/frontend-token-definitions : tokens carry a literal defaultValue of type Integer, Number, String or Boolean mapped to a CSS variable; no expression support",
+ "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",
@@ -1727,11 +2008,11 @@
},
"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",
- "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\""
+ "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 holds several style books per theme and each page picks one; https://learn.liferay.com/w/dxp/sites/site-appearance/design-libraries keeps shared style books in one place for many sites",
+ "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",
@@ -1747,7 +2028,7 @@
"nextcloud-theming": "no",
"m365-branding": "unknown",
"opendesk": "no",
- "liferay-dxp": "unknown",
+ "liferay-dxp": "no",
"tokens-studio": "yes",
"built": {
"state": "none",
@@ -1756,11 +2037,11 @@
},
"reachedOn": "nothing reaches it",
"evidence": {
- "nextcloud-theming": "outside the product: no Figma integration exists",
- "m365-branding": "not checked: no Figma synchronisation found in Entra/SharePoint/M365 branding docs",
- "opendesk": "not applicable: openDesk is not a design-authoring tool",
- "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)"
+ "nextcloud-theming": "nextcloud/server@v35.0.1 no Figma or design-tool integration in apps/theming/lib or src",
+ "m365-branding": "not checked: unknown: https://learn.microsoft.com/en-us/sharepoint/brand-center-overview, https://learn.microsoft.com/en-us/sharepoint/site-theme and https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-json-schema describe brand center, theme designer and Theme Generator only; Figma is not mentioned, but no doc states its absence",
+ "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": "https://liferay.atlassian.net/browse/LPD-86582 (closed 2026-05-29) : a spike to find \"what level of manual effort is currently required\" and whether design token import \"can realistically be automated\"; https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/developer-guide/frontend-token-definitions : tokens come from a JSON file in the theme, with no Figma connection documented",
+ "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",
@@ -1773,8 +2054,8 @@
"name": "Store and version the token source in a Git repository with pull requests.",
"thematiq": "no",
"nextcloud-theming": "no",
- "m365-branding": "unknown",
- "opendesk": "no",
+ "m365-branding": "partial",
+ "opendesk": "yes",
"liferay-dxp": "partial",
"tokens-studio": "yes",
"built": {
@@ -1784,11 +2065,11 @@
},
"reachedOn": "nothing reaches it",
"evidence": {
- "nextcloud-theming": "outside the product: theming values live in the appconfig database, 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)",
- "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)"
+ "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": "https://microsoft365dsc.com/resources/sharepoint/SPOTheme/: the Microsoft-led open-source Microsoft365DSC declares SharePoint themes (SPOTheme with Palette) as configuration that can be versioned and deployed, with an Azure DevOps integration guide; Entra sign-in branding and the M365 org theme are not among its resources, and there is no built-in git flow",
+ "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 : the theme CSS and its frontend-token-definition.json live in a Liferay Workspace project that can be versioned in Git; style book values live in the database and leave only as ZIP or LAR exports (https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/exporting-and-importing-style-books)",
+ "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",
@@ -1801,9 +2082,9 @@
"name": "Export the same tokens to several platforms (CSS, iOS, Android, JSON).",
"thematiq": "no",
"nextcloud-theming": "no",
- "m365-branding": "unknown",
+ "m365-branding": "partial",
"opendesk": "no",
- "liferay-dxp": "unknown",
+ "liferay-dxp": "no",
"tokens-studio": "yes",
"built": {
"state": "none",
@@ -1812,11 +2093,11 @@
},
"reachedOn": "nothing reaches it",
"evidence": {
- "nextcloud-theming": "outside the product: no multi-platform token export (CSS/iOS/Android/JSON) exists",
- "m365-branding": "not checked: no cross-platform (iOS/Android) token export found for M365/SharePoint branding",
- "opendesk": "not applicable",
- "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"
+ "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": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-json-schema: the Theme Generator 'automatically generates the JSON, SASS, and PowerShell definitions for your custom theme'; no iOS or Android output 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/); values are rendered only into the bundled components",
+ "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/developer-guide/frontend-token-definitions : every token maps to a CSS variable (mapping type cssVariable); https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/exporting-and-importing-style-books : export is style-book.json plus frontend-token-values.json keyed by CSS variable name; no iOS, Android or other target",
+ "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",
@@ -1840,11 +2121,11 @@
},
"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",
- "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"
+ "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 : the style book editor can be used to set only a few colours, and https://learn.liferay.com/w/dxp/site-building/creating-pages/page-settings/configuring-page-sets sets the logo separately, but there is no single simple form with just a primary colour, background and logo",
+ "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",
@@ -1857,9 +2138,9 @@
"name": "Use the house style's open fonts (Fira Sans, Inter) served from the instance itself, with no external font service.",
"thematiq": "yes",
"nextcloud-theming": "no",
- "m365-branding": "unknown",
- "opendesk": "unknown",
- "liferay-dxp": "unknown",
+ "m365-branding": "partial",
+ "opendesk": "no",
+ "liferay-dxp": "partial",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -1869,11 +2150,11 @@
},
"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",
- "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",
- "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"
+ "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": "https://learn.microsoft.com/en-us/sharepoint/brand-fonts: any licensed font (including open ones) can be uploaded as a brand font; https://learn.microsoft.com/en-us/sharepoint/brand-center-overview: 'The brand center app requires the use of Public CDN', so fonts are served from Microsoft's CDN rather than bundled and self-served",
+ "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": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/developer-guide/frontend-token-definitions : font tokens are family names from a list the theme defines (e.g. sans-serif, Courier New); https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-css-client-extension : a theme CSS client extension can ship static files through its assemble block, so a developer can serve Fira Sans or Inter from the instance, but none are bundled",
+ "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",
@@ -1885,9 +2166,9 @@
"area": "typography",
"name": "Keep typography working on an air-gapped instance under the default content security policy.",
"thematiq": "yes",
- "nextcloud-theming": "partial",
- "m365-branding": "unknown",
- "opendesk": "unknown",
+ "nextcloud-theming": "yes",
+ "m365-branding": "no",
+ "opendesk": "no",
"liferay-dxp": "unknown",
"tokens-studio": "no",
"built": {
@@ -1898,11 +2179,11 @@
},
"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",
- "m365-branding": "not checked: Microsoft 365/SharePoint/Entra ID are cloud SaaS services; an air-gapped instance is outside the product",
- "opendesk": "not checked",
- "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)"
+ "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": "outside the product: https://learn.microsoft.com/en-us/sharepoint/brand-center-overview: 'The brand center app requires the use of Public CDN' and brand fonts depend on it; Entra ID, Microsoft 365 and SharePoint Online are Microsoft-hosted cloud services with no air-gapped deployment",
+ "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: unknown: https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-css-client-extension serves theme assets as static resources from the instance and https://learn.liferay.com/w/dxp/development/configuration-as-code/instance-settings-yaml-configuration-reference lists a site-scoped ContentSecurityPolicyConfiguration, but no page states that the default typography works offline under the default CSP",
+ "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",
@@ -1916,7 +2197,7 @@
"thematiq": "yes",
"nextcloud-theming": "no",
"m365-branding": "yes",
- "opendesk": "unknown",
+ "opendesk": "no",
"liferay-dxp": "no",
"tokens-studio": "no",
"built": {
@@ -1927,11 +2208,11 @@
},
"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",
- "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)"
+ "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/frontend-token-definitions : font tokens are family names or a validValues select; there is no font file upload in style books (a developer can bundle files in a client extension)",
+ "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",
@@ -1945,8 +2226,8 @@
"thematiq": "yes",
"nextcloud-theming": "no",
"m365-branding": "yes",
- "opendesk": "unknown",
- "liferay-dxp": "unknown",
+ "opendesk": "no",
+ "liferay-dxp": "no",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -1956,11 +2237,11 @@
},
"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",
- "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"
+ "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": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/developer-guide/frontend-token-definitions : font tokens are typed string values (a family name or a select of validValues); style books have no font file upload, so there is nothing to validate",
+ "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",
@@ -1974,8 +2255,8 @@
"thematiq": "yes",
"nextcloud-theming": "no",
"m365-branding": "yes",
- "opendesk": "unknown",
- "liferay-dxp": "unknown",
+ "opendesk": "no",
+ "liferay-dxp": "no",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -1985,11 +2266,11 @@
},
"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",
- "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"
+ "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:135-145: fonts are URLs in values, no font store",
+ "liferay-dxp": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/developer-guide/frontend-token-definitions : style book fonts are referenced by family name in tokens, not uploaded files, so there is no uploaded-font list to manage",
+ "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",
@@ -2003,8 +2284,8 @@
"thematiq": "yes",
"nextcloud-theming": "no",
"m365-branding": "partial",
- "opendesk": "unknown",
- "liferay-dxp": "no",
+ "opendesk": "no",
+ "liferay-dxp": "partial",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -2014,11 +2295,11 @@
},
"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",
- "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)"
+ "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": "https://learn.liferay.com/w/dxp/security-and-administration/security/configuring-sign-in : the Sign In widget sits on an ordinary site page (default /web/guest/home), styled by the site theme and style book, so a font loaded by a theme CSS client extension (https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-css-client-extension) reaches it; no no-code font upload exists",
+ "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",
@@ -2043,11 +2324,11 @@
},
"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",
- "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"
+ "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": "no: outside the product. https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style books only carry values for the token definition of a theme the organisation supplies (Classic, Prism or its own); Liferay ships no Dutch or other government house styles, and its public-sector design system work (https://liferay.atlassian.net/browse/LPD-82026) covers USWDS, GOV.UK and a Spanish system as a reference site, not a selectable catalogue",
+ "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",
@@ -2061,7 +2342,7 @@
"thematiq": "yes",
"nextcloud-theming": "no",
"m365-branding": "partial",
- "opendesk": "unknown",
+ "opendesk": "partial",
"liferay-dxp": "yes",
"tokens-studio": "yes",
"built": {
@@ -2072,11 +2353,11 @@
},
"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",
- "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)"
+ "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 Typography category defines fonts and header sizes per style book; https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/developer-guide/frontend-token-definitions shows font-family tokens",
+ "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",
@@ -2091,7 +2372,7 @@
"thematiq": "no",
"nextcloud-theming": "yes",
"m365-branding": "unknown",
- "opendesk": "unknown",
+ "opendesk": "partial",
"liferay-dxp": "no",
"tokens-studio": "no",
"built": {
@@ -2101,11 +2382,11 @@
},
"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)",
- "m365-branding": "not checked: no dyslexia-friendly font toggle found for end users in M365/SharePoint branding docs",
- "opendesk": "not checked",
- "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)"
+ "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: unknown: https://support.microsoft.com/en-us/office/foundations-experiences/change-the-look-and-feel-of-microsoft-365 and https://support.microsoft.com/en-us/accessibility/windows/use-color-and-contrast-for-accessibility-in-microsoft-365 describe per-user Office themes and contrast settings but no per-user dyslexia-friendly font switch; not settled from 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 five accessibility menu settings are underlined links, increased text spacing, expanded text, reduced motion and focus ring animation, with no dyslexia-friendly font",
+ "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",
@@ -2119,8 +2400,8 @@
"thematiq": "partial",
"nextcloud-theming": "no",
"m365-branding": "yes",
- "opendesk": "unknown",
- "liferay-dxp": "unknown",
+ "opendesk": "no",
+ "liferay-dxp": "partial",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -2130,11 +2411,11 @@
},
"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",
- "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)"
+ "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": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/developer-guide/frontend-token-definitions : a theme token definition can restrict a font token to a validValues list rendered as a select, and https://learn.liferay.com/w/dxp/sites/site-appearance/design-libraries shares style books across sites, giving site owners a curated set of font names; no font file library",
+ "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",
@@ -2148,9 +2429,9 @@
"name": "Set the workspace logo to your organisation's logo when you pick its house style.",
"thematiq": "yes",
"nextcloud-theming": "no",
- "m365-branding": "unknown",
+ "m365-branding": "partial",
"opendesk": "yes",
- "liferay-dxp": "unknown",
+ "liferay-dxp": "no",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -2160,11 +2441,11 @@
},
"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)",
- "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",
- "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"
+ "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": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme: each org or group theme bundles its own logos (Logos tab) with its colours, so assigning a theme carries the logo; https://learn.microsoft.com/en-us/sharepoint/site-theme: SharePoint site themes carry colours only, logos are set separately in Change the look > Header",
+ "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": "https://learn.liferay.com/w/dxp/site-building/creating-pages/page-settings/configuring-page-sets : the site logo is set in the page set Look and Feel Logo section, separate from the style book; https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/exporting-and-importing-style-books : a style book export holds only token values, so choosing a style book never changes the logo",
+ "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",
@@ -2180,7 +2461,7 @@
"nextcloud-theming": "no",
"m365-branding": "partial",
"opendesk": "yes",
- "liferay-dxp": "unknown",
+ "liferay-dxp": "partial",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -2190,11 +2471,11 @@
},
"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",
- "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"
+ "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": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : the General category Body Background token colours the background of all pages, including the site page holding the Sign In widget (https://learn.liferay.com/w/dxp/security-and-administration/security/configuring-sign-in); a background image is not a style book token",
+ "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",
@@ -2210,7 +2491,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.",
@@ -2219,11 +2500,11 @@
},
"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",
- "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"
+ "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://learn.liferay.com/w/dxp/site-building/creating-pages/page-settings/configuring-page-sets : Look and Feel, Logo, Change button to use your own logo; https://learn.liferay.com/w/dxp/security-and-administration/administration/configuring-liferay/virtual-instances/instance-configuration sets the instance default logo and whether site admins may set their own",
+ "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",
@@ -2239,8 +2520,8 @@
"nextcloud-theming": "yes",
"m365-branding": "yes",
"opendesk": "partial",
- "liferay-dxp": "unknown",
- "tokens-studio": "no",
+ "liferay-dxp": "partial",
+ "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.",
@@ -2249,11 +2530,11 @@
},
"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",
- "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"
+ "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": "https://learn.liferay.com/w/dxp/site-building/creating-pages/page-settings/configuring-page-sets : the page set Look and Feel CSS box accepts custom CSS, and https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-css-client-extension shows a header background image shipped in a client extension; there is no dedicated login background upload field",
+ "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",
@@ -2279,11 +2560,11 @@
},
"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\"",
- "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"
+ "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/getting-started/changing-your-sites-appearance : Site Builder, Pages, Configuration, Favicon, \"Select or upload an image\"; https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-favicon-client-extension offers a client extension alternative",
+ "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",
@@ -2309,11 +2590,11 @@
},
"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",
- "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)"
+ "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": "no: outside the product. https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style books only carry values for the token definition of a theme the organisation supplies (Classic, Prism or its own); Liferay ships no Dutch or other government house styles, and its public-sector design system work (https://liferay.atlassian.net/browse/LPD-82026) covers USWDS, GOV.UK and a Spanish system as a reference site, not a selectable catalogue",
+ "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",
@@ -2339,11 +2620,11 @@
},
"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",
- "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)"
+ "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": "no: outside the product. https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style books only carry values for the token definition of a theme the organisation supplies (Classic, Prism or its own); Liferay ships no Dutch or other government house styles, and its public-sector design system work (https://liferay.atlassian.net/browse/LPD-82026) covers USWDS, GOV.UK and a Spanish system as a reference site, not a selectable catalogue",
+ "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",
@@ -2358,7 +2639,7 @@
"nextcloud-theming": "no",
"m365-branding": "unknown",
"opendesk": "no",
- "liferay-dxp": "unknown",
+ "liferay-dxp": "partial",
"tokens-studio": "no",
"built": {
"state": "building",
@@ -2368,11 +2649,11 @@
},
"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",
- "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",
- "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)"
+ "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: unknown: https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme, https://learn.microsoft.com/en-us/sharepoint/site-theme and https://learn.microsoft.com/en-us/microsoftteams/meeting-themes cover logos, colours, images and branded reactions; no switchable icon set is described, but no doc states its absence",
+ "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": "https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-spritemap-client-extension : a theme sprite map client extension (2023.Q4+) overrides the default Clay sprite map used for icons on a page, so a developer can ship another icon set with the theme; it is not tied to a style book choice",
+ "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",
@@ -2398,11 +2679,11 @@
},
"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",
- "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",
- "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)"
+ "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: unknown: follows from ast-icon-pack; no icon pack concept found in https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme or https://learn.microsoft.com/en-us/sharepoint/site-theme",
+ "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: unknown: https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-spritemap-client-extension documents deploying and selecting a sprite map client extension but not whether the active sprite map is shown on a settings page",
+ "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",
@@ -2414,9 +2695,9 @@
"area": "assets",
"name": "Keep icons legible against the brand colours, with contrast fixes for dark and light backgrounds.",
"thematiq": "partial",
- "nextcloud-theming": "partial",
- "m365-branding": "unknown",
- "opendesk": "unknown",
+ "nextcloud-theming": "yes",
+ "m365-branding": "partial",
+ "opendesk": "no",
"liferay-dxp": "unknown",
"tokens-studio": "no",
"built": {
@@ -2427,11 +2708,11 @@
},
"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",
- "m365-branding": "not checked: no automated icon-contrast-fix feature found in the branding docs read",
- "opendesk": "not checked",
- "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"
+ "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": "https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme: warning 'Doesn't meet minimum color contrast ratio of 4.5:1' for the text and icon colour against the nav bar; https://learn.microsoft.com/en-us/microsoftteams/meeting-themes: logos 'must comply with Microsoft accessibility contrast ratios'. A warning and an upload rule, not an automatic icon fix for dark and light",
+ "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: unknown: https://liferay.atlassian.net/browse/LPD-85949 (closed) adds an AAA high contrast mode for the dark administration theme, but no documentation describes icon contrast fixes against brand colours on site pages",
+ "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",
@@ -2447,7 +2728,7 @@
"nextcloud-theming": "no",
"m365-branding": "yes",
"opendesk": "no",
- "liferay-dxp": "unknown",
+ "liferay-dxp": "no",
"tokens-studio": "no",
"built": {
"state": "building",
@@ -2457,11 +2738,11 @@
},
"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",
- "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"
+ "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": "https://learn.liferay.com/w/dxp/site-building/creating-pages/page-settings/configuring-page-sets : the Logo section takes one logo (Change button, Show Site Name toggle) and https://learn.liferay.com/w/dxp/security-and-administration/administration/configuring-liferay/virtual-instances/instance-configuration Appearance sets one default logo; https://learn.liferay.com/w/dxp/personalization/experiences/using-dark-mode dark mode applies only to the administration interface",
+ "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",
@@ -2477,8 +2758,8 @@
"nextcloud-theming": "no",
"m365-branding": "yes",
"opendesk": "no",
- "liferay-dxp": "unknown",
- "tokens-studio": "no",
+ "liferay-dxp": "partial",
+ "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",
@@ -2487,11 +2768,11 @@
},
"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",
- "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)"
+ "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": "https://learn.liferay.com/w/dxp/sites/site-appearance/design-libraries : a design library is a type of asset library shared by connected sites, and asset libraries hold shared Documents and Media; a picker for library media in design libraries is still In Ideation (https://liferay.atlassian.net/browse/LPD-95652)",
+ "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",
@@ -2517,11 +2798,11 @@
},
"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",
- "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)"
+ "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.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style books apply to site pages and fragments; https://learn.liferay.com/w/dxp/development/customizing-liferays-look-and-feel/using-a-theme-css-client-extension : administrative pages need a control panel scoped theme CSS client extension, where \"style books cannot be used\", so the admin UI is branded only with developer CSS",
+ "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 +2814,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,11 +2827,11 @@
},
"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",
- "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"
+ "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": "no: outside the product. https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/developer-guide/frontend-token-definitions : style book tokens are CSS variables inside Liferay DXP pages; Liferay does not host Nextcloud or 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",
@@ -2566,7 +2847,7 @@
"nextcloud-theming": "yes",
"m365-branding": "yes",
"opendesk": "yes",
- "liferay-dxp": "partial",
+ "liferay-dxp": "yes",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -2576,11 +2857,11 @@
},
"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",
- "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)"
+ "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": "https://learn.liferay.com/w/dxp/security-and-administration/security/configuring-sign-in : the Sign In widget appears on the default home page (/web/guest/home) or /c/portal/login, a site page themed by the site theme and style book like any other, visible before sign-in",
+ "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",
@@ -2605,11 +2886,11 @@
},
"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",
- "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)"
+ "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/creating-pages/defining-headers-and-footers/master-page-templates : master page templates define headers and footers from fragments, styled by the style book tokens (https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance)",
+ "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",
@@ -2621,7 +2902,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,11 +2915,11 @@
},
"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",
- "m365-branding": "not checked: no text-labels-vs-icons-only app-menu setting found in the branding docs read",
- "opendesk": "not checked",
- "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)"
+ "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: unknown: https://support.microsoft.com/en-us/sharepoint/sites-in-sharepoint/change-the-look-of-your-sharepoint-site documents header layouts and navigation orientation (horizontal/vertical, megamenu, cascading) but not an icons-only versus labels setting for the app menu",
+ "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: unknown: no Liferay page read on 2026-09-26 describes an icon-only versus labelled application menu setting",
+ "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",
@@ -2650,10 +2931,10 @@
"area": "surfaces",
"name": "Hide the Nextcloud slogan on the login page.",
"thematiq": "yes",
- "nextcloud-theming": "partial",
+ "nextcloud-theming": "yes",
"m365-branding": "no",
- "opendesk": "unknown",
- "liferay-dxp": "unknown",
+ "opendesk": "partial",
+ "liferay-dxp": "partial",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -2663,11 +2944,11 @@
},
"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",
- "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)"
+ "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": "https://learn.liferay.com/w/dxp/site-building/creating-pages/page-settings/configuring-page-sets : Liferay shows no product slogan on the sign-in page; the nearest control is the Show Site Name toggle next to the logo, which can be switched off for new sites",
+ "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",
@@ -2679,9 +2960,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,11 +2973,11 @@
},
"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",
- "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)"
+ "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/site-building/creating-pages/page-settings/configuring-page-sets : page set Look and Feel applies theme and logo to all pages, including public pages that guests see",
+ "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",
@@ -2709,9 +2990,9 @@
"name": "Send notification emails in the house style.",
"thematiq": "yes",
"nextcloud-theming": "yes",
- "m365-branding": "unknown",
+ "m365-branding": "partial",
"opendesk": "partial",
- "liferay-dxp": "unknown",
+ "liferay-dxp": "partial",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -2721,11 +3002,11 @@
},
"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",
- "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",
- "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)"
+ "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": "https://learn.microsoft.com/en-us/microsoftteams/meeting-themes: the meeting theme logo appears on the meeting Invite ('Logos added to the meeting theme override any logos you upload to meeting invitations') and event organisers 'configure the event's branding for registration and emails'; Microsoft 365 notification emails in general are not themed in https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme",
+ "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": "https://learn.liferay.com/w/dxp/security-and-administration/administration/configuring-liferay/virtual-instances/email-settings : instance-level notification templates (account created, password reset, verification) are editable with template variables, so a brand can be written into each template by hand; they do not follow the style book",
+ "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",
@@ -2739,9 +3020,9 @@
"name": "Add a compliance footer (organisation name, address, legal text) to every email.",
"thematiq": "yes",
"nextcloud-theming": "partial",
- "m365-branding": "unknown",
+ "m365-branding": "yes",
"opendesk": "no",
- "liferay-dxp": "unknown",
+ "liferay-dxp": "partial",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -2751,11 +3032,11 @@
},
"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",
- "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",
- "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)"
+ "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": "https://learn.microsoft.com/en-us/exchange/security-and-compliance/mail-flow-rules/disclaimers-signatures-footers-or-headers: an Exchange Online mail flow rule adds 'an HTML or plain text legal disclaimer, disclosure statement, signature, or other information to the top or bottom of email messages that enter or leave your organization', optionally to all messages",
+ "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": "https://learn.liferay.com/w/dxp/security-and-administration/administration/configuring-liferay/virtual-instances/email-settings : each notification template can be edited to include organisation details, and https://learn.liferay.com/w/dxp/security-and-administration/administration/configuring-liferay/virtual-instances/instance-configuration Contact Information holds addresses; there is no single footer applied to every email",
+ "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 +3050,7 @@
"thematiq": "yes",
"nextcloud-theming": "no",
"m365-branding": "no",
- "opendesk": "unknown",
+ "opendesk": "no",
"liferay-dxp": "no",
"tokens-studio": "no",
"built": {
@@ -2780,11 +3061,11 @@
},
"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",
- "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)"
+ "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": "no: outside the product. https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style books only carry values for the token definition of a theme the organisation supplies (Classic, Prism or its own); Liferay ships no Dutch or other government house styles, and its public-sector design system work (https://liferay.atlassian.net/browse/LPD-82026) covers USWDS, GOV.UK and a Spanish system as a reference site, not a selectable catalogue",
+ "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 +3079,7 @@
"thematiq": "yes",
"nextcloud-theming": "yes",
"m365-branding": "no",
- "opendesk": "unknown",
+ "opendesk": "no",
"liferay-dxp": "no",
"tokens-studio": "no",
"built": {
@@ -2809,11 +3090,11 @@
},
"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",
- "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)"
+ "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": "no: outside the product. https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/developer-guide/frontend-token-definitions : tokens map to Liferay theme CSS variables; there are no Nextcloud colour variables in Liferay DXP",
+ "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",
@@ -2838,11 +3119,11 @@
},
"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",
- "m365-branding": "not checked: no per-house-style audit of error/status message contrast was found",
- "opendesk": "not checked",
- "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"
+ "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: unknown: https://learn.microsoft.com/en-us/sharepoint/site-theme sets text to black or white by contrast and has an accessibility checker, and https://learn.microsoft.com/en-us/entra/fundamentals/reference-company-branding-css-template exposes .ext-error, but no doc covers error and status message contrast per theme",
+ "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: unknown: https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance warns that changing alert colours \"may not affect the color of incoming alerts\"; high contrast status colours are planned in https://liferay.atlassian.net/browse/LPD-90810 (Ready for Development); nothing states that status messages stay readable in every style book",
+ "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",
@@ -2855,10 +3136,10 @@
"area": "surfaces",
"name": "Colour success, warning and error states from the house style's status tokens.",
"thematiq": "yes",
- "nextcloud-theming": "yes",
- "m365-branding": "no",
+ "nextcloud-theming": "partial",
+ "m365-branding": "partial",
"opendesk": "partial",
- "liferay-dxp": "yes",
+ "liferay-dxp": "partial",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -2868,11 +3149,11 @@
},
"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",
- "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",
- "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)"
+ "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/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-json-schema: the SharePoint palette has an 'error' slot (plus disabled slots) but no success or warning slots; https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme has no status colours",
+ "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 Color System covers success and warning colours, but \"changing the colors for alert-related elements ... may not affect the color of incoming alerts\" unless the theme defines its own tokens",
+ "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,9 +3167,9 @@
"name": "Carry the brand into the desktop and mobile sync clients.",
"thematiq": "partial",
"nextcloud-theming": "partial",
- "m365-branding": "no",
+ "m365-branding": "partial",
"opendesk": "unknown",
- "liferay-dxp": "unknown",
+ "liferay-dxp": "no",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -2898,11 +3179,11 @@
},
"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",
- "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",
- "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)"
+ "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/microsoftteams/meeting-themes: meeting themes show in the Teams desktop client ('Images aren't visible on mobile clients'); https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding: the square logo represents the organisation 'in Windows'; https://learn.microsoft.com/en-us/deployedge/microsoft-edge-organization-branding: Entra logos brand the Edge for Business profile and taskbar icon. No sync client branding",
+ "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": "no: outside the product. https://learn.liferay.com/w/dxp/security-and-administration/administration/configuring-liferay/virtual-instances : Liferay DXP is a web platform hosting portals; it has no desktop or mobile file sync client to brand",
+ "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",
@@ -2915,10 +3196,10 @@
"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",
- "liferay-dxp": "unknown",
+ "opendesk": "partial",
+ "liferay-dxp": "no",
"tokens-studio": "no",
"built": {
"state": "none",
@@ -2928,11 +3209,11 @@
},
"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)",
- "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)"
+ "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": "no: outside the product. https://learn.liferay.com/w/dxp/security-and-administration/administration/configuring-liferay/virtual-instances : Liferay DXP hosts web portals and has no bundled office editor or chat suite to carry a brand into",
+ "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",
@@ -2945,7 +3226,7 @@
"name": "Serve the branded workspace on the organisation's own domain name.",
"thematiq": "yes",
"nextcloud-theming": "no",
- "m365-branding": "unknown",
+ "m365-branding": "no",
"opendesk": "yes",
"liferay-dxp": "yes",
"tokens-studio": "no",
@@ -2957,11 +3238,11 @@
},
"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",
- "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",
- "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)"
+ "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": "https://learn.microsoft.com/en-us/sharepoint/change-your-sharepoint-domain-name: 'Even if you later add a custom domain, all your SharePoint and OneDrive URLs use the original onmicrosoft.com domain'; only the contoso part of contoso.sharepoint.com can be renamed",
+ "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\"; from 2026.Q1 multiple domains need an Enterprise subscription",
+ "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",
@@ -2975,9 +3256,9 @@
"name": "Add legal links (privacy statement, imprint, accessibility statement) to the footer and login page.",
"thematiq": "yes",
"nextcloud-theming": "yes",
- "m365-branding": "yes",
- "opendesk": "yes",
- "liferay-dxp": "unknown",
+ "m365-branding": "partial",
+ "opendesk": "partial",
+ "liferay-dxp": "yes",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -2987,11 +3268,11 @@
},
"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)",
- "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",
- "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)"
+ "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 takes your own display text and URL for Privacy & Cookies and Terms of Use, but 'Custom URLs are displayed as text and aren't clickable' and 'External URLs aren't supported in the sign-in experience'",
+ "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": "https://learn.liferay.com/w/dxp/sites/creating-pages/defining-headers-and-footers/master-page-templates : master page templates define headers and footers from fragments \"without deploying a plugin\", so legal links are added in the UI; the sign-in page is an ordinary site page (https://learn.liferay.com/w/dxp/security-and-administration/security/configuring-sign-in) and uses the same master page",
+ "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",
@@ -3017,11 +3298,11 @@
},
"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\")",
- "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)"
+ "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/site-building/site-settings/site-settings-ui-reference : site name is set and localised, and the SEO setting controls whether instance and site names appear in the HTML title; https://learn.liferay.com/w/dxp/security-and-administration/administration/configuring-liferay/virtual-instances/instance-configuration sets the virtual host; the Liferay product name in the admin UI is not rebranded",
+ "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",
@@ -3035,9 +3316,9 @@
"name": "Exclude individual apps from the house style and leave them stock while you test.",
"thematiq": "yes",
"nextcloud-theming": "no",
- "m365-branding": "unknown",
- "opendesk": "no",
- "liferay-dxp": "unknown",
+ "m365-branding": "partial",
+ "opendesk": "partial",
+ "liferay-dxp": "partial",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -3047,11 +3328,11 @@
},
"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",
- "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",
- "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)"
+ "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": "https://learn.microsoft.com/en-us/powershell/module/microsoft.online.sharepoint.powershell/set-sposite: '-DisableSiteBranding ... site branding is disabled on the site collection'; https://learn.microsoft.com/en-us/microsoftteams/meeting-themes: organisers can turn off the meeting theme per meeting; https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview: a classic site can opt out of modern theming. The M365 suite header theme has no per-app exclusion",
+ "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": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : a page can use its own theme and style book (\"you can provide a unique theme and style book per page\"), so single pages can stay stock; individual widgets on a page cannot be excluded",
+ "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",
@@ -3066,7 +3347,7 @@
"nextcloud-theming": "no",
"m365-branding": "yes",
"opendesk": "no",
- "liferay-dxp": "unknown",
+ "liferay-dxp": "no",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -3076,11 +3357,11 @@
},
"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",
- "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)"
+ "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": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : a page uses its own style book, else its master page style book, else the theme default; the resolution order has no user or user group dimension",
+ "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",
@@ -3096,7 +3377,7 @@
"nextcloud-theming": "no",
"m365-branding": "partial",
"opendesk": "no",
- "liferay-dxp": "unknown",
+ "liferay-dxp": "no",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -3106,11 +3387,11 @@
},
"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",
- "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",
- "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)"
+ "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": "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": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : style book resolution is page, master page, theme default, with no per-group theming, so there is nothing to prioritise",
+ "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",
@@ -3125,7 +3406,7 @@
"nextcloud-theming": "no",
"m365-branding": "yes",
"opendesk": "no",
- "liferay-dxp": "unknown",
+ "liferay-dxp": "no",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -3135,11 +3416,11 @@
},
"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",
- "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)"
+ "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": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : there is no per-group theming (resolution is page, master page, theme default), so the case does not arise",
+ "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",
@@ -3152,8 +3433,8 @@
"name": "Let each user choose a theme (light, dark, high contrast) for themselves.",
"thematiq": "yes",
"nextcloud-theming": "yes",
- "m365-branding": "partial",
- "opendesk": "unknown",
+ "m365-branding": "yes",
+ "opendesk": "partial",
"liferay-dxp": "partial",
"tokens-studio": "no",
"built": {
@@ -3164,11 +3445,11 @@
},
"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",
- "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)",
- "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)"
+ "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://support.microsoft.com/en-us/office/foundations-experiences/change-the-look-and-feel-of-microsoft-365: each user picks an Office Theme (White, Dark Gray, Black, Colorful, Use system setting); https://support.microsoft.com/en-us/accessibility/windows/use-color-and-contrast-for-accessibility-in-microsoft-365: users can switch Teams to a High contrast theme",
+ "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 : users toggle five display settings, and https://learn.liferay.com/w/dxp/personalization/experiences/using-dark-mode lets each signed-in user pick light or dark for the administration interface (beta); site pages offer no user theme choice",
+ "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",
@@ -3182,9 +3463,9 @@
"name": "Follow the user's operating system preference for dark mode and high contrast.",
"thematiq": "yes",
"nextcloud-theming": "yes",
- "m365-branding": "unknown",
- "opendesk": "unknown",
- "liferay-dxp": "unknown",
+ "m365-branding": "yes",
+ "opendesk": "partial",
+ "liferay-dxp": "partial",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -3194,11 +3475,11 @@
},
"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",
- "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",
- "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)"
+ "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": "https://support.microsoft.com/en-us/office/foundations-experiences/change-the-look-and-feel-of-microsoft-365: 'The default theme setting for Microsoft 365 is Use system setting, which matches your selected look in Windows' and on Mac apps match Light or Dark; https://support.microsoft.com/en-us/accessibility/windows/use-color-and-contrast-for-accessibility-in-microsoft-365: 'Using a high contrast theme changes the contrast on Windows and most apps'",
+ "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": "https://liferay.atlassian.net/browse/LPD-89804 (closed, completed) : the dark administration theme activates from prefers-color-scheme when the user has no saved choice; https://learn.liferay.com/w/dxp/personalization/experiences/using-dark-mode : dark mode is a 2026.Q3 beta for the administration interface only, and site pages keep their theme",
+ "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",
@@ -3224,11 +3505,11 @@
},
"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",
- "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)"
+ "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 : themes and style books are chosen per site and even per page",
+ "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",
@@ -3254,11 +3535,11 @@
},
"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",
- "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)"
+ "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 each have their own domain and configuration; https://learn.liferay.com/w/dxp/site-building/site-settings/site-settings-ui-reference also maps virtual hosts per site",
+ "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",
@@ -3271,8 +3552,8 @@
"name": "Run fully separate brands for separate tenants on one installation.",
"thematiq": "no",
"nextcloud-theming": "no",
- "m365-branding": "unknown",
- "opendesk": "unknown",
+ "m365-branding": "partial",
+ "opendesk": "no",
"liferay-dxp": "yes",
"tokens-studio": "no",
"built": {
@@ -3283,11 +3564,11 @@
},
"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",
- "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",
- "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)"
+ "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": "https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding: branding is per tenant ('applies across all sign-ins to your tenant'), so separate tenants carry fully separate brands; within one tenant https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme allows five themes and https://learn.microsoft.com/en-us/microsoftteams/meeting-themes per-business-unit policies, which are not isolated tenants",
+ "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 : \"Each virtual instance has completely separate data and configurations\"",
+ "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",
@@ -3302,7 +3583,7 @@
"nextcloud-theming": "partial",
"m365-branding": "no",
"opendesk": "no",
- "liferay-dxp": "unknown",
+ "liferay-dxp": "partial",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -3312,11 +3593,11 @@
},
"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",
- "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)"
+ "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": "https://liferay.atlassian.net/browse/LPD-74829 (2026.Q3.0) : GET /asset-library/{erc}/style-books lists a design library style books; https://liferay.atlassian.net/browse/LPD-101910 shows /o/headless-admin-site/v1.0/sites/{erc}/style-books; both are permission-checked headless APIs, and read access without admin rights is not documented",
+ "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",
@@ -3331,7 +3612,7 @@
"nextcloud-theming": "no",
"m365-branding": "yes",
"opendesk": "no",
- "liferay-dxp": "unknown",
+ "liferay-dxp": "no",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -3341,11 +3622,11 @@
},
"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",
- "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"
+ "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": "https://learn.liferay.com/w/dxp/sites/site-appearance/style-books/using-a-style-book-to-standardize-site-appearance : the editor documents colour picker, hex, token linking and reset, with no contrast warning; the only contrast check is the post-publish Page Audit on public pages (https://learn.liferay.com/w/dxp/content-management-system/page-performance-and-accessibility/analyze-seo-and-accessibility-on-pages)",
+ "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",
@@ -3359,9 +3640,9 @@
"name": "Check any pair of colours against WCAG contrast from within an app.",
"thematiq": "yes",
"nextcloud-theming": "no",
- "m365-branding": "unknown",
- "opendesk": "unknown",
- "liferay-dxp": "unknown",
+ "m365-branding": "partial",
+ "opendesk": "no",
+ "liferay-dxp": "partial",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -3371,11 +3652,11 @@
},
"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",
- "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",
- "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"
+ "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": "https://learn.microsoft.com/en-us/sharepoint/site-theme: 'we provide a color contrast checker built into the UI Elements preview' while creating a theme; no general tool to check an arbitrary colour pair from within an app",
+ "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": "https://learn.liferay.com/w/dxp/content-management-system/page-performance-and-accessibility/analyze-seo-and-accessibility-on-pages : the Page Audit tool reports \"Low contrast ratio\" failing elements for a whole public page through Google PageSpeed Insights; there is no check for an arbitrary colour pair",
+ "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",
@@ -3388,9 +3669,9 @@
"area": "accessibility",
"name": "Rely on every shipped house style having been checked automatically for WCAG contrast.",
"thematiq": "yes",
- "nextcloud-theming": "partial",
- "m365-branding": "unknown",
- "opendesk": "unknown",
+ "nextcloud-theming": "yes",
+ "m365-branding": "partial",
+ "opendesk": "partial",
"liferay-dxp": "unknown",
"tokens-studio": "no",
"built": {
@@ -3401,11 +3682,11 @@
},
"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",
- "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",
- "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"
+ "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": "https://learn.microsoft.com/en-us/sharepoint/site-theme: the default themes 'have been designed for accessibility' and 'Our built-in accessibility checker ensures universal design'; https://learn.microsoft.com/en-us/sharepoint/dev/design/themes-colors: 'The SharePoint-provided colors guarantee accessible and legible experiences'. No published record of an automated 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: unknown: https://liferay.atlassian.net/browse/LPD-57922 notes that high contrast palettes reach AAA while \"standard palettes often fall short (AA only in many cases)\", and programmatic contrast verification is only planned in https://liferay.atlassian.net/browse/LPD-90810; no statement that every shipped theme is checked",
+ "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",
@@ -3420,7 +3701,7 @@
"thematiq": "yes",
"nextcloud-theming": "no",
"m365-branding": "unknown",
- "opendesk": "unknown",
+ "opendesk": "partial",
"liferay-dxp": "no",
"tokens-studio": "no",
"built": {
@@ -3431,11 +3712,11 @@
},
"reachedOn": "https://thematiq.conduction.nl/reference/contrast-report (published docs site)",
"evidence": {
- "nextcloud-theming": "outside the product: no published per-theme contrast report exists",
- "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",
- "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"
+ "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: unknown: https://learn.microsoft.com/en-us/sharepoint/site-theme and https://learn.microsoft.com/en-us/sharepoint/dev/design/themes-colors claim the default themes are accessible, but no per-theme contrast report was found",
+ "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 contrast report per theme or style book",
+ "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",
@@ -3449,7 +3730,7 @@
"thematiq": "partial",
"nextcloud-theming": "no",
"m365-branding": "unknown",
- "opendesk": "unknown",
+ "opendesk": "no",
"liferay-dxp": "partial",
"tokens-studio": "no",
"built": {
@@ -3460,11 +3741,11 @@
},
"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",
- "m365-branding": "not checked: no exportable contrast-evidence report of the tenant's active branding configuration was found",
- "opendesk": "not checked",
- "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"
+ "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: unknown: no exportable contrast report of the tenant's active branding in https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-theme, https://learn.microsoft.com/en-us/sharepoint/site-theme or https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding; not stated absent",
+ "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://learn.liferay.com/w/dxp/content-management-system/page-performance-and-accessibility/analyze-seo-and-accessibility-on-pages : the Page Audit tool reports low contrast failing elements per public page, and https://www.liferay.com/documents/d/guest/vpat2-5rev_int_february2025_liferay_dxp_sites_experience is a product VPAT; neither is a downloadable contrast report of the active configuration",
+ "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",
@@ -3490,11 +3771,11 @@
},
"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",
- "m365-branding": "not checked: no CLI for generating a contrast compliance report was found",
- "opendesk": "not documented",
- "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"
+ "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: unknown: https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-powershell lists Add/Get/Remove-SPOTheme and hide-default cmdlets only; no contrast report cmdlet found, not stated absent",
+ "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: unknown: no Liferay page read describes a command line contrast report; the Page Audit tool (https://learn.liferay.com/w/dxp/content-management-system/page-performance-and-accessibility/analyze-seo-and-accessibility-on-pages) runs from the page UI through PageSpeed Insights",
+ "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 +3788,7 @@
"name": "Apply a maximum-contrast (WCAG AAA) theme instance-wide.",
"thematiq": "yes",
"nextcloud-theming": "yes",
- "m365-branding": "unknown",
+ "m365-branding": "partial",
"opendesk": "partial",
"liferay-dxp": "partial",
"tokens-studio": "no",
@@ -3519,11 +3800,11 @@
},
"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()",
- "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",
- "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"
+ "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": "https://support.microsoft.com/en-us/accessibility/windows/use-color-and-contrast-for-accessibility-in-microsoft-365: users can pick a Windows contrast theme or a Teams 'High contrast' theme for themselves; no admin setting to apply a maximum-contrast theme to everyone is documented in https://learn.microsoft.com/en-us/microsoft-365/admin/setup/customize-your-organization-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://liferay.atlassian.net/browse/LPD-85949 (closed, completed) : a high contrast dark mode where all text and interactive elements meet AAA, part of the beta dark administration theme (https://learn.liferay.com/w/dxp/personalization/experiences/using-dark-mode); site-wide high contrast token set still Ready for Development (https://liferay.atlassian.net/browse/LPD-90810)",
+ "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",
@@ -3536,9 +3817,9 @@
"name": "Cooperate with the operating system's forced colours and high-contrast modes.",
"thematiq": "partial",
"nextcloud-theming": "partial",
- "m365-branding": "unknown",
+ "m365-branding": "yes",
"opendesk": "unknown",
- "liferay-dxp": "unknown",
+ "liferay-dxp": "no",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -3548,11 +3829,11 @@
},
"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",
- "m365-branding": "not checked: no forced-colors/OS high-contrast-mode cooperation documented for M365/SharePoint branding",
- "opendesk": "not checked",
- "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"
+ "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": "https://support.microsoft.com/en-us/accessibility/windows/use-color-and-contrast-for-accessibility-in-microsoft-365: 'Using a high contrast theme changes the contrast on Windows and most apps. For example, in Word the document colors are adjusted'; https://learn.microsoft.com/en-us/microsoftteams/meeting-themes: 'For users with high contrast settings enabled, branding doesn't apply. They continue to see the default Teams meeting experience'",
+ "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": "https://liferay.atlassian.net/browse/LPD-90810 : \"forced-colors: active values are defined separately\" is part of a story still Ready for Development; https://learn.liferay.com/w/dxp/personalization/experiences/using-the-accessibility-menu lists five settings and none concerns forced colours",
+ "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",
@@ -3567,9 +3848,9 @@
"thematiq": "yes",
"nextcloud-theming": "yes",
"m365-branding": "partial",
- "opendesk": "unknown",
- "liferay-dxp": "unknown",
- "tokens-studio": "no",
+ "opendesk": "partial",
+ "liferay-dxp": "partial",
+ "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",
@@ -3578,11 +3859,11 @@
},
"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)",
- "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"
+ "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": "https://learn.liferay.com/w/dxp/personalization/experiences/using-dark-mode : dark mode (2026.Q3+, beta) restyles the administration interface only and \"site pages keep their own theme\"; style books can hold dark values (https://liferay.atlassian.net/browse/LPD-85951, light-dark() support in https://liferay.atlassian.net/browse/LPD-93514) but site dark mode is left to the customer (https://liferay.atlassian.net/browse/LPD-104225)",
+ "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",
@@ -3596,9 +3877,9 @@
"name": "Regenerate the dark variants from the command line after changing sets.",
"thematiq": "yes",
"nextcloud-theming": "no",
- "m365-branding": "unknown",
+ "m365-branding": "no",
"opendesk": "no",
- "liferay-dxp": "unknown",
+ "liferay-dxp": "no",
"tokens-studio": "no",
"built": {
"state": "built",
@@ -3608,11 +3889,11 @@
},
"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/",
- "m365-branding": "not checked: no CLI to regenerate dark variants was found",
- "opendesk": "not documented",
- "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"
+ "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": "https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-json-schema: 'displayMode ... Currently, only light mode is supported' and secondaryColors 'dark' is empty; dark variants are never generated (see aut-dark-variant-auto), so there is nothing to regenerate",
+ "opendesk": "opendesk@v1.18.2 helmfile/environments/default/theme.yaml.gotmpl:27-47 no dark variants to generate",
+ "liferay-dxp": "https://liferay.atlassian.net/browse/LPD-104225 : style book dark values are hand-entered (light-dark() or a separate style book) and nothing generates them, so there is nothing to regenerate from a command line",
+ "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",
@@ -3624,8 +3905,8 @@
"area": "accessibility",
"name": "Show visible focus indicators in the house style's colours.",
"thematiq": "yes",
- "nextcloud-theming": "no",
- "m365-branding": "unknown",
+ "nextcloud-theming": "partial",
+ "m365-branding": "partial",
"opendesk": "unknown",
"liferay-dxp": "partial",
"tokens-studio": "no",
@@ -3637,11 +3918,11 @@
},
"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",
- "m365-branding": "not checked: no focus-indicator styling tied to house-style colours was found in M365/SharePoint branding docs",
- "opendesk": "not checked",
- "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"
+ "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": "https://learn.microsoft.com/en-us/entra/fundamentals/reference-company-branding-css-template: custom CSS selectors include a:focus, .ext-button.ext-primary:focus and .ext-input.ext-text-box:focus for the sign-in page, but custom CSS is closed to tenants created after 5 January 2026 and being retired",
+ "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 : 2026.Q3+ Focus Ring Animation enlarges and contracts the focus ring as focus moves; its colour in the house style is not documented",
+ "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",
@@ -3657,7 +3938,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",
@@ -3666,11 +3947,11 @@
},
"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)'",
- "m365-branding": "not checked: no reduced-motion preference support documented for M365/SharePoint org branding surfaces",
- "opendesk": "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"
+ "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: unknown: https://support.microsoft.com/en-us/accessibility/windows/use-color-and-contrast-for-accessibility-in-microsoft-365 covers colour and contrast only; no reduced-motion behaviour documented for branded 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\"",
+ "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",
@@ -3687,7 +3968,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