=== Îngerașul Secret ===
Contributors: cornelcaba
Tags: secret santa, ingeras, craciun, joc, evenimente
Requires at least: 5.5
Tested up to: 6.6
Requires PHP: 7.4
Stable tag: 1.0.14
License: GPLv2 or later

Organizează jocul de Secret Santa direct pe site-ul WordPress. Participanți multipli, poze, bio, amestec cu animație slot-machine și dezvăluire în grup.

== Description ==

Pluginul „Îngerașul Secret" îți permite să organizezi jocul Secret Santa pe orice site WordPress. Creezi o cameră, trimiți participanților un cod de 6 caractere, ei se înscriu cu nume, poză și bio, aleg dacă sunt băiat/fată, apoi tu apeși „Amestecă" și îngerașii se generează cu o animație slot-machine spectaculoasă.

**Funcții principale**

* Camere multiple (reutilizabile pentru orice grup)
* Identificare participanți prin device (fără login WordPress necesar)
* Fiecare participant se înscrie cu: prenume, nume, gen (♂/♀), poză, bio
* Algoritm cross-gender: fiecare băiat primește o fată și invers; dacă numărul diferă, surplusul aceluiași gen se împerechează între ei
* Animație slot-machine la shuffle: 25 persoane/sec inițial, decelerare lină, 11 secunde durată, aterizare exactă
* Confirmare cu typing manual `AMESTECA` și `DEZVALUIE` pentru acțiunile critice
* Dezvăluire în grup: card cu îngeraș → destinatar, cu confetti
* Click pe orice participant → modal cu toate detaliile
* Panou admin web (link cu token secret) + pagină în wp-admin

== Installation ==

1. Upload directorul `ingerasul-secret` în `/wp-content/plugins/` (sau încarcă .zip-ul din **Plugins → Add New → Upload**)
2. Activează pluginul din meniul **Plugins**
3. Creează o pagină nouă (ex: titlul „Îngerașul Secret") și adaugă shortcode-ul:
   `[ingerasul_secret]`
4. Publică pagina și deschide URL-ul. Pe această pagină va rula întreaga aplicație.
5. Pentru management, intră în wp-admin → meniul lateral **Îngerașul Secret**.

== Frequently Asked Questions ==

= Trebuie participanții să aibă cont WordPress? =

Nu. Sunt identificați prin cookie pe dispozitivul lor. Asta înseamnă că dacă își șterg cookies sau intră de pe alt telefon, trebuie să se reînscrie.

= Unde se salvează pozele? =

În folderul standard WordPress: `wp-content/uploads/ingerasul-secret/`.

= Cum resetez o cameră? =

Din panoul de admin (linkul cu token), apasă „Resetează amestecul" sau șterge camera complet (introducând codul de confirmare).

= Se integrează cu orice temă? =

Da. CSS-ul pluginului este scoped pe `.ingerasul-secret-app`, deci nu afectează stilurile temei.

== Changelog ==

= 1.0.14 =
* Adăugat: traducere completă în limba italiană (it_IT). Toate textele UI (PHP + JS) sunt acum localizate prin fișiere `.po`/`.mo` în folderul `languages/`.
* Adăugat: stringurile din animația slot-machine și din confirmări (JS) sunt acum traduse prin `window.ingerasulI18n`, populat server-side cu `__()`. Fallback automat la limba română dacă lipsește o traducere.

= 1.0.13 =
* Eliminat: secțiunea „🎉 Dezvăluire în grup" și butonul „Dezvăluie îngerașul secret" de pe panoul de admin. Participanții văd rezultatul pe pagina lor personală după shuffle.

= 1.0.12 =
* Butonul „Dezvăluie îngerașul secret" refacut ca formular POST (exact ca „Amestecă îngerașii") — fără dependență JS pe click. Click = server înregistrează reveal = redirect = admin vede animația secvențială cu toate perechile.
* Schemă: coloană nouă `reveal_started_at` în tabela de camere. Handler nou `ingerasul_reveal`.
* Sincronizare cross-device: participanții care au pagina deschisă sunt auto-redirectați la pagina lor de reveal personal când adminul declanșează dezvăluirea (via polling status extins cu `reveal_age`).
* Viteza inițială a animației slot crescută de la 25 la **30 persoane/secundă** — derulare mai intensă la început.

= 1.0.11 =
* Adăugat: animația de amestec rulează acum sincronizat pe TOATE telefoanele participanților. Cum funcționează: când adminul apasă „Amestecă", serverul salvează shuffle-ul; paginile participanților fac polling (la fiecare 2,5s) prin AJAX la endpoint-ul `ingerasul_status` și, când detectează shuffle proaspăt, rulează aceeași animație slot-machine local și apoi reîncarcă pagina.
* Pe pagina admin, după redirect cu `ok=shuffled`, animația rulează și acolo. URL-ul e curățat după animație ca să nu se ruleze la refresh.
* Simplificat butonul „Dezvăluie îngerașul secret": fără popup, fără scriere DEZVALUIE. Click → pornește direct secvența de dezvăluire cu animație pe rând.

