feat: BL-07–BL-10 — notes search, weather refresh, vCard import/export, PWA offline page

- Notes: client-side full-text search bar (filters title + content)
- Dashboard: weather refresh button + 30-min auto-refresh interval
- Contacts: vCard 3.0 export per contact (GET /:id/vcard); vCard import
  via file input with client-side parser (FN, TEL, EMAIL, ADR, NOTE, CATEGORIES)
- PWA: /offline.html served when network unavailable; cached in app-shell (sw v20)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Ulas
2026-03-31 10:35:03 +02:00
parent 0defc3c589
commit 4fe4f6cb38
10 changed files with 374 additions and 10 deletions
+36
View File
@@ -542,10 +542,46 @@
* Layout mit bis zu 5-Tage-Vorhersage.
* -------------------------------------------------------- */
.weather-widget {
position: relative;
background: linear-gradient(135deg, var(--color-accent) 0%, #1E5CB3 100%);
color: #ffffff;
}
.weather-widget__refresh {
position: absolute;
top: var(--space-2);
right: var(--space-2);
display: flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
border: none;
background: rgba(255,255,255,0.2);
color: #fff;
border-radius: var(--radius-full);
cursor: pointer;
z-index: 1;
transition: background 0.15s;
}
.weather-widget__refresh:hover {
background: rgba(255,255,255,0.35);
}
.weather-widget__refresh:disabled {
opacity: 0.5;
cursor: default;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
.weather-widget__refresh--spinning i {
animation: spin 0.7s linear infinite;
}
.weather-widget__main {
display: flex;
align-items: center;