From df9256ebff0a1437ed7a4c773eab3e296a8d908b Mon Sep 17 00:00:00 2001 From: Ulas Kalayci Date: Wed, 22 Apr 2026 08:53:36 +0200 Subject: [PATCH] chore: release v0.23.7 --- CHANGELOG.md | 5 +++++ package-lock.json | 4 ++-- package.json | 2 +- public/router.js | 43 +++++++++++++++++++++++++++++----------- public/styles/layout.css | 14 +++++-------- 5 files changed, 44 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d7d674..a7a1b9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.23.7] - 2026-04-22 + +### Fixed +- Navigation: sidebar logo now uses the official `docs/logo.svg` artwork (house + chimney on gradient background) instead of a generic Lucide home icon; gradient colors are driven by CSS tokens + ## [0.23.6] - 2026-04-22 ### Changed diff --git a/package-lock.json b/package-lock.json index b7e518e..2e03c36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "oikos", - "version": "0.23.6", + "version": "0.23.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "oikos", - "version": "0.23.6", + "version": "0.23.7", "license": "MIT", "dependencies": { "bcrypt": "^6.0.0", diff --git a/package.json b/package.json index bcd629b..26a8776 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "oikos", - "version": "0.23.6", + "version": "0.23.7", "description": "Self-hosted family planner - calendar, tasks, shopping, meal planning, budget and more. Private, open-source, no subscription.", "main": "server/index.js", "type": "module", diff --git a/public/router.js b/public/router.js index 769e626..6974870 100644 --- a/public/router.js +++ b/public/router.js @@ -303,23 +303,42 @@ function renderAppShell(container) { const sidebarLogo = document.createElement('div'); sidebarLogo.className = 'nav-sidebar__logo'; - // SVG-Logomark: Haus-Symbol (Lucide "home" path, 24×24 viewBox) + // SVG-Logomark aus docs/logo.svg — Gradient via CSS-Tokens const logomark = document.createElement('div'); logomark.className = 'nav-sidebar__logomark'; logomark.setAttribute('aria-hidden', 'true'); - const logoSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); - logoSvg.setAttribute('viewBox', '0 0 24 24'); + const SVG_NS = 'http://www.w3.org/2000/svg'; + const logoSvg = document.createElementNS(SVG_NS, 'svg'); + logoSvg.setAttribute('viewBox', '0 0 160 160'); logoSvg.setAttribute('fill', 'none'); - logoSvg.setAttribute('stroke', 'currentColor'); - logoSvg.setAttribute('stroke-width', '2.5'); - logoSvg.setAttribute('stroke-linecap', 'round'); - logoSvg.setAttribute('stroke-linejoin', 'round'); - const housePath = document.createElementNS('http://www.w3.org/2000/svg', 'path'); - housePath.setAttribute('d', 'M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'); - const doorPath = document.createElementNS('http://www.w3.org/2000/svg', 'polyline'); - doorPath.setAttribute('points', '9 22 9 12 15 12 15 22'); + const defs = document.createElementNS(SVG_NS, 'defs'); + const grad = document.createElementNS(SVG_NS, 'linearGradient'); + grad.setAttribute('id', 'oikos-logo-bg'); + grad.setAttribute('x1', '0'); grad.setAttribute('y1', '0'); + grad.setAttribute('x2', '160'); grad.setAttribute('y2', '160'); + grad.setAttribute('gradientUnits', 'userSpaceOnUse'); + const stop0 = document.createElementNS(SVG_NS, 'stop'); + stop0.setAttribute('offset', '0%'); + stop0.style.stopColor = 'var(--color-accent)'; + const stop1 = document.createElementNS(SVG_NS, 'stop'); + stop1.setAttribute('offset', '100%'); + stop1.style.stopColor = 'var(--color-accent-secondary)'; + grad.appendChild(stop0); grad.appendChild(stop1); + defs.appendChild(grad); + logoSvg.appendChild(defs); + const bgRect = document.createElementNS(SVG_NS, 'rect'); + bgRect.setAttribute('width', '160'); bgRect.setAttribute('height', '160'); + bgRect.setAttribute('rx', '36'); bgRect.setAttribute('fill', 'url(#oikos-logo-bg)'); + logoSvg.appendChild(bgRect); + const housePath = document.createElementNS(SVG_NS, 'path'); + housePath.setAttribute('d', 'M80 36L36 72V120C36 122.2 37.8 124 40 124H68V96H92V124H120C122.2 124 124 122.2 124 120V72L80 36Z'); + housePath.setAttribute('fill', 'white'); logoSvg.appendChild(housePath); - logoSvg.appendChild(doorPath); + const chimney = document.createElementNS(SVG_NS, 'rect'); + chimney.setAttribute('x', '100'); chimney.setAttribute('y', '46'); + chimney.setAttribute('width', '12'); chimney.setAttribute('height', '22'); + chimney.setAttribute('rx', '2'); chimney.setAttribute('fill', 'white'); + logoSvg.appendChild(chimney); logomark.appendChild(logoSvg); sidebarLogo.appendChild(logomark); diff --git a/public/styles/layout.css b/public/styles/layout.css index 595789c..f428a97 100755 --- a/public/styles/layout.css +++ b/public/styles/layout.css @@ -546,22 +546,17 @@ flex-shrink: 0; } - /* SVG-Logomark (via DOM API in router.js injiziert) */ + /* SVG-Logomark (via DOM API in router.js injiziert, Gradient im SVG selbst) */ .nav-sidebar__logomark { width: var(--target-sm); height: var(--target-sm); - border-radius: var(--radius-sm); - background: linear-gradient(135deg, var(--color-accent) 0%, var(--color-accent-secondary) 100%); - color: var(--color-text-on-accent); - display: flex; - align-items: center; - justify-content: center; flex-shrink: 0; } .nav-sidebar__logomark svg { - width: 16px; - height: 16px; + width: 100%; + height: 100%; + display: block; } /* Logo-Text verstecken im collapsed-Modus */ @@ -667,6 +662,7 @@ .nav-sidebar__logomark { width: 28px; height: 28px; + flex-shrink: 0; } .nav-sidebar__logo > span {