feat: UI refinements - landing page gradient, button styling, drawer navigation

- Update landing view to use shell gradient background consistently

- Make surface-panel and hero-panel transparent in landing view

- Add button styling: remove shadows, use LUMO_TERTIARY for secondary actions

- Add clickable drawer header navigation to dashboard

- Remove unused title translations from message files
This commit is contained in:
2026-03-20 11:21:13 +01:00
parent 84f8531bbf
commit 8d4f04156e
19 changed files with 122 additions and 137 deletions

View File

@@ -157,7 +157,7 @@ vaadin-app-layout::part(content) {
box-sizing: border-box;
padding: 0;
gap: 1rem;
background: #ffffff !important;
background: transparent !important;
min-height: 100vh;
min-height: 100dvh;
}
@@ -192,6 +192,24 @@ body:has(.dashboard-home-view) vaadin-app-layout::part(content) {
box-shadow: none;
}
body:has(.landing-view) {
background: var(--app-shell-background);
}
.landing-view .surface-panel {
border: 1px solid var(--app-border-strong);
background: transparent;
backdrop-filter: none;
box-shadow: none;
}
.landing-view .landing-header,
.landing-view .section-panel,
.landing-view .app-overview-panel,
.landing-view .footer-panel {
background: var(--app-surface-solid);
}
.dashboard-home-view .hero-panel {
box-shadow: none;
}
@@ -201,10 +219,6 @@ body:has(.dashboard-home-view) vaadin-app-layout::part(content) {
gap: 20px;
}
body:has(.landing-view) {
background: #ffffff;
}
.data-view,
.dashboard-view,
.form-page,
@@ -452,7 +466,28 @@ vaadin-vertical-layout.admin-form-view {
transition: transform 0.22s ease, box-shadow 0.22s ease, border-color 0.22s ease;
}
.feature-card-link {
display: block;
width: 100%;
color: inherit;
text-decoration: none;
cursor: pointer;
}
.feature-card-link:hover,
.feature-card-link:hover *,
.feature-card-link:focus-visible,
.feature-card-link:focus-visible * {
color: inherit;
text-decoration: none;
}
.feature-card-link .feature-card {
cursor: pointer;
}
.feature-card:hover,
.feature-card-link:focus-visible .feature-card,
.message-card:hover {
transform: translateY(-4px);
box-shadow: 0 24px 48px rgba(15, 23, 42, 0.14);
@@ -486,20 +521,21 @@ vaadin-vertical-layout.admin-form-view {
}
.footer-details p,
.footer-cta,
.footer-slogan,
.app-cta,
.app-slogan,
.footer-version {
margin: 0;
text-align: center;
}
.footer-cta {
.app-cta {
margin-top: 0.75rem;
color: var(--app-accent-strong);
font-weight: 700;
max-width: 820px;
}
.footer-slogan {
.app-slogan {
color: var(--app-accent-strong);
font-style: italic;
}
@@ -689,6 +725,18 @@ vaadin-vertical-layout.admin-form-view {
transition: transform 0.18s ease, background-color 0.18s ease, border-color 0.18s ease;
}
.app-nav-row-root {
width: 20.5rem;
}
.app-nav-row-management-child {
width: 18.25rem;
}
.app-nav-row-user-child {
width: 17rem;
}
.app-nav-row:hover {
transform: translateX(4px);
background: rgba(255, 255, 255, 0.14);

View File

@@ -176,6 +176,15 @@ public final class MainLayout extends AppLayout {
row.setMargin(false);
row.getStyle().set("max-width", "calc(100% - 4px)");
row.addClassName("app-nav-row");
if (treeData.getParent(item) == null) {
row.addClassName("app-nav-row-root");
}
if (verwaltungItem.equals(treeData.getParent(item))) {
row.addClassName("app-nav-row-management-child");
}
if (benutzerItem.equals(treeData.getParent(item))) {
row.addClassName("app-nav-row-user-child");
}
// Icon
if (item.icon() != null) {

View File

@@ -4,8 +4,6 @@ import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.button.ButtonVariant;
import com.vaadin.flow.component.formlayout.FormLayout;
import com.vaadin.flow.component.html.H2;
import com.vaadin.flow.component.icon.Icon;
import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.notification.Notification;
import com.vaadin.flow.component.orderedlayout.FlexComponent;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
@@ -43,6 +41,9 @@ public class AddAppUserView extends VerticalLayout implements HasDynamicTitle {
setPadding(true);
setSpacing(true);
addClassName("form-page");
setJustifyContentMode(FlexComponent.JustifyContentMode.START);
setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.STRETCH);
getStyle().set("overflow", "auto");
// Set field labels via i18n
designationField.setLabel(getTranslation("addappuser.designation"));
@@ -53,20 +54,18 @@ public class AddAppUserView extends VerticalLayout implements HasDynamicTitle {
passwordField.setLabel(getTranslation("addappuser.password"));
confirmPasswordField.setLabel(getTranslation("addappuser.password.confirm"));
// Center content vertically
setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER);
setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.CENTER);
// Create main content container
VerticalLayout contentContainer = new VerticalLayout();
contentContainer.setWidth("600px");
contentContainer.setMaxWidth("90%");
contentContainer.setWidthFull();
contentContainer.setMaxWidth("100%");
contentContainer.setSpacing(true);
contentContainer.setPadding(true);
contentContainer.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.STRETCH);
contentContainer.addClassNames("form-shell", "form-card");
// Header with title and back button
// Header
HorizontalLayout header = new HorizontalLayout();
header.setWidthFull();
header.setAlignItems(FlexComponent.Alignment.CENTER);
header.setSpacing(true);
header.addClassName("form-header");
@@ -75,16 +74,12 @@ public class AddAppUserView extends VerticalLayout implements HasDynamicTitle {
title.getStyle().set("margin", "0");
title.addClassName("form-title");
Button backButton = new Button(getTranslation("button.back"), new Icon(VaadinIcon.ARROW_LEFT));
backButton.addThemeVariants(ButtonVariant.LUMO_TERTIARY);
backButton.addClickListener(e -> navigateBack());
header.add(title, backButton);
header.setJustifyContentMode(FlexComponent.JustifyContentMode.BETWEEN);
header.add(title);
contentContainer.add(header);
// Form layout
FormLayout formLayout = new FormLayout();
formLayout.setWidthFull();
formLayout.setResponsiveSteps(new FormLayout.ResponsiveStep("0", 1));
// Configure fields

View File

@@ -350,7 +350,7 @@ public class AddJobView extends Main implements HasDynamicTitle {
submitButtonLayout.setWidthFull();
submitButtonLayout.setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER);
submitButtonLayout.setPadding(true);
submitButtonLayout.addClassNames("surface-panel", "form-shell");
submitButtonLayout.addClassName("form-shell");
submitButtonLayout.add(submitButton);
submitButtonLayout.setVisible(false);
@@ -572,7 +572,11 @@ public class AddJobView extends Main implements HasDynamicTitle {
return removeButton;
}).setHeader(getTranslation("common.actions")).setAutoWidth(true).setFlexGrow(0);
priceAndDetailsSection.add(servicesGrid);
Div servicesGridPanel = new Div(servicesGrid);
servicesGridPanel.addClassNames("surface-panel", "data-grid-panel");
servicesGridPanel.setWidthFull();
priceAndDetailsSection.add(servicesGridPanel);
// Add Service Button
Button addServiceButton = new Button(getTranslation("addjob.services.add"), new Icon(VaadinIcon.PLUS));

View File

@@ -5,10 +5,10 @@ import com.vaadin.flow.component.html.*;
import com.vaadin.flow.component.icon.Icon;
import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.orderedlayout.FlexComponent;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.HasDynamicTitle;
import com.vaadin.flow.router.Route;
import com.vaadin.flow.router.RouterLink;
import de.assecutor.votianlt.model.User;
import de.assecutor.votianlt.security.SecurityService;
import de.assecutor.votianlt.pages.base.ui.view.MainLayout;
@@ -40,12 +40,6 @@ public class AuthenticatedStartView extends VerticalLayout implements HasDynamic
// System Section
add(createSystemSection());
// App Section
add(createAppSection());
// Footer
add(createFooter());
}
private Component createAuthenticatedHeroSection() {
@@ -94,17 +88,18 @@ public class AuthenticatedStartView extends VerticalLayout implements HasDynamic
// Feature Cards
featuresGrid.add(
createFeatureCard(VaadinIcon.COG, getTranslation("dashboard.feature.setup.title"),
getTranslation("dashboard.feature.setup.desc")),
getTranslation("dashboard.feature.setup.desc"), EditProfileView.class),
createFeatureCard(VaadinIcon.USERS, getTranslation("dashboard.feature.customers.title"),
getTranslation("dashboard.feature.customers.desc")),
getTranslation("dashboard.feature.customers.desc"), ShowCustomersView.class),
createFeatureCard(VaadinIcon.CLIPBOARD_TEXT, getTranslation("dashboard.feature.jobs.title"),
getTranslation("dashboard.feature.jobs.desc")));
getTranslation("dashboard.feature.jobs.desc"), ShowJobsView.class));
systemSection.add(systemTitle, systemIntro, featuresGrid);
return systemSection;
}
private Component createFeatureCard(VaadinIcon iconType, String title, String description) {
private Component createFeatureCard(VaadinIcon iconType, String title, String description,
Class<? extends Component> navigationTarget) {
VerticalLayout card = new VerticalLayout();
card.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.CENTER);
card.setPadding(true);
@@ -123,46 +118,14 @@ public class AuthenticatedStartView extends VerticalLayout implements HasDynamic
cardDescription.addClassName("feature-card-description");
card.add(icon, cardTitle, cardDescription);
return card;
}
private Component createAppSection() {
VerticalLayout appSection = new VerticalLayout();
appSection.setWidthFull();
appSection.setPadding(true);
appSection.setSpacing(true);
appSection.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.CENTER);
appSection.addClassNames("page-shell", "surface-panel", "app-overview-panel");
H2 appTitle = new H2(getTranslation("dashboard.app.title"));
appTitle.addClassName("section-title");
Paragraph appDescription = new Paragraph(getTranslation("dashboard.app.description"));
appDescription.addClassName("section-intro");
appSection.add(appTitle, appDescription);
return appSection;
}
private Component createFooter() {
VerticalLayout footer = new VerticalLayout();
footer.setWidthFull();
footer.setPadding(true);
footer.setSpacing(true);
footer.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.CENTER);
footer.addClassNames("page-shell", "surface-panel", "footer-panel");
HorizontalLayout footerContent = new HorizontalLayout();
footerContent.setDefaultVerticalComponentAlignment(FlexComponent.Alignment.CENTER);
footerContent.setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER);
Paragraph copyright = new Paragraph(getTranslation("dashboard.footer.copyright"));
copyright.addClassName("footer-version");
footerContent.add(copyright);
footer.add(footerContent);
return footer;
RouterLink link = new RouterLink();
link.setRoute(navigationTarget);
link.add(card);
link.addClassName("feature-card-link");
link.getStyle().set("width", "100%");
link.getElement().setAttribute("aria-label", title);
return link;
}
@Override

