GUI a drobnosti

master
Kowalski 2026-10-17 11:10:58 +02:00
parent 4b4e3acafe
commit e649c5ae9c
5 changed files with 308 additions and 44 deletions

View File

@ -118,7 +118,7 @@ class SdfKufrikImporter
'NAZEV' => $this->clip($nazev, 255),
'IC' => $this->clip($uzivatel['IC'] ?? null, 8),
'DIC' => $this->clip($uzivatel['DIC'] ?? null, 12),
'PLATCE_DPH' => !empty($uzivatel['DIC']) ? 1 : 0,
'PLATCE_DPH' => 0,
'TELEFON' => $this->clip($uzivatel['TELEFON'] ?? null, 20),
'EMAIL' => $this->clip($uzivatel['EMAIL'] ?? null, 100),
'ULICE' => $this->clip($uzivatel['ULICE'] ?? null, 100),

View File

@ -17,7 +17,7 @@
</script>
{* naše vlastní styly *}
<link href="{$basePath}/css/layout.css?v={$appVersion ?? '1.0'}" rel="stylesheet">
<link href="{$basePath}/css/layout.css?v={$appVersion ?? '1.0'}-4" rel="stylesheet">
</head>
<body>

View File

@ -38,7 +38,6 @@ class FirmaPresenter extends BasePresenter
'nazev' => $firma->NAZEV,
'ic' => $firma->IC,
'dic' => $firma->DIC,
'platce_dph' => (bool) $firma->PLATCE_DPH,
'telefon' => $firma->TELEFON,
'email' => $firma->EMAIL,
'ulice' => $firma->ULICE,
@ -65,8 +64,6 @@ class FirmaPresenter extends BasePresenter
$form->addText('dic', 'DIČ:')
->setMaxLength(12);
$form->addCheckbox('platce_dph', 'Jsem plátce DPH');
// Kontakty
$form->addText('telefon', 'Telefon:');
$form->addEmail('email', 'E-mail:');
@ -100,7 +97,7 @@ class FirmaPresenter extends BasePresenter
'NAZEV' => $data->nazev,
'IC' => $data->ic,
'DIC' => $data->dic,
'PLATCE_DPH' => $data->platce_dph ? 1 : 0,
'PLATCE_DPH' => 0,
'TELEFON' => $data->telefon,
'EMAIL' => $data->email,
'ULICE' => $data->ulice,

View File

@ -36,11 +36,6 @@
</div>
</div>
<div class="form-check mt-2 mb-3">
<input n:name="platce_dph" class="form-check-input">
<label n:name="platce_dph" class="form-check-label fw-bold">Plátce DPH</label>
</div>
<!-- KONTAKTY & SÍDLO -->
<h6 class="fw-bold text-muted mt-4 mb-3"><i class="bi bi-geo-alt me-1"></i> Sídlo a kontakty</h6>
<div class="row">

View File

