chore: release v0.40.1
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Generated
+2
-2
@@ -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
@@ -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",
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
/* --------------------------------------------------------
|
/* --------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user