Embed implementacija, animacije, sidebar hover

This commit is contained in:
2026-06-04 02:50:48 +02:00
parent 851ceb32dc
commit 08b9359a76
34 changed files with 171 additions and 378 deletions
+12
View File
@@ -0,0 +1,12 @@
package assets
import "embed"
//go:embed migrations
var MigracijeFS embed.FS
//go:embed web/static/css
var StaticFS embed.FS
//go:embed web/templates
var TemplatesFS embed.FS
+10 -5
View File
@@ -4,6 +4,7 @@ import (
"context" "context"
"fmt" "fmt"
"io" "io"
"io/fs"
"log" "log"
"net/http" "net/http"
"os" "os"
@@ -11,6 +12,7 @@ import (
"sort" "sort"
"time" "time"
"ntech"
"ntech/internal/auth" "ntech/internal/auth"
"ntech/internal/config" "ntech/internal/config"
"ntech/internal/db/sqlite" "ntech/internal/db/sqlite"
@@ -30,7 +32,7 @@ func main() {
auth.InitAuthLog() auth.InitAuthLog()
if config.JelPrvoPokretanje() { if config.JelPrvoPokretanje() {
config.PokreniSetup() config.PokreniSetup(assets.TemplatesFS)
return return
} }
@@ -50,7 +52,7 @@ func main() {
} }
defer db.Close() defer db.Close()
if err := sqlite.PokreniMigracije(db, "migrations"); err != nil { if err := sqlite.PokreniMigracije(db, assets.MigracijeFS); err != nil {
log.Fatalf("Greška pri migracijama: %v", err) log.Fatalf("Greška pri migracijama: %v", err)
} }
log.Println("Migracije uspešno izvršene") log.Println("Migracije uspešno izvršene")
@@ -75,7 +77,7 @@ func main() {
h.Verzija = Verzija h.Verzija = Verzija
if os.Getenv("NTECH_ENV") == "production" { if os.Getenv("NTECH_ENV") == "production" {
kes, err := handler.KreirajKes() kes, err := handler.KreirajKes(assets.TemplatesFS)
if err != nil { if err != nil {
log.Fatalf("Greška pri kreiranju keša šablona: %v", err) log.Fatalf("Greška pri kreiranju keša šablona: %v", err)
} }
@@ -88,8 +90,11 @@ func main() {
r.Use(ntechmw.CsrfMiddleware) r.Use(ntechmw.CsrfMiddleware)
r.Use(middleware.Compress(5)) r.Use(middleware.Compress(5))
// statični fajlovi // uploads se servira sa diska (runtime fajlovi)
r.Handle("/static/*", http.StripPrefix("/static/", http.FileServer(http.Dir("web/static")))) r.Handle("/static/uploads/*", http.StripPrefix("/static/uploads/", http.FileServer(http.Dir("web/static/uploads"))))
// ostali statični fajlovi (CSS) iz embed FS-a
staticSub, _ := fs.Sub(assets.StaticFS, "web/static")
r.Handle("/static/*", http.StripPrefix("/static/", http.FileServer(http.FS(staticSub))))
// javne rute (bez autentifikacije) // javne rute (bez autentifikacije)
r.Get("/prijava", h.PrikazPrijave) r.Get("/prijava", h.PrikazPrijave)
+3 -3
View File
@@ -3,9 +3,9 @@ package config
import ( import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"io/fs"
"log" "log"
"net/http" "net/http"
"os"
"strings" "strings"
"github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5"
@@ -13,7 +13,7 @@ import (
) )
// PokreniSetup pokreće WebView prozor za prvo podešavanje // PokreniSetup pokreće WebView prozor za prvo podešavanje
func PokreniSetup() { func PokreniSetup(fsys fs.FS) {
port := NadjiSlobodanPort() port := NadjiSlobodanPort()
if port == 0 { if port == 0 {
log.Fatal("Greška: nije pronađen nijedan slobodan port") log.Fatal("Greška: nije pronađen nijedan slobodan port")
@@ -30,7 +30,7 @@ func PokreniSetup() {
http.Error(w, "Greška", http.StatusInternalServerError) http.Error(w, "Greška", http.StatusInternalServerError)
return return
} }
sadrzaj, err := os.ReadFile("web/templates/setup/index.html") sadrzaj, err := fs.ReadFile(fsys, "web/templates/setup/index.html")
if err != nil { if err != nil {
http.Error(w, "Greška", http.StatusInternalServerError) http.Error(w, "Greška", http.StatusInternalServerError)
return return
+8 -8
View File
@@ -3,8 +3,8 @@ package sqlite
import ( import (
"database/sql" "database/sql"
"fmt" "fmt"
"os" "io/fs"
"path/filepath" "path"
"sort" "sort"
_ "modernc.org/sqlite" _ "modernc.org/sqlite"
@@ -32,8 +32,8 @@ func OtvoriDB(putanja string) (*sql.DB, error) {
return db, nil return db, nil
} }
// PokreniMigracije izvršava sve SQL fajlove iz foldera koji još nisu izvršeni // PokreniMigracije izvršava sve SQL fajlove iz fs.FS koji još nisu izvršeni
func PokreniMigracije(db *sql.DB, folder string) error { func PokreniMigracije(db *sql.DB, fsys fs.FS) error {
// kreiramo tabelu za praćenje migracija ako ne postoji // kreiramo tabelu za praćenje migracija ako ne postoji
_, err := db.Exec(` _, err := db.Exec(`
CREATE TABLE IF NOT EXISTS migracije ( CREATE TABLE IF NOT EXISTS migracije (
@@ -46,7 +46,7 @@ func PokreniMigracije(db *sql.DB, folder string) error {
} }
// čitamo sve .sql fajlove iz foldera // čitamo sve .sql fajlove iz foldera
unosi, err := os.ReadDir(folder) unosi, err := fs.ReadDir(fsys, "migrations")
if err != nil { if err != nil {
return fmt.Errorf("ntech: PokreniMigracije: čitanje foldera: %w", err) return fmt.Errorf("ntech: PokreniMigracije: čitanje foldera: %w", err)
} }
@@ -57,7 +57,7 @@ func PokreniMigracije(db *sql.DB, folder string) error {
}) })
for _, unos := range unosi { for _, unos := range unosi {
if filepath.Ext(unos.Name()) != ".sql" { if path.Ext(unos.Name()) != ".sql" {
continue continue
} }
@@ -74,8 +74,8 @@ func PokreniMigracije(db *sql.DB, folder string) error {
} }
// čitamo sadržaj SQL fajla // čitamo sadržaj SQL fajla
putanja := filepath.Join(folder, naziv) putanja := "migrations/" + naziv
sadrzaj, err := os.ReadFile(putanja) sadrzaj, err := fs.ReadFile(fsys, putanja)
if err != nil { if err != nil {
return fmt.Errorf("ntech: PokreniMigracije: čitanje %s: %w", naziv, err) return fmt.Errorf("ntech: PokreniMigracije: čitanje %s: %w", naziv, err)
} }
+3 -1
View File
@@ -3,12 +3,13 @@ package handler
import ( import (
"database/sql" "database/sql"
"html/template" "html/template"
"io/fs"
"net/http"
"ntech/internal/db" "ntech/internal/db"
"ntech/internal/db/sqlite" "ntech/internal/db/sqlite"
"ntech/internal/middleware" "ntech/internal/middleware"
"ntech/internal/model" "ntech/internal/model"
"net/http"
) )
// Handler drži zavisnosti koje su potrebne svim handlerima // Handler drži zavisnosti koje su potrebne svim handlerima
@@ -28,6 +29,7 @@ type Handler struct {
LoginIstorijsaRepo db.LoginIstorijsaRepository LoginIstorijsaRepo db.LoginIstorijsaRepository
Verzija string Verzija string
Templates map[string]*template.Template Templates map[string]*template.Template
TemplatesFS fs.FS
} }
// Novi kreira novi Handler sa datom bazom // Novi kreira novi Handler sa datom bazom
+5 -4
View File
@@ -3,6 +3,7 @@ package handler
import ( import (
"fmt" "fmt"
"html/template" "html/template"
"io/fs"
"log" "log"
"net/http" "net/http"
) )
@@ -34,15 +35,15 @@ var standaloneIme = []string{
"prijava", "setup", "totp_provera", "prodaja_stampa", "prijava", "setup", "totp_provera", "prodaja_stampa",
} }
// KreirajKes parsuje sve šablone i vraća ih keširane u mapi // KreirajKes parsuje sve šablone iz fsys i vraća ih keširane u mapi
func KreirajKes() (map[string]*template.Template, error) { func KreirajKes(fsys fs.FS) (map[string]*template.Template, error) {
kes := make(map[string]*template.Template) kes := make(map[string]*template.Template)
for _, ime := range saSidebar { for _, ime := range saSidebar {
fajlovi := make([]string, len(bazniSabloni), len(bazniSabloni)+1) fajlovi := make([]string, len(bazniSabloni), len(bazniSabloni)+1)
copy(fajlovi, bazniSabloni) copy(fajlovi, bazniSabloni)
fajlovi = append(fajlovi, "web/templates/stranice/"+ime+".html") fajlovi = append(fajlovi, "web/templates/stranice/"+ime+".html")
t, err := template.ParseFiles(fajlovi...) t, err := template.ParseFS(fsys, fajlovi...)
if err != nil { if err != nil {
return nil, fmt.Errorf("kes: %s: %w", ime, err) return nil, fmt.Errorf("kes: %s: %w", ime, err)
} }
@@ -50,7 +51,7 @@ func KreirajKes() (map[string]*template.Template, error) {
} }
for _, ime := range standaloneIme { for _, ime := range standaloneIme {
t, err := template.ParseFiles("web/templates/stranice/" + ime + ".html") t, err := template.ParseFS(fsys, "web/templates/stranice/"+ime+".html")
if err != nil { if err != nil {
return nil, fmt.Errorf("kes: %s: %w", ime, err) return nil, fmt.Errorf("kes: %s: %w", ime, err)
} }
+34 -1
View File
@@ -31,6 +31,7 @@ body {
.sidebar.skupljen { .sidebar.skupljen {
width: 60px; width: 60px;
overflow: hidden;
} }
/* vrh sidebara — logo zona */ /* vrh sidebara — logo zona */
@@ -131,7 +132,7 @@ body {
white-space: nowrap; white-space: nowrap;
position: relative; position: relative;
text-decoration: none; text-decoration: none;
transition: background 0.2s, color 0.2s; transition: background 0.2s, color 0.2s, transform 0.15s ease;
} }
.nav-stavka:hover { .nav-stavka:hover {
@@ -139,6 +140,14 @@ body {
color: var(--tekst-jak); color: var(--tekst-jak);
} }
.sidebar:not(.skupljen) .nav-stavka:hover {
transform: scale(1.03);
}
.sidebar.skupljen .nav-stavka:hover svg {
transform: scale(1.15);
}
.nav-stavka.aktivan { .nav-stavka.aktivan {
background: var(--sb-aktivan); background: var(--sb-aktivan);
color: var(--tekst-jak); color: var(--tekst-jak);
@@ -159,6 +168,7 @@ body {
flex-shrink: 0; flex-shrink: 0;
width: 20px; width: 20px;
height: 20px; height: 20px;
transition: transform 0.15s ease;
} }
.nav-stavka span { .nav-stavka span {
@@ -437,6 +447,29 @@ select {
} }
} }
/* animacije */
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes slideDown {
from { opacity: 0; transform: translateY(-10px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes shake {
0%, 100% { transform: translateX(0); }
20% { transform: translateX(-6px); }
40% { transform: translateX(6px); }
60% { transform: translateX(-4px); }
80% { transform: translateX(4px); }
}
.animiraj {
animation: fadeInUp 0.4s ease both;
}
/* gornja traka magacina — responsive */ /* gornja traka magacina — responsive */
.magacin-traka { .magacin-traka {
display: flex; display: flex;
+3 -14
View File
@@ -8,17 +8,8 @@
from { opacity: 0; transform: translateY(-10px); } from { opacity: 0; transform: translateY(-10px); }
to { opacity: 1; transform: translateY(0); } to { opacity: 1; transform: translateY(0); }
} }
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
}
.poruka-animacija { animation: slideDown 0.3s ease forwards; } .poruka-animacija { animation: slideDown 0.3s ease forwards; }
.korisnici-tabela tbody tr {
animation: fadeInUp 0.25s ease forwards;
opacity: 0;
}
.korisnici-tabela tbody tr:nth-child(1) { animation-delay: 0.04s; } .korisnici-tabela tbody tr:nth-child(1) { animation-delay: 0.04s; }
.korisnici-tabela tbody tr:nth-child(2) { animation-delay: 0.08s; } .korisnici-tabela tbody tr:nth-child(2) { animation-delay: 0.08s; }
.korisnici-tabela tbody tr:nth-child(3) { animation-delay: 0.12s; } .korisnici-tabela tbody tr:nth-child(3) { animation-delay: 0.12s; }
@@ -31,8 +22,6 @@
.korisnici-tabela tbody tr:nth-child(10) { animation-delay: 0.40s; } .korisnici-tabela tbody tr:nth-child(10) { animation-delay: 0.40s; }
.nova-forma-kartica { .nova-forma-kartica {
animation: fadeInUp 0.25s ease forwards;
opacity: 0;
animation-delay: 0.30s; animation-delay: 0.30s;
} }
</style> </style>
@@ -52,7 +41,7 @@
{{end}} {{end}}
<!-- lista korisnika --> <!-- lista korisnika -->
<div class="kartica" style="padding:0;overflow:hidden;"> <div class="kartica animiraj" style="padding:0;overflow:hidden;">
<div style="padding:16px 20px;border-bottom:0.5px solid var(--ivica);"> <div style="padding:16px 20px;border-bottom:0.5px solid var(--ivica);">
<span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Korisnici sistema</span> <span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Korisnici sistema</span>
</div> </div>
@@ -70,7 +59,7 @@
</thead> </thead>
<tbody> <tbody>
{{range .Korisnici}} {{range .Korisnici}}
<tr style="border-bottom:0.5px solid var(--ivica);"> <tr class="animiraj" style="border-bottom:0.5px solid var(--ivica);">
<td style="padding:10px 20px;font-size:14px;font-weight:500;color:var(--tekst-glavni);">{{.KorisnickoIme}}</td> <td style="padding:10px 20px;font-size:14px;font-weight:500;color:var(--tekst-glavni);">{{.KorisnickoIme}}</td>
<td style="padding:10px 20px;"> <td style="padding:10px 20px;">
{{if eq $.KorisnikUloga "superadmin"}} {{if eq $.KorisnikUloga "superadmin"}}
@@ -127,7 +116,7 @@
</div> </div>
<!-- forma za novog korisnika --> <!-- forma za novog korisnika -->
<div class="kartica nova-forma-kartica"> <div class="kartica nova-forma-kartica animiraj">
<div style="font-size:15px;font-weight:500;color:var(--tekst-glavni);margin-bottom:16px;padding-bottom:12px;border-bottom:0.5px solid var(--ivica);"> <div style="font-size:15px;font-weight:500;color:var(--tekst-glavni);margin-bottom:16px;padding-bottom:12px;border-bottom:0.5px solid var(--ivica);">
Novi korisnik Novi korisnik
</div> </div>
@@ -2,6 +2,15 @@
{{define "naslov"}}Istorija prijava — NTech{{end}} {{define "naslov"}}Istorija prijava — NTech{{end}}
{{define "dodatni-css"}}
<style>
.animiraj:nth-child(1) { animation-delay: 0.10s; }
.animiraj:nth-child(2) { animation-delay: 0.16s; }
.animiraj:nth-child(3) { animation-delay: 0.22s; }
.animiraj:nth-child(4) { animation-delay: 0.28s; }
</style>
{{end}}
{{define "sadrzaj"}} {{define "sadrzaj"}}
<div style="display:flex;flex-direction:column;gap:16px;"> <div style="display:flex;flex-direction:column;gap:16px;">
@@ -15,7 +24,7 @@
</span> </span>
</div> </div>
<div class="kartica" style="padding:0;overflow:hidden;"> <div class="kartica animiraj" style="padding:0;overflow:hidden;">
<div style="padding:16px 20px;border-bottom:0.5px solid var(--ivica);display:flex;align-items:center;justify-content:space-between;"> <div style="padding:16px 20px;border-bottom:0.5px solid var(--ivica);display:flex;align-items:center;justify-content:space-between;">
<span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Poslednjih 50 pokušaja</span> <span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Poslednjih 50 pokušaja</span>
<span style="font-size:12px;color:var(--tekst-sporedni);">Vreme prikazano u UTC</span> <span style="font-size:12px;color:var(--tekst-sporedni);">Vreme prikazano u UTC</span>
@@ -35,7 +44,7 @@
</thead> </thead>
<tbody> <tbody>
{{range .Istorija}} {{range .Istorija}}
<tr style="border-bottom:0.5px solid var(--ivica);"> <tr class="animiraj" style="border-bottom:0.5px solid var(--ivica);">
<td style="padding:10px 20px;font-size:13px;color:var(--tekst-sporedni);white-space:nowrap;"> <td style="padding:10px 20px;font-size:13px;color:var(--tekst-sporedni);white-space:nowrap;">
{{.Vreme.Format "02.01.2006. 15:04:05"}} {{.Vreme.Format "02.01.2006. 15:04:05"}}
</td> </td>
+10 -3
View File
@@ -2,7 +2,14 @@
{{define "naslov"}}Moj profil — NTech{{end}} {{define "naslov"}}Moj profil — NTech{{end}}
{{define "dodatni-css"}}{{end}} {{define "dodatni-css"}}
<style>
.animiraj:nth-child(1) { animation-delay: 0.10s; }
.animiraj:nth-child(2) { animation-delay: 0.16s; }
.animiraj:nth-child(3) { animation-delay: 0.22s; }
.animiraj:nth-child(4) { animation-delay: 0.28s; }
</style>
{{end}}
{{define "sadrzaj"}} {{define "sadrzaj"}}
<div style="display:flex;flex-direction:column;gap:16px;max-width:560px;"> <div style="display:flex;flex-direction:column;gap:16px;max-width:560px;">
@@ -16,7 +23,7 @@
{{end}} {{end}}
<!-- promena lozinke --> <!-- promena lozinke -->
<div class="kartica"> <div class="kartica animiraj">
<div style="font-size:15px;font-weight:500;color:var(--tekst-glavni);margin-bottom:16px;padding-bottom:12px;border-bottom:0.5px solid var(--ivica);"> <div style="font-size:15px;font-weight:500;color:var(--tekst-glavni);margin-bottom:16px;padding-bottom:12px;border-bottom:0.5px solid var(--ivica);">
Promena lozinke Promena lozinke
</div> </div>
@@ -52,7 +59,7 @@
</div> </div>
<!-- TOTP / 2FA --> <!-- TOTP / 2FA -->
<div class="kartica"> <div class="kartica animiraj">
<div style="font-size:15px;font-weight:500;color:var(--tekst-glavni);margin-bottom:16px;padding-bottom:12px;border-bottom:0.5px solid var(--ivica);"> <div style="font-size:15px;font-weight:500;color:var(--tekst-glavni);margin-bottom:16px;padding-bottom:12px;border-bottom:0.5px solid var(--ivica);">
Dvostepena verifikacija (2FA) Dvostepena verifikacija (2FA)
</div> </div>
+8 -21
View File
@@ -4,25 +4,12 @@
{{define "dodatni-css"}} {{define "dodatni-css"}}
<style> <style>
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
}
.dash-stat {
animation: fadeInUp 0.25s ease forwards;
opacity: 0;
}
.dash-stat:nth-child(1) { animation-delay: 0.04s; } .dash-stat:nth-child(1) { animation-delay: 0.04s; }
.dash-stat:nth-child(2) { animation-delay: 0.10s; } .dash-stat:nth-child(2) { animation-delay: 0.10s; }
.dash-stat:nth-child(3) { animation-delay: 0.16s; } .dash-stat:nth-child(3) { animation-delay: 0.16s; }
.dash-stat:nth-child(4) { animation-delay: 0.22s; } .dash-stat:nth-child(4) { animation-delay: 0.22s; }
.dash-stat:nth-child(5) { animation-delay: 0.28s; } .dash-stat:nth-child(5) { animation-delay: 0.28s; }
.dash-kartica {
animation: fadeInUp 0.25s ease forwards;
opacity: 0;
}
.dash-kartica:nth-child(1) { animation-delay: 0.20s; } .dash-kartica:nth-child(1) { animation-delay: 0.20s; }
.dash-kartica:nth-child(2) { animation-delay: 0.28s; } .dash-kartica:nth-child(2) { animation-delay: 0.28s; }
.dash-kartica:nth-child(3) { animation-delay: 0.36s; } .dash-kartica:nth-child(3) { animation-delay: 0.36s; }
@@ -32,7 +19,7 @@
{{define "sadrzaj"}} {{define "sadrzaj"}}
<div class="grid grid-cols-2 md:grid-cols-5 gap-3 mb-6"> <div class="grid grid-cols-2 md:grid-cols-5 gap-3 mb-6">
<!-- stat kartice --> <!-- stat kartice -->
<div class="kartica dash-stat"> <div class="kartica dash-stat animiraj">
<div style="width:36px;height:36px;border-radius:8px;background:#eff2ff;display:flex;align-items:center;justify-content:center;margin-bottom:10px;"> <div style="width:36px;height:36px;border-radius:8px;background:#eff2ff;display:flex;align-items:center;justify-content:center;margin-bottom:10px;">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#4f7ef8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#4f7ef8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/></svg>
</div> </div>
@@ -40,7 +27,7 @@
<div style="font-size:12px;color:var(--tekst-sporedni);margin-top:4px;">Artikala na stanju</div> <div style="font-size:12px;color:var(--tekst-sporedni);margin-top:4px;">Artikala na stanju</div>
</div> </div>
<div class="kartica dash-stat"> <div class="kartica dash-stat animiraj">
<div style="width:36px;height:36px;border-radius:8px;background:#f0fdf4;display:flex;align-items:center;justify-content:center;margin-bottom:10px;"> <div style="width:36px;height:36px;border-radius:8px;background:#f0fdf4;display:flex;align-items:center;justify-content:center;margin-bottom:10px;">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#16a34a" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#16a34a" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/></svg>
</div> </div>
@@ -48,7 +35,7 @@
<div style="font-size:12px;color:var(--tekst-sporedni);margin-top:4px;">Aktivnih servisa</div> <div style="font-size:12px;color:var(--tekst-sporedni);margin-top:4px;">Aktivnih servisa</div>
</div> </div>
<div class="kartica dash-stat"> <div class="kartica dash-stat animiraj">
<div style="width:36px;height:36px;border-radius:8px;background:#fff7ed;display:flex;align-items:center;justify-content:center;margin-bottom:10px;"> <div style="width:36px;height:36px;border-radius:8px;background:#fff7ed;display:flex;align-items:center;justify-content:center;margin-bottom:10px;">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#ea580c" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="21" r="1"/><circle cx="20" cy="21" r="1"/><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#ea580c" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="21" r="1"/><circle cx="20" cy="21" r="1"/><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"/></svg>
</div> </div>
@@ -56,7 +43,7 @@
<div style="font-size:12px;color:var(--tekst-sporedni);margin-top:4px;">Prihod ovog meseca</div> <div style="font-size:12px;color:var(--tekst-sporedni);margin-top:4px;">Prihod ovog meseca</div>
</div> </div>
<div class="kartica dash-stat"> <div class="kartica dash-stat animiraj">
<div style="width:36px;height:36px;border-radius:8px;background:#fef2f2;display:flex;align-items:center;justify-content:center;margin-bottom:10px;"> <div style="width:36px;height:36px;border-radius:8px;background:#fef2f2;display:flex;align-items:center;justify-content:center;margin-bottom:10px;">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#dc2626" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#dc2626" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>
</div> </div>
@@ -64,7 +51,7 @@
<div style="font-size:12px;color:var(--tekst-sporedni);margin-top:4px;">Kritično niska zaliha</div> <div style="font-size:12px;color:var(--tekst-sporedni);margin-top:4px;">Kritično niska zaliha</div>
</div> </div>
<a href="/podsetnici" class="kartica dash-stat" style="text-decoration:none;display:block;"> <a href="/podsetnici" class="kartica dash-stat animiraj" style="text-decoration:none;display:block;">
<div style="width:36px;height:36px;border-radius:8px;background:#f0f9ff;display:flex;align-items:center;justify-content:center;margin-bottom:10px;"> <div style="width:36px;height:36px;border-radius:8px;background:#f0f9ff;display:flex;align-items:center;justify-content:center;margin-bottom:10px;">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#0284c7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.73 21a2 2 0 0 1-3.46 0"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#0284c7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.73 21a2 2 0 0 1-3.46 0"/></svg>
</div> </div>
@@ -75,7 +62,7 @@
<div class="grid grid-cols-1 md:grid-cols-3 gap-4"> <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
<!-- poslednji servisi --> <!-- poslednji servisi -->
<div class="kartica dash-kartica"> <div class="kartica dash-kartica animiraj">
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;"> <div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;">
<span style="font-size:14px;font-weight:500;color:var(--tekst-glavni);">Poslednji servisi</span> <span style="font-size:14px;font-weight:500;color:var(--tekst-glavni);">Poslednji servisi</span>
</div> </div>
@@ -91,7 +78,7 @@
</div> </div>
<!-- kritične zalihe --> <!-- kritične zalihe -->
<div class="kartica dash-kartica"> <div class="kartica dash-kartica animiraj">
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;"> <div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;">
<span style="font-size:14px;font-weight:500;color:var(--tekst-glavni);">Kritične zalihe</span> <span style="font-size:14px;font-weight:500;color:var(--tekst-glavni);">Kritične zalihe</span>
<span style="font-size:11px;padding:2px 8px;border-radius:20px;background:#fffbeb;color:#b45309;font-weight:500;">Upozorenje</span> <span style="font-size:11px;padding:2px 8px;border-radius:20px;background:#fffbeb;color:#b45309;font-weight:500;">Upozorenje</span>
@@ -108,7 +95,7 @@
</div> </div>
<!-- poslednje prodaje --> <!-- poslednje prodaje -->
<div class="kartica dash-kartica"> <div class="kartica dash-kartica animiraj">
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;"> <div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;">
<span style="font-size:14px;font-weight:500;color:var(--tekst-glavni);">Poslednje prodaje</span> <span style="font-size:14px;font-weight:500;color:var(--tekst-glavni);">Poslednje prodaje</span>
</div> </div>
+1 -18
View File
@@ -4,23 +4,6 @@
{{define "dodatni-css"}} {{define "dodatni-css"}}
<style> <style>
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes shake {
0%, 100% { transform: translateX(0); }
20% { transform: translateX(-6px); }
40% { transform: translateX(6px); }
60% { transform: translateX(-4px); }
80% { transform: translateX(4px); }
}
.forma-kartica {
animation: fadeInUp 0.3s ease forwards;
}
.greska-animacija { .greska-animacija {
animation: shake 0.4s ease; animation: shake 0.4s ease;
} }
@@ -38,7 +21,7 @@
Nazad na dobavljače Nazad na dobavljače
</a> </a>
<div class="kartica forma-kartica"> <div class="kartica forma-kartica animiraj">
<div style="margin-bottom:20px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);"> <div style="margin-bottom:20px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);">
<span style="font-size:16px;font-weight:500;color:var(--tekst-glavni);"> <span style="font-size:16px;font-weight:500;color:var(--tekst-glavni);">
{{if .Izmena}}Izmeni dobavljača{{else}}Novi dobavljač{{end}} {{if .Izmena}}Izmeni dobavljača{{else}}Novi dobavljač{{end}}
+3 -18
View File
@@ -9,20 +9,10 @@
to { opacity: 1; transform: translateY(0); } to { opacity: 1; transform: translateY(0); }
} }
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
}
.poruka-animacija { .poruka-animacija {
animation: slideDown 0.3s ease forwards; animation: slideDown 0.3s ease forwards;
} }
.dobavljaci-tabela tbody tr {
animation: fadeInUp 0.25s ease forwards;
opacity: 0;
}
/* stagger — svaki red se pojavljuje malo kasnije */ /* stagger — svaki red se pojavljuje malo kasnije */
.dobavljaci-tabela tbody tr:nth-child(1) { animation-delay: 0.04s; } .dobavljaci-tabela tbody tr:nth-child(1) { animation-delay: 0.04s; }
.dobavljaci-tabela tbody tr:nth-child(2) { animation-delay: 0.08s; } .dobavljaci-tabela tbody tr:nth-child(2) { animation-delay: 0.08s; }
@@ -41,11 +31,6 @@
gap: 12px; gap: 12px;
} }
.dobavljac-kartica {
animation: fadeInUp 0.25s ease forwards;
opacity: 0;
}
.dobavljac-kartica:nth-child(1) { animation-delay: 0.04s; } .dobavljac-kartica:nth-child(1) { animation-delay: 0.04s; }
.dobavljac-kartica:nth-child(2) { animation-delay: 0.10s; } .dobavljac-kartica:nth-child(2) { animation-delay: 0.10s; }
.dobavljac-kartica:nth-child(3) { animation-delay: 0.16s; } .dobavljac-kartica:nth-child(3) { animation-delay: 0.16s; }
@@ -89,7 +74,7 @@
</div> </div>
<!-- desktop tabela --> <!-- desktop tabela -->
<div class="kartica dobavljaci-tabela" style="padding:0;overflow:hidden;"> <div class="kartica dobavljaci-tabela animiraj" style="padding:0;overflow:hidden;">
<div style="overflow-x:auto;"> <div style="overflow-x:auto;">
<table style="width:100%;border-collapse:collapse;"> <table style="width:100%;border-collapse:collapse;">
<thead> <thead>
@@ -103,7 +88,7 @@
</thead> </thead>
<tbody> <tbody>
{{range .Dobavljaci}} {{range .Dobavljaci}}
<tr style="border-bottom:0.5px solid var(--ivica);transition:background 0.15s;" <tr class="animiraj" style="border-bottom:0.5px solid var(--ivica);transition:background 0.15s;"
onmouseover="this.style.background='var(--pozadina)'" onmouseover="this.style.background='var(--pozadina)'"
onmouseout="this.style.background=''"> onmouseout="this.style.background=''">
<td style="padding:12px 16px;font-size:14px;font-weight:500;color:var(--tekst-glavni);">{{.Naziv}}</td> <td style="padding:12px 16px;font-size:14px;font-weight:500;color:var(--tekst-glavni);">{{.Naziv}}</td>
@@ -149,7 +134,7 @@
<!-- mobilne kartice --> <!-- mobilne kartice -->
<div class="dobavljaci-kartice"> <div class="dobavljaci-kartice">
{{range .Dobavljaci}} {{range .Dobavljaci}}
<div class="kartica dobavljac-kartica"> <div class="kartica dobavljac-kartica animiraj">
<div style="display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:10px;"> <div style="display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:10px;">
<span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">{{.Naziv}}</span> <span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">{{.Naziv}}</span>
<div style="display:flex;gap:8px;flex-shrink:0;"> <div style="display:flex;gap:8px;flex-shrink:0;">
+5 -18
View File
@@ -83,23 +83,10 @@
.badge-dana.upozorenje { background: #fffbeb; color: #b45309; } .badge-dana.upozorenje { background: #fffbeb; color: #b45309; }
.badge-dana.kritican { background: #fef2f2; color: #dc2626; } .badge-dana.kritican { background: #fef2f2; color: #dc2626; }
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
}
.izv-sekcija {
animation: fadeInUp 0.25s ease forwards;
opacity: 0;
}
.izv-sekcija:nth-child(1) { animation-delay: 0.04s; } .izv-sekcija:nth-child(1) { animation-delay: 0.04s; }
.izv-sekcija:nth-child(2) { animation-delay: 0.12s; } .izv-sekcija:nth-child(2) { animation-delay: 0.12s; }
.izv-sekcija:nth-child(3) { animation-delay: 0.20s; } .izv-sekcija:nth-child(3) { animation-delay: 0.20s; }
.izv-grid-kartica {
animation: fadeInUp 0.25s ease forwards;
opacity: 0;
}
.izv-grid-kartica:nth-child(1) { animation-delay: 0.24s; } .izv-grid-kartica:nth-child(1) { animation-delay: 0.24s; }
.izv-grid-kartica:nth-child(2) { animation-delay: 0.32s; } .izv-grid-kartica:nth-child(2) { animation-delay: 0.32s; }
</style> </style>
@@ -109,7 +96,7 @@
<div style="display:flex;flex-direction:column;gap:20px;"> <div style="display:flex;flex-direction:column;gap:20px;">
<!-- 1. mesečni prihod --> <!-- 1. mesečni prihod -->
<div class="kartica izv-sekcija"> <div class="kartica izv-sekcija animiraj">
<div style="display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-bottom:4px;"> <div style="display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-bottom:4px;">
<div class="izv-naslov" style="margin-bottom:0;">Mesečni prihod — poslednjih 12 meseci</div> <div class="izv-naslov" style="margin-bottom:0;">Mesečni prihod — poslednjih 12 meseci</div>
<div class="toggle-red" style="margin-bottom:0;"> <div class="toggle-red" style="margin-bottom:0;">
@@ -156,7 +143,7 @@
</div> </div>
<!-- 2. stari otvoreni nalozi --> <!-- 2. stari otvoreni nalozi -->
<div class="kartica izv-sekcija"> <div class="kartica izv-sekcija animiraj">
<div class="izv-naslov">Stari otvoreni nalozi — bez završetka duže od 14 dana</div> <div class="izv-naslov">Stari otvoreni nalozi — bez završetka duže od 14 dana</div>
{{if .StariNalozi}} {{if .StariNalozi}}
<div style="overflow-x:auto;"> <div style="overflow-x:auto;">
@@ -198,10 +185,10 @@
{{end}} {{end}}
</div> </div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 izv-sekcija"> <div class="grid grid-cols-1 md:grid-cols-2 gap-4 izv-sekcija animiraj">
<!-- 3. top 10 artikala --> <!-- 3. top 10 artikala -->
<div class="kartica izv-grid-kartica"> <div class="kartica izv-grid-kartica animiraj">
<div class="izv-naslov">Najprodavaniji artikli — top 10</div> <div class="izv-naslov">Najprodavaniji artikli — top 10</div>
{{if .TopArtikli}} {{if .TopArtikli}}
<table style="width:100%;border-collapse:collapse;"> <table style="width:100%;border-collapse:collapse;">
@@ -235,7 +222,7 @@
</div> </div>
<!-- 4. top 10 klijenata --> <!-- 4. top 10 klijenata -->
<div class="kartica izv-grid-kartica"> <div class="kartica izv-grid-kartica animiraj">
<div class="izv-naslov">Najvažniji klijenti — top 10</div> <div class="izv-naslov">Najvažniji klijenti — top 10</div>
{{if .TopKlijenti}} {{if .TopKlijenti}}
<table style="width:100%;border-collapse:collapse;"> <table style="width:100%;border-collapse:collapse;">
+2 -13
View File
@@ -8,23 +8,12 @@
from { opacity: 0; transform: translateY(-10px); } from { opacity: 0; transform: translateY(-10px); }
to { opacity: 1; transform: translateY(0); } to { opacity: 1; transform: translateY(0); }
} }
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
}
.poruka-animacija { animation: slideDown 0.3s ease forwards; } .poruka-animacija { animation: slideDown 0.3s ease forwards; }
.kat-forma-kartica { .kat-forma-kartica {
animation: fadeInUp 0.25s ease forwards;
opacity: 0;
animation-delay: 0.04s; animation-delay: 0.04s;
} }
.kat-red {
animation: fadeInUp 0.25s ease forwards;
opacity: 0;
}
.kat-red:nth-child(1) { animation-delay: 0.12s; } .kat-red:nth-child(1) { animation-delay: 0.12s; }
.kat-red:nth-child(2) { animation-delay: 0.18s; } .kat-red:nth-child(2) { animation-delay: 0.18s; }
.kat-red:nth-child(3) { animation-delay: 0.24s; } .kat-red:nth-child(3) { animation-delay: 0.24s; }
@@ -53,7 +42,7 @@
</a> </a>
<!-- forma za novu kategoriju --> <!-- forma za novu kategoriju -->
<div class="kartica kat-forma-kartica"> <div class="kartica kat-forma-kartica animiraj">
<div style="margin-bottom:16px;padding-bottom:12px;border-bottom:0.5px solid var(--ivica);"> <div style="margin-bottom:16px;padding-bottom:12px;border-bottom:0.5px solid var(--ivica);">
<span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Nova kategorija</span> <span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Nova kategorija</span>
</div> </div>
@@ -87,7 +76,7 @@
<span style="font-size:14px;font-weight:500;color:var(--tekst-glavni);">Postojeće kategorije</span> <span style="font-size:14px;font-weight:500;color:var(--tekst-glavni);">Postojeće kategorije</span>
</div> </div>
{{range .Kategorije}} {{range .Kategorije}}
<div class="kat-red" style="display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:0.5px solid var(--ivica);"> <div class="kat-red animiraj" style="display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:0.5px solid var(--ivica);">
<div style="flex:1;"> <div style="flex:1;">
<div style="font-size:14px;color:var(--tekst-glavni);">{{.Naziv}}</div> <div style="font-size:14px;color:var(--tekst-glavni);">{{.Naziv}}</div>
{{if .Opis}} {{if .Opis}}
+1 -18
View File
@@ -4,23 +4,6 @@
{{define "dodatni-css"}} {{define "dodatni-css"}}
<style> <style>
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes shake {
0%, 100% { transform: translateX(0); }
20% { transform: translateX(-6px); }
40% { transform: translateX(6px); }
60% { transform: translateX(-4px); }
80% { transform: translateX(4px); }
}
.forma-kartica {
animation: fadeInUp 0.3s ease forwards;
}
.greska-animacija { .greska-animacija {
animation: shake 0.4s ease; animation: shake 0.4s ease;
} }
@@ -42,7 +25,7 @@
Nazad na klijente Nazad na klijente
</a> </a>
<div class="kartica forma-kartica"> <div class="kartica forma-kartica animiraj">
<div style="margin-bottom:20px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);"> <div style="margin-bottom:20px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);">
<span style="font-size:16px;font-weight:500;color:var(--tekst-glavni);"> <span style="font-size:16px;font-weight:500;color:var(--tekst-glavni);">
{{if .Izmena}}Izmeni klijenta{{else}}Novi klijent{{end}} {{if .Izmena}}Izmeni klijenta{{else}}Novi klijent{{end}}
+3 -18
View File
@@ -9,20 +9,10 @@
to { opacity: 1; transform: translateY(0); } to { opacity: 1; transform: translateY(0); }
} }
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
}
.poruka-animacija { .poruka-animacija {
animation: slideDown 0.3s ease forwards; animation: slideDown 0.3s ease forwards;
} }
.klijenti-tabela tbody tr {
animation: fadeInUp 0.25s ease forwards;
opacity: 0;
}
.klijenti-tabela tbody tr:nth-child(1) { animation-delay: 0.04s; } .klijenti-tabela tbody tr:nth-child(1) { animation-delay: 0.04s; }
.klijenti-tabela tbody tr:nth-child(2) { animation-delay: 0.08s; } .klijenti-tabela tbody tr:nth-child(2) { animation-delay: 0.08s; }
.klijenti-tabela tbody tr:nth-child(3) { animation-delay: 0.12s; } .klijenti-tabela tbody tr:nth-child(3) { animation-delay: 0.12s; }
@@ -40,11 +30,6 @@
gap: 12px; gap: 12px;
} }
.klijent-kartica {
animation: fadeInUp 0.25s ease forwards;
opacity: 0;
}
.klijent-kartica:nth-child(1) { animation-delay: 0.04s; } .klijent-kartica:nth-child(1) { animation-delay: 0.04s; }
.klijent-kartica:nth-child(2) { animation-delay: 0.10s; } .klijent-kartica:nth-child(2) { animation-delay: 0.10s; }
.klijent-kartica:nth-child(3) { animation-delay: 0.16s; } .klijent-kartica:nth-child(3) { animation-delay: 0.16s; }
@@ -88,7 +73,7 @@
</div> </div>
<!-- desktop tabela --> <!-- desktop tabela -->
<div class="kartica klijenti-tabela" style="padding:0;overflow:hidden;"> <div class="kartica klijenti-tabela animiraj" style="padding:0;overflow:hidden;">
<div style="overflow-x:auto;"> <div style="overflow-x:auto;">
<table style="width:100%;border-collapse:collapse;"> <table style="width:100%;border-collapse:collapse;">
<thead> <thead>
@@ -102,7 +87,7 @@
</thead> </thead>
<tbody> <tbody>
{{range .Klijenti}} {{range .Klijenti}}
<tr style="border-bottom:0.5px solid var(--ivica);transition:background 0.15s;" <tr class="animiraj" style="border-bottom:0.5px solid var(--ivica);transition:background 0.15s;"
onmouseover="this.style.background='var(--pozadina)'" onmouseover="this.style.background='var(--pozadina)'"
onmouseout="this.style.background=''"> onmouseout="this.style.background=''">
<td style="padding:12px 16px;"> <td style="padding:12px 16px;">
@@ -157,7 +142,7 @@
<!-- mobilne kartice --> <!-- mobilne kartice -->
<div class="klijenti-kartice"> <div class="klijenti-kartice">
{{range .Klijenti}} {{range .Klijenti}}
<div class="kartica klijent-kartica"> <div class="kartica klijent-kartica animiraj">
<div style="display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:10px;"> <div style="display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:10px;">
<div> <div>
{{if .NazivFirme}} {{if .NazivFirme}}
+2 -11
View File
@@ -4,15 +4,6 @@
{{define "dodatni-css"}} {{define "dodatni-css"}}
<style> <style>
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
}
.magacin-tabela tbody tr {
animation: fadeInUp 0.25s ease forwards;
opacity: 0;
}
.magacin-tabela tbody tr:nth-child(1) { animation-delay: 0.04s; } .magacin-tabela tbody tr:nth-child(1) { animation-delay: 0.04s; }
.magacin-tabela tbody tr:nth-child(2) { animation-delay: 0.08s; } .magacin-tabela tbody tr:nth-child(2) { animation-delay: 0.08s; }
.magacin-tabela tbody tr:nth-child(3) { animation-delay: 0.12s; } .magacin-tabela tbody tr:nth-child(3) { animation-delay: 0.12s; }
@@ -72,7 +63,7 @@
</form> </form>
<!-- tabela artikala --> <!-- tabela artikala -->
<div class="kartica" style="padding:0;overflow:hidden;"> <div class="kartica animiraj" style="padding:0;overflow:hidden;">
<div style="overflow-x:auto;"> <div style="overflow-x:auto;">
<table class="magacin-tabela" style="width:100%;border-collapse:collapse;"> <table class="magacin-tabela" style="width:100%;border-collapse:collapse;">
<thead> <thead>
@@ -87,7 +78,7 @@
</thead> </thead>
<tbody> <tbody>
{{range .Artikli}} {{range .Artikli}}
<tr style="border-bottom:0.5px solid var(--ivica);transition:background 0.15s;" <tr class="animiraj" style="border-bottom:0.5px solid var(--ivica);transition:background 0.15s;"
onmouseover="this.style.background='var(--pozadina)'" onmouseover="this.style.background='var(--pozadina)'"
onmouseout="this.style.background=''"> onmouseout="this.style.background=''">
<td style="padding:12px 16px;font-size:14px;color:var(--tekst-glavni);">{{.Naziv}}</td> <td style="padding:12px 16px;font-size:14px;color:var(--tekst-glavni);">{{.Naziv}}</td>
+1 -1
View File
@@ -11,7 +11,7 @@
Nazad na magacin Nazad na magacin
</a> </a>
<div class="kartica"> <div class="kartica animiraj">
<div style="margin-bottom:20px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);"> <div style="margin-bottom:20px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);">
<span style="font-size:16px;font-weight:500;color:var(--tekst-glavni);"> <span style="font-size:16px;font-weight:500;color:var(--tekst-glavni);">
{{if .Izmena}}Izmeni artikal{{else}}Novi artikal{{end}} {{if .Izmena}}Izmeni artikal{{else}}Novi artikal{{end}}
+2 -17
View File
@@ -4,25 +4,10 @@
{{define "dodatni-css"}} {{define "dodatni-css"}}
<style> <style>
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
.detalji-kartica {
animation: fadeInUp 0.3s ease forwards;
opacity: 0;
}
.detalji-kartica:nth-child(1) { animation-delay: 0.04s; } .detalji-kartica:nth-child(1) { animation-delay: 0.04s; }
.detalji-kartica:nth-child(2) { animation-delay: 0.12s; } .detalji-kartica:nth-child(2) { animation-delay: 0.12s; }
.detalji-kartica:nth-child(3) { animation-delay: 0.20s; } .detalji-kartica:nth-child(3) { animation-delay: 0.20s; }
.stavke-tabela tbody tr {
animation: fadeInUp 0.2s ease forwards;
opacity: 0;
}
.stavke-tabela tbody tr:nth-child(1) { animation-delay: 0.16s; } .stavke-tabela tbody tr:nth-child(1) { animation-delay: 0.16s; }
.stavke-tabela tbody tr:nth-child(2) { animation-delay: 0.20s; } .stavke-tabela tbody tr:nth-child(2) { animation-delay: 0.20s; }
.stavke-tabela tbody tr:nth-child(3) { animation-delay: 0.24s; } .stavke-tabela tbody tr:nth-child(3) { animation-delay: 0.24s; }
@@ -54,7 +39,7 @@
</a> </a>
<!-- zaglavlje nabavke --> <!-- zaglavlje nabavke -->
<div class="kartica detalji-kartica"> <div class="kartica detalji-kartica animiraj">
<div style="margin-bottom:16px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px;"> <div style="margin-bottom:16px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px;">
<span style="font-size:16px;font-weight:500;color:var(--tekst-glavni);">Detalji nabavke</span> <span style="font-size:16px;font-weight:500;color:var(--tekst-glavni);">Detalji nabavke</span>
<span style="font-size:13px;color:var(--tekst-sporedni);">{{.Nabavka.Datum.Format "02.01.2006. u 15:04"}}</span> <span style="font-size:13px;color:var(--tekst-sporedni);">{{.Nabavka.Datum.Format "02.01.2006. u 15:04"}}</span>
@@ -101,7 +86,7 @@
</thead> </thead>
<tbody> <tbody>
{{range .Stavke}} {{range .Stavke}}
<tr style="border-bottom:0.5px solid var(--ivica);transition:background 0.15s;" <tr class="animiraj" style="border-bottom:0.5px solid var(--ivica);transition:background 0.15s;"
onmouseover="this.style.background='var(--pozadina)'" onmouseover="this.style.background='var(--pozadina)'"
onmouseout="this.style.background=''"> onmouseout="this.style.background=''">
<td style="padding:10px 16px;font-size:14px;color:var(--tekst-glavni);">{{.ArtikalNaziv}}</td> <td style="padding:10px 16px;font-size:14px;color:var(--tekst-glavni);">{{.ArtikalNaziv}}</td>
+2 -20
View File
@@ -4,29 +4,11 @@
{{define "dodatni-css"}} {{define "dodatni-css"}}
<style> <style>
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes shake {
0%, 100% { transform: translateX(0); }
20% { transform: translateX(-6px); }
40% { transform: translateX(6px); }
60% { transform: translateX(-4px); }
80% { transform: translateX(4px); }
}
@keyframes modalIn { @keyframes modalIn {
from { opacity: 0; transform: translateY(-16px) scale(0.97); } from { opacity: 0; transform: translateY(-16px) scale(0.97); }
to { opacity: 1; transform: translateY(0) scale(1); } to { opacity: 1; transform: translateY(0) scale(1); }
} }
.forma-kartica {
animation: fadeInUp 0.3s ease forwards;
opacity: 0;
}
.forma-kartica:nth-child(1) { animation-delay: 0.04s; } .forma-kartica:nth-child(1) { animation-delay: 0.04s; }
.forma-kartica:nth-child(2) { animation-delay: 0.12s; } .forma-kartica:nth-child(2) { animation-delay: 0.12s; }
@@ -148,7 +130,7 @@
{{end}} {{end}}
<!-- zaglavlje nabavke --> <!-- zaglavlje nabavke -->
<div class="kartica forma-kartica" style="margin-bottom:16px;"> <div class="kartica forma-kartica animiraj" style="margin-bottom:16px;">
<div style="margin-bottom:16px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);"> <div style="margin-bottom:16px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);">
<span style="font-size:16px;font-weight:500;color:var(--tekst-glavni);">Nova nabavka</span> <span style="font-size:16px;font-weight:500;color:var(--tekst-glavni);">Nova nabavka</span>
</div> </div>
@@ -172,7 +154,7 @@
</div> </div>
<!-- stavke --> <!-- stavke -->
<div class="kartica forma-kartica" style="margin-bottom:16px;"> <div class="kartica forma-kartica animiraj" style="margin-bottom:16px;">
<div style="margin-bottom:16px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;"> <div style="margin-bottom:16px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;">
<span style="font-size:16px;font-weight:500;color:var(--tekst-glavni);">Stavke</span> <span style="font-size:16px;font-weight:500;color:var(--tekst-glavni);">Stavke</span>
<div style="display:flex;gap:8px;flex-wrap:wrap;"> <div style="display:flex;gap:8px;flex-wrap:wrap;">
+3 -18
View File
@@ -9,20 +9,10 @@
to { opacity: 1; transform: translateY(0); } to { opacity: 1; transform: translateY(0); }
} }
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
}
.poruka-animacija { .poruka-animacija {
animation: slideDown 0.3s ease forwards; animation: slideDown 0.3s ease forwards;
} }
.nabavke-tabela tbody tr {
animation: fadeInUp 0.25s ease forwards;
opacity: 0;
}
.nabavke-tabela tbody tr:nth-child(1) { animation-delay: 0.04s; } .nabavke-tabela tbody tr:nth-child(1) { animation-delay: 0.04s; }
.nabavke-tabela tbody tr:nth-child(2) { animation-delay: 0.08s; } .nabavke-tabela tbody tr:nth-child(2) { animation-delay: 0.08s; }
.nabavke-tabela tbody tr:nth-child(3) { animation-delay: 0.12s; } .nabavke-tabela tbody tr:nth-child(3) { animation-delay: 0.12s; }
@@ -40,11 +30,6 @@
gap: 12px; gap: 12px;
} }
.nabavka-kartica {
animation: fadeInUp 0.25s ease forwards;
opacity: 0;
}
.nabavka-kartica:nth-child(1) { animation-delay: 0.04s; } .nabavka-kartica:nth-child(1) { animation-delay: 0.04s; }
.nabavka-kartica:nth-child(2) { animation-delay: 0.10s; } .nabavka-kartica:nth-child(2) { animation-delay: 0.10s; }
.nabavka-kartica:nth-child(3) { animation-delay: 0.16s; } .nabavka-kartica:nth-child(3) { animation-delay: 0.16s; }
@@ -78,7 +63,7 @@
</div> </div>
<!-- desktop tabela --> <!-- desktop tabela -->
<div class="kartica nabavke-tabela" style="padding:0;overflow:hidden;"> <div class="kartica nabavke-tabela animiraj" style="padding:0;overflow:hidden;">
<div style="overflow-x:auto;"> <div style="overflow-x:auto;">
<table style="width:100%;border-collapse:collapse;"> <table style="width:100%;border-collapse:collapse;">
<thead> <thead>
@@ -92,7 +77,7 @@
</thead> </thead>
<tbody> <tbody>
{{range .Nabavke}} {{range .Nabavke}}
<tr style="border-bottom:0.5px solid var(--ivica);transition:background 0.15s;" <tr class="animiraj" style="border-bottom:0.5px solid var(--ivica);transition:background 0.15s;"
onmouseover="this.style.background='var(--pozadina)'" onmouseover="this.style.background='var(--pozadina)'"
onmouseout="this.style.background=''"> onmouseout="this.style.background=''">
<td style="padding:12px 16px;font-size:13px;color:var(--tekst-sporedni);white-space:nowrap;"> <td style="padding:12px 16px;font-size:13px;color:var(--tekst-sporedni);white-space:nowrap;">
@@ -140,7 +125,7 @@
<!-- mobilne kartice --> <!-- mobilne kartice -->
<div class="nabavke-kartice"> <div class="nabavke-kartice">
{{range .Nabavke}} {{range .Nabavke}}
<div class="kartica nabavka-kartica"> <div class="kartica nabavka-kartica animiraj">
<div style="display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:10px;"> <div style="display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:10px;">
<div> <div>
<div style="font-size:15px;font-weight:500;color:var(--tekst-glavni);"> <div style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">
+13 -4
View File
@@ -2,6 +2,15 @@
{{define "naslov"}}Podešavanja — NTech{{end}} {{define "naslov"}}Podešavanja — NTech{{end}}
{{define "dodatni-css"}}
<style>
.animiraj:nth-child(1) { animation-delay: 0.10s; }
.animiraj:nth-child(2) { animation-delay: 0.16s; }
.animiraj:nth-child(3) { animation-delay: 0.22s; }
.animiraj:nth-child(4) { animation-delay: 0.28s; }
</style>
{{end}}
{{define "sadrzaj"}} {{define "sadrzaj"}}
<div style="width:100%;max-width:100%;"> <div style="width:100%;max-width:100%;">
@@ -13,7 +22,7 @@
<!-- upload loga — posebna forma jer je multipart, mora biti van glavne forme --> <!-- upload loga — posebna forma jer je multipart, mora biti van glavne forme -->
<form method="POST" action="/podesavanja/logo" enctype="multipart/form-data"> <form method="POST" action="/podesavanja/logo" enctype="multipart/form-data">
<div class="kartica" style="margin-bottom:16px;"> <div class="kartica animiraj" style="margin-bottom:16px;">
<div style="display:flex;align-items:center;gap:10px;margin-bottom:16px;padding-bottom:12px;border-bottom:0.5px solid var(--ivica);"> <div style="display:flex;align-items:center;gap:10px;margin-bottom:16px;padding-bottom:12px;border-bottom:0.5px solid var(--ivica);">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="var(--sb-akcent)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><circle cx="8.5" cy="8.5" r="1.5"/><polyline points="21 15 16 10 5 21"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="var(--sb-akcent)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><circle cx="8.5" cy="8.5" r="1.5"/><polyline points="21 15 16 10 5 21"/></svg>
<span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Logo firme</span> <span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Logo firme</span>
@@ -45,7 +54,7 @@
<form method="POST" action="/podesavanja/sacuvaj"> <form method="POST" action="/podesavanja/sacuvaj">
<!-- sekcija: firma --> <!-- sekcija: firma -->
<div class="kartica" style="margin-bottom:16px;"> <div class="kartica animiraj" style="margin-bottom:16px;">
<div style="display:flex;align-items:center;gap:10px;margin-bottom:16px;padding-bottom:12px;border-bottom:0.5px solid var(--ivica);"> <div style="display:flex;align-items:center;gap:10px;margin-bottom:16px;padding-bottom:12px;border-bottom:0.5px solid var(--ivica);">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="var(--sb-akcent)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="var(--sb-akcent)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg>
<span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Firma</span> <span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Firma</span>
@@ -110,7 +119,7 @@
</div> </div>
<!-- sekcija: izgled --> <!-- sekcija: izgled -->
<div class="kartica" style="margin-bottom:16px;"> <div class="kartica animiraj" style="margin-bottom:16px;">
<div style="display:flex;align-items:center;gap:10px;margin-bottom:16px;padding-bottom:12px;border-bottom:0.5px solid var(--ivica);"> <div style="display:flex;align-items:center;gap:10px;margin-bottom:16px;padding-bottom:12px;border-bottom:0.5px solid var(--ivica);">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="var(--sb-akcent)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="6"/><circle cx="12" cy="12" r="2"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="var(--sb-akcent)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="6"/><circle cx="12" cy="12" r="2"/></svg>
<span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Izgled</span> <span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Izgled</span>
@@ -134,7 +143,7 @@
</div> </div>
<!-- sekcija: sistem --> <!-- sekcija: sistem -->
<div class="kartica" style="margin-bottom:16px;"> <div class="kartica animiraj" style="margin-bottom:16px;">
<div style="display:flex;align-items:center;gap:10px;margin-bottom:16px;padding-bottom:12px;border-bottom:0.5px solid var(--ivica);"> <div style="display:flex;align-items:center;gap:10px;margin-bottom:16px;padding-bottom:12px;border-bottom:0.5px solid var(--ivica);">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="var(--sb-akcent)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06-.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="var(--sb-akcent)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06-.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>
<span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Sistem</span> <span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Sistem</span>
+3 -18
View File
@@ -9,20 +9,10 @@
to { opacity: 1; transform: translateY(0); } to { opacity: 1; transform: translateY(0); }
} }
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
}
.poruka-animacija { .poruka-animacija {
animation: slideDown 0.3s ease forwards; animation: slideDown 0.3s ease forwards;
} }
.pod-tabela tbody tr {
animation: fadeInUp 0.25s ease forwards;
opacity: 0;
}
.pod-tabela tbody tr:nth-child(1) { animation-delay: 0.04s; } .pod-tabela tbody tr:nth-child(1) { animation-delay: 0.04s; }
.pod-tabela tbody tr:nth-child(2) { animation-delay: 0.08s; } .pod-tabela tbody tr:nth-child(2) { animation-delay: 0.08s; }
.pod-tabela tbody tr:nth-child(3) { animation-delay: 0.12s; } .pod-tabela tbody tr:nth-child(3) { animation-delay: 0.12s; }
@@ -40,11 +30,6 @@
gap: 12px; gap: 12px;
} }
.pod-kartica {
animation: fadeInUp 0.25s ease forwards;
opacity: 0;
}
.pod-kartica:nth-child(1) { animation-delay: 0.04s; } .pod-kartica:nth-child(1) { animation-delay: 0.04s; }
.pod-kartica:nth-child(2) { animation-delay: 0.10s; } .pod-kartica:nth-child(2) { animation-delay: 0.10s; }
.pod-kartica:nth-child(3) { animation-delay: 0.16s; } .pod-kartica:nth-child(3) { animation-delay: 0.16s; }
@@ -90,7 +75,7 @@
</div> </div>
<!-- desktop tabela --> <!-- desktop tabela -->
<div class="kartica pod-tabela" style="padding:0;overflow:hidden;"> <div class="kartica pod-tabela animiraj" style="padding:0;overflow:hidden;">
<div style="overflow-x:auto;"> <div style="overflow-x:auto;">
<table style="width:100%;border-collapse:collapse;"> <table style="width:100%;border-collapse:collapse;">
<thead> <thead>
@@ -103,7 +88,7 @@
</thead> </thead>
<tbody> <tbody>
{{range .Podsetnici}} {{range .Podsetnici}}
<tr class="{{if .JePrekoracen}}red-prekoracen{{end}}" <tr class="animiraj {{if .JePrekoracen}}red-prekoracen{{end}}"
style="border-bottom:0.5px solid var(--ivica);transition:background 0.15s;" style="border-bottom:0.5px solid var(--ivica);transition:background 0.15s;"
onmouseover="this.style.background='var(--pozadina)'" onmouseover="this.style.background='var(--pozadina)'"
onmouseout="this.style.background=''"> onmouseout="this.style.background=''">
@@ -165,7 +150,7 @@
<!-- mobilne kartice --> <!-- mobilne kartice -->
<div class="pod-kartice"> <div class="pod-kartice">
{{range .Podsetnici}} {{range .Podsetnici}}
<div class="kartica pod-kartica"> <div class="kartica pod-kartica animiraj">
<div style="display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:10px;"> <div style="display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:10px;">
<div> <div>
<div style="font-size:15px;font-weight:500;color:{{if .JePrekoracen}}var(--greska){{else}}var(--tekst-glavni){{end}};">{{.Naslov}}</div> <div style="font-size:15px;font-weight:500;color:{{if .JePrekoracen}}var(--greska){{else}}var(--tekst-glavni){{end}};">{{.Naslov}}</div>
+1 -18
View File
@@ -4,23 +4,6 @@
{{define "dodatni-css"}} {{define "dodatni-css"}}
<style> <style>
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes shake {
0%, 100% { transform: translateX(0); }
20% { transform: translateX(-6px); }
40% { transform: translateX(6px); }
60% { transform: translateX(-4px); }
80% { transform: translateX(4px); }
}
.forma-kartica {
animation: fadeInUp 0.3s ease forwards;
}
.greska-animacija { .greska-animacija {
animation: shake 0.4s ease; animation: shake 0.4s ease;
} }
@@ -37,7 +20,7 @@
Nazad na podsetnik Nazad na podsetnik
</a> </a>
<div class="kartica forma-kartica" style="max-width:600px;"> <div class="kartica forma-kartica animiraj" style="max-width:600px;">
<div style="margin-bottom:20px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);"> <div style="margin-bottom:20px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);">
<span style="font-size:16px;font-weight:500;color:var(--tekst-glavni);"> <span style="font-size:16px;font-weight:500;color:var(--tekst-glavni);">
{{if .Izmena}}Izmeni podsetnik{{else}}Novi podsetnik{{end}} {{if .Izmena}}Izmeni podsetnik{{else}}Novi podsetnik{{end}}
+1 -1
View File
@@ -98,7 +98,7 @@
</style> </style>
</head> </head>
<body> <body>
<div class="kartica"> <div class="kartica animiraj">
<div class="logo"> <div class="logo">
<div class="logo-naziv">NTech</div> <div class="logo-naziv">NTech</div>
<div class="logo-podnazlov">Sistem za upravljanje</div> <div class="logo-podnazlov">Sistem za upravljanje</div>
+3 -18
View File
@@ -9,18 +9,8 @@
to { opacity: 1; transform: translateY(0); } to { opacity: 1; transform: translateY(0); }
} }
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
}
.poruka-animacija { animation: slideDown 0.3s ease forwards; } .poruka-animacija { animation: slideDown 0.3s ease forwards; }
.prodaja-tabela tbody tr {
animation: fadeInUp 0.25s ease forwards;
opacity: 0;
}
.prodaja-tabela tbody tr:nth-child(1) { animation-delay: 0.04s; } .prodaja-tabela tbody tr:nth-child(1) { animation-delay: 0.04s; }
.prodaja-tabela tbody tr:nth-child(2) { animation-delay: 0.08s; } .prodaja-tabela tbody tr:nth-child(2) { animation-delay: 0.08s; }
.prodaja-tabela tbody tr:nth-child(3) { animation-delay: 0.12s; } .prodaja-tabela tbody tr:nth-child(3) { animation-delay: 0.12s; }
@@ -38,11 +28,6 @@
gap: 12px; gap: 12px;
} }
.prodaja-kartica {
animation: fadeInUp 0.25s ease forwards;
opacity: 0;
}
.prodaja-kartica:nth-child(1) { animation-delay: 0.04s; } .prodaja-kartica:nth-child(1) { animation-delay: 0.04s; }
.prodaja-kartica:nth-child(2) { animation-delay: 0.10s; } .prodaja-kartica:nth-child(2) { animation-delay: 0.10s; }
.prodaja-kartica:nth-child(3) { animation-delay: 0.16s; } .prodaja-kartica:nth-child(3) { animation-delay: 0.16s; }
@@ -93,7 +78,7 @@
</div> </div>
<!-- desktop tabela --> <!-- desktop tabela -->
<div class="kartica prodaja-tabela" style="padding:0;overflow:hidden;"> <div class="kartica prodaja-tabela animiraj" style="padding:0;overflow:hidden;">
<div style="overflow-x:auto;"> <div style="overflow-x:auto;">
<table style="width:100%;border-collapse:collapse;"> <table style="width:100%;border-collapse:collapse;">
<thead> <thead>
@@ -107,7 +92,7 @@
</thead> </thead>
<tbody> <tbody>
{{range .Nalozi}} {{range .Nalozi}}
<tr style="border-bottom:0.5px solid var(--ivica);transition:background 0.15s;" <tr class="animiraj" style="border-bottom:0.5px solid var(--ivica);transition:background 0.15s;"
onmouseover="this.style.background='var(--pozadina)'" onmouseover="this.style.background='var(--pozadina)'"
onmouseout="this.style.background=''"> onmouseout="this.style.background=''">
<td style="padding:12px 16px;font-size:13px;font-family:monospace;color:var(--tekst-glavni);"> <td style="padding:12px 16px;font-size:13px;font-family:monospace;color:var(--tekst-glavni);">
@@ -149,7 +134,7 @@
<!-- mobilne kartice --> <!-- mobilne kartice -->
<div class="prodaja-kartice"> <div class="prodaja-kartice">
{{range .Nalozi}} {{range .Nalozi}}
<div class="kartica prodaja-kartica"> <div class="kartica prodaja-kartica animiraj">
<div style="display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:10px;"> <div style="display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:10px;">
<div> <div>
<div style="font-size:13px;font-family:monospace;color:var(--tekst-glavni);">{{.BrojNaloga}}</div> <div style="font-size:13px;font-family:monospace;color:var(--tekst-glavni);">{{.BrojNaloga}}</div>
+3 -14
View File
@@ -4,17 +4,6 @@
{{define "dodatni-css"}} {{define "dodatni-css"}}
<style> <style>
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes slideDown {
from { opacity: 0; transform: translateY(-10px); }
to { opacity: 1; transform: translateY(0); }
}
.detalji-kartica { animation: fadeInUp 0.3s ease forwards; opacity: 0; }
.detalji-kartica:nth-child(1) { animation-delay: 0.04s; } .detalji-kartica:nth-child(1) { animation-delay: 0.04s; }
.detalji-kartica:nth-child(2) { animation-delay: 0.12s; } .detalji-kartica:nth-child(2) { animation-delay: 0.12s; }
.detalji-kartica:nth-child(3) { animation-delay: 0.20s; } .detalji-kartica:nth-child(3) { animation-delay: 0.20s; }
@@ -39,7 +28,7 @@
</a> </a>
<!-- zaglavlje naloga --> <!-- zaglavlje naloga -->
<div class="kartica detalji-kartica"> <div class="kartica detalji-kartica animiraj">
<div style="display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px;margin-bottom:16px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);"> <div style="display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px;margin-bottom:16px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);">
<span style="font-size:20px;font-weight:600;color:var(--tekst-glavni);font-family:monospace;"> <span style="font-size:20px;font-weight:600;color:var(--tekst-glavni);font-family:monospace;">
{{.Nalog.BrojNaloga}} {{.Nalog.BrojNaloga}}
@@ -76,7 +65,7 @@
</div> </div>
<!-- stavke --> <!-- stavke -->
<div class="kartica detalji-kartica" style="padding:0;overflow:hidden;"> <div class="kartica detalji-kartica animiraj" style="padding:0;overflow:hidden;">
<div style="padding:16px 20px;border-bottom:0.5px solid var(--ivica);"> <div style="padding:16px 20px;border-bottom:0.5px solid var(--ivica);">
<span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Stavke</span> <span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Stavke</span>
</div> </div>
@@ -111,7 +100,7 @@
</div> </div>
<!-- zona za brisanje --> <!-- zona za brisanje -->
<div class="kartica detalji-kartica" style="border-color:#dc262633;"> <div class="kartica detalji-kartica animiraj" style="border-color:#dc262633;">
<div style="display:flex;align-items:flex-start;gap:12px;flex-wrap:wrap;"> <div style="display:flex;align-items:flex-start;gap:12px;flex-wrap:wrap;">
<div style="flex:1;min-width:200px;"> <div style="flex:1;min-width:200px;">
<div style="font-size:14px;font-weight:500;color:#dc2626;margin-bottom:4px;">Brisanje naloga</div> <div style="font-size:14px;font-weight:500;color:#dc2626;margin-bottom:4px;">Brisanje naloga</div>
+2 -16
View File
@@ -4,20 +4,6 @@
{{define "dodatni-css"}} {{define "dodatni-css"}}
<style> <style>
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes shake {
0%, 100% { transform: translateX(0); }
20% { transform: translateX(-6px); }
40% { transform: translateX(6px); }
60% { transform: translateX(-4px); }
80% { transform: translateX(4px); }
}
.forma-kartica { animation: fadeInUp 0.3s ease forwards; opacity: 0; }
.forma-kartica:nth-child(1) { animation-delay: 0.04s; } .forma-kartica:nth-child(1) { animation-delay: 0.04s; }
.forma-kartica:nth-child(2) { animation-delay: 0.12s; } .forma-kartica:nth-child(2) { animation-delay: 0.12s; }
@@ -99,7 +85,7 @@
{{end}} {{end}}
<!-- zaglavlje prodaje --> <!-- zaglavlje prodaje -->
<div class="kartica forma-kartica" style="margin-bottom:16px;"> <div class="kartica forma-kartica animiraj" style="margin-bottom:16px;">
<div style="margin-bottom:16px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);"> <div style="margin-bottom:16px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);">
<span style="font-size:16px;font-weight:500;color:var(--tekst-glavni);">Nova prodaja</span> <span style="font-size:16px;font-weight:500;color:var(--tekst-glavni);">Nova prodaja</span>
</div> </div>
@@ -125,7 +111,7 @@
</div> </div>
<!-- stavke --> <!-- stavke -->
<div class="kartica forma-kartica" style="margin-bottom:16px;"> <div class="kartica forma-kartica animiraj" style="margin-bottom:16px;">
<div style="margin-bottom:16px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;"> <div style="margin-bottom:16px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;">
<span style="font-size:16px;font-weight:500;color:var(--tekst-glavni);">Stavke</span> <span style="font-size:16px;font-weight:500;color:var(--tekst-glavni);">Stavke</span>
<button type="button" @click="dodajStavku()" <button type="button" @click="dodajStavku()"
+3 -18
View File
@@ -9,18 +9,8 @@
to { opacity: 1; transform: translateY(0); } to { opacity: 1; transform: translateY(0); }
} }
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
}
.poruka-animacija { animation: slideDown 0.3s ease forwards; } .poruka-animacija { animation: slideDown 0.3s ease forwards; }
.servis-tabela tbody tr {
animation: fadeInUp 0.25s ease forwards;
opacity: 0;
}
.servis-tabela tbody tr:nth-child(1) { animation-delay: 0.04s; } .servis-tabela tbody tr:nth-child(1) { animation-delay: 0.04s; }
.servis-tabela tbody tr:nth-child(2) { animation-delay: 0.08s; } .servis-tabela tbody tr:nth-child(2) { animation-delay: 0.08s; }
.servis-tabela tbody tr:nth-child(3) { animation-delay: 0.12s; } .servis-tabela tbody tr:nth-child(3) { animation-delay: 0.12s; }
@@ -38,11 +28,6 @@
gap: 12px; gap: 12px;
} }
.servis-kartica {
animation: fadeInUp 0.25s ease forwards;
opacity: 0;
}
.servis-kartica:nth-child(1) { animation-delay: 0.04s; } .servis-kartica:nth-child(1) { animation-delay: 0.04s; }
.servis-kartica:nth-child(2) { animation-delay: 0.10s; } .servis-kartica:nth-child(2) { animation-delay: 0.10s; }
.servis-kartica:nth-child(3) { animation-delay: 0.16s; } .servis-kartica:nth-child(3) { animation-delay: 0.16s; }
@@ -119,7 +104,7 @@
</div> </div>
<!-- desktop tabela --> <!-- desktop tabela -->
<div class="kartica servis-tabela" style="padding:0;overflow:hidden;"> <div class="kartica servis-tabela animiraj" style="padding:0;overflow:hidden;">
<div style="overflow-x:auto;"> <div style="overflow-x:auto;">
<table style="width:100%;border-collapse:collapse;"> <table style="width:100%;border-collapse:collapse;">
<thead> <thead>
@@ -134,7 +119,7 @@
</thead> </thead>
<tbody> <tbody>
{{range .Nalozi}} {{range .Nalozi}}
<tr style="border-bottom:0.5px solid var(--ivica);transition:background 0.15s;" <tr class="animiraj" style="border-bottom:0.5px solid var(--ivica);transition:background 0.15s;"
onmouseover="this.style.background='var(--pozadina)'" onmouseover="this.style.background='var(--pozadina)'"
onmouseout="this.style.background=''"> onmouseout="this.style.background=''">
<td style="padding:12px 16px;"> <td style="padding:12px 16px;">
@@ -188,7 +173,7 @@
<!-- mobilne kartice --> <!-- mobilne kartice -->
<div class="servis-kartice"> <div class="servis-kartice">
{{range .Nalozi}} {{range .Nalozi}}
<div class="kartica servis-kartica"> <div class="kartica servis-kartica animiraj">
<div style="display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:10px;"> <div style="display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:10px;">
<div> <div>
<a href="/servis/{{.ID}}" <a href="/servis/{{.ID}}"
+5 -20
View File
@@ -4,21 +4,6 @@
{{define "dodatni-css"}} {{define "dodatni-css"}}
<style> <style>
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes slideDown {
from { opacity: 0; transform: translateY(-10px); }
to { opacity: 1; transform: translateY(0); }
}
.detalji-kartica {
animation: fadeInUp 0.3s ease forwards;
opacity: 0;
}
.detalji-kartica:nth-child(1) { animation-delay: 0.04s; } .detalji-kartica:nth-child(1) { animation-delay: 0.04s; }
.detalji-kartica:nth-child(2) { animation-delay: 0.12s; } .detalji-kartica:nth-child(2) { animation-delay: 0.12s; }
.detalji-kartica:nth-child(3) { animation-delay: 0.20s; } .detalji-kartica:nth-child(3) { animation-delay: 0.20s; }
@@ -72,7 +57,7 @@
</a> </a>
<!-- zaglavlje naloga --> <!-- zaglavlje naloga -->
<div class="kartica detalji-kartica"> <div class="kartica detalji-kartica animiraj">
<div style="display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;gap:12px;margin-bottom:16px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);"> <div style="display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;gap:12px;margin-bottom:16px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);">
<div style="display:flex;flex-direction:column;gap:8px;"> <div style="display:flex;flex-direction:column;gap:8px;">
<span style="font-size:20px;font-weight:600;color:var(--tekst-glavni);font-family:monospace;"> <span style="font-size:20px;font-weight:600;color:var(--tekst-glavni);font-family:monospace;">
@@ -107,7 +92,7 @@
</div> </div>
<!-- podaci o uređaju --> <!-- podaci o uređaju -->
<div class="kartica detalji-kartica"> <div class="kartica detalji-kartica animiraj">
<div style="margin-bottom:16px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);"> <div style="margin-bottom:16px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);">
<span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Uređaj</span> <span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Uređaj</span>
</div> </div>
@@ -138,7 +123,7 @@
</div> </div>
<!-- cene --> <!-- cene -->
<div class="kartica detalji-kartica"> <div class="kartica detalji-kartica animiraj">
<div style="margin-bottom:16px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);"> <div style="margin-bottom:16px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);">
<span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Cene</span> <span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Cene</span>
</div> </div>
@@ -171,7 +156,7 @@
</div> </div>
<!-- placeholder za buduće funkcije --> <!-- placeholder za buduće funkcije -->
<div class="kartica detalji-kartica" style="border-style:dashed;"> <div class="kartica detalji-kartica animiraj" style="border-style:dashed;">
<div style="display:flex;align-items:center;gap:10px;color:var(--tekst-sporedni);"> <div style="display:flex;align-items:center;gap:10px;color:var(--tekst-sporedni);">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="12" y1="8" x2="12" y2="12"/><line x1="12" y1="16" x2="12.01" y2="16"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="12" y1="8" x2="12" y2="12"/><line x1="12" y1="16" x2="12.01" y2="16"/></svg>
<span style="font-size:13px;">Istorija promena statusa i vezani artikli biće dostupni u narednoj verziji.</span> <span style="font-size:13px;">Istorija promena statusa i vezani artikli biće dostupni u narednoj verziji.</span>
@@ -179,7 +164,7 @@
</div> </div>
<!-- zona za brisanje --> <!-- zona za brisanje -->
<div class="kartica detalji-kartica" style="border-color:#dc262633;"> <div class="kartica detalji-kartica animiraj" style="border-color:#dc262633;">
<div style="display:flex;align-items:flex-start;gap:12px;flex-wrap:wrap;"> <div style="display:flex;align-items:flex-start;gap:12px;flex-wrap:wrap;">
<div style="flex:1;min-width:200px;"> <div style="flex:1;min-width:200px;">
<div style="font-size:14px;font-weight:500;color:#dc2626;margin-bottom:4px;">Brisanje naloga</div> <div style="font-size:14px;font-weight:500;color:#dc2626;margin-bottom:4px;">Brisanje naloga</div>
+1 -15
View File
@@ -4,20 +4,6 @@
{{define "dodatni-css"}} {{define "dodatni-css"}}
<style> <style>
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes shake {
0%, 100% { transform: translateX(0); }
20% { transform: translateX(-6px); }
40% { transform: translateX(6px); }
60% { transform: translateX(-4px); }
80% { transform: translateX(4px); }
}
.forma-kartica { animation: fadeInUp 0.3s ease forwards; }
.greska-animacija { animation: shake 0.4s ease; } .greska-animacija { animation: shake 0.4s ease; }
.sekcija-naslov { .sekcija-naslov {
@@ -47,7 +33,7 @@
Nazad na servis Nazad na servis
</a> </a>
<div class="kartica forma-kartica"> <div class="kartica forma-kartica animiraj">
<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);flex-wrap:wrap;gap:10px;"> <div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);flex-wrap:wrap;gap:10px;">
<span style="font-size:16px;font-weight:500;color:var(--tekst-glavni);"> <span style="font-size:16px;font-weight:500;color:var(--tekst-glavni);">
{{if .Izmena}}Izmeni nalog{{else}}Novi nalog{{end}} {{if .Izmena}}Izmeni nalog{{else}}Novi nalog{{end}}
+1 -1
View File
@@ -73,7 +73,7 @@
</style> </style>
</head> </head>
<body> <body>
<div class="kartica"> <div class="kartica animiraj">
<div class="logo"> <div class="logo">
<div class="logo-naziv">NTech</div> <div class="logo-naziv">NTech</div>
<div class="logo-podnazlov">Prvo pokretanje</div> <div class="logo-podnazlov">Prvo pokretanje</div>
+1 -1
View File
@@ -78,7 +78,7 @@
</style> </style>
</head> </head>
<body> <body>
<div class="kartica"> <div class="kartica animiraj">
<div class="logo"> <div class="logo">
<div class="logo-naziv">NTech</div> <div class="logo-naziv">NTech</div>
</div> </div>