PRD 5.16 — propagare design finalizata (system font stack, fara IBM Plex self-hostat): - US-001/002/008: tokeni --font-ui/--font-mono (system stack) + scala --fs-*; zero @font-face si zero /static/fonts/; landing aliniat la acelasi stack - US-003: RAR online = dot compact in antet + meniu burger; banda rosie DOAR pe blocat (invariant zero-silent-failures pastrat) - US-010: antet "ROMFAST AUTOPASS" + nume service + /login brandeit 2 coloane + badge plan; meniu burger cu separatoare; gate strict pe is_authenticated - US-011: selector tema pill icon+eticheta (reuse THEMES) - US-004/005/006/007: bug-fix editor prestatii (picker cod+denumire, add_extra in mod operatii, cod ales se salveaza fara "+", Renunta inchide via closest) - US-012/013: landing Autentificare->/login; wizard import colapsat + 4 pasi pe tokeni - fix VERIFY E2E: contoare duplicate pe 390px (inline display:flex batea @media) -> CSS + test-lock PRD 5.17 — tipuri de cont + trial Pro 30z + enforcement DUR: - US-001/002/008: accounts.tier + trial_until (migrare aditiva defensiva); app/plans.py sursa unica (PLANS, FREE_MONTHLY_LIMIT=60, effective_tier(now injectabil), monthly_usage, CONSUMED_STATUSES); create_account trial Pro 30z; CLI set-tier (protejat id=1, audit) - US-003/004/005: enforce volum 60/luna INAINTE de build_key pe ambele canale (PLAN_LIMITA_LUNARA, 3 niveluri + log_event); gate API Pro+ (PLAN_FARA_API 403 actionabil); valideaza/nomenclator raman permise; downgrade lazy; flag AUTOPASS_ENFORCE_PLANS (kill-switch) - US-006: badge plan antet + linie burger + consum N/60 + warn>=80% + 6 stari + copy RO pluralizat + banner one-time trial->Gratuit + pagina Cont Regresie: 1380 passed, 0 failed, 1 deselected (live). E2E browser pe 390/1280 confirmat. Backend trimitere (worker/masina stari/idempotenta/contract RAR) NEATINS. Lucrul 5.18 (corpus kNN) ramane separat, necomis. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
150 lines
6.6 KiB
HTML
150 lines
6.6 KiB
HTML
<div class="card" id="card-cont">
|
|
<h2 style="font-size:15px; margin:0 0 16px;">Contul meu</h2>
|
|
|
|
<!-- Sectiunea: Plan curent (US-006 PRD 5.17) -->
|
|
{% if plan_linie is defined %}
|
|
<div id="sectiune-plan" style="margin-bottom:20px; padding-bottom:20px; border-bottom:1px solid var(--line);">
|
|
<h3 style="font-size:var(--fs-sm); color:var(--muted); font-weight:500; margin:0 0 10px;
|
|
text-transform:uppercase; letter-spacing:.04em;">Plan curent</h3>
|
|
|
|
<div style="font-size:var(--fs-md); font-weight:600; margin-bottom:6px;
|
|
color:{% if plan_limita_atinsa|default(false) %}var(--err){% elif plan_warn|default(false) %}var(--warn){% else %}var(--ink){% endif %};">
|
|
{{ plan_linie }}
|
|
</div>
|
|
|
|
{% if monthly_limit_val is defined and monthly_limit_val is not none and effective_tier_name|default('') == 'free' %}
|
|
<div style="font-size:var(--fs-sm); color:var(--muted); margin-bottom:8px;">
|
|
Planul Gratuit include {{ monthly_limit_val }} prestatii/luna prin dashboard-ul web.
|
|
{% 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 %}
|
|
</div>
|
|
{% endif %}
|
|
|
|
<div style="font-size:var(--fs-sm); color:var(--muted); padding:8px 10px;
|
|
border:1px solid var(--line); border-radius:6px; margin-top:4px;">
|
|
Vrei sa treci pe Standard, Pro sau Premium?
|
|
Contacteaza-ne pentru alocare manuala — nu exista inca plata self-service.
|
|
<strong>Pro</strong> adauga import prin API; <strong>Standard</strong> si
|
|
<strong>Premium</strong> ridica limita de volum.
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
<!-- Sectiunea: Date firma (US-002) -->
|
|
<div style="margin-bottom:20px; padding-bottom:20px; border-bottom:1px solid var(--line);">
|
|
<h3 style="font-size:13px; color:var(--muted); font-weight:500; margin:0 0 8px; text-transform:uppercase; letter-spacing:.04em;">Date firma</h3>
|
|
|
|
{% if date_firma_mesaj %}
|
|
<div class="flash" style="margin-bottom:12px;">{{ date_firma_mesaj }}</div>
|
|
{% endif %}
|
|
|
|
{% if date_firma_eroare %}
|
|
<div class="banner" style="margin-bottom:12px; padding:8px 12px;">{{ date_firma_eroare }}</div>
|
|
{% endif %}
|
|
|
|
<form hx-post="/cont/date-firma"
|
|
hx-target="#card-cont"
|
|
hx-swap="outerHTML">
|
|
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
|
<p style="margin:0 0 8px;">
|
|
<label style="font-size:13px; color:var(--muted);">Companie</label><br>
|
|
<input type="text" name="companie" required
|
|
value="{{ account_meta.name or '' }}"
|
|
style="width:100%; max-width:340px;"
|
|
placeholder="Numele firmei (ex. Service Auto SRL)">
|
|
</p>
|
|
<p style="margin:0 0 8px;">
|
|
<label style="font-size:13px; color:var(--muted);">Email contact</label><br>
|
|
<input type="email" name="email" required
|
|
value="{{ account_meta.email or '' }}"
|
|
style="width:100%; max-width:340px;"
|
|
placeholder="contact@firma.ro">
|
|
</p>
|
|
<p style="margin:0 0 12px;">
|
|
<label style="font-size:13px; color:var(--muted);">CUI (cod unic de identificare)</label><br>
|
|
<input type="text" name="cui" required
|
|
value="{{ account_meta.cui or '' }}"
|
|
style="width:100%; max-width:340px;"
|
|
placeholder="RO12345678">
|
|
</p>
|
|
<button type="submit">Salveaza datele firmei</button>
|
|
</form>
|
|
</div>
|
|
|
|
<!-- Sectiunea: Cheia mea API -->
|
|
<div style="margin-bottom:20px; padding-bottom:20px; border-bottom:1px solid var(--line);">
|
|
<h3 style="font-size:13px; color:var(--muted); font-weight:500; margin:0 0 8px; text-transform:uppercase; letter-spacing:.04em;">Cheia mea API</h3>
|
|
|
|
{% if api_key %}
|
|
<div class="flash" style="margin-bottom:12px;">Cheia a fost rotita. Salveaz-o acum — nu o vei mai putea vedea.</div>
|
|
|
|
<div class="card" style="font-family:monospace; word-break:break-all; font-size:14px; background:#0f1115; margin:0 0 8px;">
|
|
{{ api_key }}
|
|
</div>
|
|
|
|
<button type="button"
|
|
data-key="{{ api_key }}"
|
|
onclick="navigator.clipboard.writeText(this.dataset.key).then(()=>this.textContent='Copiat!')">
|
|
Copiaza cheia
|
|
</button>
|
|
|
|
<p style="font-size:13px; color:var(--warn); margin:10px 0 0;">
|
|
Atentie: la urmatoarea vizita aceasta cheie dispare. Daca o pierzi, roteste din nou.
|
|
</p>
|
|
{% endif %}
|
|
|
|
{% if rot_eroare %}
|
|
<div class="banner" style="margin-bottom:12px; padding:8px 12px;">{{ rot_eroare }}</div>
|
|
{% endif %}
|
|
|
|
<form hx-post="/cont/roteste-cheie"
|
|
hx-target="#card-cont"
|
|
hx-swap="outerHTML"
|
|
style="margin-top:{% if api_key %}12px{% else %}0{% endif %};">
|
|
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
|
<button type="submit" style="background:var(--card); color:var(--warn); border-color:var(--warn);">
|
|
Roteste cheia API
|
|
</button>
|
|
<span style="font-size:12px; color:var(--muted); margin-left:8px;">Cheia veche se revoca imediat.</span>
|
|
</form>
|
|
</div>
|
|
|
|
<!-- Sectiunea: Credentiale RAR -->
|
|
<div>
|
|
<h3 style="font-size:13px; color:var(--muted); font-weight:500; margin:0 0 8px; text-transform:uppercase; letter-spacing:.04em;">Credentiale RAR (portal AUTOPASS)</h3>
|
|
|
|
{% if are_creds %}
|
|
<div class="flash" style="margin-bottom:12px;">Credentiale RAR configurate.</div>
|
|
{% endif %}
|
|
|
|
{% if creds_mesaj %}
|
|
<div class="flash" style="margin-bottom:12px;">{{ creds_mesaj }}</div>
|
|
{% endif %}
|
|
|
|
{% if creds_eroare %}
|
|
<div class="banner" style="margin-bottom:12px; padding:8px 12px;">{{ creds_eroare }}</div>
|
|
{% endif %}
|
|
|
|
<form hx-post="/cont/rar-creds"
|
|
hx-target="#card-cont"
|
|
hx-swap="outerHTML">
|
|
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
|
<p style="margin:0 0 8px;">
|
|
<label style="font-size:13px; color:var(--muted);">Email RAR</label><br>
|
|
<input type="email" name="rar_email" required style="width:100%; max-width:340px;"
|
|
placeholder="email@service.ro">
|
|
</p>
|
|
<p style="margin:0 0 12px;">
|
|
<label style="font-size:13px; color:var(--muted);">Parola RAR</label><br>
|
|
<input type="password" name="rar_parola" required style="width:100%; max-width:340px;"
|
|
autocomplete="new-password">
|
|
</p>
|
|
<button type="submit">Salveaza credentiale RAR</button>
|
|
<span style="font-size:12px; color:var(--muted); margin-left:8px;">Parola stocata criptat, niciodata in clar.</span>
|
|
</form>
|
|
</div>
|
|
</div>
|