Wide Bold fuer die grossen Zahlen, Genauigkeit der Position anzeigen

- Audi Type Wide Bold (700) eingebunden und fuer .fig/.ads-fig gesetzt, in
  beiden Codebasen. Light war zu duenn, Normal ebenfalls (Ansage des
  Eigentuemers). Die alte Notiz "es gibt nur 300 und 400, niemals fetter"
  ist damit ueberholt und entfernt statt ergaenzt - sie stand nur da, weil
  es keine anderen Schnitte gab.
- standort_genauigkeit_m wird jetzt angezeigt ("Position auf +-12 m genau",
  unter der Anschrift im Standortblatt). Der Wert kam seit jeher vom
  Backend, wurde im Panel in eine Variable gelesen und nirgends gezeigt -
  im Audit als totes Schema gefunden. In der App fehlte er ganz und ist
  jetzt durch Typ und Adapter verdrahtet.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-05 17:58:19 +02:00
parent f72264c4af
commit cf06e28e8d
13 changed files with 77 additions and 13 deletions
+3
View File
@@ -69,6 +69,8 @@ export interface Fahrzeug {
/** Diagnosecodes im Fehlerspeicher; `null` heisst "kein Sensor zugeordnet
oder er meldet nichts" - nie als "keine Fehler" deuten. */
fehlerspeicher: { anzahl: number | null; ok: boolean | null } | null
/** Genauigkeit der Position in Metern; `null` heisst unbekannt. */
standortGenauigkeitM: number | null
/** Zustand des Zündungssensors — nicht „fährt": ohne Bewegungssensor sagt
an nur, dass die Zündung an ist. `null` heißt „kein Zündungssensor
zugeordnet", also unbekannt — nicht „steht". */
@@ -185,6 +187,7 @@ export function profilZuFahrzeug(profil: Profil, status: Fahrzeugstatus): Fahrze
gesichert: status.gesichert ?? null,
sicherheitscheck: status.sicherheitscheck ?? [],
fehlerspeicher: status.fehlerspeicher ?? null,
standortGenauigkeitM: status.standort_genauigkeit_m ?? null,
zuendung: status.zuendung ?? null,
geparktSeit: (status.geparkt_seit as string | null) ?? null,
faehrtSeit: (status.faehrt_seit as string | null) ?? null,
+1
View File
@@ -27,6 +27,7 @@ function fahrzeug(odo: number, modus = "hersteller"): Fahrzeug {
gesichert: null,
sicherheitscheck: [],
fehlerspeicher: null,
standortGenauigkeitM: null,
zuendung: null,
geparktSeit: null,
faehrtSeit: null,
+19
View File
@@ -124,6 +124,20 @@ const PARKPLATZ_AB_MIN = 15
Kein Rueckfall auf die Fahrtenliste: null heisst unbekannt, und das wird
auch so angezeigt. Eine falsche Zahl ist schlechter als keine. */
/* Wie genau die Position ist, in Metern. Der Wert kommt seit jeher vom
Backend (standort_genauigkeit_m) und wurde bis zum 05.09.2026 nur in eine
Variable gelesen und nirgends gezeigt - im Audit-Durchgang als totes Schema
gefunden, Entscheidung des Eigentuemers: anzeigen. Er sagt, ob man dem Punkt
auf der Karte trauen kann; ohne ihn sieht eine auf 500 m geschaetzte
Funkzellen-Position genauso aus wie ein Fix auf 5 m.
Nur bei einer brauchbaren Zahl - fehlt sie, steht dort nichts statt einer
erfundenen Genauigkeit. */
export function genauigkeitText(m: number | null): string {
if (typeof m !== "number" || !(m > 0)) return ""
return `Position auf ±${m < 10 ? m.toFixed(1) : Math.round(m)} m genau`
}
export function standortZustand(
fahrzeug: Fahrzeug,
): { faehrt: boolean; unbekannt: boolean; seitTs: number | null; geparkt: boolean } {
@@ -570,6 +584,11 @@ export function Standort() {
</div>
</div>
<div className="dm-standortmenu__adresse">{adresseAnzeige}</div>
{genauigkeitText(fahrzeug.standortGenauigkeitM) && (
<div className="dm-standortmenu__genauigkeit">
{genauigkeitText(fahrzeug.standortGenauigkeitM)}
</div>
)}
<div className="dm-standortmenu__status">
{zustand.faehrt ? (
<>
+19 -9
View File
@@ -12,8 +12,9 @@
* base64 eingebettet lagen. Als eigene woff2-Dateien sind sie zwischenspeicherbar,
* statt bei jedem Laden des Stylesheets erneut übertragen zu werden.
*
* Es gibt nur die Schnitte 300 und 400. Niemals fetter setzen — der Browser
* würde die Schrift künstlich verdicken, was sichtbar anders aussieht.
* Vorhanden sind Wide in 300/400/700 und Normal in 400. Nur diese setzen —
* alles andere verdickt oder verschmälert der Browser künstlich, was sichtbar
* anders aussieht.
*/
@font-face {
@@ -36,9 +37,8 @@
deshalb standen die grossen Zahlen im Light-Schnitt, und der Eigentuemer
verglich sie mit der myAudi-App: "die Ziffern der Reichweite sind in der
Audi App dicker". Er hat daraufhin den vollen Satz aus Audis eigenem
Styleguide geliefert (styleguide.audi.com, AudiType 4.03). Wide Normal ist
jetzt da; Wide Bold liegt vor, ist aber bewusst nicht eingebunden - 400 ist
der naechste Schritt, und 300/400 bleibt die Linie dieses Projekts.
Styleguide geliefert (styleguide.audi.com, AudiType 4.03). Wide Normal und Wide Bold sind
seither eingebunden.
Lizenz: gilt wie alle Audi-Assets nur fuer diese eine private Installation.
Deshalb liegt die Datei in companion-app bzw. im Panel, NIE in
@@ -51,6 +51,18 @@
font-display: swap;
}
/* Wide Bold (700), der Schnitt der grossen Zahlen. Erst stand dort Light, dann
Normal - beides war gegenueber der myAudi-App zu duenn. Die fruehere
Projektregel "nur 300/400" gilt damit nicht mehr; sie stand nur da, weil es
keine anderen Schnitte gab. */
@font-face {
font-family: "Audi Type Wide";
src: url("../assets/audi/schriften/audi-type-wide-700.woff2") format("woff2");
font-weight: 700;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "Audi Type Extended";
src: url("../assets/audi/schriften/audi-type-extended-400-italic.woff2") format("woff2");
@@ -72,9 +84,7 @@
variante, wie im Panel. */
/* Seit dem 05.09.2026 Normal- statt Light-Schnitt: der Eigentümer verglich die
Zahlen mit der myAudi-App („die Ziffern der Reichweite sind in der Audi App
dicker") und lieferte daraufhin den vollen Satz aus Audis Styleguide. Wide
Normal (400) ist seither eingebunden; Wide Bold liegt vor, ist aber bewusst
nicht in Gebrauch.
dicker") und lieferte daraufhin den vollen Satz aus Audis Styleguide. Seither steht dort Wide Bold.
Diese Regel steht NACH dem Design-System und gewinnt gegen dessen .ads-fig —
eine Änderung dort allein bleibt hier wirkungslos. Genau das ist am
@@ -84,7 +94,7 @@
.ads-fig,
.dm-detail__zahl {
font-family: var(--font-wide);
font-weight: 400;
font-weight: 700;
}
.ads-sport {
+8
View File
@@ -2398,3 +2398,11 @@ input[type="range"] {
myAudi-App nach, und deren Rot ist das der Marke (vom Eigentuemer am
05.09.2026 als "weniger dunkel" gemeldet).
Rot als FLAECHE ist in diesem Projekt sonst zerstoerenden Aktionen
vorbehalten. Hier ist es kein Bedienelement, sondern eine Warnung - eine
bewusste, benannte Ausnahme. Wortgleich mit dem Panel. */
.dm-balken--reserve .ads-balken > i {
background: var(--red);
}
/* Genauigkeit der Position, unter der Anschrift. Wortgleich mit
@@ -1 +1 @@
{"version":"2026.9.5.42","sha256":"2ae33ef936e10845d4c4c6e5545511c99a20d19a43ec1520b6a78bf683393b89","bytes":364400,"gebaut":"2026-09-05T15:49:05Z"}
{"version":"2026.9.5.43","sha256":"5f10d242a786850624aa8484fb83c8638fc43e41c20afd894c008665dde0c1f0","bytes":418680,"gebaut":"2026-09-05T15:55:43Z"}
@@ -1155,6 +1155,20 @@ function letzteFahrt() {
Kein Rueckfall auf die Fahrtenliste: null heisst unbekannt, und das wird
auch so angezeigt. Eine falsche Zahl ist schlechter als keine. */
/* Wie genau die Position ist, in Metern. Der Wert kommt seit jeher vom
Backend (standort_genauigkeit_m) und wurde bis zum 05.09.2026 nur in eine
Variable gelesen und nirgends gezeigt - im Audit-Durchgang als totes Schema
gefunden, Entscheidung des Eigentuemers: anzeigen. Er sagt, ob man dem Punkt
auf der Karte trauen kann; ohne ihn sieht eine auf 500 m geschaetzte
Funkzellen-Position genauso aus wie ein Fix auf 5 m.
Nur bei einer brauchbaren Zahl - fehlt sie, steht dort nichts statt einer
erfundenen Genauigkeit. */
function genauigkeitText() {
const m = CAR.standortGenauigkeitM;
if (typeof m !== "number" || !(m > 0)) return "";
return `Position auf ±${m < 10 ? m.toFixed(1) : Math.round(m)} m genau`;
}
function standortZustand() {
const roh = CAR.geparktSeit ? new Date(CAR.geparktSeit).getTime() : NaN;
const seitTs = Number.isNaN(roh) ? null : roh;
@@ -1975,6 +1989,7 @@ function vStandort() {
</div>
</div>
<div class="standortmenu-adresse" id="standortAdresse">${esc(adresseText)}</div>
${genauigkeitText() ? `<div class="standortmenu-genauigkeit">${esc(genauigkeitText())}</div>` : ""}
<div class="standortmenu-status">
${zustand.faehrt
/* Der Text sagt "Zuendung an", nicht "Fahrzeug faehrt". Es gibt keinen
File diff suppressed because one or more lines are too long
@@ -418,7 +418,7 @@ button.tile, .tilebtn { transition: background .15s, transform .1s; }
}
.fig {
font-family: "Audi Type Wide", var(--font-stack);
font-weight: 400;
font-weight: 700;
letter-spacing: -.02em;
line-height: .95;
color: var(--fg);
@@ -1754,3 +1754,7 @@ img.carfix.klein { aspect-ratio: auto; height: auto; }
ablesbar ist, dass jetzt geloescht wird und nicht nur aufgeklappt.
Wortgleich mit .dm-wisch__loeschen--scharf in der App. */
.swipe-delete--scharf { filter: brightness(1.12); }
/* Genauigkeit der Position, unter der Anschrift im Standortblatt. Eine Stufe
leiser als die Anschrift - sie beschreibt sie, statt neben ihr zu stehen. */
.standortmenu-genauigkeit { font-size: 12.5px; color: var(--fg3); margin-top: 4px; }
@@ -1,7 +1,7 @@
{
"domain": "audi_dashboard",
"name": "Audi Dashboard",
"version": "2026.9.5.42",
"version": "2026.9.5.43",
"documentation": "https://gitea.nothaft.cloud/paul/audi-app/src/branch/main/README.md",
"issue_tracker": "https://gitea.nothaft.cloud/paul/audi-app/issues",
"codeowners": [
+1 -1
View File
@@ -1,5 +1,5 @@
.ads-fig {
font-weight: 400 /* Wide Normal, siehe audi-schrift.css */;
font-weight: 700 /* Wide Bold, siehe audi-schrift.css */;
/* -.03em, nicht -.02em: die iOS-Auflage im Panel überschreibt .fig dort
eigens (audi-dashboard-ios.css, live gemessen -1.8px bei 60px = -.03em)
- das Basisblatt allein (audi-dashboard.css, -.02em) reicht am echten