= 1.0.10 =
* Redenumit pill-ul „🎮 Pagina de joc" în „▶ Start joc" și schimbat link-ul să ducă la pagina de bază a plugin-ului (pagina de start / home unde aterizează participanții).

= 1.0.9 =
* Simplificat: butonul „Amestecă îngerașii" este acum un submit de formular POST simplu. Fără popup, fără typing confirm, fără dependență JavaScript — click = shuffle. Aceeași simplificare pentru „Amestecă din nou".
* Butonul „Dezvăluie îngerașul secret" rămâne cu confirmarea DEZVALUIE și animația slot (funcționalitate separată).

= 1.0.8 =
* Rescriere completă a părții de event binding: în loc de `addEventListener` pe fiecare element (dependent de timing), folosim un singur listener de event delegation pe `document`. Prinde click-uri indiferent când apar elementele sau dacă tema le clonează/mută.
* `init()` rulează IMEDIAT (scriptul e inline după toate elementele — nu mai așteaptă DOMContentLoaded).
* Logare vizibilă în consola browserului: la pornire „[Îngerașul Secret] Init OK · butoane shuffle: N"; la click „[Îngerașul Secret] click pe Amestecă — pornesc confirmarea".
* Funcții expuse global (`window.ingerasulShuffle()`, `window.ingerasulReveal()`) ca fallback direct apelabil din consolă pentru troubleshooting.

= 1.0.7 =
* Fix final pentru butonul „Amestecă îngerașii": CSS și JS sunt acum **inline** în output-ul shortcode-ului, citite direct de pe disc cu `file_get_contents`. Nu mai există nicio cale prin care vreo temă, page builder, cache plugin, minifier JS/CSS sau optimizator să poată bloca încărcarea. Funcționează garantat.

= 1.0.6 =
* Fix: tema suprascria culoarea textului pe butoane la hover (textul devenea roșu din cauza regulii generice `a:hover`). Toate butoanele (primary, secondary, gold, ghost, danger, danger-ghost) păstrează acum culoarea corectă a textului indiferent de temă, inclusiv pe hover și focus.

= 1.0.5 =
* Adăugat: pill-link auriu „🎮 Pagina de joc ↗" în rândul de etichete al panoului de admin — deschide într-un tab nou pagina participanților, ca adminul să vadă ce văd ei.

= 1.0.4 =
* Fix critic: butonul „Amestecă îngerașii" nu răspundea pe anumite teme / page builder-e (Elementor, Divi, cache plugin-uri care interferau cu wp_enqueue). Acum JS + CSS sunt printate direct în output-ul shortcode-ului (bulletproof), cu guard pentru a nu dubla event handlers dacă și wp_enqueue le încarcă.
* Îmbunătățire: confirmarea acțiunilor critice („AMESTECA", „DEZVALUIE") acceptă acum și scrierea cu diacritice („AMESTECĂ", „DEZVĂLUIE").

= 1.0.3 =
* Adăugat: butoanele „🏠 HOME" pe toate paginile (anterior etichetate „Acasă") — acces rapid spre pagina de start a jocului.
* Adăugat: data limită pentru fiecare cameră. La creare se poate seta o dată custom (orice zi în viitor), altfel default 10 zile. Camerele expirate sunt șterse automat printr-un cron WordPress zilnic.
* Afișare a expirării: badge pe panoul de admin („expiră în X zile"), mențiune pe pagina „Cameră creată", coloană nouă în tabelul de camere din wp-admin.

= 1.0.2 =
* Fix: butonul „Amestecă îngerașii" nu funcționa pe site-uri cu page builder-e (Elementor/Divi) — asset-urile (JS, CSS) se încarcă acum și când shortcode-ul e inserat prin page builder, nu doar din conținut clasic.
* Eliminat: butonul „Șterge-mă din cameră" de pe pagina participanților.
* Fix: parantezele () din jurul codului de confirmare ștergere cameră (se afișau straniu din cauza stilului temei pentru `<code>`).
* Adăugat: stil inline propriu pentru `<code>` (exclusiv `.copy-link`) — nu mai preia forțat fundalul block de la temă.

= 1.0.1 =
* Fix: linkul lung de admin/cameră se rupe corect pe mai multe linii (nu mai iese din chenar).
* Adăugat: buton „📋 Copiază" lângă linkul de cameră și linkul de admin.

= 1.0.0 =
* Lansare inițială cu toate funcțiile.