View File

@@ -4,8 +4,6 @@ import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.button.ButtonVariant;
import com.vaadin.flow.component.formlayout.FormLayout;
import com.vaadin.flow.component.html.H2;
import com.vaadin.flow.component.icon.Icon;
import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.notification.Notification;
import com.vaadin.flow.component.orderedlayout.FlexComponent;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
@@ -48,6 +46,9 @@ public class EditAppUserView extends VerticalLayout implements HasUrlParameter<S
setPadding(true);
addClassName("form-page");
setSpacing(true);
setJustifyContentMode(FlexComponent.JustifyContentMode.START);
setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.STRETCH);
getStyle().set("overflow", "auto");
// Set field labels via i18n
designationField.setLabel(getTranslation("addappuser.designation"));
@@ -58,20 +59,18 @@ public class EditAppUserView extends VerticalLayout implements HasUrlParameter<S
changePasswordField.setLabel(getTranslation("editappuser.password.change"));
confirmChangePasswordField.setLabel(getTranslation("editappuser.password.change.confirm"));
// Center content vertically
setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER);
setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.CENTER);
// Create main content container
VerticalLayout contentContainer = new VerticalLayout();
contentContainer.setWidth("600px");
contentContainer.setMaxWidth("90%");
contentContainer.setWidthFull();
contentContainer.setMaxWidth("100%");
contentContainer.setSpacing(true);
contentContainer.setPadding(true);
contentContainer.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.STRETCH);
contentContainer.addClassNames("form-shell", "form-card");
// Header with title and back button
// Header
HorizontalLayout header = new HorizontalLayout();
header.setWidthFull();
header.setAlignItems(FlexComponent.Alignment.CENTER);
header.setSpacing(true);
header.addClassName("form-header");
@@ -79,16 +78,12 @@ public class EditAppUserView extends VerticalLayout implements HasUrlParameter<S
H2 title = new H2(getTranslation("editappuser.title"));
title.addClassName("form-title");
Button backButton = new Button(getTranslation("button.back"), new Icon(VaadinIcon.ARROW_LEFT));
backButton.addThemeVariants(ButtonVariant.LUMO_TERTIARY);
backButton.addClickListener(e -> navigateBack());
header.add(title, backButton);
header.setJustifyContentMode(FlexComponent.JustifyContentMode.BETWEEN);
header.add(title);
contentContainer.add(header);
// Form layout
FormLayout formLayout = new FormLayout();
formLayout.setWidthFull();
formLayout.setResponsiveSteps(new FormLayout.ResponsiveStep("0", 1));
// Configure fields

