Feature: Sprint31 — 9 Features merged (Streak, Ausgaben, KI-Tierarzt, Rückrufe, Adoption, Vet+Befunde, Hundepass, Playdate, Rassenerkennung)
- Trainings-Streak: streak.py, DB training_streaks, Scheduler 19:00, Widget in welcome.js, Ping in uebungen.js
- Ausgaben-Tracker: expenses.py, expenses.js, DB expenses-Tabelle
- KI-Tierarztfragen: ki.py /tierarzt, health.js Button+Modal, DB ki_tierarzt_log
- Rückruf-Alarm: recalls.py, recalls.js, DB feed_recalls, Scheduler 08:00 RASFF
- Adoption: adoption.py, adoption.js, DB adoption_cache
- Tierarzt-Favorit + Befunde: tieraerzte.py /my-favorite+/favorite, health_docs.py, health.js, api.js, DB favorite_vets+health_documents
- Digitaler Hundepass: passport.py, dog-profile.js, main.py /pass/{token}, DB vaccinations+medications+dog_passport_meta+passport_shares, requirements.txt fpdf2
- Playdate-Matching: playdate.py, playdate.js, DB playdate_listings+playdate_requests
- Rassen-Erkennung: ki.py /rasse-erkennung (Claude Vision), dog-profile.js+wiki.js, CSS .rasse-result-card, DB ki_rasse_log
This commit is contained in:
parent
031c6028ac
commit
742ad189e8
26 changed files with 5734 additions and 27 deletions
|
|
@ -6803,3 +6803,124 @@ svg.empty-state-icon {
|
|||
pointer-events: none;
|
||||
letter-spacing: 0.01em;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------
|
||||
STREAK-WIDGET (Welcome-Seite)
|
||||
------------------------------------------------------------ */
|
||||
.wc-streak-card {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: var(--space-3);
|
||||
margin-top: var(--space-5);
|
||||
padding: var(--space-3) var(--space-4);
|
||||
border-radius: var(--radius-lg, 14px);
|
||||
background: linear-gradient(135deg, #ff6b00 0%, #c0392b 100%);
|
||||
color: #fff;
|
||||
box-shadow: 0 4px 18px rgba(196, 63, 0, 0.35);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.wc-streak-card::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
background: radial-gradient(ellipse at 10% 50%, rgba(255,255,255,0.15) 0%, transparent 60%);
|
||||
pointer-events: none;
|
||||
}
|
||||
.wc-streak-flame-wrap {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.wc-streak-flame {
|
||||
font-size: 2.2rem;
|
||||
line-height: 1;
|
||||
filter: drop-shadow(0 2px 6px rgba(0,0,0,0.3));
|
||||
}
|
||||
.wc-streak-number {
|
||||
font-size: 2.6rem;
|
||||
font-weight: 800;
|
||||
line-height: 1;
|
||||
letter-spacing: -0.03em;
|
||||
text-shadow: 0 2px 8px rgba(0,0,0,0.2);
|
||||
}
|
||||
.wc-streak-info {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
.wc-streak-label {
|
||||
font-size: var(--text-sm);
|
||||
font-weight: var(--weight-semibold);
|
||||
opacity: 0.95;
|
||||
}
|
||||
.wc-streak-best {
|
||||
font-size: var(--text-xs);
|
||||
opacity: 0.75;
|
||||
margin-top: 2px;
|
||||
}
|
||||
.wc-streak-lb-btn {
|
||||
background: rgba(255,255,255,0.2);
|
||||
border: 1.5px solid rgba(255,255,255,0.45);
|
||||
border-radius: 50%;
|
||||
width: 38px;
|
||||
height: 38px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-shrink: 0;
|
||||
color: #fff;
|
||||
transition: background 0.15s;
|
||||
}
|
||||
.wc-streak-lb-btn:active { background: rgba(255,255,255,0.35); }
|
||||
|
||||
/* ------------------------------------------------------------
|
||||
KI RASSEN-ERKENNUNG — Ergebnis-Block
|
||||
------------------------------------------------------------ */
|
||||
.rasse-result-card {
|
||||
background: var(--c-surface);
|
||||
border: 1px solid var(--c-border);
|
||||
border-radius: var(--radius-lg);
|
||||
padding: var(--space-4);
|
||||
margin-bottom: var(--space-3);
|
||||
}
|
||||
.rasse-result-card--top {
|
||||
border-color: var(--c-primary);
|
||||
background: var(--c-primary-subtle, #f0f9ff);
|
||||
}
|
||||
.rasse-result-name {
|
||||
font-size: var(--text-base);
|
||||
font-weight: var(--weight-semibold);
|
||||
color: var(--c-text);
|
||||
margin-bottom: var(--space-1);
|
||||
}
|
||||
.rasse-result-bar-wrap {
|
||||
background: var(--c-surface-2);
|
||||
border-radius: 999px;
|
||||
height: 8px;
|
||||
overflow: hidden;
|
||||
margin: var(--space-2) 0;
|
||||
}
|
||||
.rasse-result-bar {
|
||||
height: 8px;
|
||||
border-radius: 999px;
|
||||
background: var(--c-primary);
|
||||
transition: width 0.6s ease;
|
||||
}
|
||||
.rasse-result-bar--dim {
|
||||
background: var(--c-text-muted, #9ca3af);
|
||||
}
|
||||
.rasse-result-pct {
|
||||
font-size: var(--text-sm);
|
||||
font-weight: var(--weight-semibold);
|
||||
color: var(--c-primary);
|
||||
}
|
||||
.rasse-result-pct--dim {
|
||||
color: var(--c-text-muted);
|
||||
}
|
||||
.rasse-result-desc {
|
||||
font-size: var(--text-xs);
|
||||
color: var(--c-text-secondary);
|
||||
margin-top: var(--space-1);
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue