diff --git a/app/web/routes.py b/app/web/routes.py
index f0a0669..f66e19a 100644
--- a/app/web/routes.py
+++ b/app/web/routes.py
@@ -464,7 +464,7 @@ def _render_panel_cont(request: Request, conn, account_id: int) -> str:
"account_meta": account_meta,
"date_firma_mesaj": None,
"date_firma_eroare": None,
- "activ_subtab": "firma",
+ "activ_subtab": "cont",
"parola_mesaj": None,
"parola_eroare": None,
"creds_test_mesaj": None,
@@ -4507,9 +4507,9 @@ def _render_cont(
date_firma_mesaj: str | None = None,
date_firma_eroare: str | None = None,
are_cheie: bool = False,
- # Sub-tab activ dupa re-randare: 'firma' | 'rar' | 'api' | 'cont'.
- # Fiecare handler POST intoarce sub-tabul propriu, ca swap-ul HTMX sa nu resete la firma.
- activ_subtab: str = "firma",
+ # Sub-tab activ dupa re-randare: 'cont' | 'rar' | 'api'.
+ # Fiecare handler POST intoarce sub-tabul propriu, ca swap-ul HTMX sa nu resete la primul.
+ activ_subtab: str = "cont",
# Schimbare parola de acces (sub-tab Cont).
parola_mesaj: str | None = None,
parola_eroare: str | None = None,
@@ -4985,7 +4985,7 @@ async def cont_rar_medii(request: Request) -> HTMLResponse:
if prod_enabled_form and not was_prod_enabled and not prod_confirmare:
creds_prod_eroare = (
"Bifati confirmarea de mai jos pentru a activa mediul Productie: "
- "\"Inteleg ca trimiterile pe Productie sunt declaratii reale (L.142)\"."
+ "\"Confirm: trimiterile pe Productie sunt declaratii reale (L.142)\"."
)
account_meta = _fetch_account_meta(conn, acct)
env_ctx = _fetch_cont_env_state(conn, acct)
diff --git a/app/web/templates/_cont.html b/app/web/templates/_cont.html
index 5525324..b1d6fbb 100644
--- a/app/web/templates/_cont.html
+++ b/app/web/templates/_cont.html
@@ -1,80 +1,138 @@
-{# Pagina Setari: sub-taburi interne — Date firma / Credentiale RAR / Cheie API /
- Cont (plan + parola). `activ_subtab` (server) alege panoul activ dupa fiecare
+{# Pagina Setari: sub-taburi interne — Cont (date firma + plan + parola) /
+ Credentiale RAR / Cheie API. `activ_subtab` (server) alege panoul activ dupa fiecare
swap HTMX, ca re-randarea sa nu resete la primul tab. Comutarea intre taburi
fara server = JS delegat in base.html (#card-cont). #}
{% set _firma_ok = account_meta.name and account_meta.email and account_meta.cui %}
{% set _rar_ok = medii_disponibile and medii_disponibile|length > 0 %}
-
-
-
-
- Setari
-
-
Datele firmei, credentialele RAR, cheia API si contul tau.
-
+{% set _subtab = activ_subtab|default('cont') %}
+{% if _subtab == 'firma' %}{% set _subtab = 'cont' %}{% endif %}
+
+
+
+ Setari
+
-
- Date firma
-
+
+ Cont
+
Credentiale RAR
-
+
Cheie API
-
- Cont
- {# ============================ Sub-tab: Date firma ============================ #}
-
+ {# ================= Sub-tab: Cont (date firma + plan + parola) ================ #}
+
+
+ {# --- Date firma --- #}
Date firma
{{ 'complet' if _firma_ok else 'incomplet' }}
-
Apar pe declaratiile catre RAR si pe facturile de plan.
{% if date_firma_mesaj %}
{{ date_firma_mesaj }}
{% endif %}
{% if date_firma_eroare %}
{{ date_firma_eroare }}
{% endif %}
+
+ {# --- Plan --- #}
+ {% if plan_linie is defined %}
+
+
+ {# plan_linie vine ca "Plan:
· "; aici tier-ul apare O data, bold. #}
+ {% set _plan_text = plan_linie|replace('Plan: ', '', 1) %}
+ {% set _plan_parts = _plan_text.split(' · ', 1) %}
+
+ {{ _plan_parts[0] }}
+ {% if _plan_parts|length > 1 %}
+ {{ _plan_parts[1] }}
+ {% endif %}
+
+ {% if monthly_limit_val|default(none) and usage_lunar is defined %}
+ {% set _pct = (usage_lunar / monthly_limit_val * 100)|round|int %}
+
+
+
+ {% endif %}
+ {% if plan_limita_atinsa|default(false) %}
+ Limita lunara atinsa — trimiterile noi sunt blocate pana luna viitoare.
+ {% endif %}
+ Pentru mai mult volum sau acces API, contacteaza-ne .
+ {% endif %}
+
+ {# --- Parola de acces --- #}
+
+
+ Parola dashboard-ului — separata de credentialele RAR. Minim 10 caractere.
+
+ {% if parola_mesaj %}{{ parola_mesaj }}
{% endif %}
+ {% if parola_eroare %}{{ parola_eroare }}
{% endif %}
+
+
{# ========================= Sub-tab: Credentiale RAR ========================= #}
+ {% if _subtab != 'rar' %}hidden{% endif %}>
- Credentiale RAR (portal AUTOPASS)
+ Credentiale RAR
{{ 'configurat' if _rar_ok else 'neconfigurat' }}
- Configureaza mediile RAR — Testare si/sau Productie — fiecare cu credentialele lui,
- validate separat la salvare pe sistemul RAR corespunzator. Un mediu devine activ cand e
- bifat si are credentiale; abia atunci importul web poate trimite pe el. (Canalul API ramane
- pe mediul global al instantei, {{ mediu_instanta() }}, pentru ca isi cara singur credentialele.)
+ Fiecare mediu are propriile credentiale, verificate la salvare. Trimiterile merg doar pe mediile active.
{% if creds_mesaj %}
{{ creds_mesaj }}
{% endif %}
@@ -93,10 +151,11 @@
Activare Testare
-
Email RAR Testare
-
-
Parola RAR Testare
-
+
Email RAR Testare
+
+
Parola RAR Testare
+
{% if creds_test_mesaj %}
{{ creds_test_mesaj }}
{% endif %}
{% if creds_test_eroare %}
{{ creds_test_eroare }}
{% endif %}
@@ -110,13 +169,14 @@
Activare Productie
-
Email RAR Productie
-
-
Parola RAR Productie
-
+
Email RAR Productie
+
+
Parola RAR Productie
+
- Inteleg ca trimiterile pe Productie sunt declaratii reale (L.142), finale si fara anulare.
+ Confirm: trimiterile pe Productie sunt declaratii reale (L.142), finale si fara anulare.
{% if creds_prod_mesaj %}
{{ creds_prod_mesaj }}
{% endif %}
{% if creds_prod_eroare %}
{{ creds_prod_eroare }}
{% endif %}
@@ -124,9 +184,9 @@
-
Mediu implicit pentru trimiteri
+
Mediu implicit pentru trimiteri
{% if medii_disponibile %}
-
+
{% for env in medii_disponibile %}
{{ "Testare" if env == "test" else "Productie" }}
{% endfor %}
@@ -138,22 +198,23 @@
{% if creds_default_eroare %}{{ creds_default_eroare }}
{% endif %}
-
Salveaza mediile RAR
-
Parolele stocate criptat, niciodata in clar.
+
+ Salveaza
+ Parolele se stocheaza criptat.
+
{# ============================ Sub-tab: Cheie API ============================ #}
+ {% if _subtab != 'api' %}hidden{% endif %}>
Cheie API
{{ 'activa' if are_cheie else 'lipsa' }}
- O foloseste softul propriu / ROAAUTO ca sa trimita prezentari prin API. Se vede integral o
- singura data, la creare sau rotire.
+ Pentru trimiteri din softul propriu / ROAAUTO. Se afiseaza integral o singura data.
{% if api_key %}
@@ -164,9 +225,6 @@
onclick="navigator.clipboard.writeText(this.dataset.key).then(()=>this.textContent='Copiat!')">
Copiaza cheia
-
- Atentie: la urmatoarea vizita aceasta cheie dispare. Daca o pierzi, roteste din nou.
-
{% endif %}
{% if rot_eroare %}
{{ rot_eroare }}
{% endif %}
@@ -174,62 +232,10 @@
-
-
- {# ========================= Sub-tab: Cont (plan + parola) ==================== #}
-
-
- {# --- Plan curent --- #}
- {% if plan_linie is defined %}
-
-
- Plan curent
-
{{ tier_label|default('Gratuit') }}
-
-
- {{ plan_linie }}
-
- {% if plan_limita_atinsa|default(false) %}
-
Limita lunara a fost atinsa — trimiterile noi sunt blocate pana la inceputul lunii urmatoare.
- {% elif plan_warn|default(false) %}
-
Te apropii de limita lunara.
- {% endif %}
-
- Pentru mai mult volum sau import prin API, contacteaza-ne — alocarea planurilor se face manual.
-
-
- {% endif %}
-
- {# --- Parola de acces --- #}
-
-
Parola cu care te autentifici in dashboard (separata de credentialele RAR). Minim 10 caractere.
-
- {% if parola_mesaj %}
{{ parola_mesaj }}
{% endif %}
- {% if parola_eroare %}
{{ parola_eroare }}
{% endif %}
-
-
diff --git a/app/web/templates/base.html b/app/web/templates/base.html
index 8ac67eb..8e2d734 100644
--- a/app/web/templates/base.html
+++ b/app/web/templates/base.html
@@ -857,10 +857,30 @@
.st-dot.warn { background:var(--warn); }
.st-dot.info { background:var(--muted); }
.setari-pane[hidden] { display:none; }
- .setari-zone-title { font-size:var(--fs-md); font-weight:600; margin:0 0 4px; display:flex;
- align-items:center; gap:10px; flex-wrap:wrap; }
- .setari-zone-title .ic { opacity:.7; }
- .setari-zone-desc { color:var(--muted); font-size:var(--fs-sm); margin:0 0 16px; max-width:64ch; line-height:1.5; }
+ /* Titlu de sectiune compact (uppercase mic) — ierarhie sub titlul paginii, nu concurenta cu el. */
+ .setari-zone-title { font-size:var(--fs-xs); font-weight:600; text-transform:uppercase;
+ letter-spacing:.07em; color:var(--muted); margin:0 0 10px; display:flex;
+ align-items:center; gap:8px; flex-wrap:wrap; }
+ .setari-zone-title .ic { opacity:.7; width:15px; height:15px; }
+ .setari-zone-title .setari-badge { text-transform:none; letter-spacing:0; }
+ .setari-zone-desc { color:var(--muted); font-size:var(--fs-sm); margin:0 0 12px; max-width:60ch; line-height:1.5; }
+ /* Formulare compacte pe 2 coloane in Setari. */
+ .setari-fgrid { display:grid; grid-template-columns:1fr 1fr; gap:10px 14px; max-width:560px; margin:0 0 12px; }
+ .setari-fgrid .fg-full { grid-column:1 / -1; }
+ .setari-fgrid label { display:block; font-size:var(--fs-xs); color:var(--muted); margin-bottom:3px; }
+ .setari-fgrid input { width:100%; box-sizing:border-box; font:inherit; font-size:14px;
+ background:var(--bg); color:var(--ink); border:1px solid var(--line);
+ border-radius:6px; padding:7px 10px; }
+ @media (max-width:560px) { .setari-fgrid { grid-template-columns:1fr; } }
+ .setari-btn-row { display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
+ .setari-micro { font-size:var(--fs-xs); color:var(--muted); }
+ /* Plan: tier + consum pe un rand, bara de progres sub ele. */
+ .plan-row { display:flex; align-items:baseline; gap:10px; flex-wrap:wrap; margin:0 0 8px; }
+ .plan-tier { font-size:var(--fs-md); font-weight:600; color:var(--ink); }
+ .plan-usage { font-size:var(--fs-sm); color:var(--muted); font-variant-numeric:tabular-nums; }
+ .plan-meter { height:6px; border-radius:99px; background:var(--line2); max-width:340px;
+ overflow:hidden; margin:0 0 8px; }
+ .plan-meter > span { display:block; height:100%; border-radius:99px; background:var(--accent); }
.setari-badge { font-size:11px; font-weight:700; padding:2px 9px; border-radius:99px;
text-transform:uppercase; letter-spacing:.03em; border:1px solid transparent; }
.setari-badge.sb-ok { color:var(--ok); background:color-mix(in srgb,var(--ok) 12%,transparent);
@@ -869,7 +889,7 @@
border-color:color-mix(in srgb,var(--warn) 40%,transparent); }
.setari-badge.sb-info { color:var(--muted); background:color-mix(in srgb,var(--muted) 12%,transparent);
border-color:color-mix(in srgb,var(--muted) 35%,transparent); }
- .setari-subzone-sep { border:none; border-top:1px solid var(--line); margin:26px 0 22px; }
+ .setari-subzone-sep { border:none; border-top:1px solid var(--line); margin:20px 0 18px; }
/* Cheie API afisata o singura data. */
.keybox { font-family:var(--font-mono); font-size:14px; background:var(--card2);
border:1px solid var(--line); border-radius:8px; padding:12px 14px; word-break:break-all;