View File

@@ -52,6 +52,9 @@ public class EditCustomerView extends VerticalLayout implements HasUrlParameter<
setPadding(true);
addClassName("form-page");
setSpacing(true);
setJustifyContentMode(FlexComponent.JustifyContentMode.START);
setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.STRETCH);
getStyle().set("overflow", "auto");
// Set field labels via i18n
titleField.setLabel(getTranslation("addjob.address.salutation"));
@@ -67,16 +70,13 @@ public class EditCustomerView extends VerticalLayout implements HasUrlParameter<
zipField.setLabel(getTranslation("profile.zip"));
cityField.setLabel(getTranslation("profile.city"));
// Center content vertically
setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER);
setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.CENTER);
// Create main content container
VerticalLayout contentContainer = new VerticalLayout();
contentContainer.setWidth("800px");
contentContainer.setMaxWidth("90%");
contentContainer.setWidthFull();
contentContainer.setMaxWidth("100%");
contentContainer.setSpacing(true);
contentContainer.setPadding(true);
contentContainer.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.STRETCH);
contentContainer.addClassNames("form-shell", "form-card");
// Header
@@ -87,6 +87,7 @@ public class EditCustomerView extends VerticalLayout implements HasUrlParameter<
// Form layout
FormLayout formLayout = new FormLayout();
formLayout.setWidthFull();
formLayout.setResponsiveSteps(new FormLayout.ResponsiveStep("0", 1));
// Add fields to form - all fields in single column

