feat(5.15+5.14): CLOSE — fix-uri code-review + embeddings functional
5.15 (propagare design + dashboard editare) si 5.14 (mapare LLM distilata) inchise dupa /code-review high. 8 buguri reparate TDD: - HIGH modal nu se deschidea pe randul slim (base.html: trimitere-slim) - HIGH /repune trunchia prestatii (declaratie incompleta la RAR) -> iterare peste existing, codes pozitional - HIGH embeddings incarca model ~230MB degeaba pe corpus gol -> poarta has_corpus() - HIGH picker chips gol pe re-render eroare -> conn/account_id pe toate ramurile - MED obs re-derivat dupa stergere explicita -> _merge_override pastreaza obs='' - MED mapare salvata fara denumire poluă GOLD -> _record_gold_validation guard - MED typo nome_prestatie -> nume_prestatie in select /repune - MED bucketare timp +3h gresita iarna -> SQLite localtime + TZ=Europe/Bucharest Embeddings WIRE-uit functional (PRD #15, decizie user): ensure_embeddings_corpus construieste corpus din nomenclator, gated pe AUTOPASS_EMBEDDINGS_ENABLED (default off). Marime model corectata ~50MB->~230MB (estimare PRD gresita). Cleanup: hoist load_* din bucla bulk-fix; import re la top. Regresie: 1256 passed, 1 deselected (live), 0 failed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
209
DESIGN.md
209
DESIGN.md
@@ -29,9 +29,11 @@ sistemul sa ramana discret.
|
||||
```
|
||||
--bg: #0f1218 fundal aplicatie
|
||||
--card: #181c24 suprafete (carduri, modal, inputuri pe fundal)
|
||||
--card2: #0f1218 fundal input slim / carduri-contor (= --bg, nivelul cel mai adanc)
|
||||
--ink: #e6e9ef text principal
|
||||
--muted: #8b93a7 text secundar (label-uri, coduri, „by")
|
||||
--line: #262b36 borduri, separatoare
|
||||
--line2: #1f2530 separator subtire lista slim (mai subtil decat --line)
|
||||
--accent:#2E74D6 azur ROMFAST — butoane primare, pill activ, linkuri, focus
|
||||
--ok: #2FBF8F sent / succes
|
||||
--warn: #E0A93B sending / atentie / Lipsa cod
|
||||
@@ -43,10 +45,12 @@ sistemul sa ramana discret.
|
||||
```
|
||||
--bg: #f5f7fa fundal (alb-rece ca romfast.ro)
|
||||
--card: #ffffff suprafete
|
||||
--card2: #f5f7fa fundal input slim / carduri-contor (= --bg)
|
||||
--ink: #1a1d24 text principal
|
||||
--muted: #5c6473 text secundar
|
||||
--line: #e2e5ea borduri
|
||||
--accent:#1F66C9 azur, variantă mai inchisa pentru contrast AA pe alb
|
||||
--line2: #eaedf2 separator subtire lista slim (mai subtil decat --line)
|
||||
--accent:#1F66C9 azur, varianta mai inchisa pentru contrast AA pe alb
|
||||
--ok: #15803d verde AA pe alb
|
||||
--warn: #b45309 chihlimbar AA pe alb
|
||||
--err: #dc2626 rosu AA pe alb
|
||||
@@ -60,15 +64,99 @@ Aceleasi neutre-calde inchise; doar accentul difera de azur.
|
||||
```
|
||||
--bg: #0e1416 fundal petrol-inchis
|
||||
--card: #161e20 suprafete
|
||||
--card2: #0e1416 fundal input/contor (= --bg)
|
||||
--ink: #e6e9ef text principal
|
||||
--muted: #8b93a7 text secundar
|
||||
--line: #232c2e borduri
|
||||
--line2: #1c2426 separator subtire (intre --bg si --line)
|
||||
--accent:#0E7C7B teal petrol — butoane, pill activ, linkuri, focus
|
||||
--ok: #2FBF8F sent
|
||||
--warn: #E0A93B atentie
|
||||
--err: #E05D5D eroare
|
||||
```
|
||||
|
||||
### Paleta — Grafit (`[data-theme="grafit"]`, tema selectabila — adaugata PRD 5.15)
|
||||
|
||||
Similara cu dark, accent azur deschis (preluat din landing, `--infot`). Distinta de dark la cererea
|
||||
userului (D2). Mapare landing->app: `--text->--ink`, `--sub->--muted`, `--okt->--ok`,
|
||||
`--errt->--err`, `--infot->--accent`.
|
||||
|
||||
```
|
||||
--bg: #0f1218 fundal (identic cu dark)
|
||||
--card: #181c24 suprafete
|
||||
--card2: #0f1218 fundal input/contor (= --bg)
|
||||
--ink: #e6e9ef text principal
|
||||
--muted: #8b93a7 text secundar
|
||||
--line: #262b36 borduri
|
||||
--line2: #1f2530 separator subtire
|
||||
--accent:#6ea2ec azur deschis (landing --infot) — linkuri, focus, pill activ
|
||||
--ok: #2FBF8F sent / succes
|
||||
--warn: #E0A93B atentie
|
||||
--err: #E05D5D eroare
|
||||
```
|
||||
|
||||
### Paleta — Cobalt (`[data-theme="cobalt"]`, tema selectabila — adaugata PRD 5.15)
|
||||
|
||||
Fundal bleumarin adanc, accent albastru viu. Atmosfera tehnica/corporatista rece.
|
||||
|
||||
```
|
||||
--bg: #080d1c fundal bleumarin adanc
|
||||
--card: #111a33 suprafete
|
||||
--card2: #0b1226 fundal input/contor
|
||||
--ink: #e9ecfb text principal (usor albastrat)
|
||||
--muted: #8a93b8 text secundar
|
||||
--line: #1d2747 borduri
|
||||
--line2: #161f3a separator subtire
|
||||
--accent:#8aa0ff albastru viu (landing --infot)
|
||||
--ok: #2fd0a6 sent / succes (teal mai saturat)
|
||||
--warn: #E0A93B atentie
|
||||
--err: #f06a7a eroare (roz saturat pe bleumarin)
|
||||
```
|
||||
|
||||
### Paleta — Cupru (`[data-theme="cupru"]`, tema selectabila — adaugata PRD 5.15)
|
||||
|
||||
Fundal cald ciocolata, accent chihlimbar. Atmosfera artizanala/calda.
|
||||
|
||||
```
|
||||
--bg: #15110b fundal maro inchis-cald
|
||||
--card: #211a12 suprafete
|
||||
--card2: #15110b fundal input/contor (= --bg)
|
||||
--ink: #efe6d6 text principal (crem cald)
|
||||
--muted: #a89a85 text secundar
|
||||
--line: #36291c borduri
|
||||
--line2: #281e14 separator subtire
|
||||
--accent:#dfa45c chihlimbar cald (landing --infot)
|
||||
--ok: #67b98c sent / succes (verde muted-cald)
|
||||
--warn: #c97d2e atentie (chihlimbar mai inchis)
|
||||
--err: #e2685a eroare (coral pe maro)
|
||||
```
|
||||
|
||||
### Paleta — Hartie (`[data-theme="hartie"]`, tema selectabila — adaugata PRD 5.15)
|
||||
|
||||
Fundal crem cald (hartie vintage), accent albastru clasic. Similara cu light, distinta la cererea
|
||||
userului. Ambele teme luminoase (hartie + light) respecta contrast AA.
|
||||
|
||||
```
|
||||
--bg: #f3efe6 fundal crem cald
|
||||
--card: #fffdf7 suprafete (crem-alb)
|
||||
--card2: #f3efe6 fundal input/contor (= --bg)
|
||||
--ink: #1e1a13 text principal (maro-inchis, AA pe crem)
|
||||
--muted: #6a6052 text secundar
|
||||
--line: #e2dccc borduri
|
||||
--line2: #ece6d9 separator subtire (mai deschis decat line)
|
||||
--accent:#1F5FBF albastru clasic (landing --infot = --accent) — 6.5:1 pe --bg, AA
|
||||
--ok: #1c7d5d sent / succes (verde AA pe crem)
|
||||
--warn: #b45309 atentie (chihlimbar AA pe crem)
|
||||
--err: #bd463c eroare (rosu AA pe crem)
|
||||
```
|
||||
|
||||
### Tokeni noi adaugati la PRD 5.15 (in toate cele 7 teme)
|
||||
|
||||
```
|
||||
--card2 fundal input slim si carduri-contor (US-001/002); pe dark = --bg (cel mai adanc nivel)
|
||||
--line2 separator subtire intre randuri lista slim (US-001/002); mai subtil decat --line
|
||||
```
|
||||
|
||||
### Culori de brand (doar wordmark, NU variabile de UI)
|
||||
|
||||
```
|
||||
@@ -109,17 +197,27 @@ Inlocuieste comutatorul binar soare/luna cu un **buton ciclic** (pattern ca demo
|
||||
singur buton care roteste la fiecare click prin setul de teme, cu iconita + tooltip/`aria-label`
|
||||
care arata tema curenta („Tema: Light" etc.).
|
||||
|
||||
Ordinea ciclului: **Light → Dark → Petrol → Auto → (inapoi la Light)**.
|
||||
Ordinea ciclului (PRD 5.15 — teme aditive D2):
|
||||
**Light → Dark → Petrol → Grafit → Cobalt → Cupru → Hartie → Auto → (inapoi la Light)**.
|
||||
|
||||
- `Light` → `data-theme="light"` (azur pe alb)
|
||||
- `Dark` → `data-theme="dark"` (azur pe inchis, comportamentul implicit actual)
|
||||
- `Petrol` → `data-theme="petrol"` (teal pe petrol-inchis)
|
||||
- `Auto` → urmeaza `prefers-color-scheme`; rezolva la Light azur sau Dark azur in functie de OS
|
||||
(nu seteaza `data-theme` fix, ci il deriva la paint).
|
||||
- `Light` → `data-theme="light"` (azur pe alb) — ☀
|
||||
- `Dark` → `data-theme="dark"` (azur pe inchis, comportamentul implicit actual) — ☾
|
||||
- `Petrol` → `data-theme="petrol"` (teal pe petrol-inchis) — ◐
|
||||
- `Grafit` → `data-theme="grafit"` (azur deschis pe negru-grafit, similar dark) — ◑
|
||||
- `Cobalt` → `data-theme="cobalt"` (albastru viu pe bleumarin adanc) — ◆
|
||||
- `Cupru` → `data-theme="cupru"` (chihlimbar pe maro cald) — ◇
|
||||
- `Hartie` → `data-theme="hartie"` (albastru clasic pe crem cald, similar light) — ○
|
||||
- `Auto` → urmeaza `prefers-color-scheme`; rezolva la `light` (OS light) sau `dark` (OS dark). — ◉
|
||||
|
||||
Persistenta: preferinta explicita (inclusiv „Auto") in `localStorage`, doar la click. Scriptul
|
||||
anti-FOUC din `<head>` trebuie sa rezolve „Auto"→light/dark inainte de primul paint (fara blink).
|
||||
Iconite: ☀ Light, ☾ Dark, ◐ Petrol, ◉ Auto. Default la prima vizita = Auto (OS-aware), ca azi.
|
||||
anti-FOUC din `<head>` cunoaste toate cele 7+1 stari; valori vechi (light/dark/petrol) raman
|
||||
valide fara migrare fortata; valoare lipsa/necunoscuta → auto (fallback sigur, fara blink).
|
||||
|
||||
Implementare DRY (E2 PRD 5.15): configuratia temelor traieste intr-o singura structura JS
|
||||
`var THEMES = [...]` (sursa de adevar), din care se DERIVA `CYCLE`/`VALID`/`ICONS`/`LABELS`/`NEXT`.
|
||||
Adaugarea unei teme noi = O singura intrare in `THEMES`.
|
||||
|
||||
Default la prima vizita = Auto (OS-aware), ca inainte.
|
||||
|
||||
## Componente — note de aplicare
|
||||
|
||||
@@ -133,6 +231,99 @@ Iconite: ☀ Light, ☾ Dark, ◐ Petrol, ◉ Auto. Default la prima vizita = Au
|
||||
- **Suprafete de stare** (banner, flash, eroare-3n): raman pe `color-mix` peste `--err/--warn/--ok`,
|
||||
deci se adapteaza automat la noua paleta si la light/dark.
|
||||
|
||||
## Componente slim (PRD 5.15 US-002)
|
||||
|
||||
Adaugate in `base.html` (sectiunea `SENTINEL-COMPONENTE-SLIM`). Toate culorile exclusiv prin
|
||||
`var(--token)` — zero hex hardcodat. Consumate de US-003 (dashboard), US-004 (lista), US-007 (formular).
|
||||
|
||||
### `.contor-card`
|
||||
|
||||
Card cifra-contor compact: fundal `--card2`, bordura `--line`, `border-radius:8px`, padding 10-12px.
|
||||
|
||||
```html
|
||||
<div class="contor-card">
|
||||
<div class="contor-cifra s-ok">847</div> <!-- variante de culoare prin .s-ok/.s-err/.s-queued -->
|
||||
<div class="contor-label">Trimise (total)</div>
|
||||
<div class="contor-sub">luna 124 · azi 9</div> <!-- optional: sub-linie mono -->
|
||||
</div>
|
||||
```
|
||||
|
||||
Sub-elemente:
|
||||
- `.contor-cifra` — `font-size:22px; font-weight:700`; culoare prin `.s-*` existente
|
||||
- `.contor-label` — `font-size:11px; color:var(--muted)`
|
||||
- `.contor-sub` — IBM Plex Mono, `font-size:10px; color:var(--muted)`
|
||||
|
||||
### `.lista-trimiteri-slim` + `.trimitere-slim`
|
||||
|
||||
Lista compacta cu separator `--line2`. Randul este clickabil (rol button), tinta `min-height:44px`.
|
||||
|
||||
```html
|
||||
<ul class="lista-trimiteri-slim">
|
||||
<li class="trimitere-slim" role="button" tabindex="0">
|
||||
<div>
|
||||
<div class="slim-vin">WBA8E9...K7F2</div>
|
||||
<div class="slim-meta">Inspectie tehnica · 09:42</div>
|
||||
</div>
|
||||
<span class="pill s-sent">Trimis</span>
|
||||
</li>
|
||||
</ul>
|
||||
```
|
||||
|
||||
Sub-elemente:
|
||||
- `.slim-vin` — IBM Plex Mono, `font-size:13px; font-weight:500; color:var(--ink)`
|
||||
- `.slim-meta` — `font-size:11px; color:var(--muted)` (operatie + ora)
|
||||
|
||||
### `.camp-slim` + macro `camp(slim=True)`
|
||||
|
||||
Varianta compacta de camp formular: label 11px muted deasupra, input `height:30px`, fundal `--card2`.
|
||||
Integrata in macro-ul `camp` din `_macros.html` prin flagul `slim=False` (default — randarea
|
||||
actuala ramane neschimbata).
|
||||
|
||||
```jinja2
|
||||
{{ camp('vin', 'VIN (serie sasiu)', vin, slim=True) }}
|
||||
```
|
||||
|
||||
Pentru campuri mono (VIN, odometru, nr. inmatriculare): adauga clasa `camp-mono` pe input
|
||||
(via `style=""` sau atribut `class=""` direct — macro-ul nu il pune automat, consumatorul decide).
|
||||
|
||||
### `.chips` + `.chip` + `.chip-del`
|
||||
|
||||
Prestatii multi-select: container `.chips` (fundal `--card2`), item `.chip` (accent 18%, IBM Plex
|
||||
Mono 11px), buton de stergere `.chip-del` (accesibil cu `aria-label`).
|
||||
|
||||
```html
|
||||
<div class="chips" role="group" aria-label="Prestatii selectate">
|
||||
<span class="chip">
|
||||
<button class="chip-del" aria-label="Sterge codul REV2" type="button">×</button>
|
||||
REV2
|
||||
</span>
|
||||
<span class="chip chip-warn"> <!-- varianta warn pentru R-ODO/I-ODO -->
|
||||
<button class="chip-del" aria-label="Sterge codul R-ODO" type="button">×</button>
|
||||
R-ODO
|
||||
</span>
|
||||
</div>
|
||||
```
|
||||
|
||||
Clase aditionale:
|
||||
- `.chip-warn` — fundal `--warn` 22% (pentru coduri R-ODO/I-ODO care cer odometruInitial)
|
||||
|
||||
### `.add-code` + `.op-row` (picker E4)
|
||||
|
||||
Buton dashed pentru adaugare cod (`.add-code`) si randul operatie<->cod (`.op-row`, `.op-row-name`,
|
||||
`.op-row-warn`). Folosite de picker-ul E4 din US-007 (formular editare).
|
||||
|
||||
```html
|
||||
<div class="op-row">
|
||||
<span class="op-row-name">REVIZIE PERIODICA</span>
|
||||
<span class="chip">REV2 <button class="chip-del" ...>×</button></span>
|
||||
<button class="add-code" type="button">+ alt cod</button>
|
||||
</div>
|
||||
<div class="op-row op-row-warn"> <!-- bordura warn: lipsa cod -->
|
||||
<span class="op-row-name">SCHIMBARE PLACUTE FRANA</span>
|
||||
<button class="add-code" type="button">alege cod RAR</button>
|
||||
</div>
|
||||
```
|
||||
|
||||
## Ce NU schimbam
|
||||
|
||||
- Mecanismul light/dark existent (anti-FOUC, persistenta `localStorage`, comutator) — il pastram,
|
||||
|
||||
Reference in New Issue
Block a user