feat(ocis): dezky whitelabel theme for the files web UI
ci / typecheck (map[dir:apps/booking name:booking]) (push) Has been cancelled
ci / typecheck (map[dir:apps/portal name:portal]) (push) Has been cancelled
ci / typecheck (map[dir:apps/website name:website]) (push) Has been cancelled
ci / typecheck (map[dir:services/platform-api name:platform-api]) (push) Has been cancelled
ci / test (push) Has been cancelled

Skin OCIS web in the dezky brand so users don't see ownCloud/Infinite Scale.

- Custom theme.json (WEB_UI_THEME_PATH + WEB_ASSET_THEMES_PATH): dezky name,
  slogan, logos (light wordmark for the dark top bar, dark wordmark for the
  light login, favicon), and the full dezky palette — carbon chrome, signal
  yellow as a sparing accent, paper/bone surfaces, dezky semantic colours
- Pin the light theme as default (single variant) so OS-dark / auto-system
  always resolves to it
- Override only index.html via WEB_ASSET_CORE_PATH (OCIS falls back to the
  embedded core per-file): hide the ".versions" footer ("Infinite Scale … /
  ownCloud Web UI …") and set the pre-hydration <title>/theme-color to dezky

Apache-2.0 lets us drop the ownCloud marks without trademark fees. NOTE:
index.html pins the built bundle hashes — refresh it after an OCIS image bump.
This commit is contained in:
Ronni Baslund
2026-06-07 12:14:04 +02:00
parent b7f10eb092
commit 8a9fd36f33
6 changed files with 411 additions and 0 deletions
@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100">
<rect x="8" y="8" width="84" height="84" rx="22" fill="#0A0A0A"/>
<path d="M 34.425 52 a 14 14 0 1 0 28 0 a 14 14 0 1 0 -28 0 Z M 41.925 52 a 6.5 6.5 0 1 0 13 0 a 6.5 6.5 0 1 0 -13 0 Z" fill-rule="evenodd" fill="#D4FF3A"/>
<path d="M 58.575 29.5 a 3.5 3.5 0 0 1 7 0 L 65.575 66 L 58.575 66 Z" fill="#D4FF3A"/>
<circle cx="74" cy="26" r="4" fill="#D4FF3A"/>
</svg>

After

Width:  |  Height:  |  Size: 460 B

@@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="300" height="80" viewBox="0 0 300 80" role="img" aria-label="dezky">
<!-- dezky mark (signal yellow) -->
<g transform="translate(2,12) scale(0.56)" fill="#D4FF3A">
<path d="M 34.425 52 a 14 14 0 1 0 28 0 a 14 14 0 1 0 -28 0 Z M 41.925 52 a 6.5 6.5 0 1 0 13 0 a 6.5 6.5 0 1 0 -13 0 Z" fill-rule="evenodd"/>
<path d="M 58.575 29.5 a 3.5 3.5 0 0 1 7 0 L 65.575 66 L 58.575 66 Z"/>
<circle cx="74" cy="26" r="4"/>
</g>
<!-- wordmark, dark (for the light login page) -->
<text x="66" y="53" font-family="'Inter Tight','Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif" font-size="44" font-weight="600" letter-spacing="-2" fill="#0A0A0A">dezky</text>
</svg>

After

Width:  |  Height:  |  Size: 734 B

@@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="300" height="80" viewBox="0 0 300 80" role="img" aria-label="dezky">
<!-- dezky mark (signal yellow) -->
<g transform="translate(2,12) scale(0.56)" fill="#D4FF3A">
<path d="M 34.425 52 a 14 14 0 1 0 28 0 a 14 14 0 1 0 -28 0 Z M 41.925 52 a 6.5 6.5 0 1 0 13 0 a 6.5 6.5 0 1 0 -13 0 Z" fill-rule="evenodd"/>
<path d="M 58.575 29.5 a 3.5 3.5 0 0 1 7 0 L 65.575 66 L 58.575 66 Z"/>
<circle cx="74" cy="26" r="4"/>
</g>
<!-- wordmark, light (for the dark top bar) -->
<text x="66" y="53" font-family="'Inter Tight','Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif" font-size="44" font-weight="600" letter-spacing="-2" fill="#F4F3EE">dezky</text>
</svg>

After

Width:  |  Height:  |  Size: 731 B

@@ -0,0 +1,186 @@
{
"clients": {
"android": {},
"desktop": {},
"ios": {},
"web": {
"defaults": {
"appBanner": {},
"designTokens": {
"breakpoints": {
"large-default": "",
"large-max": "",
"medium-default": "",
"medium-max": "",
"small-default": "",
"small-max": "",
"xlarge": "",
"xsmall-max": ""
},
"fontSizes": {
"default": "",
"large": "",
"medium": ""
},
"sizes": {
"form-check-default": "",
"height-small": "",
"height-table-row": "",
"icon-default": "",
"max-height-logo": "",
"max-width-logo": "",
"tiles-default": "",
"tiles-resize-step": "",
"width-medium": ""
},
"spacing": {
"large": "",
"medium": "",
"small": "",
"xlarge": "",
"xsmall": "",
"xxlarge": ""
}
},
"loginPage": {
"backgroundImg": ""
},
"logo": {
"topbar": "themes/dezky/assets/logo-light.svg",
"login": "themes/dezky/assets/logo-dark.svg",
"favicon": "themes/dezky/assets/favicon.svg"
}
},
"themes": [
{
"designTokens": {
"colorPalette": {
"background-accentuate": "rgba(212,255,58,0.12)",
"background-default": "#FAFAF7",
"background-highlight": "rgba(212,255,58,0.18)",
"background-hover": "rgba(10,10,10,0.03)",
"background-muted": "#F4F3EE",
"background-secondary": "#FFFFFF",
"border": "#E6E4DC",
"color-components-apptopbar-background": "transparent",
"color-components-apptopbar-border": "rgba(244,243,238,0.12)",
"icon-archive": "#fbbe54",
"icon-audio": "#700460",
"icon-document": "#3b44a6",
"icon-folder": "#0A0A0A",
"icon-image": "#ee6b3b",
"icon-medical": "#0984db",
"icon-pdf": "#ec0d47",
"icon-presentation": "#ee6b3b",
"icon-spreadsheet": "#15c286",
"icon-video": "#045459",
"input-bg": "#FFFFFF",
"input-border": "#D4D2C8",
"input-text-default": "#0A0A0A",
"input-text-muted": "rgba(10,10,10,0.4)",
"swatch-brand-contrast": "#F4F3EE",
"swatch-brand-default": "#0A0A0A",
"swatch-brand-hover": "#1F1F1C",
"swatch-danger-contrast": "#FFFFFF",
"swatch-danger-default": "#E23030",
"swatch-danger-hover": "#C52525",
"swatch-danger-muted": "rgb(204, 117, 117)",
"swatch-inverse-default": "#ffffff",
"swatch-inverse-hover": "#ffffff",
"swatch-inverse-muted": "#bfbfbf",
"swatch-passive-contrast": "#ffffff",
"swatch-passive-default": "#4c5f79",
"swatch-passive-hover": "#43536b",
"swatch-passive-hover-outline": "#f7fafd",
"swatch-passive-muted": "#283e5d",
"swatch-primary-contrast": "#F4F3EE",
"swatch-primary-default": "#0A0A0A",
"swatch-primary-gradient": "#0A0A0A",
"swatch-primary-gradient-hover": "#1F1F1C",
"swatch-primary-hover": "#1F1F1C",
"swatch-primary-muted": "rgba(10,10,10,0.08)",
"swatch-primary-muted-hover": "rgba(10,10,10,0.12)",
"swatch-success-contrast": "#FFFFFF",
"swatch-success-default": "#1F8A5B",
"swatch-success-hover": "#18774E",
"swatch-success-muted": "rgb(83, 150, 10)",
"swatch-warning-contrast": "#0A0A0A",
"swatch-warning-default": "#E89A1F",
"swatch-warning-hover": "#CE8714",
"swatch-warning-muted": "rgba(183, 76, 27, .5)",
"text-default": "#0A0A0A",
"text-inverse": "#F4F3EE",
"text-muted": "rgba(10,10,10,0.55)"
}
},
"isDark": false,
"name": "dezky"
}
]
}
},
"common": {
"logo": "themes/dezky/assets/logo-dark.svg",
"name": "dezky",
"shareRoles": {
"1c996275-f1c9-4e71-abdf-a42f6495e960": {
"iconName": "upload",
"label": "UnifiedRoleEditorLite"
},
"2d00ce52-1fc2-4dbc-8b95-a73b73395f5a": {
"iconName": "pencil",
"label": "UnifiedRoleFileEditor"
},
"312c0871-5ef7-4b3a-85b6-0e4074c64049": {
"iconName": "user-star",
"label": "UnifiedRoleManager"
},
"3284f2d5-0070-4ad8-ac40-c247f7c1fb27": {
"iconName": "pencil",
"label": "UnifiedRoleSpaceEditorWithoutVersions"
},
"58c63c02-1d89-4572-916a-870abc5a1b7d": {
"iconName": "pencil",
"label": "UnifiedRoleSpaceEditor"
},
"63e64e19-8d43-42ec-a738-2b6af2610efa": {
"iconName": "stop-circle",
"label": "UnifiedRoleFullDenial"
},
"a8d5fe5e-96e3-418d-825b-534dbdf22b99": {
"iconName": "eye",
"label": "UnifiedRoleSpaceViewer"
},
"aa97fe03-7980-45ac-9e50-b325749fd7e6": {
"iconName": "shield",
"label": "UnifiedRoleSecureView"
},
"b1e2218d-eef8-4d4c-b82d-0f1a1b48f3b5": {
"iconName": "eye",
"name": "UnifiedRoleViewer"
},
"c1235aea-d106-42db-8458-7d5610fb0a67": {
"iconName": "pencil",
"label": "UnifiedRoleFileEditorListGrants"
},
"d5041006-ebb3-4b4a-b6a4-7c180ecfb17d": {
"iconName": "eye",
"name": "UnifiedRoleViewerListGrants"
},
"e8ea8b21-abd4-45d2-b893-8d1546378e9e": {
"iconName": "pencil",
"label": "UnifiedRoleEditorListGrants"
},
"fb6c3e19-e378-47e5-b277-9732f9de6e21": {
"iconName": "pencil",
"label": "UnifiedRoleEditor"
}
},
"slogan": "dezky sikker plads til dine data",
"urls": {
"accessDeniedHelp": "https://dezky.eu",
"imprint": "https://dezky.eu/terms",
"privacy": "https://dezky.eu/privacy"
}
}
}