Commit Graph
143 Commits
Author SHA1 Message Date
Dasko a21b201a29 Merge grane feature/naslovi-kartica-senka: senka naslova kartica i stranice 2026-06-13 10:13:37 +02:00
Dasko bca2d47c78 fix(ui): senka na naslovima kartica, labelama i naslovu stranice preko slike
Naslovi kartica i statističke labele su goli <div> koje glass override nije
dohvatao — blede na svetloj slici. Dodato .kartica div sa senkom (boju NE
diramo, da namerno obojeni div-ovi ostanu) i .topbar-naslov dobija svetli
tekst + senku.
2026-06-13 10:13:37 +02:00
Dasko 1240a1a894 Merge grane feature/info-banner-senka: senka info-bannera preko slike 2026-06-13 10:06:52 +02:00
Dasko 7411219d65 fix(ui): senka na info-banneru u Profil—Tema preko slike
Tekst bannera „Tamna tema je aktivna…" su goli <div> koje glass override
ne dohvata — gubili su se na svetloj slici. Dodata klasa .info-banner sa
ciljanim pravilom (svetli tekst + dvoslojna senka) u glass režimu.
2026-06-13 10:06:52 +02:00
Dasko a989818c7c Merge grane feature/senka-teksta-kartice: jača senka teksta u karticama 2026-06-13 10:04:23 +02:00
Dasko fc3e58b3e8 fix(ui): jača dvoslojna senka teksta u karticama preko svetle slike
Tekst u karticama/tabelama/modalu imao slabu jednoslojnu senku (0.7–0.8),
pa se na jako providnoj kartici + svetloj slici jedva video. Prebačeno na
umerenu dvoslojnu (oštar obris 0.9 + lagani halo 0.55) — čitljivije, i dalje
diskretno. Sidebar netaknut (već dovoljno taman).
2026-06-13 10:04:23 +02:00
Dasko deb4719f60 Merge grane feature/naslov-senka-gradijent: gradijentna senka naslova 2026-06-13 09:58:40 +02:00
Dasko fcccc30b63 fix(ui): gradijentno zatamnjenje senke naslova (skoro crn → upola → bled)
Tri sloja text-shadow podešena u opadajućem zatamnjenju: oštar skoro crn
obris, srednji upola, široki bledi halo.
2026-06-13 09:58:40 +02:00
Dasko 1fb71143fb Merge grane feature/naslov-tamnija-senka: dublje zatamnjenje senke naslova 2026-06-13 09:56:11 +02:00
Dasko 06c53c2644 fix(ui): dublje zatamnjenje senke naslova van kartice
Dodat treći sloj (0 0 8px rgba(0,0,0,1)) — gust crni halo oko slova za
jači kontrast naslova na svetloj pozadinskoj slici.
2026-06-13 09:56:11 +02:00
Dasko ee8e974ab7 Merge grane feature/naslov-jaca-senka: jača senka naslova 2026-06-13 09:54:35 +02:00
Dasko a669607bea fix(ui): jača dvoslojna senka na naslovu van kartice
Naslov .naslov-traka dobio jaču dvoslojnu senku (oštar obris + širi halo)
umesto jednoslojne, da bolje „iskoči" na svetloj pozadinskoj slici.
2026-06-13 09:54:35 +02:00
Dasko 1446003554 Merge grane feature/naslov-senka: halo na naslovu van kartice 2026-06-13 09:51:41 +02:00
Dasko 70cccf1413 fix(ui): senka na naslovu van kartice (istorija prijava) preko slike
Naslov „Istorija prijava — <korisnik>" je <span> van kartice, pa ga glass
override nije dohvatao — svetli tekst bez senke se gubio na svetloj slici.
Dodata klasa .naslov-traka koja u glass režimu dobija halo (text-shadow);
ista klasa se može dati i drugim naslovima van kartica.
2026-06-13 09:51:41 +02:00
Dasko 26b1f5f01d Merge grane feature/nazad-link-poravnanje: ujednačen kompaktan .nazad-link 2026-06-13 09:45:32 +02:00
Dasko 173293cdbb fix(css): .nazad-link kompaktan u flex-column kontejnerima
U .kolona (flex-column) se .nazad-link zbog default align-items:stretch
rastezao na punu širinu, što je sa novom staklenom pill-podlogom odudaralo
od kompaktnog izgleda na formama. Dodato align-self:flex-start — kompaktan
svuda, no-op u ne-flex roditeljima.
2026-06-13 09:45:32 +02:00
Dasko 8c14381b7e Merge grane feature/vidljivost-pozadina: vidljivost elemenata preko pozadinske slike 2026-06-13 09:39:53 +02:00
Dasko 27295a3bcd fix(ui): vidljivost elemenata van kartica preko pozadinske slike
Glass override je davao svetli tekst i staklenu podlogu samo karticama,
tabelama i sidebaru — elementi van kartica (.nazad-link, .btn-sekundarno,
.btn-obrisi-ghost, checkbox-traka „Samo aktivni") i goli <div> napomene
(„maksimum N MB") ostajali su u prigušenoj boji i jedva se videli.
Dodata pravila u glass blok: pomenuti elementi dobijaju sopstvenu staklenu
pill-podlogu (poluprovidna + blur + svetli border + svetli tekst), pa se
vide bez obzira da li je slika tamna ili svetla. Napomene dobile klasu
.pomocni-tekst da ih override dohvati; checkbox-traka klasu .cek-filter.
2026-06-13 09:39:53 +02:00
Dasko 52d7988612 Merge grane feature/kartica-hover-i-animiraj: hover na svim karticama + animiraj na nabavka-detalji 2026-06-13 09:21:34 +02:00
Dasko a25dbe86c9 fix(css): hover lift na svim karticama + animiraj na nabavka-detalji karticama
Hover lift (.kartica:hover translateY) nije radio na karticama sa .animiraj
jer je fadeInUp imao fill-mode both, koji forwards zaključa transform i
nadjača hover. Prebačeno na backwards: i dalje nema treperenja na ulazu, a
hover sad radi na svim karticama u programu.
Kartice „Stavke nabavke" i „Brisanje nabavke" u nabavka_detalji nisu imale
.animiraj (previd — stagger u <style> je predviđao tri kartice). Dodato, i
stagger pomeren na nth-child(2-4) jer je prvi child .kolone „Nazad" link.
2026-06-13 09:21:28 +02:00
Dasko 7397581cb7 Merge grane feature/stagger-stranica: stagger kartica profila/podešavanja u main.css 2026-06-13 08:33:13 +02:00
Dasko af455e351e refactor(css): stagger kartica na stranicama profila/podešavanja na jedno mesto
Isti .animiraj:nth-child stagger (korak 0.06s) bio je dupliran u 7
template <style> blokova (admin_profil, admin_login_istorija, profil_tema,
podesavanja i 3 podstranice). Prebačen u main.css kao
.stranica-stack .animiraj:nth-child(N); descendant selektor čuva isto
ponašanje po neposrednom roditelju, a klasa .stranica-stack sprečava
curenje na ostatak programa. Sad radi i pod HTMX navigacijom, menja se
na jednom mestu.
2026-06-13 08:33:13 +02:00
Dasko 7b324824db Merge grane feature/status-badge-konsolidacija: bedž statusa u main.css 2026-06-13 08:22:52 +02:00
Dasko 5c17e70f6f refactor(css): bedž statusa servisa na jedno mesto u main.css
Status bedž (.status-badge i .status-* boje) je bio dupliran u
servis.html i servis_detalji.html sa sitnom razlikom u veličini.
Ujednačena veličina i prebačeno u main.css — sad se menja na jednom
mestu i radi pod HTMX navigacijom. Uklonjen i prazan <style> blok
iz magacin.html.
2026-06-13 08:22:47 +02:00
Dasko b9f2cf8361 Merge grane feature/stagger-kartice: stagger lista-kartica u main.css 2026-06-13 01:32:44 +02:00
Dasko 662964f3c8 refactor(css): stagger mobilnih lista-kartica na jedno mesto u main.css
Mobilni parnjak prethodnog (tabele): 7 lista-kartica klasa (prodaja/servis/magacin/
pod/klijent/dobavljac/nabavka-kartica) imale su identičan :nth-child stagger
(0.06s korak do 5). Uvedeno jedno pravilo [class*="-kartice"] > .animiraj:nth-child
u main.css; uklonjeni per-page blokovi. Drugi tipovi kartica (detalji/forma/
dashboard/izvestaji) imaju svoj stagger i ostaju po strani.
4 strane (nabavke/klijenti/prodaja/dobavljaci) ostale prazan dodatni-css blok →
uklonjen. Bez HTML izmena u sadržaju; radi i pod HTMX-om. Animacija lista-kartica
se sada menja na JEDNOM mestu.
2026-06-13 01:32:44 +02:00
Dasko 8906b2477f Merge grane feature/stagger-tabele: stagger redova tabela u main.css 2026-06-13 01:26:09 +02:00
Dasko edffeeecaf refactor(css): stagger animacija redova tabela na jedno mesto u main.css
Svaka lista-strana je imala identičan tbody tr:nth-child stagger (0.04s korak do
10), samo sa drugim prefiksom klase (.prodaja-tabela, .servis-tabela...). Uvedeno
JEDNO univerzalno pravilo .tabela tbody tr:nth-child(1..10) u main.css (sve tabele
već imaju .tabela, redovi .animiraj). Uklonjeni per-page blokovi iz 10 strana
(uklj. duplikat .dozvole-tabela iz admin_dozvole — kopija ostaje u main.css).
Pogađa samo redove koji se animiraju; nije bilo HTML izmena. Bonus: sada radi i
pod HTMX navigacijom (page <style> blokovi se odbacuju sa <head>, main.css ostaje).
Animacija redova se sada menja na JEDNOM mestu.
Mobilni card stagger (.X-kartica:nth-child) je zaseban — ostaje za sledeći korak.
2026-06-13 01:26:09 +02:00
Dasko ae478af67e Merge grane feature/animacije-konsolidacija: animacije poruka u main.css 2026-06-13 01:13:17 +02:00
Dasko aebcfa11e6 refactor(css): animacije poruka iz dupliranih <style> u main.css
.poruka-animacija (10 fajlova) i .greska-animacija (7 fajlova) bile su identično
duplirane po stranicama; keyframes (slideDown/shake) su već bili u main.css.
Izdvojene klase u main.css uz keyframes, uklonjeni duplikati. Forma-strane
(dobavljac/podsetnik/magacin/servis_forma) ostale prazan dodatni-css blok →
uklonjen (base.html koristi {{block}} sa difoltom, pa je bezbedno izostaviti).
HTML class= upotrebe netaknute; build, handler testovi i parsiranje prolaze.
2026-06-13 01:11:50 +02:00
Dasko 9a3aa42e19 Merge grane feature/toast-konsolidacija: toast sistem u main.css 2026-06-13 01:07:03 +02:00
Dasko f4efd60ca0 refactor(css): toast sistem iz dupliranih <style> blokova u main.css
Toast obaveštenja (.toast, .toast-greska, .toast-uspeh, .toast.nestaje,
@keyframes toastIn/Out) bila su identično duplirana u podesavanja.html i
podesavanja_opste.html. Izdvojeno jednom u main.css; uklonjeno iz oba <style>
bloka. Obe strane idu kroz base.html (učitavaju main.css), pa rade nepromenjeno.
Standalone .greska (prijava/totp_provera/setup) NAMERNO ostavljene — te strane
ne učitavaju main.css (samostalne, minimalne).
2026-06-13 01:07:03 +02:00
Dasko c07750191d Merge grane feature/btn-obrisi-ghost: ghost-obriši dugme na klasu 2026-06-13 01:02:37 +02:00
Dasko d99db72665 refactor(css): ghost-obriši dugme na .btn-obrisi-ghost klasu
Nova klasa .btn-obrisi-ghost (providna pozadina, #fca5a5 ivica, #dc2626 tekst) —
ghost varijanta brisanja, drugačija od pune .btn-obrisi-malo. Zamenjeno 6 inline
pojava u: admin_korisnici, podesavanja (2x), podesavanja_sistem, podesavanja_izgled,
profil_tema. Mala veličina je default klase; srednje (7px 14px / radius 8px /
font 13px) dobile kontekstualni override. Dodat suptilan hover (ranije ga nije bilo).
Preostali #fca5a5 su error/toast poruke (.greska/.toast-greska) — nisu dugmad.
2026-06-13 01:02:37 +02:00
Dasko c88926014b Merge grane feature/refaktor-layout: layout utili .kolona/.red-izmedju 2026-06-13 00:57:07 +02:00
Dasko e922d76331 refactor(css): layout utili .kolona i .red-izmedju
Nove utility klase: .kolona (display:flex;flex-direction:column) i .red-izmedju
(display:flex;justify-content:space-between) — struktura bez razmaka. Izdvojena
strukturna flex deklaracija iz 50 elemenata (32 kolona + 18 red-izmedju); gap/
margin ostaju kao kontekstualni override po instanci.
Visoko varirani page-header redovi (sa border-bottom/flex-wrap) ostavljeni —
jednokratni. Bez promene izgleda; šabloni parsiraju.
2026-06-13 00:57:07 +02:00
Dasko 767cad181c Merge grane feature/refaktor-tekst: sporedni tekst na .pomocni-tekst 2026-06-13 00:50:10 +02:00
Dasko 25aed85ee6 refactor(css): sporedni tekst na .pomocni-tekst klasu
39 inline elemenata (span/div) sa font-size:13px;color:var(--tekst-sporedni)
(identično postojećoj .pomocni-tekst) zamenjeno klasom; ukupno 40.
Razdelnici (border-bottom:0.5px na <tr>) NISU dirani: mešavina su thead redova
(redundantni — .tabela ih daje) i tbody data redova (gde je ivica separator i
POTREBNA), pa blanket-promena nije bezbedna. Naglašeni naslovi (font-weight:500;
color:glavni) imaju raznolik font-size (14/15/16/22px) — ne mapiraju se na jednu
klasu, ostavljeni.
2026-06-13 00:50:10 +02:00
Dasko 21dd91ac11 Merge grane feature/refaktor-tabele: inline <table> na .tabela 2026-06-13 00:45:41 +02:00
Dasko e2aaab32a7 refactor(css): inline <table> na .tabela klasu
Tabele su koristile inline width:100%;border-collapse:collapse (identično .tabela).
21 tabela sada koristi .tabela (named tabele dobile ' tabela' uz postojeću klasu).
Preostale 2 imaju samo kontekstualni font-size:13px override.
th/td/thead-tr ostavljeni inline: th/td su kontekstualni (poravnanje/širina/boja
po koloni, raznoliki), a thead tr border je redundantan-ali-bezopasan (klasa daje
isti border:0.5px var(--ivica), inline ga samo nadjačava istom vrednošću).
Bez promene izgleda; šabloni parsiraju.
2026-06-13 00:45:41 +02:00
Dasko 931466c5e5 Merge grane feature/refaktor-forme: inline labele na .polje-labela 2026-06-13 00:07:19 +02:00
Dasko 655e15b521 refactor(css): inline labele forme na .polje-labela klasu
59 inline labela (font-size:13px; color:--tekst-sporedni; display:block;
margin-bottom:6px — identično .polje-labela) zamenjeno klasom; ukupno 67 labela
sada koristi .polje-labela. Inputi se već globalno stilizuju (main.css 635-679),
pa nije bilo punih inline input-stilova. Preostale labele (12px/4px, 8px, flex
checkbox/radio) su namerne varijante — ostavljene.
Bez promene izgleda. Napomena: redundantni inline width:100% na inputima (globalni
stil ga već postavlja) ostavljen za kasnije (bezbedno uklanjanje traži ciljanje
po elementu jer je width:100% legitiman na tabelama).
2026-06-13 00:07:13 +02:00
Dasko 75ee3442ce Merge grane feature/refaktor-dugmad: inline dugmad na .btn-* klase 2026-06-12 23:58:06 +02:00
Dasko 5bcf0bc89a refactor(css): inline dugmad na semantičke .btn-* klase
Dodate klase .btn-opasno (puno crveno) i .btn-upozorenje (narandžasto/storno);
.btn-primarno-malo dobio cursor:pointer (nedostajao). Inline dugmad zamenjena
klasama u: admin_profil (lozinka/2FA/regeneriši/podesi/deaktiviraj), prodaja/
servis/nabavka_detalji (obriši/storno), servis (traži), magacin (premesti),
admin_login_istorija (nazad). Override-i tipa class=btn-primarno style=background
uklonjeni u korist .btn-opasno/.btn-upozorenje.
Ostala samo kontekstualna inline svojstva (width/align-self/veličina po instanci).
Bez promene izgleda — samo izdvajanje ponovljenog stila. Šabloni parsiraju.
2026-06-12 23:58:00 +02:00
Dasko e7d0e0f5e6 Merge grane feature/rezervni-kodovi: rezervni (jednokratni) kodovi za 2FA 2026-06-12 23:44:22 +02:00
Dasko ce624fdc87 feat(2fa): rezervni (jednokratni) kodovi za 2FA
Alternativa TOTP-u kada uređaj nije dostupan. Po specifikaciji:
10 kodova pri aktivaciji, čuvani kao bcrypt heš.
Backend:
- migracija 039 (tabela rezervni_kodovi, FK CASCADE)
- auth.GenerisiRezervneKodove (Crockford base32, XXXX-XXXX) + NormalizujRezervniKod
- RezervniKodoviRepository (Zameni/Iskoristi/BrojPreostalih/Obrisi) + SQLite impl
- žičenje u Handler (+ reinicijalizuj)
Prijava:
- VerifikujTotp prvo proba TOTP, pa rezervni kod (isto polje); kod je jednokratni
- totp_provera.html: input opušten (slova/crtica), napomena o rezervnom kodu
Profil:
- aktivacija generiše i prikazuje kodove JEDNOM; dugme Regeneriši; brojač preostalo X/10
- deaktivacija briše kodove
Testovi: auth (generisanje/format/normalizacija), repo (jednokratnost/regeneracija),
prijava rezervnim kodom end-to-end. Ukupno 36 test funkcija.
2026-06-12 23:44:09 +02:00
Dasko 7c42a080b7 Merge grane feature/readme-azuriranje: ažuriran README 2026-06-12 23:19:13 +02:00
Dasko 18c1ce48e5 docs(readme): ažuriran spisak funkcija (srpski i engleski)
Dodato/ispravljeno u oba README-a:
- TOTP: tajna šifrovana u bazi (AES-256-GCM) umesto netačne tvrdnje o rezervnim
kodovima (nisu implementirani — premešteni u Planirano)
- RBAC: naglašeno sprovođenje provere na nivou ruta i u handlerima
- Backup: dodato vraćanje baze iz kopije (bezbedno, bez prekida rada)
- Dodato: strukturisano logovanje (slog) i automatski testovi
2026-06-12 23:19:07 +02:00
Dasko 05332b0951 Merge grane feature/testovi-parseformu: testovi validatora forme 2026-06-12 23:12:56 +02:00
Dasko dd7aaa05be test: validatori forme (parseFormu*)
internal/handler/parseformu_test.go — tabelarni testovi za:
- parseFormuArtikla (naziv obavezan, negativna količina, neispravna cena)
- parseFormuKlijenta (fizičko/pravno obavezna polja, email, podrazumevani tip)
- parseFormuProdaje (bez stavki, količina 0, neispravan artikal, nesklad, validno)
- parseFormuNaloga (uređaj/opis obavezni, podrazumevani status)
Ukupno 32 test funkcije u repozitorijumu.
2026-06-12 23:12:56 +02:00