View File

@@ -579,6 +579,7 @@ public class EditProfileView extends HorizontalLayout implements HasDynamicTitle
// Profil speichern Button (unten rechts)
Button saveProfile = new Button(getTranslation("button.save"));
saveProfile.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
saveProfile.getStyle().set("box-shadow", "none");
saveProfile.addClickListener(e -> {
// Validate all required fields first
boolean isValid = validateAllProfileFields(companyField, firstnameField, lastnameField, phoneField,
@@ -628,7 +629,7 @@ public class EditProfileView extends HorizontalLayout implements HasDynamicTitle
// Fixieren am unteren Rand
buttonBar.getStyle().set("position", "sticky");
buttonBar.getStyle().set("bottom", "0");
buttonBar.getStyle().set("background", "var(--lumo-base-color)");
buttonBar.getStyle().set("background", "transparent");
buttonBar.getStyle().set("padding", "var(--lumo-space-s) 0");
buttonBar.getStyle().set("z-index", "1");
formColumn.add(buttonBar);

View File

@@ -358,7 +358,13 @@ public class StartView extends VerticalLayout implements BeforeEnterObserver, Ha
appIcon.setSize("80px");
appIcon.addClassName("feature-card-icon");
appSection.add(appTitle, appDescription, appIcon);
Paragraph ctaText = new Paragraph(getTranslation("start.cta.text"));
ctaText.addClassName("app-cta");
Paragraph slogan = new Paragraph(getTranslation("start.slogan"));
slogan.addClassName("app-slogan");
appSection.add(appTitle, appDescription, appIcon, ctaText, slogan);
return appSection;
}
@@ -385,18 +391,11 @@ public class StartView extends VerticalLayout implements BeforeEnterObserver, Ha
new Paragraph(getTranslation("start.imprint.phone")),
new Paragraph(getTranslation("start.imprint.email")));
// Call to Action
Paragraph ctaText = new Paragraph(getTranslation("start.cta.text"));
ctaText.addClassName("footer-cta");
Paragraph slogan = new Paragraph(getTranslation("start.slogan"));
slogan.addClassName("footer-slogan");
// Versionsnummer
Span versionSpan = new Span("Version " + appVersion);
versionSpan.addClassName("footer-version");
footer.add(companyTitle, companyInfo, ctaText, slogan, versionSpan);
footer.add(companyTitle, companyInfo, versionSpan);
return footer;
}

