chore: release v0.40.1

This commit is contained in:
Ulas Kalayci
2026-05-01 17:57:30 +02:00
parent f21c6b0ca9
commit 2c948eb235
8 changed files with 44 additions and 17 deletions
+12
View File
@@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [Unreleased]
## [0.40.1] - 2026-05-01
### Changed
- **Typography tightening**: page titles and modal titles use tighter letter-spacing (`-0.5 px` / `-0.8 px` on desktop) and `text-wrap: balance` to eliminate orphaned words on wrapped headings.
- **Warm-tinted shadows**: all elevation shadows (`sm` through `xl`) now use a warm-tinted base colour (`rgba(18, 14, 8, …)`) that matches the warm neutral palette instead of pure black.
- **Button radius**: regular buttons use `--radius-md` (12 px) instead of `--radius-sm` (8 px), creating a clear visual distinction from text inputs.
- **Empty-state icons**: icons in empty states pick up a 40 % tint of the current module accent colour, making them feel contextually connected to each module rather than uniformly grey.
- **Search section labels**: category headings inside the search overlay are now sentence-case instead of all-caps, improving readability.
### Fixed
- **Tabular figures**: currency amounts (budget summary cards, transaction list, loan cards, chart rows), weather temperature, dashboard metrics, and calendar time labels now use `font-variant-numeric: tabular-nums` so digit columns remain visually aligned.
## [0.40.0] - 2026-05-01 ## [0.40.0] - 2026-05-01
### Added ### Added
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "oikos", "name": "oikos",
"version": "0.40.0", "version": "0.40.1",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "oikos", "name": "oikos",
"version": "0.40.0", "version": "0.40.1",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"bcrypt": "^6.0.0", "bcrypt": "^6.0.0",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "oikos", "name": "oikos",
"version": "0.40.0", "version": "0.40.1",
"description": "Self-hosted family planner - calendar, tasks, shopping, meal planning, budget and more. Private, open-source, no subscription.", "description": "Self-hosted family planner - calendar, tasks, shopping, meal planning, budget and more. Private, open-source, no subscription.",
"main": "server/index.js", "main": "server/index.js",
"type": "module", "type": "module",
+4
View File
@@ -160,6 +160,7 @@
.budget-summary-card__amount { .budget-summary-card__amount {
font-size: var(--text-xl); font-size: var(--text-xl);
font-weight: var(--font-weight-bold); font-weight: var(--font-weight-bold);
font-variant-numeric: tabular-nums;
} }
.budget-summary-card--income .budget-summary-card__amount { color: var(--color-success); } .budget-summary-card--income .budget-summary-card__amount { color: var(--color-success); }
@@ -236,6 +237,7 @@
.budget-bar-row__amount { .budget-bar-row__amount {
font-size: var(--text-xs); font-size: var(--text-xs);
font-weight: var(--font-weight-medium); font-weight: var(--font-weight-medium);
font-variant-numeric: tabular-nums;
width: 64px; width: 64px;
text-align: right; text-align: right;
flex-shrink: 0; flex-shrink: 0;
@@ -336,6 +338,7 @@
.budget-loan-card__amounts strong { .budget-loan-card__amounts strong {
display: block; display: block;
font-size: var(--text-base); font-size: var(--text-base);
font-variant-numeric: tabular-nums;
color: var(--color-text-primary); color: var(--color-text-primary);
margin-top: 2px; margin-top: 2px;
white-space: nowrap; white-space: nowrap;
@@ -712,6 +715,7 @@
.budget-entry__amount { .budget-entry__amount {
font-size: var(--text-base); font-size: var(--text-base);
font-weight: var(--font-weight-semibold); font-weight: var(--font-weight-semibold);
font-variant-numeric: tabular-nums;
flex-shrink: 0; flex-shrink: 0;
} }
+2
View File
@@ -346,6 +346,7 @@
font-size: var(--text-xs); font-size: var(--text-xs);
color: var(--color-text-disabled); color: var(--color-text-disabled);
white-space: nowrap; white-space: nowrap;
font-variant-numeric: tabular-nums;
} }
.week-view__columns { .week-view__columns {
@@ -420,6 +421,7 @@
.week-event__time { .week-event__time {
font-size: var(--text-xs); font-size: var(--text-xs);
opacity: 0.85; opacity: 0.85;
font-variant-numeric: tabular-nums;
} }
.event-attachment-preview { .event-attachment-preview {
+3
View File
@@ -137,6 +137,7 @@
.dashboard-metric__value { .dashboard-metric__value {
font-size: var(--text-xl); font-size: var(--text-xl);
font-weight: var(--font-weight-bold); font-weight: var(--font-weight-bold);
font-variant-numeric: tabular-nums;
color: var(--color-text-primary); color: var(--color-text-primary);
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
@@ -1002,6 +1003,7 @@
.weather-widget__temp { .weather-widget__temp {
font-size: var(--text-4xl); font-size: var(--text-4xl);
font-weight: var(--font-weight-bold); font-weight: var(--font-weight-bold);
font-variant-numeric: tabular-nums;
line-height: 1; line-height: 1;
margin-bottom: 2px; margin-bottom: 2px;
} }
@@ -1068,6 +1070,7 @@
display: flex; display: flex;
gap: var(--space-1); gap: var(--space-1);
font-size: var(--text-xs); font-size: var(--text-xs);
font-variant-numeric: tabular-nums;
} }
.weather-forecast__high { .weather-forecast__high {
+14 -8
View File
@@ -432,9 +432,8 @@
.search-section__heading { .search-section__heading {
font-size: var(--text-xs); font-size: var(--text-xs);
font-weight: var(--font-weight-semibold); font-weight: var(--font-weight-semibold);
color: var(--color-text-tertiary); color: var(--color-text-secondary);
text-transform: uppercase; letter-spacing: 0.01em;
letter-spacing: 0.06em;
margin-bottom: var(--space-2); margin-bottom: var(--space-2);
} }
@@ -816,7 +815,7 @@ html.fab-anim-done .page-fab {
.nav-sidebar__brand-name { .nav-sidebar__brand-name {
font-size: var(--text-lg); font-size: var(--text-lg);
font-weight: var(--font-weight-bold); font-weight: var(--font-weight-bold);
letter-spacing: -0.3px; letter-spacing: -0.6px;
color: var(--color-text-primary); color: var(--color-text-primary);
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
@@ -874,7 +873,8 @@ html.fab-anim-done .page-fab {
.page__title { .page__title {
font-size: var(--text-xl); font-size: var(--text-xl);
font-weight: var(--font-weight-bold); font-weight: var(--font-weight-bold);
letter-spacing: -0.3px; letter-spacing: -0.5px;
text-wrap: balance;
} }
@media (min-width: 1024px) { @media (min-width: 1024px) {
@@ -884,7 +884,7 @@ html.fab-anim-done .page-fab {
.page__title { .page__title {
font-size: var(--text-2xl); font-size: var(--text-2xl);
letter-spacing: -0.5px; letter-spacing: -0.8px;
} }
} }
@@ -976,6 +976,7 @@ html.fab-anim-done .page-fab {
font-size: var(--text-sm); font-size: var(--text-sm);
font-weight: var(--font-weight-semibold); font-weight: var(--font-weight-semibold);
color: var(--color-text-primary); color: var(--color-text-primary);
text-wrap: balance;
} }
.card__body { .card__body {
@@ -1057,6 +1058,7 @@ html.fab-anim-done .page-fab {
.modal-panel__title { .modal-panel__title {
font-size: var(--text-md); font-size: var(--text-md);
font-weight: var(--font-weight-semibold); font-weight: var(--font-weight-semibold);
text-wrap: balance;
} }
.modal-panel__close { .modal-panel__close {
@@ -1209,7 +1211,7 @@ html.fab-anim-done .page-fab {
justify-content: center; justify-content: center;
gap: var(--space-2); gap: var(--space-2);
padding: var(--space-2) var(--space-4); padding: var(--space-2) var(--space-4);
border-radius: var(--radius-sm); border-radius: var(--radius-md);
font-size: var(--text-sm); font-size: var(--text-sm);
font-weight: var(--font-weight-medium); font-weight: var(--font-weight-medium);
min-height: var(--target-lg); min-height: var(--target-lg);
@@ -1533,7 +1535,7 @@ html.fab-anim-done .page-fab {
.empty-state__icon { .empty-state__icon {
width: 56px; width: 56px;
height: 56px; height: 56px;
color: var(--color-text-disabled); color: color-mix(in srgb, var(--module-accent, var(--color-accent)) 40%, var(--color-text-disabled));
} }
.empty-state__title { .empty-state__title {
@@ -2281,11 +2283,15 @@ html.fab-anim-done .page-fab {
button i[data-lucide], button i[data-lucide],
button svg { pointer-events: none; } button svg { pointer-events: none; }
/* Tabular numbers: gleichbreite Ziffern für Zahlen/Beträge */
.tabular-nums { font-variant-numeric: tabular-nums; }
/* Kompakter Icon-Button: 44px Klickfläche, optisch kompakt durch geringes Padding */ /* Kompakter Icon-Button: 44px Klickfläche, optisch kompakt durch geringes Padding */
.btn--icon-sm { .btn--icon-sm {
padding: var(--space-1); padding: var(--space-1);
min-height: var(--target-base); min-height: var(--target-base);
min-width: var(--target-base); min-width: var(--target-base);
border-radius: var(--radius-sm);
} }
/* Textarea: vertikale Größenänderung ist nutzbar */ /* Textarea: vertikale Größenänderung ist nutzbar */
+6 -6
View File
@@ -262,16 +262,16 @@
* 3 Stufen: subtle (Karten), medium (Dropdowns, Hover), * 3 Stufen: subtle (Karten), medium (Dropdowns, Hover),
* elevated (Modals, FAB). * elevated (Modals, FAB).
* -------------------------------------------------------- */ * -------------------------------------------------------- */
--shadow-drop-icon: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.15)); --shadow-drop-icon: drop-shadow(0 2px 4px rgba(18, 14, 8, 0.16));
--_shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.04), 0 1px 4px rgba(0, 0, 0, 0.03); --_shadow-sm: 0 1px 2px rgba(18, 14, 8, 0.05), 0 1px 4px rgba(18, 14, 8, 0.04);
--shadow-sm: var(--_shadow-sm); --shadow-sm: var(--_shadow-sm);
--_shadow-md: 0 2px 8px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.04); --_shadow-md: 0 2px 8px rgba(18, 14, 8, 0.09), 0 1px 2px rgba(18, 14, 8, 0.05);
--shadow-md: var(--_shadow-md); --shadow-md: var(--_shadow-md);
--_shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.12), 0 2px 6px rgba(0, 0, 0, 0.04); --_shadow-lg: 0 8px 24px rgba(18, 14, 8, 0.13), 0 2px 6px rgba(18, 14, 8, 0.05);
--shadow-lg: var(--_shadow-lg); --shadow-lg: var(--_shadow-lg);
--_shadow-xl: 0 16px 48px rgba(0, 0, 0, 0.18), 0 4px 12px rgba(0, 0, 0, 0.06); --_shadow-xl: 0 16px 48px rgba(18, 14, 8, 0.19), 0 4px 12px rgba(18, 14, 8, 0.07);
--shadow-xl: var(--_shadow-xl); --shadow-xl: var(--_shadow-xl);
--_shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.08); --_shadow-xs: 0 1px 2px rgba(18, 14, 8, 0.09);
--shadow-xs: var(--_shadow-xs); --shadow-xs: var(--_shadow-xs);
/* -------------------------------------------------------- /* --------------------------------------------------------