@ -1,15 +1,26 @@
/* --- 1. GLOBÁLNÍ PROMĚNNÉ BARVY & BASE --- */
:root {
--app-bg: #f8fafc; /* Jemný šedo-modrý podklad */
--header-bg: #1e293b; /* Moderní tmavě břidlicová (Slate 800) místo sytě modré */
--header-active: #334155; /* Světlejší břidlicová pro aktivní záložku */
--primary-accent: #3b82f6; /* Moderní soft modrá */
--text-main: #0f172a;
--text-muted: #64748b;
--border-color: #e2e8f0; /* Velmi velice jemná hraniční čára */
--app-bg: #eef3fa;
--header-bg: #1f4f8f;
--header-active: #163e73;
--primary-accent: #2f6fce;
--primary-accent-hover: #245db3;
--primary-soft: #e3eefc;
--primary-soft-border: #b7d0f3;
--text-main: #1c2b42;
--text-muted: #5c6e86;
--border-color: #dbe4f0;
--card-bg: #ffffff;
--radius-sm: 0.375rem;
--radius-md: 0.5rem;
--radius-sm: 0.5rem;
--radius-md: 0.75rem;
--success: #14915f;
--success-hover: #0f7a4f;
--success-soft: #d9f5e8;
--warning-soft: #ffe8bf;
--warning-text: #b86e00;
--danger: #e04b4b;
--danger-hover: #c93737;
--danger-soft: #fde2e2;
}
html, body {
@ -46,7 +57,7 @@ body {
}
.app-header .nav-link {
color: #94a3b8; /* Soft šedá pro neaktivní */
color: #c5d0de;
border: none !important;
padding: 0.45rem 0.85rem;
font-weight: 500;
@ -74,13 +85,15 @@ body {
}
.user-panel .btn-outline-light {
border-color: #475569;
color: #cbd5e1;
border-color: #5d7390;
color: #e4ebf4;
border-radius: 999px;
padding-inline: 0.85rem;
}
.user-panel .btn-outline-light:hover {
background-color: #334155;
border-color: #334155;
background-color: rgba(255, 255, 255, 0.1);
border-color: #c5d4e6;
color: #fff;
}
@ -136,26 +149,30 @@ body {
margin-bottom: 0.15rem;
}
/* Speciální úpravy barev pro primární tlačítka ( soft tlačítka ) */
.btn-action.btn-success {
background-color: #10b981; /* Emerald green místo zářivé zelené */
border-color: #10b981;
background-color: var(--success);
border-color: var(--success);
color: #fff;
}
.btn-action.btn-success:hover {
background-color: #059669;
border-color: #059669;
background-color: var(--success-hover);
border-color: var(--success-hover);
color: #fff;
}
.btn-action.btn-outline-primary {
color: #2563eb;
border-color: #bfdbfe;
background-color: #eff6ff;
.btn-action.btn-outline-primary,
.btn-action.btn-primary,
.btn-action.btn-primary.active {
color: #1f5eae;
border-color: var(--primary-soft-border);
background-color: var(--primary-soft);
}
.btn-action.btn-outline-primary:hover {
background-color: #2563eb;
border-color: #2563eb;
color: #fff;
.btn-action.btn-outline-primary:hover,
.btn-action.btn-primary:hover,
.btn-action.btn-primary.active {
background-color: #d3e4fa;
border-color: #8eb4e8;
color: #184e94;
}
/* Oddělovač */
@ -276,7 +293,7 @@ body {
.login-form .form-control:focus {
outline: none;
border-color: var(--primary-accent);
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.15);
box-shadow: 0 0 0 3px rgba(109, 144, 196, 0.22);
}
.login-form .btn-primary {
@ -294,8 +311,8 @@ body {
}
.login-form .btn-primary:hover {
background-color: #2563eb;
border-color: #2563eb;
background-color: var(--primary-accent-hover);
border-color: var(--primary-accent-hover);
transform: translateY(-1px);
}
@ -323,7 +340,262 @@ body {
color: #991b1b;
}
.alert-success {
background-color: #ecfdf5;
border: 1px solid #a7f3d0;
color: #065f46;
background-color: var(--success-soft);
border: 1px solid #c9e6da;
color: #2f6b58;
}
/* --- 7. JEMNĚJŠÍ PALETA NAD BOOTSTRAPEM --- */
a {
color: #1f62c0;
}
a:hover {
color: #184e9c;
}
.text-primary { color: #1f62c0 !important; }
.text-success { color: #0e8a56 !important; }
.text-warning { color: var(--warning-text) !important; }
.text-danger { color: #d63c3c !important; }
.text-info { color: #0e7ea8 !important; }
.bg-primary { background-color: #7fa0cb !important; }
.border-primary { border-color: #8aabd4 !important; }
.border-success { border-color: #b7dccb !important; }
.border-warning { border-color: #ead7b0 !important; }
.border-danger { border-color: #e4c4c4 !important; }
/* Souhrnné karty — sytý podklad, ať nepůsobí vybledle */
.card.border-start {
border-width: 1px 1px 1px 6px !important;
border-style: solid !important;
box-shadow: 0 1px 3px rgba(20, 50, 100, 0.08);
}
.card.border-start.border-primary {
border-color: #c5daf6 !important;
border-left-color: #1f62c9 !important;
background-color: #d7e7fb !important;
}
.card.border-start.border-warning {
border-color: #f6ddaa !important;
border-left-color: #e39b00 !important;
background-color: #ffe7b8 !important;
}
.card.border-start.border-danger {
border-color: #f6c9c9 !important;
border-left-color: #e04545 !important;
background-color: #fcd6d6 !important;
}
.card.border-start.border-success {
border-color: #b7e8d0 !important;
border-left-color: #12945f !important;
background-color: #d4f3e4 !important;
}
.card.border-start .text-primary { color: #154eaa !important; }
.card.border-start .text-warning { color: #9a5c00 !important; }
.card.border-start .text-danger { color: #c42828 !important; }
.card.border-start .text-success { color: #0c7a4c !important; }
.border-info { border-color: #c5dceb !important; }
.border-secondary { border-color: #d5dee8 !important; }
.bg-success-subtle { background-color: var(--success-soft) !important; }
.bg-secondary-subtle { background-color: #f1f4f8 !important; }
.form-control:focus,
.form-select:focus {
border-color: #a9c0df;
box-shadow: 0 0 0 0.2rem rgba(109, 144, 196, 0.18);
}
/* Tlačítka */
.btn {
--bs-btn-border-radius: 0.5rem;
font-weight: 500;
letter-spacing: 0.01em;
box-shadow: none;
transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease;
}
.btn:focus-visible {
box-shadow: 0 0 0 0.2rem rgba(109, 144, 196, 0.28);
}
.btn-primary {
--bs-btn-color: #fff;
--bs-btn-bg: var(--primary-accent);
--bs-btn-border-color: var(--primary-accent);
--bs-btn-hover-color: #fff;
--bs-btn-hover-bg: var(--primary-accent-hover);
--bs-btn-hover-border-color: var(--primary-accent-hover);
--bs-btn-active-color: #fff;
--bs-btn-active-bg: #1d4f96;
--bs-btn-active-border-color: #1d4f96;
--bs-btn-disabled-bg: #b7c8e0;
--bs-btn-disabled-border-color: #b7c8e0;
}
.btn-outline-primary {
--bs-btn-color: #1f5eae;
--bs-btn-border-color: #b7d0f3;
--bs-btn-bg: var(--primary-soft);
--bs-btn-hover-color: #184e94;
--bs-btn-hover-bg: #d3e4fa;
--bs-btn-hover-border-color: #8eb4e8;
--bs-btn-active-color: #184e94;
--bs-btn-active-bg: #c5daf6;
--bs-btn-active-border-color: #8eb4e8;
}
.btn-success {
--bs-btn-color: #fff;
--bs-btn-bg: var(--success);
--bs-btn-border-color: var(--success);
--bs-btn-hover-color: #fff;
--bs-btn-hover-bg: var(--success-hover);
--bs-btn-hover-border-color: var(--success-hover);
--bs-btn-active-color: #fff;
--bs-btn-active-bg: #437c68;
--bs-btn-active-border-color: #437c68;
}
.btn-outline-success {
--bs-btn-color: #0c7a4c;
--bs-btn-border-color: #9ed9bc;
--bs-btn-bg: var(--success-soft);
--bs-btn-hover-color: #08663e;
--bs-btn-hover-bg: #c3edd8;
--bs-btn-hover-border-color: #6ec99e;
--bs-btn-active-color: #08663e;
--bs-btn-active-bg: #b4e6ce;
--bs-btn-active-border-color: #6ec99e;
}
.btn-outline-secondary {
--bs-btn-color: #5c6d82;
--bs-btn-border-color: #d7e0ea;
--bs-btn-bg: #fff;
--bs-btn-hover-color: #3e5168;
--bs-btn-hover-bg: #f4f7fb;
--bs-btn-hover-border-color: #c5d1de;
--bs-btn-active-color: #3e5168;
--bs-btn-active-bg: #eaf0f6;
--bs-btn-active-border-color: #c5d1de;
}
.btn-outline-danger {
--bs-btn-color: #c43737;
--bs-btn-border-color: #f0b8b8;
--bs-btn-bg: #fff;
--bs-btn-hover-color: #a82828;
--bs-btn-hover-bg: var(--danger-soft);
--bs-btn-hover-border-color: #e89090;
--bs-btn-active-color: #a82828;
--bs-btn-active-bg: #f8d0d0;
--bs-btn-active-border-color: #e89090;
}
.btn-outline-dark {
--bs-btn-color: #4a5b70;
--bs-btn-border-color: #d5dee8;
--bs-btn-hover-bg: #f3f6fa;
--bs-btn-hover-color: #2c3d55;
--bs-btn-hover-border-color: #c3d0de;
--bs-btn-active-bg: #e8eef5;
--bs-btn-active-color: #2c3d55;
}
.btn-outline-info {
--bs-btn-color: #4d7a9a;
--bs-btn-border-color: #cfe0ec;
--bs-btn-bg: #f4f9fc;
--bs-btn-hover-color: #3d6784;
--bs-btn-hover-bg: #e7f2f8;
--bs-btn-hover-border-color: #bdd4e4;
--bs-btn-active-color: #3d6784;
--bs-btn-active-bg: #dceaf3;
}
.btn-danger {
--bs-btn-color: #fff;
--bs-btn-bg: var(--danger);
--bs-btn-border-color: var(--danger);
--bs-btn-hover-color: #fff;
--bs-btn-hover-bg: var(--danger-hover);
--bs-btn-hover-border-color: var(--danger-hover);
}
/* Ikonová tlačítka v tabulkách */
.btn-group-sm > .btn,
.btn-sm {
--bs-btn-border-radius: 0.45rem;
}
/* Odznaky — jemný podklad místo syté výplně */
.badge {
font-weight: 600;
letter-spacing: 0.015em;
border-radius: 999px;
padding: 0.4em 0.72em;
border: 1px solid transparent;
}
.badge.bg-success {
background-color: #c8f0dc !important;
color: #087248 !important;
border-color: #7dcea8;
}
.badge.bg-warning {
background-color: #ffd98a !important;
color: #8a5200 !important;
border-color: #f0b84a;
}
.badge.bg-info {
background-color: #c9ecf8 !important;
color: #0b6e96 !important;
border-color: #7ecae4;
}
.badge.bg-primary {
background-color: #d4e6fb !important;
color: #1a56ad !important;
border-color: #9ec2f0;
}
.badge.bg-danger {
background-color: var(--danger-soft) !important;
color: #8f4f4f !important;
border-color: #ead4d4;
}
.badge.bg-secondary {
background-color: #eef2f6 !important;
color: #5c6d82 !important;
border-color: #d7e0ea;
}
.badge.bg-dark {
background-color: #e7edf4 !important;
color: #3d5270 !important;
border-color: #cdd8e6;
}
.badge.bg-light {
background-color: #f7f9fc !important;
color: #5c6d82 !important;
border-color: #e1e8f0;
}
.table {
--bs-table-hover-bg: #f6f9fc;
}
.table thead th {
color: #5c6d82;
font-weight: 600;
font-size: 0.78rem;
letter-spacing: 0.02em;
text-transform: uppercase;
border-bottom-color: var(--border-color);
}