View File

@@ -273,7 +273,6 @@ page.title.add.job=Neuen Auftrag anlegen
# Dashboard
dashboard.welcome=Willkommen, {0}!
dashboard.footer.copyright=© 2024 VotianLT. Alle Rechte vorbehalten.
dashboard.description=Hier können Sie Ihre Aufträge verwalten, Kunden organisieren und alle wichtigen Funktionen von VotianLT nutzen.
dashboard.system.title=Systemübersicht
dashboard.system.intro=Verwalten Sie Ihre Geschäftsprozesse effizient mit den folgenden Funktionen
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Kunden
dashboard.feature.customers.desc=Verwalten Sie Ihre Kundenbeziehungen und Kontakte
dashboard.feature.jobs.title=Aufträge
dashboard.feature.jobs.desc=Erstellen und verwalten Sie Aufträge effizient
dashboard.app.title=Mobile App
dashboard.app.description=Nutzen Sie die VotianLT App für unterwegs und bleiben Sie immer verbunden
# Add App User
addappuser.title=Neuen App-Nutzer anlegen

View File

@@ -243,7 +243,6 @@ page.title.forget.password=Parooli l\u00e4htestamine
page.title.admin.pricetable=Hinnatabel
page.title.add.job=Uue tellimuse loomine
dashboard.welcome=Tere tulemast, {0}!
dashboard.footer.copyright=\u00a9 2024 VotianLT. K\u00f5ik \u00f5igused kaitstud.
dashboard.description=Siin saate hallata oma tellimusi, korraldada kliente ja kasutada k\u00f5iki VotianLT olulisi funktsioone.
dashboard.system.title=S\u00fcsteemi \u00fclevaade
dashboard.system.intro=Hallake oma \u00e4riprotsesse t\u00f5husalt j\u00e4rgmiste funktsioonidega
@@ -253,8 +252,6 @@ dashboard.feature.customers.title=Kliendid
dashboard.feature.customers.desc=Hallake oma kliendisuhteid ja kontakte
dashboard.feature.jobs.title=Tellimused
dashboard.feature.jobs.desc=Looge ja hallake tellimusi t\u00f5husalt
dashboard.app.title=Mobiilirakendus
dashboard.app.description=Kasutage VotianLT rakendust liikvel olles ja p\u00fcsige alati \u00fchenduses
addappuser.title=Uue \u00e4pikasutaja loomine
addappuser.designation=T\u00e4his
addappuser.phone=Telefon (mobiil)

View File

@@ -273,7 +273,6 @@ page.title.add.job=Create New Job
# Dashboard
dashboard.welcome=Welcome, {0}!
dashboard.footer.copyright=\u00a9 2024 VotianLT. All rights reserved.
dashboard.description=Here you can manage your jobs, organize customers, and use all important features of VotianLT.
dashboard.system.title=System Overview
dashboard.system.intro=Manage your business processes efficiently with the following features
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Customers
dashboard.feature.customers.desc=Manage your customer relationships and contacts
dashboard.feature.jobs.title=Jobs
dashboard.feature.jobs.desc=Create and manage jobs efficiently
dashboard.app.title=Mobile App
dashboard.app.description=Use the VotianLT App on the go and stay connected at all times
# Add App User
addappuser.title=Create New App User

