Fotos: Fotowand je Verband + Gesichtssuche (lokales SCRFD/MobileFaceNet via onnxruntime)

This commit is contained in:
Nicolas Gruber
2026-10-19 11:28:59 +02:00
parent 32b4dc4823
commit d97164cddc
12 changed files with 640 additions and 2 deletions
+38
View File
@@ -189,6 +189,44 @@ table.data .num { text-align: right; font-variant-numeric: tabular-nums; }
.decoder-result { margin-top: 14px; display: none; }
.decoder-result.show { display: block; }
/* ---------- fotos ---------- */
.hint { color: var(--muted); font-size: 13.5px; margin: 0 0 14px; }
.form-stack { flex-direction: column; align-items: stretch; gap: 12px; }
.photo-wall { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 14px; }
.photo-tile { text-align: center; }
.photo-frame {
aspect-ratio: 3 / 4; border-radius: var(--radius); overflow: hidden;
background: var(--bg); border: 1px solid var(--line); display: flex;
align-items: center; justify-content: center; margin-bottom: 8px;
}
.photo-frame img { width: 100%; height: 100%; object-fit: cover; display: block; }
.avatar-initials {
font-size: 30px; font-weight: 800; color: var(--blue-dark);
background: var(--blue-light); width: 100%; height: 100%;
display: flex; align-items: center; justify-content: center;
}
.photo-name { font-size: 13.5px; font-weight: 600; color: var(--ink); line-height: 1.3; }
.photo-own { font-size: 11.5px; color: var(--green); font-weight: 700; margin-top: 2px; }
.photo-tile.has-own { border: none; }
.match-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 16px; }
.match-tile {
background: var(--card); border: 1px solid var(--line); border-radius: var(--radius);
overflow: hidden; padding: 0;
}
.match-tile img { width: 100%; aspect-ratio: 1; object-fit: cover; display: block; background: var(--bg); }
.match-name { padding: 8px 10px 4px; font-size: 13.5px; font-weight: 600; }
.match-name a { color: var(--ink); }
.match-sim { padding: 0 10px 12px; display: flex; align-items: center; gap: 8px; }
.sim-bar { flex: 1; height: 8px; background: #eef2f7; border-radius: 6px; overflow: hidden; }
.sim-bar > div { height: 100%; background: #94a3b8; border-radius: 6px; }
.sim-num { font-size: 12.5px; font-weight: 700; color: var(--muted); min-width: 42px; text-align: right; }
.match-tile.match-mid .sim-bar > div { background: #d97706; }
.match-tile.match-mid .sim-num { color: #d97706; }
.match-tile.match-strong { border-color: var(--green); box-shadow: 0 0 0 2px rgba(21,128,61,.15); }
.match-tile.match-strong .sim-bar > div { background: var(--green); }
.match-tile.match-strong .sim-num { color: var(--green); }
.footer { border-top: 1px solid var(--line); padding: 16px 0; color: var(--muted); font-size: 13px; background: #fff; }
@media (max-width: 720px) {