View File

@@ -273,7 +273,6 @@ page.title.add.job=Crear nuevo pedido
# Dashboard
dashboard.welcome=\u00a1Bienvenido/a, {0}!
dashboard.footer.copyright=\u00a9 2024 VotianLT. Todos los derechos reservados.
dashboard.description=Aqu\u00ed puede gestionar sus pedidos, organizar clientes y utilizar todas las funciones importantes de VotianLT.
dashboard.system.title=Vista general del sistema
dashboard.system.intro=Gestione sus procesos empresariales de manera eficiente con las siguientes funciones
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Clientes
dashboard.feature.customers.desc=Gestione sus relaciones con los clientes y contactos
dashboard.feature.jobs.title=Pedidos
dashboard.feature.jobs.desc=Cree y gestione pedidos de manera eficiente
dashboard.app.title=App m\u00f3vil
dashboard.app.description=Utilice la app de VotianLT en cualquier lugar y permanezca siempre conectado
# Add App User
addappuser.title=Crear nuevo usuario de la app

View File

@@ -273,7 +273,6 @@ page.title.add.job=Cr\u00e9er une nouvelle mission
# Dashboard
dashboard.welcome=Bienvenue, {0} !
dashboard.footer.copyright=\u00a9 2024 VotianLT. Tous droits r\u00e9serv\u00e9s.
dashboard.description=Ici, vous pouvez g\u00e9rer vos missions, organiser vos clients et acc\u00e9der \u00e0 toutes les fonctions importantes de VotianLT.
dashboard.system.title=Aper\u00e7u du syst\u00e8me
dashboard.system.intro=G\u00e9rez vos processus m\u00e9tiers efficacement avec les fonctions suivantes
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Clients
dashboard.feature.customers.desc=G\u00e9rez vos relations clients et vos contacts
dashboard.feature.jobs.title=Missions
dashboard.feature.jobs.desc=Cr\u00e9ez et g\u00e9rez vos missions efficacement
dashboard.app.title=Application mobile
dashboard.app.description=Utilisez l'application VotianLT en d\u00e9placement et restez toujours connect\u00e9
# Add App User
addappuser.title=Cr\u00e9er un nouvel utilisateur d'app

View File

@@ -273,7 +273,6 @@ page.title.add.job=Sukurti naują užsakymą
# Dashboard
dashboard.welcome=Sveiki, {0}!
dashboard.footer.copyright=© 2024 VotianLT. Visos teisės saugomos.
dashboard.description=Čia galite valdyti savo užsakymus, organizuoti klientus ir naudoti visas svarbias VotianLT funkcijas.
dashboard.system.title=Sistemos apžvalga
dashboard.system.intro=Efektyviai valdykite savo verslo procesus naudodami šias funkcijas
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Klientai
dashboard.feature.customers.desc=Valdykite savo klientų ryšius ir kontaktus
dashboard.feature.jobs.title=Užsakymai
dashboard.feature.jobs.desc=Efektyviai kurkite ir valdykite užsakymus
dashboard.app.title=Mobili programėlė
dashboard.app.description=Naudokite VotianLT programėlę kelionėje ir visada likite prisijungę
# Add App User
addappuser.title=Sukurti naują programėlės naudotoją

View File

@@ -273,7 +273,6 @@ page.title.add.job=Izveidot jaunu uzdevumu
# Dashboard
dashboard.welcome=Laipni lūgti, {0}!
dashboard.footer.copyright=© 2024 VotianLT. Visas tiesības aizsargātas.
dashboard.description=Šeit jūs varat pārvaldīt savus uzdevumus, organizēt klientus un izmantot visas svarīgās VotianLT funkcijas.
dashboard.system.title=Sistēmas pārskats
dashboard.system.intro=Efektīvi pārvaldiet savus biznesa procesus ar šādām funkcijām
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Klienti
dashboard.feature.customers.desc=Pārvaldiet savas klientu attiecības un kontaktus
dashboard.feature.jobs.title=Uzdevumi
dashboard.feature.jobs.desc=Izveidojiet un pārvaldiet uzdevumus efektīvi
dashboard.app.title=Mobilā lietotne
dashboard.app.description=Izmantojiet VotianLT lietotni ceļā un palieciet vienmēr savienoti
# Add App User
addappuser.title=Izveidot jaunu lietotnes lietotāju

View File

@@ -273,7 +273,6 @@ page.title.add.job=Dodaj nowe zlecenie
# Dashboard
dashboard.welcome=Witaj, {0}!
dashboard.footer.copyright=\u00a9 2024 VotianLT. Wszelkie prawa zastrze\u017cone.
dashboard.description=Tutaj mo\u017cesz zarz\u0105dza\u0107 swoimi zleceniami, organizowa\u0107 klient\u00f3w i korzysta\u0107 ze wszystkich wa\u017cnych funkcji VotianLT.
dashboard.system.title=Przegl\u0105d systemu
dashboard.system.intro=Zarz\u0105dzaj swoimi procesami biznesowymi efektywnie za pomoc\u0105 nast\u0119puj\u0105cych funkcji
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Klienci
dashboard.feature.customers.desc=Zarz\u0105dzaj relacjami z klientami i kontaktami
dashboard.feature.jobs.title=Zlecenia
dashboard.feature.jobs.desc=Tworzenie i zarz\u0105dzanie zleceniami w spos\u00f3b efektywny
dashboard.app.title=Aplikacja mobilna
dashboard.app.description=Korzystaj z aplikacji VotianLT w podr\u00f3\u017cy i b\u0105d\u017a zawsze po\u0142\u0105czony
# Add App User
addappuser.title=Dodaj nowego u\u017cytkownika aplikacji

View File

@@ -273,7 +273,6 @@ page.title.add.job=Создать новый заказ
# Dashboard
dashboard.welcome=Добро пожаловать, {0}!
dashboard.footer.copyright=\u00a9 2024 VotianLT. Все права защищены.
dashboard.description=Здесь вы можете управлять своими заказами, организовывать клиентов и использовать все важные функции VotianLT.
dashboard.system.title=Обзор системы
dashboard.system.intro=Эффективно управляйте своими бизнес-процессами с помощью следующих функций
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Клиенты
dashboard.feature.customers.desc=Управляйте отношениями с клиентами и контактами
dashboard.feature.jobs.title=Заказы
dashboard.feature.jobs.desc=Создавайте и управляйте заказами эффективно
dashboard.app.title=Мобильное приложение
dashboard.app.description=Используйте приложение VotianLT в дороге и оставайтесь всегда на связи
# Add App User
addappuser.title=Создать нового пользователя приложения

View File

@@ -273,7 +273,6 @@ page.title.add.job=Yeni \u0130\u015f Olu\u015ftur
# Dashboard
dashboard.welcome=Ho\u015f geldiniz, {0}!
dashboard.footer.copyright=\u00a9 2024 VotianLT. T\u00fcm haklar\u0131 sakl\u0131d\u0131r.
dashboard.description=Burada i\u015flerinizi y\u00f6netebilir, m\u00fc\u015fterilerinizi organize edebilir ve VotianLT'nin t\u00fcm \u00f6nemli \u00f6zelliklerini kullanabilirsiniz.
dashboard.system.title=Sisteme Genel Bak\u0131\u015f
dashboard.system.intro=A\u015fa\u011f\u0131daki \u00f6zelliklerle i\u015f s\u00fcre\u00e7lerinizi verimli bir \u015fekilde y\u00f6netin
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=M\u00fc\u015fteriler
dashboard.feature.customers.desc=M\u00fc\u015fteri ili\u015fkilerinizi ve ki\u015filerinizi y\u00f6netin
dashboard.feature.jobs.title=\u0130\u015fler
dashboard.feature.jobs.desc=\u0130\u015flerinizi verimli bir \u015fekilde olu\u015fturun ve y\u00f6netin
dashboard.app.title=Mobil Uygulama
dashboard.app.description=Hareket halindeyken VotianLT Uygulamas\u0131n\u0131 kullan\u0131n ve her zaman ba\u011fl\u0131 kal\u0131n
# Add App User
addappuser.title=Yeni Uygulama Kullan\u0131c\u0131s\u0131 Olu\u015ftur