diff --git a/src/app/home/home.component.ts b/src/app/home/home.component.ts
index 9aba51e04..4ffc94360 100644
--- a/src/app/home/home.component.ts
+++ b/src/app/home/home.component.ts
@@ -3,6 +3,7 @@ import { LocationStrategy, PlatformLocation, Location } from '@angular/common';
import { LegendItem, ChartType } from '../lbd/lbd-chart/lbd-chart.component';
import * as Chartist from 'chartist';
+
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
@@ -24,9 +25,12 @@ export class HomeComponent implements OnInit {
public activityChartOptions: any;
public activityChartResponsive: any[];
public activityChartLegendItems: LegendItem[];
- constructor() { }
- ngOnInit() {
+ constructor() {}
+
+ ngOnInit() {
+ this.getUserLogged();
+
this.emailChartType = ChartType.Pie;
this.emailChartData = {
labels: ['62%', '32%', '6%'],
@@ -107,6 +111,9 @@ export class HomeComponent implements OnInit {
];
+ }
+ getUserLogged() {
+
}
}
diff --git a/src/app/icons/icons.component.html b/src/app/icons/icons.component.html
index 794999e32..6cc6347d1 100644
--- a/src/app/icons/icons.component.html
+++ b/src/app/icons/icons.component.html
@@ -4,1202 +4,20 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/app/icons/icons.component.spec.ts b/src/app/icons/icons.component.spec.ts
index fcd3c7fe3..4eae38663 100644
--- a/src/app/icons/icons.component.spec.ts
+++ b/src/app/icons/icons.component.spec.ts
@@ -3,7 +3,7 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { DebugElement } from '@angular/core';
-import { IconsComponent } from './icons.component';
+import { IconsComponent } from './iconss.component';
describe('IconsComponent', () => {
let component: IconsComponent;
diff --git a/src/app/icons/icons.component.ts b/src/app/icons/icons.component.ts
index c6a1e48ea..ab2456dda 100644
--- a/src/app/icons/icons.component.ts
+++ b/src/app/icons/icons.component.ts
@@ -1,7 +1,7 @@
import { Component, OnInit } from '@angular/core';
@Component({
- selector: 'app-icons',
+ selector: 'app-iconss',
templateUrl: './icons.component.html',
styleUrls: ['./icons.component.css']
})
diff --git a/src/app/layouts/admin-layout/admin-layout.component.html b/src/app/layouts/admin-layout/admin-layout.component.html
index 51e376fda..7186188bd 100644
--- a/src/app/layouts/admin-layout/admin-layout.component.html
+++ b/src/app/layouts/admin-layout/admin-layout.component.html
@@ -1,16 +1,15 @@
-
-
+
\ No newline at end of file
diff --git a/src/app/layouts/admin-layout/admin-layout.component.scss b/src/app/layouts/admin-layout/admin-layout.component.scss
index e69de29bb..5c41260d5 100644
--- a/src/app/layouts/admin-layout/admin-layout.component.scss
+++ b/src/app/layouts/admin-layout/admin-layout.component.scss
@@ -0,0 +1,22 @@
+.user-section {
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ }
+
+ .user-button {
+ background-color: white;
+ border: 2px solid #cd4042;
+ border-radius: 12px;
+ color: #cd4042;
+ /*font-size: 18px;*/
+ padding: 10px 20px;
+ max-width: 100px;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ }
+
+ .user-button:hover {
+ background-color: #cd4042;
+ color: white;
+ }
\ No newline at end of file
diff --git a/src/app/layouts/admin-layout/admin-layout.component.ts b/src/app/layouts/admin-layout/admin-layout.component.ts
index 34c9814e0..73134000d 100644
--- a/src/app/layouts/admin-layout/admin-layout.component.ts
+++ b/src/app/layouts/admin-layout/admin-layout.component.ts
@@ -21,8 +21,6 @@ export class AdminLayoutComponent implements OnInit {
const isWindows = navigator.platform.indexOf('Win') > -1 ? true : false;
if (isWindows) {
- // if we are on windows OS we activate the perfectScrollbar function
-
document.getElementsByTagName('body')[0].classList.add('perfect-scrollbar-on');
} else {
document.getElementsByTagName('body')[0].classList.remove('perfect-scrollbar-off');
diff --git a/src/app/layouts/admin-layout/admin-layout.module.ts b/src/app/layouts/admin-layout/admin-layout.module.ts
index e7c0efa96..b032a50b1 100644
--- a/src/app/layouts/admin-layout/admin-layout.module.ts
+++ b/src/app/layouts/admin-layout/admin-layout.module.ts
@@ -2,21 +2,36 @@ import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { CommonModule } from '@angular/common';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
-
import { LbdModule } from '../../lbd/lbd.module';
import { NguiMapModule} from '@ngui/map';
-
import { AdminLayoutRoutes } from './admin-layout.routing';
-
import { HomeComponent } from '../../home/home.component';
-import { UserComponent } from '../../user/user.component';
-import { TablesComponent } from '../../tables/tables.component';
-import { TypographyComponent } from '../../typography/typography.component';
+import { UsuariosGridComponent } from '../../usuarios/usuariosGrid.component';
+import { PrimerPilarGridComponent } from '../../pilares/primerPilarGrid/primerPilarGrid.component';
+import { SegundoPilarGridComponent } from '../../pilares/segundoPilarGrid/segundoPilarGrid.component';
+import { TercerPilarGridComponent } from '../../pilares/tercerPilarGrid/tercerPilarGrid.component';
+import { CuartoPilarGridComponent } from '../../pilares/cuartoPilarGrid/cuartoPilarGrid.component';
+import { MatrimoniosGridComponent } from '../../formacion/matrimoniosGrid/matrimoniosGrid.component';
+import { SacerdotesGridComponent } from '../../formacion/sacerdotesGrid/sacerdotesGrid.component';
+import { FormationComponent } from '../../formation/formation.component';
import { IconsComponent } from '../../icons/icons.component';
import { MapsComponent } from '../../maps/maps.component';
import { NotificationsComponent } from '../../notifications/notifications.component';
-import { UpgradeComponent } from '../../upgrade/upgrade.component';
-
+import { NuevoPrimerPilarComponent } from '../../pilares/primerPilarGrid/nuevoPrimerPilar/nuevoPrimerPilar.component';
+import { NuevoSegundoPilarComponent } from '../../pilares/segundoPilarGrid/nuevoSegundoPilar/nuevoSegundoPilar.component';
+import { NuevoTercerPilarComponent } from '../../pilares/tercerPilarGrid/nuevoTercerPilar/nuevoTercerPilar.component';
+import { NuevoCuartoPilarComponent } from '../../pilares/cuartoPilarGrid/nuevoCuartoPilar/nuevoCuartoPilar.component';
+import { EditarPrimerPilarComponent } from 'app/pilares/primerPilarGrid/editarPrimerPilar/editarPrimerPilar.component';
+import { EditarSegundoPilarComponent } from 'app/pilares/segundoPilarGrid/editarSegundoPilar/editarSegundoPilar.component';
+import { EditarTercerPilarComponent } from 'app/pilares/tercerPilarGrid/editarTercerPilar/editarTercerPilar.component';
+import { EditarCuartoPilarComponent } from 'app/pilares/cuartoPilarGrid/editarCuartoPilar/editarCuartoPilar.component';
+import { NuevoSacerdoteComponent } from 'app/formacion/sacerdotesGrid/nuevoSacerdote/nuevoSacerdote.component';
+import { EditarSacerdoteComponent } from 'app/formacion/sacerdotesGrid/editarSacerdote/editarSacerdote.component';
+import { NuevoMatrimonioComponent } from 'app/formacion/matrimoniosGrid/nuevoMatrimonio/nuevoMatrimonio.component';
+import { EditarMatrimonioComponent } from 'app/formacion/matrimoniosGrid/editarMatrimonio/editarMatrimonio.component';
+import { UsuariosComponent } from 'app/usuarios/usuariosCrear/usuarios.component';
+import { UsuariosEditarComponent } from 'app/usuarios/usuariosEditar/usuariosEditar.component';
+import { PerfilComponent } from 'app/perfil/perfil.component';
@NgModule({
imports: [
@@ -24,17 +39,38 @@ import { UpgradeComponent } from '../../upgrade/upgrade.component';
RouterModule.forChild(AdminLayoutRoutes),
FormsModule,
LbdModule,
- NguiMapModule.forRoot({apiUrl: 'https://maps.google.com/maps/api/js?key=YOUR_KEY_HERE'})
+ ReactiveFormsModule,
],
declarations: [
HomeComponent,
- UserComponent,
- TablesComponent,
- TypographyComponent,
+ UsuariosGridComponent,
+ UsuariosComponent,
+ PrimerPilarGridComponent,
+ SegundoPilarGridComponent,
+ TercerPilarGridComponent,
+ CuartoPilarGridComponent,
+ MatrimoniosGridComponent,
+ SacerdotesGridComponent,
+ FormationComponent,
IconsComponent,
MapsComponent,
+ NotificationsComponent,
+ NuevoPrimerPilarComponent,
NotificationsComponent,
- UpgradeComponent
+ NuevoPrimerPilarComponent,
+ NuevoSegundoPilarComponent,
+ NuevoTercerPilarComponent,
+ NuevoCuartoPilarComponent,
+ EditarPrimerPilarComponent,
+ EditarSegundoPilarComponent,
+ EditarTercerPilarComponent,
+ EditarCuartoPilarComponent,
+ NuevoSacerdoteComponent,
+ EditarSacerdoteComponent,
+ NuevoMatrimonioComponent,
+ EditarMatrimonioComponent,
+ UsuariosEditarComponent,
+ PerfilComponent
]
})
diff --git a/src/app/layouts/admin-layout/admin-layout.routing.ts b/src/app/layouts/admin-layout/admin-layout.routing.ts
index e09417d82..31f78f0ff 100644
--- a/src/app/layouts/admin-layout/admin-layout.routing.ts
+++ b/src/app/layouts/admin-layout/admin-layout.routing.ts
@@ -1,21 +1,63 @@
import { Routes } from '@angular/router';
-
import { HomeComponent } from '../../home/home.component';
-import { UserComponent } from '../../user/user.component';
-import { TablesComponent } from '../../tables/tables.component';
-import { TypographyComponent } from '../../typography/typography.component';
+import { UsuariosComponent } from '../../usuarios/usuariosCrear/usuarios.component';
+import { UsuariosGridComponent } from '../../usuarios/usuariosGrid.component';
+import { PrimerPilarGridComponent } from '../../pilares/primerPilarGrid/primerPilarGrid.component';
+import { SegundoPilarGridComponent } from '../../pilares/segundoPilarGrid/segundoPilarGrid.component';
+import { TercerPilarGridComponent } from '../../pilares/tercerPilarGrid/tercerPilarGrid.component';
+import { CuartoPilarGridComponent } from '../../pilares/cuartoPilarGrid/cuartoPilarGrid.component';
+import { MatrimoniosGridComponent } from '../../formacion/matrimoniosGrid/matrimoniosGrid.component';
+import { SacerdotesGridComponent } from '../../formacion/sacerdotesGrid/sacerdotesGrid.component';
import { IconsComponent } from '../../icons/icons.component';
import { MapsComponent } from '../../maps/maps.component';
import { NotificationsComponent } from '../../notifications/notifications.component';
-import { UpgradeComponent } from '../../upgrade/upgrade.component';
+import { FormationComponent } from '../../formation/formation.component';
+import { NuevoPrimerPilarComponent } from '../../pilares/primerPilarGrid/nuevoPrimerPilar/nuevoPrimerPilar.component';
+import { NuevoSegundoPilarComponent } from '../../pilares/segundoPilarGrid/nuevoSegundoPilar/nuevoSegundoPilar.component';
+import { NuevoTercerPilarComponent } from '../../pilares/tercerPilarGrid/nuevoTercerPilar/nuevoTercerPilar.component';
+import { NuevoCuartoPilarComponent } from '../../pilares/cuartoPilarGrid/nuevoCuartoPilar/nuevoCuartoPilar.component';
+import { AuthGuard } from '../../auth.guard';
+import { EditarPrimerPilarComponent } from 'app/pilares/primerPilarGrid/editarPrimerPilar/editarPrimerPilar.component';
+import { EditarSegundoPilarComponent } from 'app/pilares/segundoPilarGrid/editarSegundoPilar/editarSegundoPilar.component';
+import { EditarTercerPilarComponent } from 'app/pilares/tercerPilarGrid/editarTercerPilar/editarTercerPilar.component';
+import { EditarCuartoPilarComponent } from 'app/pilares/cuartoPilarGrid/editarCuartoPilar/editarCuartoPilar.component';
+
+import { NuevoSacerdoteComponent } from 'app/formacion/sacerdotesGrid/nuevoSacerdote/nuevoSacerdote.component';
+import { EditarSacerdoteComponent } from 'app/formacion/sacerdotesGrid/editarSacerdote/editarSacerdote.component';
+import { NuevoMatrimonioComponent } from 'app/formacion/matrimoniosGrid/nuevoMatrimonio/nuevoMatrimonio.component';
+import { EditarMatrimonioComponent } from 'app/formacion/matrimoniosGrid/editarMatrimonio/editarMatrimonio.component';
+import { UsuariosEditarComponent } from 'app/usuarios/usuariosEditar/usuariosEditar.component';
+import { PerfilComponent } from 'app/perfil/perfil.component';
+
export const AdminLayoutRoutes: Routes = [
- { path: 'dashboard', component: HomeComponent },
- { path: 'user', component: UserComponent },
- { path: 'table', component: TablesComponent },
- { path: 'typography', component: TypographyComponent },
- { path: 'icons', component: IconsComponent },
- { path: 'maps', component: MapsComponent },
- { path: 'notifications', component: NotificationsComponent },
- { path: 'upgrade', component: UpgradeComponent },
+ { path: 'dashboard',component: HomeComponent , canActivate: [AuthGuard]},
+ { path: 'usuariosGrid',component: UsuariosGridComponent, canActivate: [AuthGuard] },
+ { path: 'usuarios',component: UsuariosComponent, canActivate: [AuthGuard] },
+ { path: 'usuariosEditar/:id',component: UsuariosEditarComponent,canActivate: [AuthGuard] },
+ { path: 'primerPilarGrid',component: PrimerPilarGridComponent,canActivate: [AuthGuard] },
+ { path: 'segundoPilarGrid',component: SegundoPilarGridComponent, canActivate: [AuthGuard] },
+ { path: 'tercerPilarGrid',component: TercerPilarGridComponent, canActivate: [AuthGuard] },
+ { path: 'cuartoPilarGrid',component: CuartoPilarGridComponent, canActivate: [AuthGuard] },
+ { path: 'matrimoniosGrid',component: MatrimoniosGridComponent, canActivate: [AuthGuard] },
+ { path: 'sacerdotesGrid',component: SacerdotesGridComponent, canActivate: [AuthGuard] },
+ { path: 'icons',component: IconsComponent, canActivate: [AuthGuard] },
+ { path: 'maps',component: MapsComponent, canActivate: [AuthGuard] },
+ { path: 'notifications',component: NotificationsComponent, canActivate: [AuthGuard] },
+ { path: 'formation',component: FormationComponent },
+ { path: 'nuevoPrimerPilar',component: NuevoPrimerPilarComponent , canActivate: [AuthGuard]},
+ { path: 'nuevoSegundoPilar',component: NuevoSegundoPilarComponent , canActivate: [AuthGuard]},
+ { path: 'nuevoTercerPilar',component: NuevoTercerPilarComponent , canActivate: [AuthGuard]},
+ { path: 'nuevoCuartoPilar',component: NuevoCuartoPilarComponent, canActivate: [AuthGuard] },
+ { path: 'editarPrimerPilar/:id', component: EditarPrimerPilarComponent, canActivate: [AuthGuard]},
+ { path: 'editarSegundoPilar/:id', component: EditarSegundoPilarComponent , canActivate: [AuthGuard]},
+ { path: 'editarTercerPilar/:id', component: EditarTercerPilarComponent, canActivate: [AuthGuard] },
+ { path: 'editarCuartoPilar/:id', component: EditarCuartoPilarComponent, canActivate: [AuthGuard] },
+ { path: 'nuevoMatrimonio',component: NuevoMatrimonioComponent, canActivate: [AuthGuard] },
+ { path: 'editarMatrimonio/:id',component: EditarMatrimonioComponent, canActivate: [AuthGuard] },
+ { path: 'nuevoSacerdote',component: NuevoSacerdoteComponent, canActivate: [AuthGuard] },
+ { path: 'editarSacerdote/:id',component: EditarSacerdoteComponent, canActivate: [AuthGuard] },
+ { path: 'perfil',component: PerfilComponent, canActivate: [AuthGuard] },
+
+
];
diff --git a/src/app/login/images/encuentros.jpg b/src/app/login/images/encuentros.jpg
new file mode 100644
index 000000000..c5e6db381
Binary files /dev/null and b/src/app/login/images/encuentros.jpg differ
diff --git a/src/app/login/login.component.css b/src/app/login/login.component.css
new file mode 100644
index 000000000..33ce8e8ca
--- /dev/null
+++ b/src/app/login/login.component.css
@@ -0,0 +1,8360 @@
+
+ :root {
+ --blue: #007bff;
+ --indigo: #6610f2;
+ --purple: #6f42c1;
+ --pink: #e83e8c;
+ --red: #dc3545;
+ --orange: #fd7e14;
+ --yellow: #ffc107;
+ --green: #28a745;
+ --teal: #20c997;
+ --cyan: #17a2b8;
+ --white: #fff;
+ --gray: #6c757d;
+ --gray-dark: #343a40;
+ --primary: #007bff;
+ --secondary: #6c757d;
+ --success: #28a745;
+ --info: #17a2b8;
+ --warning: #ffc107;
+ --danger: #dc3545;
+ --light: #f8f9fa;
+ --dark: #343a40;
+ --breakpoint-xs: 0;
+ --breakpoint-sm: 576px;
+ --breakpoint-md: 768px;
+ --breakpoint-lg: 992px;
+ --breakpoint-xl: 1200px;
+ --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+ --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; }
+
+*,
+*::before,
+*::after {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box; }
+
+html {
+ font-family: sans-serif;
+ line-height: 1.15;
+ -webkit-text-size-adjust: 100%;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }
+
+article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
+ display: block; }
+
+body {
+ margin: 0;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+ font-size: 1rem;
+ font-weight: 400;
+ line-height: 1.5;
+ color: #212529;
+ text-align: left;
+ background-color: #fff; }
+
+[tabindex="-1"]:focus {
+ outline: 0 !important; }
+
+hr {
+ -webkit-box-sizing: content-box;
+ box-sizing: content-box;
+ height: 0;
+ overflow: visible; }
+
+h1, h2, h3, h4, h5, h6 {
+ margin-top: 0;
+ margin-bottom: 0.5rem; }
+
+p {
+ margin-top: 0;
+ margin-bottom: 1rem; }
+
+abbr[title],
+abbr[data-original-title] {
+ text-decoration: underline;
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted;
+ cursor: help;
+ border-bottom: 0;
+ text-decoration-skip-ink: none; }
+
+address {
+ margin-bottom: 1rem;
+ font-style: normal;
+ line-height: inherit; }
+
+ol,
+ul,
+dl {
+ margin-top: 0;
+ margin-bottom: 1rem; }
+
+ol ol,
+ul ul,
+ol ul,
+ul ol {
+ margin-bottom: 0; }
+
+dt {
+ font-weight: 700; }
+
+dd {
+ margin-bottom: .5rem;
+ margin-left: 0; }
+
+blockquote {
+ margin: 0 0 1rem; }
+
+b,
+strong {
+ font-weight: bolder; }
+
+small {
+ font-size: 80%; }
+
+sub,
+sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline; }
+
+sub {
+ bottom: -.25em; }
+
+sup {
+ top: -.5em; }
+
+a {
+ color: #007bff;
+ text-decoration: none;
+ background-color: transparent; }
+ a:hover {
+ color: #0056b3;
+ text-decoration: underline; }
+
+a:not([href]):not([tabindex]) {
+ color: inherit;
+ text-decoration: none; }
+ a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {
+ color: inherit;
+ text-decoration: none; }
+ a:not([href]):not([tabindex]):focus {
+ outline: 0; }
+
+pre,
+code,
+kbd,
+samp {
+ font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-size: 1em; }
+
+pre {
+ margin-top: 0;
+ margin-bottom: 1rem;
+ overflow: auto; }
+
+figure {
+ margin: 0 0 1rem; }
+
+img {
+ vertical-align: middle;
+ border-style: none; }
+
+svg {
+ overflow: hidden;
+ vertical-align: middle; }
+
+table {
+ border-collapse: collapse; }
+
+caption {
+ padding-top: 0.75rem;
+ padding-bottom: 0.75rem;
+ color: #6c757d;
+ text-align: left;
+ caption-side: bottom; }
+
+th {
+ text-align: inherit; }
+
+label {
+ display: inline-block;
+ margin-bottom: 0.5rem; }
+
+button {
+ border-radius: 0; }
+
+button:focus {
+ outline: 1px dotted;
+ outline: 5px auto -webkit-focus-ring-color; }
+
+input,
+button,
+select,
+optgroup,
+textarea {
+ margin: 0;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit; }
+
+button,
+input {
+ overflow: visible; }
+
+button,
+select {
+ text-transform: none; }
+
+select {
+ word-wrap: normal; }
+
+button,
+[type="button"],
+[type="reset"],
+[type="submit"] {
+ -webkit-appearance: button; }
+
+button:not(:disabled),
+[type="button"]:not(:disabled),
+[type="reset"]:not(:disabled),
+[type="submit"]:not(:disabled) {
+ cursor: pointer; }
+
+button::-moz-focus-inner,
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner {
+ padding: 0;
+ border-style: none; }
+
+input[type="radio"],
+input[type="checkbox"] {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0; }
+
+input[type="date"],
+input[type="time"],
+input[type="datetime-local"],
+input[type="month"] {
+ -webkit-appearance: listbox; }
+
+textarea {
+ overflow: auto;
+ resize: vertical; }
+
+fieldset {
+ min-width: 0;
+ padding: 0;
+ margin: 0;
+ border: 0; }
+
+legend {
+ display: block;
+ width: 100%;
+ max-width: 100%;
+ padding: 0;
+ margin-bottom: .5rem;
+ font-size: 1.5rem;
+ line-height: inherit;
+ color: inherit;
+ white-space: normal; }
+
+progress {
+ vertical-align: baseline; }
+
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+ height: auto; }
+
+[type="search"] {
+ outline-offset: -2px;
+ -webkit-appearance: none; }
+
+[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none; }
+
+::-webkit-file-upload-button {
+ font: inherit;
+ -webkit-appearance: button; }
+
+output {
+ display: inline-block; }
+
+summary {
+ display: list-item;
+ cursor: pointer; }
+
+template {
+ display: none; }
+
+[hidden] {
+ display: none !important; }
+
+h1, h2, h3, h4, h5, h6,
+.h1, .h2, .h3, .h4, .h5, .h6 {
+ margin-bottom: 0.5rem;
+ font-weight: 500;
+ line-height: 1.2; }
+
+h1, .h1 {
+ font-size: 2.5rem; }
+
+h2, .h2 {
+ font-size: 2rem; }
+
+h3, .h3 {
+ font-size: 1.75rem; }
+
+h4, .h4 {
+ font-size: 1.5rem; }
+
+h5, .h5 {
+ font-size: 1.25rem; }
+
+h6, .h6 {
+ font-size: 1rem; }
+
+.lead {
+ font-size: 1.25rem;
+ font-weight: 300; }
+
+.display-1 {
+ font-size: 6rem;
+ font-weight: 300;
+ line-height: 1.2; }
+
+.display-2 {
+ font-size: 5.5rem;
+ font-weight: 300;
+ line-height: 1.2; }
+
+.display-3 {
+ font-size: 4.5rem;
+ font-weight: 300;
+ line-height: 1.2; }
+
+.display-4 {
+ font-size: 3.5rem;
+ font-weight: 300;
+ line-height: 1.2; }
+
+hr {
+ margin-top: 1rem;
+ margin-bottom: 1rem;
+ border: 0;
+ border-top: 1px solid rgba(0, 0, 0, 0.1); }
+
+small,
+.small {
+ font-size: 80%;
+ font-weight: 400; }
+
+mark,
+.mark {
+ padding: 0.2em;
+ background-color: #fcf8e3; }
+
+.list-unstyled {
+ padding-left: 0;
+ list-style: none; }
+
+.list-inline {
+ padding-left: 0;
+ list-style: none; }
+
+.list-inline-item {
+ display: inline-block; }
+ .list-inline-item:not(:last-child) {
+ margin-right: 0.5rem; }
+
+.initialism {
+ font-size: 90%;
+ text-transform: uppercase; }
+
+.blockquote {
+ margin-bottom: 1rem;
+ font-size: 1.25rem; }
+
+.blockquote-footer {
+ display: block;
+ font-size: 80%;
+ color: #6c757d; }
+ .blockquote-footer::before {
+ content: "\2014\00A0"; }
+
+.img-fluid {
+ max-width: 100%;
+ height: auto; }
+
+.img-thumbnail {
+ padding: 0.25rem;
+ background-color: #fff;
+ border: 1px solid #dee2e6;
+ border-radius: 0.25rem;
+ max-width: 100%;
+ height: auto; }
+
+.figure {
+ display: inline-block; }
+
+.figure-img {
+ margin-bottom: 0.5rem;
+ line-height: 1; }
+
+.figure-caption {
+ font-size: 90%;
+ color: #6c757d; }
+
+code {
+ font-size: 87.5%;
+ color: #e83e8c;
+ word-break: break-word; }
+ a > code {
+ color: inherit; }
+
+kbd {
+ padding: 0.2rem 0.4rem;
+ font-size: 87.5%;
+ color: #fff;
+ background-color: #212529;
+ border-radius: 0.2rem; }
+ kbd kbd {
+ padding: 0;
+ font-size: 100%;
+ font-weight: 700; }
+
+pre {
+ display: block;
+ font-size: 87.5%;
+ color: #212529; }
+ pre code {
+ font-size: inherit;
+ color: inherit;
+ word-break: normal; }
+
+.pre-scrollable {
+ max-height: 340px;
+ overflow-y: scroll; }
+
+.container {
+ width: 100%;
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto; }
+ @media (min-width: 576px) {
+ .container {
+ max-width: 540px; } }
+ @media (min-width: 768px) {
+ .container {
+ max-width: 720px; } }
+ @media (min-width: 992px) {
+ .container {
+ max-width: 960px; } }
+ @media (min-width: 1200px) {
+ .container {
+ max-width: 1140px; } }
+
+.container-fluid {
+ width: 100%;
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto; }
+
+.row {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ margin-right: -15px;
+ margin-left: -15px; }
+
+.no-gutters {
+ margin-right: 0;
+ margin-left: 0; }
+ .no-gutters > .col,
+ .no-gutters > [class*="col-"] {
+ padding-right: 0;
+ padding-left: 0; }
+
+.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,
+.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,
+.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,
+.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,
+.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,
+.col-xl-auto {
+ position: relative;
+ width: 100%;
+ padding-right: 15px;
+ padding-left: 15px; }
+
+.col {
+ -ms-flex-preferred-size: 0;
+ flex-basis: 0;
+ -webkit-box-flex: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+ max-width: 100%; }
+
+.col-auto {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ width: auto;
+ max-width: 100%; }
+
+.col-1 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 8.33333%;
+ flex: 0 0 8.33333%;
+ max-width: 8.33333%; }
+
+.col-2 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 16.66667%;
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%; }
+
+.col-3 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 25%;
+ flex: 0 0 25%;
+ max-width: 25%; }
+
+.col-4 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 33.33333%;
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%; }
+
+.col-5 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 41.66667%;
+ flex: 0 0 41.66667%;
+ max-width: 41.66667%; }
+
+.col-6 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 50%;
+ flex: 0 0 50%;
+ max-width: 50%; }
+
+.col-7 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 58.33333%;
+ flex: 0 0 58.33333%;
+ max-width: 58.33333%; }
+
+.col-8 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 66.66667%;
+ flex: 0 0 66.66667%;
+ max-width: 66.66667%; }
+
+.col-9 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 75%;
+ flex: 0 0 75%;
+ max-width: 75%; }
+
+.col-10 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 83.33333%;
+ flex: 0 0 83.33333%;
+ max-width: 83.33333%; }
+
+.col-11 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 91.66667%;
+ flex: 0 0 91.66667%;
+ max-width: 91.66667%; }
+
+.col-12 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 100%;
+ flex: 0 0 100%;
+ max-width: 100%; }
+
+.order-first {
+ -webkit-box-ordinal-group: 0;
+ -ms-flex-order: -1;
+ order: -1; }
+
+.order-last {
+ -webkit-box-ordinal-group: 14;
+ -ms-flex-order: 13;
+ order: 13; }
+
+.order-0 {
+ -webkit-box-ordinal-group: 1;
+ -ms-flex-order: 0;
+ order: 0; }
+
+.order-1 {
+ -webkit-box-ordinal-group: 2;
+ -ms-flex-order: 1;
+ order: 1; }
+
+.order-2 {
+ -webkit-box-ordinal-group: 3;
+ -ms-flex-order: 2;
+ order: 2; }
+
+.order-3 {
+ -webkit-box-ordinal-group: 4;
+ -ms-flex-order: 3;
+ order: 3; }
+
+.order-4 {
+ -webkit-box-ordinal-group: 5;
+ -ms-flex-order: 4;
+ order: 4; }
+
+.order-5 {
+ -webkit-box-ordinal-group: 6;
+ -ms-flex-order: 5;
+ order: 5; }
+
+.order-6 {
+ -webkit-box-ordinal-group: 7;
+ -ms-flex-order: 6;
+ order: 6; }
+
+.order-7 {
+ -webkit-box-ordinal-group: 8;
+ -ms-flex-order: 7;
+ order: 7; }
+
+.order-8 {
+ -webkit-box-ordinal-group: 9;
+ -ms-flex-order: 8;
+ order: 8; }
+
+.order-9 {
+ -webkit-box-ordinal-group: 10;
+ -ms-flex-order: 9;
+ order: 9; }
+
+.order-10 {
+ -webkit-box-ordinal-group: 11;
+ -ms-flex-order: 10;
+ order: 10; }
+
+.order-11 {
+ -webkit-box-ordinal-group: 12;
+ -ms-flex-order: 11;
+ order: 11; }
+
+.order-12 {
+ -webkit-box-ordinal-group: 13;
+ -ms-flex-order: 12;
+ order: 12; }
+
+.offset-1 {
+ margin-left: 8.33333%; }
+
+.offset-2 {
+ margin-left: 16.66667%; }
+
+.offset-3 {
+ margin-left: 25%; }
+
+.offset-4 {
+ margin-left: 33.33333%; }
+
+.offset-5 {
+ margin-left: 41.66667%; }
+
+.offset-6 {
+ margin-left: 50%; }
+
+.offset-7 {
+ margin-left: 58.33333%; }
+
+.offset-8 {
+ margin-left: 66.66667%; }
+
+.offset-9 {
+ margin-left: 75%; }
+
+.offset-10 {
+ margin-left: 83.33333%; }
+
+.offset-11 {
+ margin-left: 91.66667%; }
+
+@media (min-width: 576px) {
+ .col-sm {
+ -ms-flex-preferred-size: 0;
+ flex-basis: 0;
+ -webkit-box-flex: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+ max-width: 100%; }
+ .col-sm-auto {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ width: auto;
+ max-width: 100%; }
+ .col-sm-1 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 8.33333%;
+ flex: 0 0 8.33333%;
+ max-width: 8.33333%; }
+ .col-sm-2 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 16.66667%;
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%; }
+ .col-sm-3 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 25%;
+ flex: 0 0 25%;
+ max-width: 25%; }
+ .col-sm-4 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 33.33333%;
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%; }
+ .col-sm-5 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 41.66667%;
+ flex: 0 0 41.66667%;
+ max-width: 41.66667%; }
+ .col-sm-6 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 50%;
+ flex: 0 0 50%;
+ max-width: 50%; }
+ .col-sm-7 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 58.33333%;
+ flex: 0 0 58.33333%;
+ max-width: 58.33333%; }
+ .col-sm-8 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 66.66667%;
+ flex: 0 0 66.66667%;
+ max-width: 66.66667%; }
+ .col-sm-9 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 75%;
+ flex: 0 0 75%;
+ max-width: 75%; }
+ .col-sm-10 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 83.33333%;
+ flex: 0 0 83.33333%;
+ max-width: 83.33333%; }
+ .col-sm-11 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 91.66667%;
+ flex: 0 0 91.66667%;
+ max-width: 91.66667%; }
+ .col-sm-12 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 100%;
+ flex: 0 0 100%;
+ max-width: 100%; }
+ .order-sm-first {
+ -webkit-box-ordinal-group: 0;
+ -ms-flex-order: -1;
+ order: -1; }
+ .order-sm-last {
+ -webkit-box-ordinal-group: 14;
+ -ms-flex-order: 13;
+ order: 13; }
+ .order-sm-0 {
+ -webkit-box-ordinal-group: 1;
+ -ms-flex-order: 0;
+ order: 0; }
+ .order-sm-1 {
+ -webkit-box-ordinal-group: 2;
+ -ms-flex-order: 1;
+ order: 1; }
+ .order-sm-2 {
+ -webkit-box-ordinal-group: 3;
+ -ms-flex-order: 2;
+ order: 2; }
+ .order-sm-3 {
+ -webkit-box-ordinal-group: 4;
+ -ms-flex-order: 3;
+ order: 3; }
+ .order-sm-4 {
+ -webkit-box-ordinal-group: 5;
+ -ms-flex-order: 4;
+ order: 4; }
+ .order-sm-5 {
+ -webkit-box-ordinal-group: 6;
+ -ms-flex-order: 5;
+ order: 5; }
+ .order-sm-6 {
+ -webkit-box-ordinal-group: 7;
+ -ms-flex-order: 6;
+ order: 6; }
+ .order-sm-7 {
+ -webkit-box-ordinal-group: 8;
+ -ms-flex-order: 7;
+ order: 7; }
+ .order-sm-8 {
+ -webkit-box-ordinal-group: 9;
+ -ms-flex-order: 8;
+ order: 8; }
+ .order-sm-9 {
+ -webkit-box-ordinal-group: 10;
+ -ms-flex-order: 9;
+ order: 9; }
+ .order-sm-10 {
+ -webkit-box-ordinal-group: 11;
+ -ms-flex-order: 10;
+ order: 10; }
+ .order-sm-11 {
+ -webkit-box-ordinal-group: 12;
+ -ms-flex-order: 11;
+ order: 11; }
+ .order-sm-12 {
+ -webkit-box-ordinal-group: 13;
+ -ms-flex-order: 12;
+ order: 12; }
+ .offset-sm-0 {
+ margin-left: 0; }
+ .offset-sm-1 {
+ margin-left: 8.33333%; }
+ .offset-sm-2 {
+ margin-left: 16.66667%; }
+ .offset-sm-3 {
+ margin-left: 25%; }
+ .offset-sm-4 {
+ margin-left: 33.33333%; }
+ .offset-sm-5 {
+ margin-left: 41.66667%; }
+ .offset-sm-6 {
+ margin-left: 50%; }
+ .offset-sm-7 {
+ margin-left: 58.33333%; }
+ .offset-sm-8 {
+ margin-left: 66.66667%; }
+ .offset-sm-9 {
+ margin-left: 75%; }
+ .offset-sm-10 {
+ margin-left: 83.33333%; }
+ .offset-sm-11 {
+ margin-left: 91.66667%; } }
+
+@media (min-width: 768px) {
+ .col-md {
+ -ms-flex-preferred-size: 0;
+ flex-basis: 0;
+ -webkit-box-flex: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+ max-width: 100%; }
+ .col-md-auto {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ width: auto;
+ max-width: 100%; }
+ .col-md-1 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 8.33333%;
+ flex: 0 0 8.33333%;
+ max-width: 8.33333%; }
+ .col-md-2 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 16.66667%;
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%; }
+ .col-md-3 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 25%;
+ flex: 0 0 25%;
+ max-width: 25%; }
+ .col-md-4 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 33.33333%;
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%; }
+ .col-md-5 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 41.66667%;
+ flex: 0 0 41.66667%;
+ max-width: 41.66667%; }
+ .col-md-6 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 50%;
+ flex: 0 0 50%;
+ max-width: 50%; }
+ .col-md-7 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 58.33333%;
+ flex: 0 0 58.33333%;
+ max-width: 58.33333%; }
+ .col-md-8 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 66.66667%;
+ flex: 0 0 66.66667%;
+ max-width: 66.66667%; }
+ .col-md-9 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 75%;
+ flex: 0 0 75%;
+ max-width: 75%; }
+ .col-md-10 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 83.33333%;
+ flex: 0 0 83.33333%;
+ max-width: 83.33333%; }
+ .col-md-11 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 91.66667%;
+ flex: 0 0 91.66667%;
+ max-width: 91.66667%; }
+ .col-md-12 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 100%;
+ flex: 0 0 100%;
+ max-width: 100%; }
+ .order-md-first {
+ -webkit-box-ordinal-group: 0;
+ -ms-flex-order: -1;
+ order: -1; }
+ .order-md-last {
+ -webkit-box-ordinal-group: 14;
+ -ms-flex-order: 13;
+ order: 13; }
+ .order-md-0 {
+ -webkit-box-ordinal-group: 1;
+ -ms-flex-order: 0;
+ order: 0; }
+ .order-md-1 {
+ -webkit-box-ordinal-group: 2;
+ -ms-flex-order: 1;
+ order: 1; }
+ .order-md-2 {
+ -webkit-box-ordinal-group: 3;
+ -ms-flex-order: 2;
+ order: 2; }
+ .order-md-3 {
+ -webkit-box-ordinal-group: 4;
+ -ms-flex-order: 3;
+ order: 3; }
+ .order-md-4 {
+ -webkit-box-ordinal-group: 5;
+ -ms-flex-order: 4;
+ order: 4; }
+ .order-md-5 {
+ -webkit-box-ordinal-group: 6;
+ -ms-flex-order: 5;
+ order: 5; }
+ .order-md-6 {
+ -webkit-box-ordinal-group: 7;
+ -ms-flex-order: 6;
+ order: 6; }
+ .order-md-7 {
+ -webkit-box-ordinal-group: 8;
+ -ms-flex-order: 7;
+ order: 7; }
+ .order-md-8 {
+ -webkit-box-ordinal-group: 9;
+ -ms-flex-order: 8;
+ order: 8; }
+ .order-md-9 {
+ -webkit-box-ordinal-group: 10;
+ -ms-flex-order: 9;
+ order: 9; }
+ .order-md-10 {
+ -webkit-box-ordinal-group: 11;
+ -ms-flex-order: 10;
+ order: 10; }
+ .order-md-11 {
+ -webkit-box-ordinal-group: 12;
+ -ms-flex-order: 11;
+ order: 11; }
+ .order-md-12 {
+ -webkit-box-ordinal-group: 13;
+ -ms-flex-order: 12;
+ order: 12; }
+ .offset-md-0 {
+ margin-left: 0; }
+ .offset-md-1 {
+ margin-left: 8.33333%; }
+ .offset-md-2 {
+ margin-left: 16.66667%; }
+ .offset-md-3 {
+ margin-left: 25%; }
+ .offset-md-4 {
+ margin-left: 33.33333%; }
+ .offset-md-5 {
+ margin-left: 41.66667%; }
+ .offset-md-6 {
+ margin-left: 50%; }
+ .offset-md-7 {
+ margin-left: 58.33333%; }
+ .offset-md-8 {
+ margin-left: 66.66667%; }
+ .offset-md-9 {
+ margin-left: 75%; }
+ .offset-md-10 {
+ margin-left: 83.33333%; }
+ .offset-md-11 {
+ margin-left: 91.66667%; } }
+
+@media (min-width: 992px) {
+ .col-lg {
+ -ms-flex-preferred-size: 0;
+ flex-basis: 0;
+ -webkit-box-flex: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+ max-width: 100%; }
+ .col-lg-auto {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ width: auto;
+ max-width: 100%; }
+ .col-lg-1 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 8.33333%;
+ flex: 0 0 8.33333%;
+ max-width: 8.33333%; }
+ .col-lg-2 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 16.66667%;
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%; }
+ .col-lg-3 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 25%;
+ flex: 0 0 25%;
+ max-width: 25%; }
+ .col-lg-4 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 33.33333%;
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%; }
+ .col-lg-5 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 41.66667%;
+ flex: 0 0 41.66667%;
+ max-width: 41.66667%; }
+ .col-lg-6 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 50%;
+ flex: 0 0 50%;
+ max-width: 50%; }
+ .col-lg-7 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 58.33333%;
+ flex: 0 0 58.33333%;
+ max-width: 58.33333%; }
+ .col-lg-8 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 66.66667%;
+ flex: 0 0 66.66667%;
+ max-width: 66.66667%; }
+ .col-lg-9 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 75%;
+ flex: 0 0 75%;
+ max-width: 75%; }
+ .col-lg-10 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 83.33333%;
+ flex: 0 0 83.33333%;
+ max-width: 83.33333%; }
+ .col-lg-11 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 91.66667%;
+ flex: 0 0 91.66667%;
+ max-width: 91.66667%; }
+ .col-lg-12 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 100%;
+ flex: 0 0 100%;
+ max-width: 100%; }
+ .order-lg-first {
+ -webkit-box-ordinal-group: 0;
+ -ms-flex-order: -1;
+ order: -1; }
+ .order-lg-last {
+ -webkit-box-ordinal-group: 14;
+ -ms-flex-order: 13;
+ order: 13; }
+ .order-lg-0 {
+ -webkit-box-ordinal-group: 1;
+ -ms-flex-order: 0;
+ order: 0; }
+ .order-lg-1 {
+ -webkit-box-ordinal-group: 2;
+ -ms-flex-order: 1;
+ order: 1; }
+ .order-lg-2 {
+ -webkit-box-ordinal-group: 3;
+ -ms-flex-order: 2;
+ order: 2; }
+ .order-lg-3 {
+ -webkit-box-ordinal-group: 4;
+ -ms-flex-order: 3;
+ order: 3; }
+ .order-lg-4 {
+ -webkit-box-ordinal-group: 5;
+ -ms-flex-order: 4;
+ order: 4; }
+ .order-lg-5 {
+ -webkit-box-ordinal-group: 6;
+ -ms-flex-order: 5;
+ order: 5; }
+ .order-lg-6 {
+ -webkit-box-ordinal-group: 7;
+ -ms-flex-order: 6;
+ order: 6; }
+ .order-lg-7 {
+ -webkit-box-ordinal-group: 8;
+ -ms-flex-order: 7;
+ order: 7; }
+ .order-lg-8 {
+ -webkit-box-ordinal-group: 9;
+ -ms-flex-order: 8;
+ order: 8; }
+ .order-lg-9 {
+ -webkit-box-ordinal-group: 10;
+ -ms-flex-order: 9;
+ order: 9; }
+ .order-lg-10 {
+ -webkit-box-ordinal-group: 11;
+ -ms-flex-order: 10;
+ order: 10; }
+ .order-lg-11 {
+ -webkit-box-ordinal-group: 12;
+ -ms-flex-order: 11;
+ order: 11; }
+ .order-lg-12 {
+ -webkit-box-ordinal-group: 13;
+ -ms-flex-order: 12;
+ order: 12; }
+ .offset-lg-0 {
+ margin-left: 0; }
+ .offset-lg-1 {
+ margin-left: 8.33333%; }
+ .offset-lg-2 {
+ margin-left: 16.66667%; }
+ .offset-lg-3 {
+ margin-left: 25%; }
+ .offset-lg-4 {
+ margin-left: 33.33333%; }
+ .offset-lg-5 {
+ margin-left: 41.66667%; }
+ .offset-lg-6 {
+ margin-left: 50%; }
+ .offset-lg-7 {
+ margin-left: 58.33333%; }
+ .offset-lg-8 {
+ margin-left: 66.66667%; }
+ .offset-lg-9 {
+ margin-left: 75%; }
+ .offset-lg-10 {
+ margin-left: 83.33333%; }
+ .offset-lg-11 {
+ margin-left: 91.66667%; } }
+
+@media (min-width: 1200px) {
+ .col-xl {
+ -ms-flex-preferred-size: 0;
+ flex-basis: 0;
+ -webkit-box-flex: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+ max-width: 100%; }
+ .col-xl-auto {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ width: auto;
+ max-width: 100%; }
+ .col-xl-1 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 8.33333%;
+ flex: 0 0 8.33333%;
+ max-width: 8.33333%; }
+ .col-xl-2 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 16.66667%;
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%; }
+ .col-xl-3 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 25%;
+ flex: 0 0 25%;
+ max-width: 25%; }
+ .col-xl-4 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 33.33333%;
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%; }
+ .col-xl-5 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 41.66667%;
+ flex: 0 0 41.66667%;
+ max-width: 41.66667%; }
+ .col-xl-6 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 50%;
+ flex: 0 0 50%;
+ max-width: 50%; }
+ .col-xl-7 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 58.33333%;
+ flex: 0 0 58.33333%;
+ max-width: 58.33333%; }
+ .col-xl-8 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 66.66667%;
+ flex: 0 0 66.66667%;
+ max-width: 66.66667%; }
+ .col-xl-9 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 75%;
+ flex: 0 0 75%;
+ max-width: 75%; }
+ .col-xl-10 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 83.33333%;
+ flex: 0 0 83.33333%;
+ max-width: 83.33333%; }
+ .col-xl-11 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 91.66667%;
+ flex: 0 0 91.66667%;
+ max-width: 91.66667%; }
+ .col-xl-12 {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 100%;
+ flex: 0 0 100%;
+ max-width: 100%; }
+ .order-xl-first {
+ -webkit-box-ordinal-group: 0;
+ -ms-flex-order: -1;
+ order: -1; }
+ .order-xl-last {
+ -webkit-box-ordinal-group: 14;
+ -ms-flex-order: 13;
+ order: 13; }
+ .order-xl-0 {
+ -webkit-box-ordinal-group: 1;
+ -ms-flex-order: 0;
+ order: 0; }
+ .order-xl-1 {
+ -webkit-box-ordinal-group: 2;
+ -ms-flex-order: 1;
+ order: 1; }
+ .order-xl-2 {
+ -webkit-box-ordinal-group: 3;
+ -ms-flex-order: 2;
+ order: 2; }
+ .order-xl-3 {
+ -webkit-box-ordinal-group: 4;
+ -ms-flex-order: 3;
+ order: 3; }
+ .order-xl-4 {
+ -webkit-box-ordinal-group: 5;
+ -ms-flex-order: 4;
+ order: 4; }
+ .order-xl-5 {
+ -webkit-box-ordinal-group: 6;
+ -ms-flex-order: 5;
+ order: 5; }
+ .order-xl-6 {
+ -webkit-box-ordinal-group: 7;
+ -ms-flex-order: 6;
+ order: 6; }
+ .order-xl-7 {
+ -webkit-box-ordinal-group: 8;
+ -ms-flex-order: 7;
+ order: 7; }
+ .order-xl-8 {
+ -webkit-box-ordinal-group: 9;
+ -ms-flex-order: 8;
+ order: 8; }
+ .order-xl-9 {
+ -webkit-box-ordinal-group: 10;
+ -ms-flex-order: 9;
+ order: 9; }
+ .order-xl-10 {
+ -webkit-box-ordinal-group: 11;
+ -ms-flex-order: 10;
+ order: 10; }
+ .order-xl-11 {
+ -webkit-box-ordinal-group: 12;
+ -ms-flex-order: 11;
+ order: 11; }
+ .order-xl-12 {
+ -webkit-box-ordinal-group: 13;
+ -ms-flex-order: 12;
+ order: 12; }
+ .offset-xl-0 {
+ margin-left: 0; }
+ .offset-xl-1 {
+ margin-left: 8.33333%; }
+ .offset-xl-2 {
+ margin-left: 16.66667%; }
+ .offset-xl-3 {
+ margin-left: 25%; }
+ .offset-xl-4 {
+ margin-left: 33.33333%; }
+ .offset-xl-5 {
+ margin-left: 41.66667%; }
+ .offset-xl-6 {
+ margin-left: 50%; }
+ .offset-xl-7 {
+ margin-left: 58.33333%; }
+ .offset-xl-8 {
+ margin-left: 66.66667%; }
+ .offset-xl-9 {
+ margin-left: 75%; }
+ .offset-xl-10 {
+ margin-left: 83.33333%; }
+ .offset-xl-11 {
+ margin-left: 91.66667%; } }
+
+.table {
+ width: 100%;
+ margin-bottom: 1rem;
+ color: #212529; }
+ .table th,
+ .table td {
+ padding: 0.75rem;
+ vertical-align: top;
+ border-top: 1px solid #dee2e6; }
+ .table thead th {
+ vertical-align: bottom;
+ border-bottom: 2px solid #dee2e6; }
+ .table tbody + tbody {
+ border-top: 2px solid #dee2e6; }
+
+.table-sm th,
+.table-sm td {
+ padding: 0.3rem; }
+
+.table-bordered {
+ border: 1px solid #dee2e6; }
+ .table-bordered th,
+ .table-bordered td {
+ border: 1px solid #dee2e6; }
+ .table-bordered thead th,
+ .table-bordered thead td {
+ border-bottom-width: 2px; }
+
+.table-borderless th,
+.table-borderless td,
+.table-borderless thead th,
+.table-borderless tbody + tbody {
+ border: 0; }
+
+.table-striped tbody tr:nth-of-type(odd) {
+ background-color: rgba(0, 0, 0, 0.05); }
+
+.table-hover tbody tr:hover {
+ color: #212529;
+ background-color: rgba(0, 0, 0, 0.075); }
+
+.table-primary,
+.table-primary > th,
+.table-primary > td {
+ background-color: #b8daff; }
+
+.table-primary th,
+.table-primary td,
+.table-primary thead th,
+.table-primary tbody + tbody {
+ border-color: #7abaff; }
+
+.table-hover .table-primary:hover {
+ background-color: #9fcdff; }
+ .table-hover .table-primary:hover > td,
+ .table-hover .table-primary:hover > th {
+ background-color: #9fcdff; }
+
+.table-secondary,
+.table-secondary > th,
+.table-secondary > td {
+ background-color: #d6d8db; }
+
+.table-secondary th,
+.table-secondary td,
+.table-secondary thead th,
+.table-secondary tbody + tbody {
+ border-color: #b3b7bb; }
+
+.table-hover .table-secondary:hover {
+ background-color: #c8cbcf; }
+ .table-hover .table-secondary:hover > td,
+ .table-hover .table-secondary:hover > th {
+ background-color: #c8cbcf; }
+
+.table-success,
+.table-success > th,
+.table-success > td {
+ background-color: #c3e6cb; }
+
+.table-success th,
+.table-success td,
+.table-success thead th,
+.table-success tbody + tbody {
+ border-color: #8fd19e; }
+
+.table-hover .table-success:hover {
+ background-color: #b1dfbb; }
+ .table-hover .table-success:hover > td,
+ .table-hover .table-success:hover > th {
+ background-color: #b1dfbb; }
+
+.table-info,
+.table-info > th,
+.table-info > td {
+ background-color: #bee5eb; }
+
+.table-info th,
+.table-info td,
+.table-info thead th,
+.table-info tbody + tbody {
+ border-color: #86cfda; }
+
+.table-hover .table-info:hover {
+ background-color: #abdde5; }
+ .table-hover .table-info:hover > td,
+ .table-hover .table-info:hover > th {
+ background-color: #abdde5; }
+
+.table-warning,
+.table-warning > th,
+.table-warning > td {
+ background-color: #ffeeba; }
+
+.table-warning th,
+.table-warning td,
+.table-warning thead th,
+.table-warning tbody + tbody {
+ border-color: #ffdf7e; }
+
+.table-hover .table-warning:hover {
+ background-color: #ffe8a1; }
+ .table-hover .table-warning:hover > td,
+ .table-hover .table-warning:hover > th {
+ background-color: #ffe8a1; }
+
+.table-danger,
+.table-danger > th,
+.table-danger > td {
+ background-color: #f5c6cb; }
+
+.table-danger th,
+.table-danger td,
+.table-danger thead th,
+.table-danger tbody + tbody {
+ border-color: #ed969e; }
+
+.table-hover .table-danger:hover {
+ background-color: #f1b0b7; }
+ .table-hover .table-danger:hover > td,
+ .table-hover .table-danger:hover > th {
+ background-color: #f1b0b7; }
+
+.table-light,
+.table-light > th,
+.table-light > td {
+ background-color: #fdfdfe; }
+
+.table-light th,
+.table-light td,
+.table-light thead th,
+.table-light tbody + tbody {
+ border-color: #fbfcfc; }
+
+.table-hover .table-light:hover {
+ background-color: #ececf6; }
+ .table-hover .table-light:hover > td,
+ .table-hover .table-light:hover > th {
+ background-color: #ececf6; }
+
+.table-dark,
+.table-dark > th,
+.table-dark > td {
+ background-color: #c6c8ca; }
+
+.table-dark th,
+.table-dark td,
+.table-dark thead th,
+.table-dark tbody + tbody {
+ border-color: #95999c; }
+
+.table-hover .table-dark:hover {
+ background-color: #b9bbbe; }
+ .table-hover .table-dark:hover > td,
+ .table-hover .table-dark:hover > th {
+ background-color: #b9bbbe; }
+
+.table-active,
+.table-active > th,
+.table-active > td {
+ background-color: rgba(0, 0, 0, 0.075); }
+
+.table-hover .table-active:hover {
+ background-color: rgba(0, 0, 0, 0.075); }
+ .table-hover .table-active:hover > td,
+ .table-hover .table-active:hover > th {
+ background-color: rgba(0, 0, 0, 0.075); }
+
+.table .thead-dark th {
+ color: #fff;
+ background-color: #343a40;
+ border-color: #454d55; }
+
+.table .thead-light th {
+ color: #495057;
+ background-color: #e9ecef;
+ border-color: #dee2e6; }
+
+.table-dark {
+ color: #fff;
+ background-color: #343a40; }
+ .table-dark th,
+ .table-dark td,
+ .table-dark thead th {
+ border-color: #454d55; }
+ .table-dark.table-bordered {
+ border: 0; }
+ .table-dark.table-striped tbody tr:nth-of-type(odd) {
+ background-color: rgba(255, 255, 255, 0.05); }
+ .table-dark.table-hover tbody tr:hover {
+ color: #fff;
+ background-color: rgba(255, 255, 255, 0.075); }
+
+@media (max-width: 575.98px) {
+ .table-responsive-sm {
+ display: block;
+ width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch; }
+ .table-responsive-sm > .table-bordered {
+ border: 0; } }
+
+@media (max-width: 767.98px) {
+ .table-responsive-md {
+ display: block;
+ width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch; }
+ .table-responsive-md > .table-bordered {
+ border: 0; } }
+
+@media (max-width: 991.98px) {
+ .table-responsive-lg {
+ display: block;
+ width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch; }
+ .table-responsive-lg > .table-bordered {
+ border: 0; } }
+
+@media (max-width: 1199.98px) {
+ .table-responsive-xl {
+ display: block;
+ width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch; }
+ .table-responsive-xl > .table-bordered {
+ border: 0; } }
+
+.table-responsive {
+ display: block;
+ width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch; }
+ .table-responsive > .table-bordered {
+ border: 0; }
+
+.form-control {
+ display: block;
+ width: 100%;
+ height: calc(1.5em + 0.75rem + 2px);
+ padding: 0.375rem 0.75rem;
+ font-size: 1rem;
+ font-weight: 400;
+ line-height: 1.5;
+ color: #495057;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid #ced4da;
+ border-radius: 0.25rem;
+ -webkit-transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ -o-transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; }
+ @media (prefers-reduced-motion: reduce) {
+ .form-control {
+ -webkit-transition: none;
+ -o-transition: none;
+ transition: none; } }
+ .form-control::-ms-expand {
+ background-color: transparent;
+ border: 0; }
+ .form-control:focus {
+ color: #495057;
+ background-color: #fff;
+ border-color: #80bdff;
+ outline: 0;
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
+ box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); }
+ .form-control::-webkit-input-placeholder {
+ color: #6c757d;
+ opacity: 1; }
+ .form-control:-ms-input-placeholder {
+ color: #6c757d;
+ opacity: 1; }
+ .form-control::-ms-input-placeholder {
+ color: #6c757d;
+ opacity: 1; }
+ .form-control::placeholder {
+ color: #6c757d;
+ opacity: 1; }
+ .form-control:disabled, .form-control[readonly] {
+ background-color: #e9ecef;
+ opacity: 1; }
+
+select.form-control:focus::-ms-value {
+ color: #495057;
+ background-color: #fff; }
+
+.form-control-file,
+.form-control-range {
+ display: block;
+ width: 100%; }
+
+.col-form-label {
+ padding-top: calc(0.375rem + 1px);
+ padding-bottom: calc(0.375rem + 1px);
+ margin-bottom: 0;
+ font-size: inherit;
+ line-height: 1.5; }
+
+.col-form-label-lg {
+ padding-top: calc(0.5rem + 1px);
+ padding-bottom: calc(0.5rem + 1px);
+ font-size: 1.25rem;
+ line-height: 1.5; }
+
+.col-form-label-sm {
+ padding-top: calc(0.25rem + 1px);
+ padding-bottom: calc(0.25rem + 1px);
+ font-size: 0.875rem;
+ line-height: 1.5; }
+
+.form-control-plaintext {
+ display: block;
+ width: 100%;
+ padding-top: 0.375rem;
+ padding-bottom: 0.375rem;
+ margin-bottom: 0;
+ line-height: 1.5;
+ color: #212529;
+ background-color: transparent;
+ border: solid transparent;
+ border-width: 1px 0; }
+ .form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {
+ padding-right: 0;
+ padding-left: 0; }
+
+.form-control-sm {
+ height: calc(1.5em + 0.5rem + 2px);
+ padding: 0.25rem 0.5rem;
+ font-size: 0.875rem;
+ line-height: 1.5;
+ border-radius: 0.2rem; }
+
+.form-control-lg {
+ height: calc(1.5em + 1rem + 2px);
+ padding: 0.5rem 1rem;
+ font-size: 1.25rem;
+ line-height: 1.5;
+ border-radius: 0.3rem; }
+
+select.form-control[size], select.form-control[multiple] {
+ height: auto; }
+
+textarea.form-control {
+ height: auto; }
+
+.form-group {
+ margin-bottom: 1rem; }
+
+.form-text {
+ display: block;
+ margin-top: 0.25rem; }
+
+.form-row {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ margin-right: -5px;
+ margin-left: -5px; }
+ .form-row > .col,
+ .form-row > [class*="col-"] {
+ padding-right: 5px;
+ padding-left: 5px; }
+
+.form-check {
+ position: relative;
+ display: block;
+ padding-left: 1.25rem; }
+
+.form-check-input {
+ position: absolute;
+ margin-top: 0.3rem;
+ margin-left: -1.25rem; }
+ .form-check-input:disabled ~ .form-check-label {
+ color: #6c757d; }
+
+.form-check-label {
+ margin-bottom: 0; }
+
+.form-check-inline {
+ display: -webkit-inline-box;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ padding-left: 0;
+ margin-right: 0.75rem; }
+ .form-check-inline .form-check-input {
+ position: static;
+ margin-top: 0;
+ margin-right: 0.3125rem;
+ margin-left: 0; }
+
+.valid-feedback {
+ display: none;
+ width: 100%;
+ margin-top: 0.25rem;
+ font-size: 80%;
+ color: #28a745; }
+
+.valid-tooltip {
+ position: absolute;
+ top: 100%;
+ z-index: 5;
+ display: none;
+ max-width: 100%;
+ padding: 0.25rem 0.5rem;
+ margin-top: .1rem;
+ font-size: 0.875rem;
+ line-height: 1.5;
+ color: #fff;
+ background-color: rgba(40, 167, 69, 0.9);
+ border-radius: 0.25rem; }
+
+.was-validated .form-control:valid, .form-control.is-valid {
+ border-color: #28a745;
+ padding-right: calc(1.5em + 0.75rem);
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
+ background-repeat: no-repeat;
+ background-position: center right calc(0.375em + 0.1875rem);
+ background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); }
+ .was-validated .form-control:valid:focus, .form-control.is-valid:focus {
+ border-color: #28a745;
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
+ box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); }
+ .was-validated .form-control:valid ~ .valid-feedback,
+ .was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback,
+ .form-control.is-valid ~ .valid-tooltip {
+ display: block; }
+
+.was-validated textarea.form-control:valid, textarea.form-control.is-valid {
+ padding-right: calc(1.5em + 0.75rem);
+ background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); }
+
+.was-validated .custom-select:valid, .custom-select.is-valid {
+ border-color: #28a745;
+ padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);
+ background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); }
+ .was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {
+ border-color: #28a745;
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
+ box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); }
+ .was-validated .custom-select:valid ~ .valid-feedback,
+ .was-validated .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback,
+ .custom-select.is-valid ~ .valid-tooltip {
+ display: block; }
+
+.was-validated .form-control-file:valid ~ .valid-feedback,
+.was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback,
+.form-control-file.is-valid ~ .valid-tooltip {
+ display: block; }
+
+.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {
+ color: #28a745; }
+
+.was-validated .form-check-input:valid ~ .valid-feedback,
+.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,
+.form-check-input.is-valid ~ .valid-tooltip {
+ display: block; }
+
+.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {
+ color: #28a745; }
+ .was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {
+ border-color: #28a745; }
+
+.was-validated .custom-control-input:valid ~ .valid-feedback,
+.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback,
+.custom-control-input.is-valid ~ .valid-tooltip {
+ display: block; }
+
+.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {
+ border-color: #34ce57;
+ background-color: #34ce57; }
+
+.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
+ box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); }
+
+.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {
+ border-color: #28a745; }
+
+.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {
+ border-color: #28a745; }
+
+.was-validated .custom-file-input:valid ~ .valid-feedback,
+.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback,
+.custom-file-input.is-valid ~ .valid-tooltip {
+ display: block; }
+
+.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {
+ border-color: #28a745;
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
+ box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); }
+
+.invalid-feedback {
+ display: none;
+ width: 100%;
+ margin-top: 0.25rem;
+ font-size: 80%;
+ color: #dc3545; }
+
+.invalid-tooltip {
+ position: absolute;
+ top: 100%;
+ z-index: 5;
+ display: none;
+ max-width: 100%;
+ padding: 0.25rem 0.5rem;
+ margin-top: .1rem;
+ font-size: 0.875rem;
+ line-height: 1.5;
+ color: #fff;
+ background-color: rgba(220, 53, 69, 0.9);
+ border-radius: 0.25rem; }
+
+.was-validated .form-control:invalid, .form-control.is-invalid {
+ border-color: #dc3545;
+ padding-right: calc(1.5em + 0.75rem);
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E");
+ background-repeat: no-repeat;
+ background-position: center right calc(0.375em + 0.1875rem);
+ background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); }
+ .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {
+ border-color: #dc3545;
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
+ box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); }
+ .was-validated .form-control:invalid ~ .invalid-feedback,
+ .was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback,
+ .form-control.is-invalid ~ .invalid-tooltip {
+ display: block; }
+
+.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {
+ padding-right: calc(1.5em + 0.75rem);
+ background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); }
+
+.was-validated .custom-select:invalid, .custom-select.is-invalid {
+ border-color: #dc3545;
+ padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);
+ background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); }
+ .was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {
+ border-color: #dc3545;
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
+ box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); }
+ .was-validated .custom-select:invalid ~ .invalid-feedback,
+ .was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback,
+ .custom-select.is-invalid ~ .invalid-tooltip {
+ display: block; }
+
+.was-validated .form-control-file:invalid ~ .invalid-feedback,
+.was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback,
+.form-control-file.is-invalid ~ .invalid-tooltip {
+ display: block; }
+
+.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {
+ color: #dc3545; }
+
+.was-validated .form-check-input:invalid ~ .invalid-feedback,
+.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,
+.form-check-input.is-invalid ~ .invalid-tooltip {
+ display: block; }
+
+.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {
+ color: #dc3545; }
+ .was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {
+ border-color: #dc3545; }
+
+.was-validated .custom-control-input:invalid ~ .invalid-feedback,
+.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback,
+.custom-control-input.is-invalid ~ .invalid-tooltip {
+ display: block; }
+
+.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {
+ border-color: #e4606d;
+ background-color: #e4606d; }
+
+.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
+ box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); }
+
+.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {
+ border-color: #dc3545; }
+
+.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {
+ border-color: #dc3545; }
+
+.was-validated .custom-file-input:invalid ~ .invalid-feedback,
+.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback,
+.custom-file-input.is-invalid ~ .invalid-tooltip {
+ display: block; }
+
+.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {
+ border-color: #dc3545;
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
+ box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); }
+
+.form-inline {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center; }
+ .form-inline .form-check {
+ width: 100%; }
+ @media (min-width: 576px) {
+ .form-inline label {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ margin-bottom: 0; }
+ .form-inline .form-group {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ margin-bottom: 0; }
+ .form-inline .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle; }
+ .form-inline .form-control-plaintext {
+ display: inline-block; }
+ .form-inline .input-group,
+ .form-inline .custom-select {
+ width: auto; }
+ .form-inline .form-check {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ width: auto;
+ padding-left: 0; }
+ .form-inline .form-check-input {
+ position: relative;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+ margin-top: 0;
+ margin-right: 0.25rem;
+ margin-left: 0; }
+ .form-inline .custom-control {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center; }
+ .form-inline .custom-control-label {
+ margin-bottom: 0; } }
+
+.btn {
+ display: inline-block;
+ font-weight: 400;
+ color: #212529;
+ text-align: center;
+ vertical-align: middle;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ background-color: transparent;
+ border: 1px solid transparent;
+ padding: 0.375rem 0.75rem;
+ font-size: 1rem;
+ line-height: 1.5;
+ border-radius: 0.25rem;
+ -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ -o-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; }
+ @media (prefers-reduced-motion: reduce) {
+ .btn {
+ -webkit-transition: none;
+ -o-transition: none;
+ transition: none; } }
+ .btn:hover {
+ color: #212529;
+ text-decoration: none; }
+ .btn:focus, .btn.focus {
+ outline: 0;
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
+ box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); }
+ .btn.disabled, .btn:disabled {
+ opacity: 0.65; }
+
+a.btn.disabled,
+fieldset:disabled a.btn {
+ pointer-events: none; }
+
+.btn-primary {
+ color: #fff;
+ background-color: #007bff;
+ border-color: #007bff; }
+ .btn-primary:hover {
+ color: #fff;
+ background-color: #0069d9;
+ border-color: #0062cc; }
+ .btn-primary:focus, .btn-primary.focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); }
+ .btn-primary.disabled, .btn-primary:disabled {
+ color: #fff;
+ background-color: #007bff;
+ border-color: #007bff; }
+ .btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,
+ .show > .btn-primary.dropdown-toggle {
+ color: #fff;
+ background-color: #0062cc;
+ border-color: #005cbf; }
+ .btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,
+ .show > .btn-primary.dropdown-toggle:focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); }
+
+.btn-secondary {
+ color: #fff;
+ background-color: #6c757d;
+ border-color: #6c757d; }
+ .btn-secondary:hover {
+ color: #fff;
+ background-color: #5a6268;
+ border-color: #545b62; }
+ .btn-secondary:focus, .btn-secondary.focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); }
+ .btn-secondary.disabled, .btn-secondary:disabled {
+ color: #fff;
+ background-color: #6c757d;
+ border-color: #6c757d; }
+ .btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,
+ .show > .btn-secondary.dropdown-toggle {
+ color: #fff;
+ background-color: #545b62;
+ border-color: #4e555b; }
+ .btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,
+ .show > .btn-secondary.dropdown-toggle:focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); }
+
+.btn-success {
+ color: #fff;
+ background-color: #28a745;
+ border-color: #28a745; }
+ .btn-success:hover {
+ color: #fff;
+ background-color: #218838;
+ border-color: #1e7e34; }
+ .btn-success:focus, .btn-success.focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); }
+ .btn-success.disabled, .btn-success:disabled {
+ color: #fff;
+ background-color: #28a745;
+ border-color: #28a745; }
+ .btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,
+ .show > .btn-success.dropdown-toggle {
+ color: #fff;
+ background-color: #1e7e34;
+ border-color: #1c7430; }
+ .btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,
+ .show > .btn-success.dropdown-toggle:focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); }
+
+.btn-info {
+ color: #fff;
+ background-color: #17a2b8;
+ border-color: #17a2b8; }
+ .btn-info:hover {
+ color: #fff;
+ background-color: #138496;
+ border-color: #117a8b; }
+ .btn-info:focus, .btn-info.focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); }
+ .btn-info.disabled, .btn-info:disabled {
+ color: #fff;
+ background-color: #17a2b8;
+ border-color: #17a2b8; }
+ .btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,
+ .show > .btn-info.dropdown-toggle {
+ color: #fff;
+ background-color: #117a8b;
+ border-color: #10707f; }
+ .btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,
+ .show > .btn-info.dropdown-toggle:focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); }
+
+.btn-warning {
+ color: #212529;
+ background-color: #ffc107;
+ border-color: #ffc107; }
+ .btn-warning:hover {
+ color: #212529;
+ background-color: #e0a800;
+ border-color: #d39e00; }
+ .btn-warning:focus, .btn-warning.focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); }
+ .btn-warning.disabled, .btn-warning:disabled {
+ color: #212529;
+ background-color: #ffc107;
+ border-color: #ffc107; }
+ .btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,
+ .show > .btn-warning.dropdown-toggle {
+ color: #212529;
+ background-color: #d39e00;
+ border-color: #c69500; }
+ .btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,
+ .show > .btn-warning.dropdown-toggle:focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); }
+
+.btn-danger {
+ color: #fff;
+ background-color: #dc3545;
+ border-color: #dc3545; }
+ .btn-danger:hover {
+ color: #fff;
+ background-color: #c82333;
+ border-color: #bd2130; }
+ .btn-danger:focus, .btn-danger.focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); }
+ .btn-danger.disabled, .btn-danger:disabled {
+ color: #fff;
+ background-color: #dc3545;
+ border-color: #dc3545; }
+ .btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,
+ .show > .btn-danger.dropdown-toggle {
+ color: #fff;
+ background-color: #bd2130;
+ border-color: #b21f2d; }
+ .btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,
+ .show > .btn-danger.dropdown-toggle:focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); }
+
+.btn-light {
+ color: #212529;
+ background-color: #f8f9fa;
+ border-color: #f8f9fa; }
+ .btn-light:hover {
+ color: #212529;
+ background-color: #e2e6ea;
+ border-color: #dae0e5; }
+ .btn-light:focus, .btn-light.focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); }
+ .btn-light.disabled, .btn-light:disabled {
+ color: #212529;
+ background-color: #f8f9fa;
+ border-color: #f8f9fa; }
+ .btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,
+ .show > .btn-light.dropdown-toggle {
+ color: #212529;
+ background-color: #dae0e5;
+ border-color: #d3d9df; }
+ .btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,
+ .show > .btn-light.dropdown-toggle:focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); }
+
+.btn-dark {
+ color: #fff;
+ background-color: #343a40;
+ border-color: #343a40; }
+ .btn-dark:hover {
+ color: #fff;
+ background-color: #23272b;
+ border-color: #1d2124; }
+ .btn-dark:focus, .btn-dark.focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); }
+ .btn-dark.disabled, .btn-dark:disabled {
+ color: #fff;
+ background-color: #343a40;
+ border-color: #343a40; }
+ .btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,
+ .show > .btn-dark.dropdown-toggle {
+ color: #fff;
+ background-color: #1d2124;
+ border-color: #171a1d; }
+ .btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,
+ .show > .btn-dark.dropdown-toggle:focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); }
+
+.btn-outline-primary {
+ color: #007bff;
+ border-color: #007bff; }
+ .btn-outline-primary:hover {
+ color: #fff;
+ background-color: #007bff;
+ border-color: #007bff; }
+ .btn-outline-primary:focus, .btn-outline-primary.focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); }
+ .btn-outline-primary.disabled, .btn-outline-primary:disabled {
+ color: #007bff;
+ background-color: transparent; }
+ .btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,
+ .show > .btn-outline-primary.dropdown-toggle {
+ color: #fff;
+ background-color: #007bff;
+ border-color: #007bff; }
+ .btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,
+ .show > .btn-outline-primary.dropdown-toggle:focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); }
+
+.btn-outline-secondary {
+ color: #6c757d;
+ border-color: #6c757d; }
+ .btn-outline-secondary:hover {
+ color: #fff;
+ background-color: #6c757d;
+ border-color: #6c757d; }
+ .btn-outline-secondary:focus, .btn-outline-secondary.focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); }
+ .btn-outline-secondary.disabled, .btn-outline-secondary:disabled {
+ color: #6c757d;
+ background-color: transparent; }
+ .btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,
+ .show > .btn-outline-secondary.dropdown-toggle {
+ color: #fff;
+ background-color: #6c757d;
+ border-color: #6c757d; }
+ .btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,
+ .show > .btn-outline-secondary.dropdown-toggle:focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); }
+
+.btn-outline-success {
+ color: #28a745;
+ border-color: #28a745; }
+ .btn-outline-success:hover {
+ color: #fff;
+ background-color: #28a745;
+ border-color: #28a745; }
+ .btn-outline-success:focus, .btn-outline-success.focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); }
+ .btn-outline-success.disabled, .btn-outline-success:disabled {
+ color: #28a745;
+ background-color: transparent; }
+ .btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,
+ .show > .btn-outline-success.dropdown-toggle {
+ color: #fff;
+ background-color: #28a745;
+ border-color: #28a745; }
+ .btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,
+ .show > .btn-outline-success.dropdown-toggle:focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); }
+
+.btn-outline-info {
+ color: #17a2b8;
+ border-color: #17a2b8; }
+ .btn-outline-info:hover {
+ color: #fff;
+ background-color: #17a2b8;
+ border-color: #17a2b8; }
+ .btn-outline-info:focus, .btn-outline-info.focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); }
+ .btn-outline-info.disabled, .btn-outline-info:disabled {
+ color: #17a2b8;
+ background-color: transparent; }
+ .btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,
+ .show > .btn-outline-info.dropdown-toggle {
+ color: #fff;
+ background-color: #17a2b8;
+ border-color: #17a2b8; }
+ .btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,
+ .show > .btn-outline-info.dropdown-toggle:focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); }
+
+.btn-outline-warning {
+ color: #ffc107;
+ border-color: #ffc107; }
+ .btn-outline-warning:hover {
+ color: #212529;
+ background-color: #ffc107;
+ border-color: #ffc107; }
+ .btn-outline-warning:focus, .btn-outline-warning.focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); }
+ .btn-outline-warning.disabled, .btn-outline-warning:disabled {
+ color: #ffc107;
+ background-color: transparent; }
+ .btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,
+ .show > .btn-outline-warning.dropdown-toggle {
+ color: #212529;
+ background-color: #ffc107;
+ border-color: #ffc107; }
+ .btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,
+ .show > .btn-outline-warning.dropdown-toggle:focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); }
+
+.btn-outline-danger {
+ color: #dc3545;
+ border-color: #dc3545; }
+ .btn-outline-danger:hover {
+ color: #fff;
+ background-color: #dc3545;
+ border-color: #dc3545; }
+ .btn-outline-danger:focus, .btn-outline-danger.focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); }
+ .btn-outline-danger.disabled, .btn-outline-danger:disabled {
+ color: #dc3545;
+ background-color: transparent; }
+ .btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,
+ .show > .btn-outline-danger.dropdown-toggle {
+ color: #fff;
+ background-color: #dc3545;
+ border-color: #dc3545; }
+ .btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,
+ .show > .btn-outline-danger.dropdown-toggle:focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); }
+
+.btn-outline-light {
+ color: #f8f9fa;
+ border-color: #f8f9fa; }
+ .btn-outline-light:hover {
+ color: #212529;
+ background-color: #f8f9fa;
+ border-color: #f8f9fa; }
+ .btn-outline-light:focus, .btn-outline-light.focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); }
+ .btn-outline-light.disabled, .btn-outline-light:disabled {
+ color: #f8f9fa;
+ background-color: transparent; }
+ .btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,
+ .show > .btn-outline-light.dropdown-toggle {
+ color: #212529;
+ background-color: #f8f9fa;
+ border-color: #f8f9fa; }
+ .btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,
+ .show > .btn-outline-light.dropdown-toggle:focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); }
+
+.btn-outline-dark {
+ color: #343a40;
+ border-color: #343a40; }
+ .btn-outline-dark:hover {
+ color: #fff;
+ background-color: #343a40;
+ border-color: #343a40; }
+ .btn-outline-dark:focus, .btn-outline-dark.focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); }
+ .btn-outline-dark.disabled, .btn-outline-dark:disabled {
+ color: #343a40;
+ background-color: transparent; }
+ .btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,
+ .show > .btn-outline-dark.dropdown-toggle {
+ color: #fff;
+ background-color: #343a40;
+ border-color: #343a40; }
+ .btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,
+ .show > .btn-outline-dark.dropdown-toggle:focus {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); }
+
+.btn-link {
+ font-weight: 400;
+ color: #007bff;
+ text-decoration: none; }
+ .btn-link:hover {
+ color: #0056b3;
+ text-decoration: underline; }
+ .btn-link:focus, .btn-link.focus {
+ text-decoration: underline;
+ -webkit-box-shadow: none;
+ box-shadow: none; }
+ .btn-link:disabled, .btn-link.disabled {
+ color: #6c757d;
+ pointer-events: none; }
+
+.btn-lg, .btn-group-lg > .btn {
+ padding: 0.5rem 1rem;
+ font-size: 1.25rem;
+ line-height: 1.5;
+ border-radius: 0.3rem; }
+
+.btn-sm, .btn-group-sm > .btn {
+ padding: 0.25rem 0.5rem;
+ font-size: 0.875rem;
+ line-height: 1.5;
+ border-radius: 0.2rem; }
+
+.btn-block {
+ display: block;
+ width: 100%; }
+ .btn-block + .btn-block {
+ margin-top: 0.5rem; }
+
+input[type="submit"].btn-block,
+input[type="reset"].btn-block,
+input[type="button"].btn-block {
+ width: 100%; }
+
+.fade {
+ -webkit-transition: opacity 0.15s linear;
+ -o-transition: opacity 0.15s linear;
+ transition: opacity 0.15s linear; }
+ @media (prefers-reduced-motion: reduce) {
+ .fade {
+ -webkit-transition: none;
+ -o-transition: none;
+ transition: none; } }
+ .fade:not(.show) {
+ opacity: 0; }
+
+.collapse:not(.show) {
+ display: none; }
+
+.collapsing {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ -webkit-transition: height 0.35s ease;
+ -o-transition: height 0.35s ease;
+ transition: height 0.35s ease; }
+ @media (prefers-reduced-motion: reduce) {
+ .collapsing {
+ -webkit-transition: none;
+ -o-transition: none;
+ transition: none; } }
+
+.dropup,
+.dropright,
+.dropdown,
+.dropleft {
+ position: relative; }
+
+.dropdown-toggle {
+ white-space: nowrap; }
+ .dropdown-toggle::after {
+ display: inline-block;
+ margin-left: 0.255em;
+ vertical-align: 0.255em;
+ content: "";
+ border-top: 0.3em solid;
+ border-right: 0.3em solid transparent;
+ border-bottom: 0;
+ border-left: 0.3em solid transparent; }
+ .dropdown-toggle:empty::after {
+ margin-left: 0; }
+
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 10rem;
+ padding: 0.5rem 0;
+ margin: 0.125rem 0 0;
+ font-size: 1rem;
+ color: #212529;
+ text-align: left;
+ list-style: none;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+ border-radius: 0.25rem; }
+
+.dropdown-menu-left {
+ right: auto;
+ left: 0; }
+
+.dropdown-menu-right {
+ right: 0;
+ left: auto; }
+
+@media (min-width: 576px) {
+ .dropdown-menu-sm-left {
+ right: auto;
+ left: 0; }
+ .dropdown-menu-sm-right {
+ right: 0;
+ left: auto; } }
+
+@media (min-width: 768px) {
+ .dropdown-menu-md-left {
+ right: auto;
+ left: 0; }
+ .dropdown-menu-md-right {
+ right: 0;
+ left: auto; } }
+
+@media (min-width: 992px) {
+ .dropdown-menu-lg-left {
+ right: auto;
+ left: 0; }
+ .dropdown-menu-lg-right {
+ right: 0;
+ left: auto; } }
+
+@media (min-width: 1200px) {
+ .dropdown-menu-xl-left {
+ right: auto;
+ left: 0; }
+ .dropdown-menu-xl-right {
+ right: 0;
+ left: auto; } }
+
+.dropup .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-top: 0;
+ margin-bottom: 0.125rem; }
+
+.dropup .dropdown-toggle::after {
+ display: inline-block;
+ margin-left: 0.255em;
+ vertical-align: 0.255em;
+ content: "";
+ border-top: 0;
+ border-right: 0.3em solid transparent;
+ border-bottom: 0.3em solid;
+ border-left: 0.3em solid transparent; }
+
+.dropup .dropdown-toggle:empty::after {
+ margin-left: 0; }
+
+.dropright .dropdown-menu {
+ top: 0;
+ right: auto;
+ left: 100%;
+ margin-top: 0;
+ margin-left: 0.125rem; }
+
+.dropright .dropdown-toggle::after {
+ display: inline-block;
+ margin-left: 0.255em;
+ vertical-align: 0.255em;
+ content: "";
+ border-top: 0.3em solid transparent;
+ border-right: 0;
+ border-bottom: 0.3em solid transparent;
+ border-left: 0.3em solid; }
+
+.dropright .dropdown-toggle:empty::after {
+ margin-left: 0; }
+
+.dropright .dropdown-toggle::after {
+ vertical-align: 0; }
+
+.dropleft .dropdown-menu {
+ top: 0;
+ right: 100%;
+ left: auto;
+ margin-top: 0;
+ margin-right: 0.125rem; }
+
+.dropleft .dropdown-toggle::after {
+ display: inline-block;
+ margin-left: 0.255em;
+ vertical-align: 0.255em;
+ content: ""; }
+
+.dropleft .dropdown-toggle::after {
+ display: none; }
+
+.dropleft .dropdown-toggle::before {
+ display: inline-block;
+ margin-right: 0.255em;
+ vertical-align: 0.255em;
+ content: "";
+ border-top: 0.3em solid transparent;
+ border-right: 0.3em solid;
+ border-bottom: 0.3em solid transparent; }
+
+.dropleft .dropdown-toggle:empty::after {
+ margin-left: 0; }
+
+.dropleft .dropdown-toggle::before {
+ vertical-align: 0; }
+
+.dropdown-menu[x-placement^="top"], .dropdown-menu[x-placement^="right"], .dropdown-menu[x-placement^="bottom"], .dropdown-menu[x-placement^="left"] {
+ right: auto;
+ bottom: auto; }
+
+.dropdown-divider {
+ height: 0;
+ margin: 0.5rem 0;
+ overflow: hidden;
+ border-top: 1px solid #e9ecef; }
+
+.dropdown-item {
+ display: block;
+ width: 100%;
+ padding: 0.25rem 1.5rem;
+ clear: both;
+ font-weight: 400;
+ color: #212529;
+ text-align: inherit;
+ white-space: nowrap;
+ background-color: transparent;
+ border: 0; }
+ .dropdown-item:hover, .dropdown-item:focus {
+ color: #16181b;
+ text-decoration: none;
+ background-color: #f8f9fa; }
+ .dropdown-item.active, .dropdown-item:active {
+ color: #fff;
+ text-decoration: none;
+ background-color: #007bff; }
+ .dropdown-item.disabled, .dropdown-item:disabled {
+ color: #6c757d;
+ pointer-events: none;
+ background-color: transparent; }
+
+.dropdown-menu.show {
+ display: block; }
+
+.dropdown-header {
+ display: block;
+ padding: 0.5rem 1.5rem;
+ margin-bottom: 0;
+ font-size: 0.875rem;
+ color: #6c757d;
+ white-space: nowrap; }
+
+.dropdown-item-text {
+ display: block;
+ padding: 0.25rem 1.5rem;
+ color: #212529; }
+
+.btn-group,
+.btn-group-vertical {
+ position: relative;
+ display: -webkit-inline-box;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ vertical-align: middle; }
+ .btn-group > .btn,
+ .btn-group-vertical > .btn {
+ position: relative;
+ -webkit-box-flex: 1;
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto; }
+ .btn-group > .btn:hover,
+ .btn-group-vertical > .btn:hover {
+ z-index: 1; }
+ .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,
+ .btn-group-vertical > .btn:focus,
+ .btn-group-vertical > .btn:active,
+ .btn-group-vertical > .btn.active {
+ z-index: 1; }
+
+.btn-toolbar {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start; }
+ .btn-toolbar .input-group {
+ width: auto; }
+
+.btn-group > .btn:not(:first-child),
+.btn-group > .btn-group:not(:first-child) {
+ margin-left: -1px; }
+
+.btn-group > .btn:not(:last-child):not(.dropdown-toggle),
+.btn-group > .btn-group:not(:last-child) > .btn {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0; }
+
+.btn-group > .btn:not(:first-child),
+.btn-group > .btn-group:not(:first-child) > .btn {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0; }
+
+.dropdown-toggle-split {
+ padding-right: 0.5625rem;
+ padding-left: 0.5625rem; }
+ .dropdown-toggle-split::after,
+ .dropup .dropdown-toggle-split::after,
+ .dropright .dropdown-toggle-split::after {
+ margin-left: 0; }
+ .dropleft .dropdown-toggle-split::before {
+ margin-right: 0; }
+
+.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {
+ padding-right: 0.375rem;
+ padding-left: 0.375rem; }
+
+.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {
+ padding-right: 0.75rem;
+ padding-left: 0.75rem; }
+
+.btn-group-vertical {
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -webkit-box-align: start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center; }
+ .btn-group-vertical > .btn,
+ .btn-group-vertical > .btn-group {
+ width: 100%; }
+ .btn-group-vertical > .btn:not(:first-child),
+ .btn-group-vertical > .btn-group:not(:first-child) {
+ margin-top: -1px; }
+ .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),
+ .btn-group-vertical > .btn-group:not(:last-child) > .btn {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0; }
+ .btn-group-vertical > .btn:not(:first-child),
+ .btn-group-vertical > .btn-group:not(:first-child) > .btn {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0; }
+
+.btn-group-toggle > .btn,
+.btn-group-toggle > .btn-group > .btn {
+ margin-bottom: 0; }
+ .btn-group-toggle > .btn input[type="radio"],
+ .btn-group-toggle > .btn input[type="checkbox"],
+ .btn-group-toggle > .btn-group > .btn input[type="radio"],
+ .btn-group-toggle > .btn-group > .btn input[type="checkbox"] {
+ position: absolute;
+ clip: rect(0, 0, 0, 0);
+ pointer-events: none; }
+
+.input-group {
+ position: relative;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -webkit-box-align: stretch;
+ -ms-flex-align: stretch;
+ align-items: stretch;
+ width: 100%; }
+ .input-group > .form-control,
+ .input-group > .form-control-plaintext,
+ .input-group > .custom-select,
+ .input-group > .custom-file {
+ position: relative;
+ -webkit-box-flex: 1;
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto;
+ width: 1%;
+ margin-bottom: 0; }
+ .input-group > .form-control + .form-control,
+ .input-group > .form-control + .custom-select,
+ .input-group > .form-control + .custom-file,
+ .input-group > .form-control-plaintext + .form-control,
+ .input-group > .form-control-plaintext + .custom-select,
+ .input-group > .form-control-plaintext + .custom-file,
+ .input-group > .custom-select + .form-control,
+ .input-group > .custom-select + .custom-select,
+ .input-group > .custom-select + .custom-file,
+ .input-group > .custom-file + .form-control,
+ .input-group > .custom-file + .custom-select,
+ .input-group > .custom-file + .custom-file {
+ margin-left: -1px; }
+ .input-group > .form-control:focus,
+ .input-group > .custom-select:focus,
+ .input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {
+ z-index: 3; }
+ .input-group > .custom-file .custom-file-input:focus {
+ z-index: 4; }
+ .input-group > .form-control:not(:last-child),
+ .input-group > .custom-select:not(:last-child) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0; }
+ .input-group > .form-control:not(:first-child),
+ .input-group > .custom-select:not(:first-child) {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0; }
+ .input-group > .custom-file {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center; }
+ .input-group > .custom-file:not(:last-child) .custom-file-label,
+ .input-group > .custom-file:not(:last-child) .custom-file-label::after {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0; }
+ .input-group > .custom-file:not(:first-child) .custom-file-label {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0; }
+
+.input-group-prepend,
+.input-group-append {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex; }
+ .input-group-prepend .btn,
+ .input-group-append .btn {
+ position: relative;
+ z-index: 2; }
+ .input-group-prepend .btn:focus,
+ .input-group-append .btn:focus {
+ z-index: 3; }
+ .input-group-prepend .btn + .btn,
+ .input-group-prepend .btn + .input-group-text,
+ .input-group-prepend .input-group-text + .input-group-text,
+ .input-group-prepend .input-group-text + .btn,
+ .input-group-append .btn + .btn,
+ .input-group-append .btn + .input-group-text,
+ .input-group-append .input-group-text + .input-group-text,
+ .input-group-append .input-group-text + .btn {
+ margin-left: -1px; }
+
+.input-group-prepend {
+ margin-right: -1px; }
+
+.input-group-append {
+ margin-left: -1px; }
+
+.input-group-text {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ padding: 0.375rem 0.75rem;
+ margin-bottom: 0;
+ font-size: 1rem;
+ font-weight: 400;
+ line-height: 1.5;
+ color: #495057;
+ text-align: center;
+ white-space: nowrap;
+ background-color: #e9ecef;
+ border: 1px solid #ced4da;
+ border-radius: 0.25rem; }
+ .input-group-text input[type="radio"],
+ .input-group-text input[type="checkbox"] {
+ margin-top: 0; }
+
+.input-group-lg > .form-control:not(textarea),
+.input-group-lg > .custom-select {
+ height: calc(1.5em + 1rem + 2px); }
+
+.input-group-lg > .form-control,
+.input-group-lg > .custom-select,
+.input-group-lg > .input-group-prepend > .input-group-text,
+.input-group-lg > .input-group-append > .input-group-text,
+.input-group-lg > .input-group-prepend > .btn,
+.input-group-lg > .input-group-append > .btn {
+ padding: 0.5rem 1rem;
+ font-size: 1.25rem;
+ line-height: 1.5;
+ border-radius: 0.3rem; }
+
+.input-group-sm > .form-control:not(textarea),
+.input-group-sm > .custom-select {
+ height: calc(1.5em + 0.5rem + 2px); }
+
+.input-group-sm > .form-control,
+.input-group-sm > .custom-select,
+.input-group-sm > .input-group-prepend > .input-group-text,
+.input-group-sm > .input-group-append > .input-group-text,
+.input-group-sm > .input-group-prepend > .btn,
+.input-group-sm > .input-group-append > .btn {
+ padding: 0.25rem 0.5rem;
+ font-size: 0.875rem;
+ line-height: 1.5;
+ border-radius: 0.2rem; }
+
+.input-group-lg > .custom-select,
+.input-group-sm > .custom-select {
+ padding-right: 1.75rem; }
+
+.input-group > .input-group-prepend > .btn,
+.input-group > .input-group-prepend > .input-group-text,
+.input-group > .input-group-append:not(:last-child) > .btn,
+.input-group > .input-group-append:not(:last-child) > .input-group-text,
+.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),
+.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0; }
+
+.input-group > .input-group-append > .btn,
+.input-group > .input-group-append > .input-group-text,
+.input-group > .input-group-prepend:not(:first-child) > .btn,
+.input-group > .input-group-prepend:not(:first-child) > .input-group-text,
+.input-group > .input-group-prepend:first-child > .btn:not(:first-child),
+.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0; }
+
+.custom-control {
+ position: relative;
+ display: block;
+ min-height: 1.5rem;
+ padding-left: 1.5rem; }
+
+.custom-control-inline {
+ display: -webkit-inline-box;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ margin-right: 1rem; }
+
+.custom-control-input {
+ position: absolute;
+ z-index: -1;
+ opacity: 0; }
+ .custom-control-input:checked ~ .custom-control-label::before {
+ color: #fff;
+ border-color: #007bff;
+ background-color: #007bff; }
+ .custom-control-input:focus ~ .custom-control-label::before {
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
+ box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); }
+ .custom-control-input:focus:not(:checked) ~ .custom-control-label::before {
+ border-color: #80bdff; }
+ .custom-control-input:not(:disabled):active ~ .custom-control-label::before {
+ color: #fff;
+ background-color: #b3d7ff;
+ border-color: #b3d7ff; }
+ .custom-control-input:disabled ~ .custom-control-label {
+ color: #6c757d; }
+ .custom-control-input:disabled ~ .custom-control-label::before {
+ background-color: #e9ecef; }
+
+.custom-control-label {
+ position: relative;
+ margin-bottom: 0;
+ vertical-align: top; }
+ .custom-control-label::before {
+ position: absolute;
+ top: 0.25rem;
+ left: -1.5rem;
+ display: block;
+ width: 1rem;
+ height: 1rem;
+ pointer-events: none;
+ content: "";
+ background-color: #fff;
+ border: #adb5bd solid 1px; }
+ .custom-control-label::after {
+ position: absolute;
+ top: 0.25rem;
+ left: -1.5rem;
+ display: block;
+ width: 1rem;
+ height: 1rem;
+ content: "";
+ background: no-repeat 50% / 50% 50%; }
+
+.custom-checkbox .custom-control-label::before {
+ border-radius: 0.25rem; }
+
+.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e"); }
+
+.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {
+ border-color: #007bff;
+ background-color: #007bff; }
+
+.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e"); }
+
+.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {
+ background-color: rgba(0, 123, 255, 0.5); }
+
+.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {
+ background-color: rgba(0, 123, 255, 0.5); }
+
+.custom-radio .custom-control-label::before {
+ border-radius: 50%; }
+
+.custom-radio .custom-control-input:checked ~ .custom-control-label::after {
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); }
+
+.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {
+ background-color: rgba(0, 123, 255, 0.5); }
+
+.custom-switch {
+ padding-left: 2.25rem; }
+ .custom-switch .custom-control-label::before {
+ left: -2.25rem;
+ width: 1.75rem;
+ pointer-events: all;
+ border-radius: 0.5rem; }
+ .custom-switch .custom-control-label::after {
+ top: calc(0.25rem + 2px);
+ left: calc(-2.25rem + 2px);
+ width: calc(1rem - 4px);
+ height: calc(1rem - 4px);
+ background-color: #adb5bd;
+ border-radius: 0.5rem;
+ -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ -o-transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; }
+ @media (prefers-reduced-motion: reduce) {
+ .custom-switch .custom-control-label::after {
+ -webkit-transition: none;
+ -o-transition: none;
+ transition: none; } }
+ .custom-switch .custom-control-input:checked ~ .custom-control-label::after {
+ background-color: #fff;
+ -webkit-transform: translateX(0.75rem);
+ -ms-transform: translateX(0.75rem);
+ transform: translateX(0.75rem); }
+ .custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {
+ background-color: rgba(0, 123, 255, 0.5); }
+
+.custom-select {
+ display: inline-block;
+ width: 100%;
+ height: calc(1.5em + 0.75rem + 2px);
+ padding: 0.375rem 1.75rem 0.375rem 0.75rem;
+ font-size: 1rem;
+ font-weight: 400;
+ line-height: 1.5;
+ color: #495057;
+ vertical-align: middle;
+ background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px;
+ background-color: #fff;
+ border: 1px solid #ced4da;
+ border-radius: 0.25rem;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none; }
+ .custom-select:focus {
+ border-color: #80bdff;
+ outline: 0;
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
+ box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); }
+ .custom-select:focus::-ms-value {
+ color: #495057;
+ background-color: #fff; }
+ .custom-select[multiple], .custom-select[size]:not([size="1"]) {
+ height: auto;
+ padding-right: 0.75rem;
+ background-image: none; }
+ .custom-select:disabled {
+ color: #6c757d;
+ background-color: #e9ecef; }
+ .custom-select::-ms-expand {
+ display: none; }
+
+.custom-select-sm {
+ height: calc(1.5em + 0.5rem + 2px);
+ padding-top: 0.25rem;
+ padding-bottom: 0.25rem;
+ padding-left: 0.5rem;
+ font-size: 0.875rem; }
+
+.custom-select-lg {
+ height: calc(1.5em + 1rem + 2px);
+ padding-top: 0.5rem;
+ padding-bottom: 0.5rem;
+ padding-left: 1rem;
+ font-size: 1.25rem; }
+
+.custom-file {
+ position: relative;
+ display: inline-block;
+ width: 100%;
+ height: calc(1.5em + 0.75rem + 2px);
+ margin-bottom: 0; }
+
+.custom-file-input {
+ position: relative;
+ z-index: 2;
+ width: 100%;
+ height: calc(1.5em + 0.75rem + 2px);
+ margin: 0;
+ opacity: 0; }
+ .custom-file-input:focus ~ .custom-file-label {
+ border-color: #80bdff;
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
+ box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); }
+ .custom-file-input:disabled ~ .custom-file-label {
+ background-color: #e9ecef; }
+ .custom-file-input:lang(en) ~ .custom-file-label::after {
+ content: "Browse"; }
+ .custom-file-input ~ .custom-file-label[data-browse]::after {
+ content: attr(data-browse); }
+
+.custom-file-label {
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ z-index: 1;
+ height: calc(1.5em + 0.75rem + 2px);
+ padding: 0.375rem 0.75rem;
+ font-weight: 400;
+ line-height: 1.5;
+ color: #495057;
+ background-color: #fff;
+ border: 1px solid #ced4da;
+ border-radius: 0.25rem; }
+ .custom-file-label::after {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 3;
+ display: block;
+ height: calc(1.5em + 0.75rem);
+ padding: 0.375rem 0.75rem;
+ line-height: 1.5;
+ color: #495057;
+ content: "Browse";
+ background-color: #e9ecef;
+ border-left: inherit;
+ border-radius: 0 0.25rem 0.25rem 0; }
+
+.custom-range {
+ width: 100%;
+ height: calc(1rem + 0.4rem);
+ padding: 0;
+ background-color: transparent;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none; }
+ .custom-range:focus {
+ outline: none; }
+ .custom-range:focus::-webkit-slider-thumb {
+ -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
+ box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); }
+ .custom-range:focus::-moz-range-thumb {
+ box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); }
+ .custom-range:focus::-ms-thumb {
+ box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); }
+ .custom-range::-moz-focus-outer {
+ border: 0; }
+ .custom-range::-webkit-slider-thumb {
+ width: 1rem;
+ height: 1rem;
+ margin-top: -0.25rem;
+ background-color: #007bff;
+ border: 0;
+ border-radius: 1rem;
+ -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ -o-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ -webkit-appearance: none;
+ appearance: none; }
+ @media (prefers-reduced-motion: reduce) {
+ .custom-range::-webkit-slider-thumb {
+ -webkit-transition: none;
+ -o-transition: none;
+ transition: none; } }
+ .custom-range::-webkit-slider-thumb:active {
+ background-color: #b3d7ff; }
+ .custom-range::-webkit-slider-runnable-track {
+ width: 100%;
+ height: 0.5rem;
+ color: transparent;
+ cursor: pointer;
+ background-color: #dee2e6;
+ border-color: transparent;
+ border-radius: 1rem; }
+ .custom-range::-moz-range-thumb {
+ width: 1rem;
+ height: 1rem;
+ background-color: #007bff;
+ border: 0;
+ border-radius: 1rem;
+ -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ -o-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ -moz-appearance: none;
+ appearance: none; }
+ @media (prefers-reduced-motion: reduce) {
+ .custom-range::-moz-range-thumb {
+ -webkit-transition: none;
+ -o-transition: none;
+ transition: none; } }
+ .custom-range::-moz-range-thumb:active {
+ background-color: #b3d7ff; }
+ .custom-range::-moz-range-track {
+ width: 100%;
+ height: 0.5rem;
+ color: transparent;
+ cursor: pointer;
+ background-color: #dee2e6;
+ border-color: transparent;
+ border-radius: 1rem; }
+ .custom-range::-ms-thumb {
+ width: 1rem;
+ height: 1rem;
+ margin-top: 0;
+ margin-right: 0.2rem;
+ margin-left: 0.2rem;
+ background-color: #007bff;
+ border: 0;
+ border-radius: 1rem;
+ -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ -o-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ appearance: none; }
+ @media (prefers-reduced-motion: reduce) {
+ .custom-range::-ms-thumb {
+ -webkit-transition: none;
+ -o-transition: none;
+ transition: none; } }
+ .custom-range::-ms-thumb:active {
+ background-color: #b3d7ff; }
+ .custom-range::-ms-track {
+ width: 100%;
+ height: 0.5rem;
+ color: transparent;
+ cursor: pointer;
+ background-color: transparent;
+ border-color: transparent;
+ border-width: 0.5rem; }
+ .custom-range::-ms-fill-lower {
+ background-color: #dee2e6;
+ border-radius: 1rem; }
+ .custom-range::-ms-fill-upper {
+ margin-right: 15px;
+ background-color: #dee2e6;
+ border-radius: 1rem; }
+ .custom-range:disabled::-webkit-slider-thumb {
+ background-color: #adb5bd; }
+ .custom-range:disabled::-webkit-slider-runnable-track {
+ cursor: default; }
+ .custom-range:disabled::-moz-range-thumb {
+ background-color: #adb5bd; }
+ .custom-range:disabled::-moz-range-track {
+ cursor: default; }
+ .custom-range:disabled::-ms-thumb {
+ background-color: #adb5bd; }
+
+.custom-control-label::before,
+.custom-file-label,
+.custom-select {
+ -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ -o-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; }
+ @media (prefers-reduced-motion: reduce) {
+ .custom-control-label::before,
+ .custom-file-label,
+ .custom-select {
+ -webkit-transition: none;
+ -o-transition: none;
+ transition: none; } }
+
+.nav {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none; }
+
+.nav-link {
+ display: block;
+ padding: 0.5rem 1rem; }
+ .nav-link:hover, .nav-link:focus {
+ text-decoration: none; }
+ .nav-link.disabled {
+ color: #6c757d;
+ pointer-events: none;
+ cursor: default; }
+
+.nav-tabs {
+ border-bottom: 1px solid #dee2e6; }
+ .nav-tabs .nav-item {
+ margin-bottom: -1px; }
+ .nav-tabs .nav-link {
+ border: 1px solid transparent;
+ border-top-left-radius: 0.25rem;
+ border-top-right-radius: 0.25rem; }
+ .nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {
+ border-color: #e9ecef #e9ecef #dee2e6; }
+ .nav-tabs .nav-link.disabled {
+ color: #6c757d;
+ background-color: transparent;
+ border-color: transparent; }
+ .nav-tabs .nav-link.active,
+ .nav-tabs .nav-item.show .nav-link {
+ color: #495057;
+ background-color: #fff;
+ border-color: #dee2e6 #dee2e6 #fff; }
+ .nav-tabs .dropdown-menu {
+ margin-top: -1px;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0; }
+
+.nav-pills .nav-link {
+ border-radius: 0.25rem; }
+
+.nav-pills .nav-link.active,
+.nav-pills .show > .nav-link {
+ color: #fff;
+ background-color: #007bff; }
+
+.nav-fill .nav-item {
+ -webkit-box-flex: 1;
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto;
+ text-align: center; }
+
+.nav-justified .nav-item {
+ -ms-flex-preferred-size: 0;
+ flex-basis: 0;
+ -webkit-box-flex: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+ text-align: center; }
+
+.tab-content > .tab-pane {
+ display: none; }
+
+.tab-content > .active {
+ display: block; }
+
+.navbar {
+ position: relative;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ padding: 0.5rem 1rem; }
+ .navbar > .container,
+ .navbar > .container-fluid {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between; }
+
+.navbar-brand {
+ display: inline-block;
+ padding-top: 0.3125rem;
+ padding-bottom: 0.3125rem;
+ margin-right: 1rem;
+ font-size: 1.25rem;
+ line-height: inherit;
+ white-space: nowrap; }
+ .navbar-brand:hover, .navbar-brand:focus {
+ text-decoration: none; }
+
+.navbar-nav {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none; }
+ .navbar-nav .nav-link {
+ padding-right: 0;
+ padding-left: 0; }
+ .navbar-nav .dropdown-menu {
+ position: static;
+ float: none; }
+
+.navbar-text {
+ display: inline-block;
+ padding-top: 0.5rem;
+ padding-bottom: 0.5rem; }
+
+.navbar-collapse {
+ -ms-flex-preferred-size: 100%;
+ flex-basis: 100%;
+ -webkit-box-flex: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center; }
+
+.navbar-toggler {
+ padding: 0.25rem 0.75rem;
+ font-size: 1.25rem;
+ line-height: 1;
+ background-color: transparent;
+ border: 1px solid transparent;
+ border-radius: 0.25rem; }
+ .navbar-toggler:hover, .navbar-toggler:focus {
+ text-decoration: none; }
+
+.navbar-toggler-icon {
+ display: inline-block;
+ width: 1.5em;
+ height: 1.5em;
+ vertical-align: middle;
+ content: "";
+ background: no-repeat center center;
+ background-size: 100% 100%; }
+
+@media (max-width: 575.98px) {
+ .navbar-expand-sm > .container,
+ .navbar-expand-sm > .container-fluid {
+ padding-right: 0;
+ padding-left: 0; } }
+
+@media (min-width: 576px) {
+ .navbar-expand-sm {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap;
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start; }
+ .navbar-expand-sm .navbar-nav {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row; }
+ .navbar-expand-sm .navbar-nav .dropdown-menu {
+ position: absolute; }
+ .navbar-expand-sm .navbar-nav .nav-link {
+ padding-right: 0.5rem;
+ padding-left: 0.5rem; }
+ .navbar-expand-sm > .container,
+ .navbar-expand-sm > .container-fluid {
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap; }
+ .navbar-expand-sm .navbar-collapse {
+ display: -webkit-box !important;
+ display: -ms-flexbox !important;
+ display: flex !important;
+ -ms-flex-preferred-size: auto;
+ flex-basis: auto; }
+ .navbar-expand-sm .navbar-toggler {
+ display: none; } }
+
+@media (max-width: 767.98px) {
+ .navbar-expand-md > .container,
+ .navbar-expand-md > .container-fluid {
+ padding-right: 0;
+ padding-left: 0; } }
+
+@media (min-width: 768px) {
+ .navbar-expand-md {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap;
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start; }
+ .navbar-expand-md .navbar-nav {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row; }
+ .navbar-expand-md .navbar-nav .dropdown-menu {
+ position: absolute; }
+ .navbar-expand-md .navbar-nav .nav-link {
+ padding-right: 0.5rem;
+ padding-left: 0.5rem; }
+ .navbar-expand-md > .container,
+ .navbar-expand-md > .container-fluid {
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap; }
+ .navbar-expand-md .navbar-collapse {
+ display: -webkit-box !important;
+ display: -ms-flexbox !important;
+ display: flex !important;
+ -ms-flex-preferred-size: auto;
+ flex-basis: auto; }
+ .navbar-expand-md .navbar-toggler {
+ display: none; } }
+
+@media (max-width: 991.98px) {
+ .navbar-expand-lg > .container,
+ .navbar-expand-lg > .container-fluid {
+ padding-right: 0;
+ padding-left: 0; } }
+
+@media (min-width: 992px) {
+ .navbar-expand-lg {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap;
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start; }
+ .navbar-expand-lg .navbar-nav {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row; }
+ .navbar-expand-lg .navbar-nav .dropdown-menu {
+ position: absolute; }
+ .navbar-expand-lg .navbar-nav .nav-link {
+ padding-right: 0.5rem;
+ padding-left: 0.5rem; }
+ .navbar-expand-lg > .container,
+ .navbar-expand-lg > .container-fluid {
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap; }
+ .navbar-expand-lg .navbar-collapse {
+ display: -webkit-box !important;
+ display: -ms-flexbox !important;
+ display: flex !important;
+ -ms-flex-preferred-size: auto;
+ flex-basis: auto; }
+ .navbar-expand-lg .navbar-toggler {
+ display: none; } }
+
+@media (max-width: 1199.98px) {
+ .navbar-expand-xl > .container,
+ .navbar-expand-xl > .container-fluid {
+ padding-right: 0;
+ padding-left: 0; } }
+
+@media (min-width: 1200px) {
+ .navbar-expand-xl {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap;
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start; }
+ .navbar-expand-xl .navbar-nav {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row; }
+ .navbar-expand-xl .navbar-nav .dropdown-menu {
+ position: absolute; }
+ .navbar-expand-xl .navbar-nav .nav-link {
+ padding-right: 0.5rem;
+ padding-left: 0.5rem; }
+ .navbar-expand-xl > .container,
+ .navbar-expand-xl > .container-fluid {
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap; }
+ .navbar-expand-xl .navbar-collapse {
+ display: -webkit-box !important;
+ display: -ms-flexbox !important;
+ display: flex !important;
+ -ms-flex-preferred-size: auto;
+ flex-basis: auto; }
+ .navbar-expand-xl .navbar-toggler {
+ display: none; } }
+
+.navbar-expand {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap;
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start; }
+ .navbar-expand > .container,
+ .navbar-expand > .container-fluid {
+ padding-right: 0;
+ padding-left: 0; }
+ .navbar-expand .navbar-nav {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row; }
+ .navbar-expand .navbar-nav .dropdown-menu {
+ position: absolute; }
+ .navbar-expand .navbar-nav .nav-link {
+ padding-right: 0.5rem;
+ padding-left: 0.5rem; }
+ .navbar-expand > .container,
+ .navbar-expand > .container-fluid {
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap; }
+ .navbar-expand .navbar-collapse {
+ display: -webkit-box !important;
+ display: -ms-flexbox !important;
+ display: flex !important;
+ -ms-flex-preferred-size: auto;
+ flex-basis: auto; }
+ .navbar-expand .navbar-toggler {
+ display: none; }
+
+.navbar-light .navbar-brand {
+ color: rgba(0, 0, 0, 0.9); }
+ .navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {
+ color: rgba(0, 0, 0, 0.9); }
+
+.navbar-light .navbar-nav .nav-link {
+ color: rgba(0, 0, 0, 0.5); }
+ .navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {
+ color: rgba(0, 0, 0, 0.7); }
+ .navbar-light .navbar-nav .nav-link.disabled {
+ color: rgba(0, 0, 0, 0.3); }
+
+.navbar-light .navbar-nav .show > .nav-link,
+.navbar-light .navbar-nav .active > .nav-link,
+.navbar-light .navbar-nav .nav-link.show,
+.navbar-light .navbar-nav .nav-link.active {
+ color: rgba(0, 0, 0, 0.9); }
+
+.navbar-light .navbar-toggler {
+ color: rgba(0, 0, 0, 0.5);
+ border-color: rgba(0, 0, 0, 0.1); }
+
+.navbar-light .navbar-toggler-icon {
+ background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); }
+
+.navbar-light .navbar-text {
+ color: rgba(0, 0, 0, 0.5); }
+ .navbar-light .navbar-text a {
+ color: rgba(0, 0, 0, 0.9); }
+ .navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {
+ color: rgba(0, 0, 0, 0.9); }
+
+.navbar-dark .navbar-brand {
+ color: #fff; }
+ .navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {
+ color: #fff; }
+
+.navbar-dark .navbar-nav .nav-link {
+ color: rgba(255, 255, 255, 0.5); }
+ .navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {
+ color: rgba(255, 255, 255, 0.75); }
+ .navbar-dark .navbar-nav .nav-link.disabled {
+ color: rgba(255, 255, 255, 0.25); }
+
+.navbar-dark .navbar-nav .show > .nav-link,
+.navbar-dark .navbar-nav .active > .nav-link,
+.navbar-dark .navbar-nav .nav-link.show,
+.navbar-dark .navbar-nav .nav-link.active {
+ color: #fff; }
+
+.navbar-dark .navbar-toggler {
+ color: rgba(255, 255, 255, 0.5);
+ border-color: rgba(255, 255, 255, 0.1); }
+
+.navbar-dark .navbar-toggler-icon {
+ background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); }
+
+.navbar-dark .navbar-text {
+ color: rgba(255, 255, 255, 0.5); }
+ .navbar-dark .navbar-text a {
+ color: #fff; }
+ .navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {
+ color: #fff; }
+
+.card {
+ position: relative;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ min-width: 0;
+ word-wrap: break-word;
+ background-color: #fff;
+ background-clip: border-box;
+ border: 1px solid rgba(0, 0, 0, 0.125);
+ border-radius: 0.25rem; }
+ .card > hr {
+ margin-right: 0;
+ margin-left: 0; }
+ .card > .list-group:first-child .list-group-item:first-child {
+ border-top-left-radius: 0.25rem;
+ border-top-right-radius: 0.25rem; }
+ .card > .list-group:last-child .list-group-item:last-child {
+ border-bottom-right-radius: 0.25rem;
+ border-bottom-left-radius: 0.25rem; }
+
+.card-body {
+ -webkit-box-flex: 1;
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto;
+ padding: 1.25rem; }
+
+.card-title {
+ margin-bottom: 0.75rem; }
+
+.card-subtitle {
+ margin-top: -0.375rem;
+ margin-bottom: 0; }
+
+.card-text:last-child {
+ margin-bottom: 0; }
+
+.card-link:hover {
+ text-decoration: none; }
+
+.card-link + .card-link {
+ margin-left: 1.25rem; }
+
+.card-header {
+ padding: 0.75rem 1.25rem;
+ margin-bottom: 0;
+ background-color: rgba(0, 0, 0, 0.03);
+ border-bottom: 1px solid rgba(0, 0, 0, 0.125); }
+ .card-header:first-child {
+ border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; }
+ .card-header + .list-group .list-group-item:first-child {
+ border-top: 0; }
+
+.card-footer {
+ padding: 0.75rem 1.25rem;
+ background-color: rgba(0, 0, 0, 0.03);
+ border-top: 1px solid rgba(0, 0, 0, 0.125); }
+ .card-footer:last-child {
+ border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); }
+
+.card-header-tabs {
+ margin-right: -0.625rem;
+ margin-bottom: -0.75rem;
+ margin-left: -0.625rem;
+ border-bottom: 0; }
+
+.card-header-pills {
+ margin-right: -0.625rem;
+ margin-left: -0.625rem; }
+
+.card-img-overlay {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ padding: 1.25rem; }
+
+.card-img {
+ width: 100%;
+ border-radius: calc(0.25rem - 1px); }
+
+.card-img-top {
+ width: 100%;
+ border-top-left-radius: calc(0.25rem - 1px);
+ border-top-right-radius: calc(0.25rem - 1px); }
+
+.card-img-bottom {
+ width: 100%;
+ border-bottom-right-radius: calc(0.25rem - 1px);
+ border-bottom-left-radius: calc(0.25rem - 1px); }
+
+.card-deck {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column; }
+ .card-deck .card {
+ margin-bottom: 15px; }
+ @media (min-width: 576px) {
+ .card-deck {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ margin-right: -15px;
+ margin-left: -15px; }
+ .card-deck .card {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 1;
+ -ms-flex: 1 0 0%;
+ flex: 1 0 0%;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ margin-right: 15px;
+ margin-bottom: 0;
+ margin-left: 15px; } }
+
+.card-group {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column; }
+ .card-group > .card {
+ margin-bottom: 15px; }
+ @media (min-width: 576px) {
+ .card-group {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap; }
+ .card-group > .card {
+ -webkit-box-flex: 1;
+ -ms-flex: 1 0 0%;
+ flex: 1 0 0%;
+ margin-bottom: 0; }
+ .card-group > .card + .card {
+ margin-left: 0;
+ border-left: 0; }
+ .card-group > .card:not(:last-child) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0; }
+ .card-group > .card:not(:last-child) .card-img-top,
+ .card-group > .card:not(:last-child) .card-header {
+ border-top-right-radius: 0; }
+ .card-group > .card:not(:last-child) .card-img-bottom,
+ .card-group > .card:not(:last-child) .card-footer {
+ border-bottom-right-radius: 0; }
+ .card-group > .card:not(:first-child) {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0; }
+ .card-group > .card:not(:first-child) .card-img-top,
+ .card-group > .card:not(:first-child) .card-header {
+ border-top-left-radius: 0; }
+ .card-group > .card:not(:first-child) .card-img-bottom,
+ .card-group > .card:not(:first-child) .card-footer {
+ border-bottom-left-radius: 0; } }
+
+.card-columns .card {
+ margin-bottom: 0.75rem; }
+
+@media (min-width: 576px) {
+ .card-columns {
+ -webkit-column-count: 3;
+ column-count: 3;
+ -webkit-column-gap: 1.25rem;
+ column-gap: 1.25rem;
+ orphans: 1;
+ widows: 1; }
+ .card-columns .card {
+ display: inline-block;
+ width: 100%; } }
+
+.accordion > .card {
+ overflow: hidden; }
+ .accordion > .card:not(:first-of-type) .card-header:first-child {
+ border-radius: 0; }
+ .accordion > .card:not(:first-of-type):not(:last-of-type) {
+ border-bottom: 0;
+ border-radius: 0; }
+ .accordion > .card:first-of-type {
+ border-bottom: 0;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0; }
+ .accordion > .card:last-of-type {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0; }
+ .accordion > .card .card-header {
+ margin-bottom: -1px; }
+
+.breadcrumb {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ padding: 0.75rem 1rem;
+ margin-bottom: 1rem;
+ list-style: none;
+ background-color: #e9ecef;
+ border-radius: 0.25rem; }
+
+.breadcrumb-item + .breadcrumb-item {
+ padding-left: 0.5rem; }
+ .breadcrumb-item + .breadcrumb-item::before {
+ display: inline-block;
+ padding-right: 0.5rem;
+ color: #6c757d;
+ content: "/"; }
+
+.breadcrumb-item + .breadcrumb-item:hover::before {
+ text-decoration: underline; }
+
+.breadcrumb-item + .breadcrumb-item:hover::before {
+ text-decoration: none; }
+
+.breadcrumb-item.active {
+ color: #6c757d; }
+
+.pagination {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ padding-left: 0;
+ list-style: none;
+ border-radius: 0.25rem; }
+
+.page-link {
+ position: relative;
+ display: block;
+ padding: 0.5rem 0.75rem;
+ margin-left: -1px;
+ line-height: 1.25;
+ color: #007bff;
+ background-color: #fff;
+ border: 1px solid #dee2e6; }
+ .page-link:hover {
+ z-index: 2;
+ color: #0056b3;
+ text-decoration: none;
+ background-color: #e9ecef;
+ border-color: #dee2e6; }
+ .page-link:focus {
+ z-index: 2;
+ outline: 0;
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
+ box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); }
+
+.page-item:first-child .page-link {
+ margin-left: 0;
+ border-top-left-radius: 0.25rem;
+ border-bottom-left-radius: 0.25rem; }
+
+.page-item:last-child .page-link {
+ border-top-right-radius: 0.25rem;
+ border-bottom-right-radius: 0.25rem; }
+
+.page-item.active .page-link {
+ z-index: 1;
+ color: #fff;
+ background-color: #007bff;
+ border-color: #007bff; }
+
+.page-item.disabled .page-link {
+ color: #6c757d;
+ pointer-events: none;
+ cursor: auto;
+ background-color: #fff;
+ border-color: #dee2e6; }
+
+.pagination-lg .page-link {
+ padding: 0.75rem 1.5rem;
+ font-size: 1.25rem;
+ line-height: 1.5; }
+
+.pagination-lg .page-item:first-child .page-link {
+ border-top-left-radius: 0.3rem;
+ border-bottom-left-radius: 0.3rem; }
+
+.pagination-lg .page-item:last-child .page-link {
+ border-top-right-radius: 0.3rem;
+ border-bottom-right-radius: 0.3rem; }
+
+.pagination-sm .page-link {
+ padding: 0.25rem 0.5rem;
+ font-size: 0.875rem;
+ line-height: 1.5; }
+
+.pagination-sm .page-item:first-child .page-link {
+ border-top-left-radius: 0.2rem;
+ border-bottom-left-radius: 0.2rem; }
+
+.pagination-sm .page-item:last-child .page-link {
+ border-top-right-radius: 0.2rem;
+ border-bottom-right-radius: 0.2rem; }
+
+.badge {
+ display: inline-block;
+ padding: 0.25em 0.4em;
+ font-size: 75%;
+ font-weight: 700;
+ line-height: 1;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: 0.25rem;
+ -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ -o-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; }
+ @media (prefers-reduced-motion: reduce) {
+ .badge {
+ -webkit-transition: none;
+ -o-transition: none;
+ transition: none; } }
+ a.badge:hover, a.badge:focus {
+ text-decoration: none; }
+ .badge:empty {
+ display: none; }
+
+.btn .badge {
+ position: relative;
+ top: -1px; }
+
+.badge-pill {
+ padding-right: 0.6em;
+ padding-left: 0.6em;
+ border-radius: 10rem; }
+
+.badge-primary {
+ color: #fff;
+ background-color: #007bff; }
+ a.badge-primary:hover, a.badge-primary:focus {
+ color: #fff;
+ background-color: #0062cc; }
+ a.badge-primary:focus, a.badge-primary.focus {
+ outline: 0;
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); }
+
+.badge-secondary {
+ color: #fff;
+ background-color: #6c757d; }
+ a.badge-secondary:hover, a.badge-secondary:focus {
+ color: #fff;
+ background-color: #545b62; }
+ a.badge-secondary:focus, a.badge-secondary.focus {
+ outline: 0;
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); }
+
+.badge-success {
+ color: #fff;
+ background-color: #28a745; }
+ a.badge-success:hover, a.badge-success:focus {
+ color: #fff;
+ background-color: #1e7e34; }
+ a.badge-success:focus, a.badge-success.focus {
+ outline: 0;
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); }
+
+.badge-info {
+ color: #fff;
+ background-color: #17a2b8; }
+ a.badge-info:hover, a.badge-info:focus {
+ color: #fff;
+ background-color: #117a8b; }
+ a.badge-info:focus, a.badge-info.focus {
+ outline: 0;
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); }
+
+.badge-warning {
+ color: #212529;
+ background-color: #ffc107; }
+ a.badge-warning:hover, a.badge-warning:focus {
+ color: #212529;
+ background-color: #d39e00; }
+ a.badge-warning:focus, a.badge-warning.focus {
+ outline: 0;
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); }
+
+.badge-danger {
+ color: #fff;
+ background-color: #dc3545; }
+ a.badge-danger:hover, a.badge-danger:focus {
+ color: #fff;
+ background-color: #bd2130; }
+ a.badge-danger:focus, a.badge-danger.focus {
+ outline: 0;
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); }
+
+.badge-light {
+ color: #212529;
+ background-color: #f8f9fa; }
+ a.badge-light:hover, a.badge-light:focus {
+ color: #212529;
+ background-color: #dae0e5; }
+ a.badge-light:focus, a.badge-light.focus {
+ outline: 0;
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); }
+
+.badge-dark {
+ color: #fff;
+ background-color: #343a40; }
+ a.badge-dark:hover, a.badge-dark:focus {
+ color: #fff;
+ background-color: #1d2124; }
+ a.badge-dark:focus, a.badge-dark.focus {
+ outline: 0;
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
+ box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); }
+
+.jumbotron {
+ padding: 2rem 1rem;
+ margin-bottom: 2rem;
+ background-color: #e9ecef;
+ border-radius: 0.3rem; }
+ @media (min-width: 576px) {
+ .jumbotron {
+ padding: 4rem 2rem; } }
+
+.jumbotron-fluid {
+ padding-right: 0;
+ padding-left: 0;
+ border-radius: 0; }
+
+.alert {
+ position: relative;
+ padding: 0.75rem 1.25rem;
+ margin-bottom: 1rem;
+ border: 1px solid transparent;
+ border-radius: 0.25rem; }
+
+.alert-heading {
+ color: inherit; }
+
+.alert-link {
+ font-weight: 700; }
+
+.alert-dismissible {
+ padding-right: 4rem; }
+ .alert-dismissible .close {
+ position: absolute;
+ top: 0;
+ right: 0;
+ padding: 0.75rem 1.25rem;
+ color: inherit; }
+
+.alert-primary {
+ color: #004085;
+ background-color: #cce5ff;
+ border-color: #b8daff; }
+ .alert-primary hr {
+ border-top-color: #9fcdff; }
+ .alert-primary .alert-link {
+ color: #002752; }
+
+.alert-secondary {
+ color: #383d41;
+ background-color: #e2e3e5;
+ border-color: #d6d8db; }
+ .alert-secondary hr {
+ border-top-color: #c8cbcf; }
+ .alert-secondary .alert-link {
+ color: #202326; }
+
+.alert-success {
+ color: #155724;
+ background-color: #d4edda;
+ border-color: #c3e6cb; }
+ .alert-success hr {
+ border-top-color: #b1dfbb; }
+ .alert-success .alert-link {
+ color: #0b2e13; }
+
+.alert-info {
+ color: #0c5460;
+ background-color: #d1ecf1;
+ border-color: #bee5eb; }
+ .alert-info hr {
+ border-top-color: #abdde5; }
+ .alert-info .alert-link {
+ color: #062c33; }
+
+.alert-warning {
+ color: #856404;
+ background-color: #fff3cd;
+ border-color: #ffeeba; }
+ .alert-warning hr {
+ border-top-color: #ffe8a1; }
+ .alert-warning .alert-link {
+ color: #533f03; }
+
+.alert-danger {
+ color: #721c24;
+ background-color: #f8d7da;
+ border-color: #f5c6cb; }
+ .alert-danger hr {
+ border-top-color: #f1b0b7; }
+ .alert-danger .alert-link {
+ color: #491217; }
+
+.alert-light {
+ color: #818182;
+ background-color: #fefefe;
+ border-color: #fdfdfe; }
+ .alert-light hr {
+ border-top-color: #ececf6; }
+ .alert-light .alert-link {
+ color: #686868; }
+
+.alert-dark {
+ color: #1b1e21;
+ background-color: #d6d8d9;
+ border-color: #c6c8ca; }
+ .alert-dark hr {
+ border-top-color: #b9bbbe; }
+ .alert-dark .alert-link {
+ color: #040505; }
+
+@-webkit-keyframes progress-bar-stripes {
+ from {
+ background-position: 1rem 0; }
+ to {
+ background-position: 0 0; } }
+
+@keyframes progress-bar-stripes {
+ from {
+ background-position: 1rem 0; }
+ to {
+ background-position: 0 0; } }
+
+.progress {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ height: 1rem;
+ overflow: hidden;
+ font-size: 0.75rem;
+ background-color: #e9ecef;
+ border-radius: 0.25rem; }
+
+.progress-bar {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ background-color: #007bff;
+ -webkit-transition: width 0.6s ease;
+ -o-transition: width 0.6s ease;
+ transition: width 0.6s ease; }
+ @media (prefers-reduced-motion: reduce) {
+ .progress-bar {
+ -webkit-transition: none;
+ -o-transition: none;
+ transition: none; } }
+
+.progress-bar-striped {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-size: 1rem 1rem; }
+
+.progress-bar-animated {
+ -webkit-animation: progress-bar-stripes 1s linear infinite;
+ animation: progress-bar-stripes 1s linear infinite; }
+ @media (prefers-reduced-motion: reduce) {
+ .progress-bar-animated {
+ -webkit-animation: none;
+ animation: none; } }
+
+.media {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: start;
+ -ms-flex-align: start;
+ align-items: flex-start; }
+
+.media-body {
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1; }
+
+.list-group {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ padding-left: 0;
+ margin-bottom: 0; }
+
+.list-group-item-action {
+ width: 100%;
+ color: #495057;
+ text-align: inherit; }
+ .list-group-item-action:hover, .list-group-item-action:focus {
+ z-index: 1;
+ color: #495057;
+ text-decoration: none;
+ background-color: #f8f9fa; }
+ .list-group-item-action:active {
+ color: #212529;
+ background-color: #e9ecef; }
+
+.list-group-item {
+ position: relative;
+ display: block;
+ padding: 0.75rem 1.25rem;
+ margin-bottom: -1px;
+ background-color: #fff;
+ border: 1px solid rgba(0, 0, 0, 0.125); }
+ .list-group-item:first-child {
+ border-top-left-radius: 0.25rem;
+ border-top-right-radius: 0.25rem; }
+ .list-group-item:last-child {
+ margin-bottom: 0;
+ border-bottom-right-radius: 0.25rem;
+ border-bottom-left-radius: 0.25rem; }
+ .list-group-item.disabled, .list-group-item:disabled {
+ color: #6c757d;
+ pointer-events: none;
+ background-color: #fff; }
+ .list-group-item.active {
+ z-index: 2;
+ color: #fff;
+ background-color: #007bff;
+ border-color: #007bff; }
+
+.list-group-horizontal {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row; }
+ .list-group-horizontal .list-group-item {
+ margin-right: -1px;
+ margin-bottom: 0; }
+ .list-group-horizontal .list-group-item:first-child {
+ border-top-left-radius: 0.25rem;
+ border-bottom-left-radius: 0.25rem;
+ border-top-right-radius: 0; }
+ .list-group-horizontal .list-group-item:last-child {
+ margin-right: 0;
+ border-top-right-radius: 0.25rem;
+ border-bottom-right-radius: 0.25rem;
+ border-bottom-left-radius: 0; }
+
+@media (min-width: 576px) {
+ .list-group-horizontal-sm {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row; }
+ .list-group-horizontal-sm .list-group-item {
+ margin-right: -1px;
+ margin-bottom: 0; }
+ .list-group-horizontal-sm .list-group-item:first-child {
+ border-top-left-radius: 0.25rem;
+ border-bottom-left-radius: 0.25rem;
+ border-top-right-radius: 0; }
+ .list-group-horizontal-sm .list-group-item:last-child {
+ margin-right: 0;
+ border-top-right-radius: 0.25rem;
+ border-bottom-right-radius: 0.25rem;
+ border-bottom-left-radius: 0; } }
+
+@media (min-width: 768px) {
+ .list-group-horizontal-md {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row; }
+ .list-group-horizontal-md .list-group-item {
+ margin-right: -1px;
+ margin-bottom: 0; }
+ .list-group-horizontal-md .list-group-item:first-child {
+ border-top-left-radius: 0.25rem;
+ border-bottom-left-radius: 0.25rem;
+ border-top-right-radius: 0; }
+ .list-group-horizontal-md .list-group-item:last-child {
+ margin-right: 0;
+ border-top-right-radius: 0.25rem;
+ border-bottom-right-radius: 0.25rem;
+ border-bottom-left-radius: 0; } }
+
+@media (min-width: 992px) {
+ .list-group-horizontal-lg {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row; }
+ .list-group-horizontal-lg .list-group-item {
+ margin-right: -1px;
+ margin-bottom: 0; }
+ .list-group-horizontal-lg .list-group-item:first-child {
+ border-top-left-radius: 0.25rem;
+ border-bottom-left-radius: 0.25rem;
+ border-top-right-radius: 0; }
+ .list-group-horizontal-lg .list-group-item:last-child {
+ margin-right: 0;
+ border-top-right-radius: 0.25rem;
+ border-bottom-right-radius: 0.25rem;
+ border-bottom-left-radius: 0; } }
+
+@media (min-width: 1200px) {
+ .list-group-horizontal-xl {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row; }
+ .list-group-horizontal-xl .list-group-item {
+ margin-right: -1px;
+ margin-bottom: 0; }
+ .list-group-horizontal-xl .list-group-item:first-child {
+ border-top-left-radius: 0.25rem;
+ border-bottom-left-radius: 0.25rem;
+ border-top-right-radius: 0; }
+ .list-group-horizontal-xl .list-group-item:last-child {
+ margin-right: 0;
+ border-top-right-radius: 0.25rem;
+ border-bottom-right-radius: 0.25rem;
+ border-bottom-left-radius: 0; } }
+
+.list-group-flush .list-group-item {
+ border-right: 0;
+ border-left: 0;
+ border-radius: 0; }
+ .list-group-flush .list-group-item:last-child {
+ margin-bottom: -1px; }
+
+.list-group-flush:first-child .list-group-item:first-child {
+ border-top: 0; }
+
+.list-group-flush:last-child .list-group-item:last-child {
+ margin-bottom: 0;
+ border-bottom: 0; }
+
+.list-group-item-primary {
+ color: #004085;
+ background-color: #b8daff; }
+ .list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {
+ color: #004085;
+ background-color: #9fcdff; }
+ .list-group-item-primary.list-group-item-action.active {
+ color: #fff;
+ background-color: #004085;
+ border-color: #004085; }
+
+.list-group-item-secondary {
+ color: #383d41;
+ background-color: #d6d8db; }
+ .list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {
+ color: #383d41;
+ background-color: #c8cbcf; }
+ .list-group-item-secondary.list-group-item-action.active {
+ color: #fff;
+ background-color: #383d41;
+ border-color: #383d41; }
+
+.list-group-item-success {
+ color: #155724;
+ background-color: #c3e6cb; }
+ .list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {
+ color: #155724;
+ background-color: #b1dfbb; }
+ .list-group-item-success.list-group-item-action.active {
+ color: #fff;
+ background-color: #155724;
+ border-color: #155724; }
+
+.list-group-item-info {
+ color: #0c5460;
+ background-color: #bee5eb; }
+ .list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {
+ color: #0c5460;
+ background-color: #abdde5; }
+ .list-group-item-info.list-group-item-action.active {
+ color: #fff;
+ background-color: #0c5460;
+ border-color: #0c5460; }
+
+.list-group-item-warning {
+ color: #856404;
+ background-color: #ffeeba; }
+ .list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {
+ color: #856404;
+ background-color: #ffe8a1; }
+ .list-group-item-warning.list-group-item-action.active {
+ color: #fff;
+ background-color: #856404;
+ border-color: #856404; }
+
+.list-group-item-danger {
+ color: #721c24;
+ background-color: #f5c6cb; }
+ .list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {
+ color: #721c24;
+ background-color: #f1b0b7; }
+ .list-group-item-danger.list-group-item-action.active {
+ color: #fff;
+ background-color: #721c24;
+ border-color: #721c24; }
+
+.list-group-item-light {
+ color: #818182;
+ background-color: #fdfdfe; }
+ .list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {
+ color: #818182;
+ background-color: #ececf6; }
+ .list-group-item-light.list-group-item-action.active {
+ color: #fff;
+ background-color: #818182;
+ border-color: #818182; }
+
+.list-group-item-dark {
+ color: #1b1e21;
+ background-color: #c6c8ca; }
+ .list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {
+ color: #1b1e21;
+ background-color: #b9bbbe; }
+ .list-group-item-dark.list-group-item-action.active {
+ color: #fff;
+ background-color: #1b1e21;
+ border-color: #1b1e21; }
+
+.close {
+ float: right;
+ font-size: 1.5rem;
+ font-weight: 700;
+ line-height: 1;
+ color: #000;
+ text-shadow: 0 1px 0 #fff;
+ opacity: .5; }
+ .close:hover {
+ color: #000;
+ text-decoration: none; }
+ .close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {
+ opacity: .75; }
+
+button.close {
+ padding: 0;
+ background-color: transparent;
+ border: 0;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none; }
+
+a.close.disabled {
+ pointer-events: none; }
+
+.toast {
+ max-width: 350px;
+ overflow: hidden;
+ font-size: 0.875rem;
+ background-color: rgba(255, 255, 255, 0.85);
+ background-clip: padding-box;
+ border: 1px solid rgba(0, 0, 0, 0.1);
+ -webkit-box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);
+ box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);
+ -webkit-backdrop-filter: blur(10px);
+ backdrop-filter: blur(10px);
+ opacity: 0;
+ border-radius: 0.25rem; }
+ .toast:not(:last-child) {
+ margin-bottom: 0.75rem; }
+ .toast.showing {
+ opacity: 1; }
+ .toast.show {
+ display: block;
+ opacity: 1; }
+ .toast.hide {
+ display: none; }
+
+.toast-header {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ padding: 0.25rem 0.75rem;
+ color: #6c757d;
+ background-color: rgba(255, 255, 255, 0.85);
+ background-clip: padding-box;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.05); }
+
+.toast-body {
+ padding: 0.75rem; }
+
+.modal-open {
+ overflow: hidden; }
+ .modal-open .modal {
+ overflow-x: hidden;
+ overflow-y: auto; }
+
+.modal {
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 1050;
+ display: none;
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ outline: 0; }
+
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: 0.5rem;
+ pointer-events: none; }
+ .modal.fade .modal-dialog {
+ -webkit-transition: -webkit-transform 0.3s ease-out;
+ transition: -webkit-transform 0.3s ease-out;
+ -o-transition: transform 0.3s ease-out;
+ transition: transform 0.3s ease-out;
+ transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;
+ -webkit-transform: translate(0, -50px);
+ -ms-transform: translate(0, -50px);
+ transform: translate(0, -50px); }
+ @media (prefers-reduced-motion: reduce) {
+ .modal.fade .modal-dialog {
+ -webkit-transition: none;
+ -o-transition: none;
+ transition: none; } }
+ .modal.show .modal-dialog {
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none; }
+
+.modal-dialog-scrollable {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ max-height: calc(100% - 1rem); }
+ .modal-dialog-scrollable .modal-content {
+ max-height: calc(100vh - 1rem);
+ overflow: hidden; }
+ .modal-dialog-scrollable .modal-header,
+ .modal-dialog-scrollable .modal-footer {
+ -ms-flex-negative: 0;
+ flex-shrink: 0; }
+ .modal-dialog-scrollable .modal-body {
+ overflow-y: auto; }
+
+.modal-dialog-centered {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ min-height: calc(100% - 1rem); }
+ .modal-dialog-centered::before {
+ display: block;
+ height: calc(100vh - 1rem);
+ content: ""; }
+ .modal-dialog-centered.modal-dialog-scrollable {
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ height: 100%; }
+ .modal-dialog-centered.modal-dialog-scrollable .modal-content {
+ max-height: none; }
+ .modal-dialog-centered.modal-dialog-scrollable::before {
+ content: none; }
+
+.modal-content {
+ position: relative;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ width: 100%;
+ pointer-events: auto;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid rgba(0, 0, 0, 0.2);
+ border-radius: 0.3rem;
+ outline: 0; }
+
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 1040;
+ width: 100vw;
+ height: 100vh;
+ background-color: #000; }
+ .modal-backdrop.fade {
+ opacity: 0; }
+ .modal-backdrop.show {
+ opacity: 0.5; }
+
+.modal-header {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ padding: 1rem 1rem;
+ border-bottom: 1px solid #dee2e6;
+ border-top-left-radius: 0.3rem;
+ border-top-right-radius: 0.3rem; }
+ .modal-header .close {
+ padding: 1rem 1rem;
+ margin: -1rem -1rem -1rem auto; }
+
+.modal-title {
+ margin-bottom: 0;
+ line-height: 1.5; }
+
+.modal-body {
+ position: relative;
+ -webkit-box-flex: 1;
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto;
+ padding: 1rem; }
+
+.modal-footer {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+ padding: 1rem;
+ border-top: 1px solid #dee2e6;
+ border-bottom-right-radius: 0.3rem;
+ border-bottom-left-radius: 0.3rem; }
+ .modal-footer > :not(:first-child) {
+ margin-left: .25rem; }
+ .modal-footer > :not(:last-child) {
+ margin-right: .25rem; }
+
+.modal-scrollbar-measure {
+ position: absolute;
+ top: -9999px;
+ width: 50px;
+ height: 50px;
+ overflow: scroll; }
+
+@media (min-width: 576px) {
+ .modal-dialog {
+ max-width: 500px;
+ margin: 1.75rem auto; }
+ .modal-dialog-scrollable {
+ max-height: calc(100% - 3.5rem); }
+ .modal-dialog-scrollable .modal-content {
+ max-height: calc(100vh - 3.5rem); }
+ .modal-dialog-centered {
+ min-height: calc(100% - 3.5rem); }
+ .modal-dialog-centered::before {
+ height: calc(100vh - 3.5rem); }
+ .modal-sm {
+ max-width: 300px; } }
+
+@media (min-width: 992px) {
+ .modal-lg,
+ .modal-xl {
+ max-width: 800px; } }
+
+@media (min-width: 1200px) {
+ .modal-xl {
+ max-width: 1140px; } }
+
+.tooltip {
+ position: absolute;
+ z-index: 1070;
+ display: block;
+ margin: 0;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+ font-style: normal;
+ font-weight: 400;
+ line-height: 1.5;
+ text-align: left;
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ white-space: normal;
+ line-break: auto;
+ font-size: 0.875rem;
+ word-wrap: break-word;
+ opacity: 0; }
+ .tooltip.show {
+ opacity: 0.9; }
+ .tooltip .arrow {
+ position: absolute;
+ display: block;
+ width: 0.8rem;
+ height: 0.4rem; }
+ .tooltip .arrow::before {
+ position: absolute;
+ content: "";
+ border-color: transparent;
+ border-style: solid; }
+
+.bs-tooltip-top, .bs-tooltip-auto[x-placement^="top"] {
+ padding: 0.4rem 0; }
+ .bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^="top"] .arrow {
+ bottom: 0; }
+ .bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before {
+ top: 0;
+ border-width: 0.4rem 0.4rem 0;
+ border-top-color: #000; }
+
+.bs-tooltip-right, .bs-tooltip-auto[x-placement^="right"] {
+ padding: 0 0.4rem; }
+ .bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^="right"] .arrow {
+ left: 0;
+ width: 0.4rem;
+ height: 0.8rem; }
+ .bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^="right"] .arrow::before {
+ right: 0;
+ border-width: 0.4rem 0.4rem 0.4rem 0;
+ border-right-color: #000; }
+
+.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^="bottom"] {
+ padding: 0.4rem 0; }
+ .bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^="bottom"] .arrow {
+ top: 0; }
+ .bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^="bottom"] .arrow::before {
+ bottom: 0;
+ border-width: 0 0.4rem 0.4rem;
+ border-bottom-color: #000; }
+
+.bs-tooltip-left, .bs-tooltip-auto[x-placement^="left"] {
+ padding: 0 0.4rem; }
+ .bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^="left"] .arrow {
+ right: 0;
+ width: 0.4rem;
+ height: 0.8rem; }
+ .bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^="left"] .arrow::before {
+ left: 0;
+ border-width: 0.4rem 0 0.4rem 0.4rem;
+ border-left-color: #000; }
+
+.tooltip-inner {
+ max-width: 200px;
+ padding: 0.25rem 0.5rem;
+ color: #fff;
+ text-align: center;
+ background-color: #000;
+ border-radius: 0.25rem; }
+
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1060;
+ display: block;
+ max-width: 276px;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+ font-style: normal;
+ font-weight: 400;
+ line-height: 1.5;
+ text-align: left;
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ white-space: normal;
+ line-break: auto;
+ font-size: 0.875rem;
+ word-wrap: break-word;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid rgba(0, 0, 0, 0.2);
+ border-radius: 0.3rem; }
+ .popover .arrow {
+ position: absolute;
+ display: block;
+ width: 1rem;
+ height: 0.5rem;
+ margin: 0 0.3rem; }
+ .popover .arrow::before, .popover .arrow::after {
+ position: absolute;
+ display: block;
+ content: "";
+ border-color: transparent;
+ border-style: solid; }
+
+.bs-popover-top, .bs-popover-auto[x-placement^="top"] {
+ margin-bottom: 0.5rem; }
+ .bs-popover-top > .arrow, .bs-popover-auto[x-placement^="top"] > .arrow {
+ bottom: calc((0.5rem + 1px) * -1); }
+ .bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^="top"] > .arrow::before {
+ bottom: 0;
+ border-width: 0.5rem 0.5rem 0;
+ border-top-color: rgba(0, 0, 0, 0.25); }
+ .bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^="top"] > .arrow::after {
+ bottom: 1px;
+ border-width: 0.5rem 0.5rem 0;
+ border-top-color: #fff; }
+
+.bs-popover-right, .bs-popover-auto[x-placement^="right"] {
+ margin-left: 0.5rem; }
+ .bs-popover-right > .arrow, .bs-popover-auto[x-placement^="right"] > .arrow {
+ left: calc((0.5rem + 1px) * -1);
+ width: 0.5rem;
+ height: 1rem;
+ margin: 0.3rem 0; }
+ .bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^="right"] > .arrow::before {
+ left: 0;
+ border-width: 0.5rem 0.5rem 0.5rem 0;
+ border-right-color: rgba(0, 0, 0, 0.25); }
+ .bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^="right"] > .arrow::after {
+ left: 1px;
+ border-width: 0.5rem 0.5rem 0.5rem 0;
+ border-right-color: #fff; }
+
+.bs-popover-bottom, .bs-popover-auto[x-placement^="bottom"] {
+ margin-top: 0.5rem; }
+ .bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^="bottom"] > .arrow {
+ top: calc((0.5rem + 1px) * -1); }
+ .bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^="bottom"] > .arrow::before {
+ top: 0;
+ border-width: 0 0.5rem 0.5rem 0.5rem;
+ border-bottom-color: rgba(0, 0, 0, 0.25); }
+ .bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^="bottom"] > .arrow::after {
+ top: 1px;
+ border-width: 0 0.5rem 0.5rem 0.5rem;
+ border-bottom-color: #fff; }
+ .bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^="bottom"] .popover-header::before {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ display: block;
+ width: 1rem;
+ margin-left: -0.5rem;
+ content: "";
+ border-bottom: 1px solid #f7f7f7; }
+
+.bs-popover-left, .bs-popover-auto[x-placement^="left"] {
+ margin-right: 0.5rem; }
+ .bs-popover-left > .arrow, .bs-popover-auto[x-placement^="left"] > .arrow {
+ right: calc((0.5rem + 1px) * -1);
+ width: 0.5rem;
+ height: 1rem;
+ margin: 0.3rem 0; }
+ .bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^="left"] > .arrow::before {
+ right: 0;
+ border-width: 0.5rem 0 0.5rem 0.5rem;
+ border-left-color: rgba(0, 0, 0, 0.25); }
+ .bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^="left"] > .arrow::after {
+ right: 1px;
+ border-width: 0.5rem 0 0.5rem 0.5rem;
+ border-left-color: #fff; }
+
+.popover-header {
+ padding: 0.5rem 0.75rem;
+ margin-bottom: 0;
+ font-size: 1rem;
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #ebebeb;
+ border-top-left-radius: calc(0.3rem - 1px);
+ border-top-right-radius: calc(0.3rem - 1px); }
+ .popover-header:empty {
+ display: none; }
+
+.popover-body {
+ padding: 0.5rem 0.75rem;
+ color: #212529; }
+
+.carousel {
+ position: relative; }
+
+.carousel.pointer-event {
+ -ms-touch-action: pan-y;
+ touch-action: pan-y; }
+
+.carousel-inner {
+ position: relative;
+ width: 100%;
+ overflow: hidden; }
+ .carousel-inner::after {
+ display: block;
+ clear: both;
+ content: ""; }
+
+.carousel-item {
+ position: relative;
+ display: none;
+ float: left;
+ width: 100%;
+ margin-right: -100%;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-transition: -webkit-transform 0.6s ease-in-out;
+ transition: -webkit-transform 0.6s ease-in-out;
+ -o-transition: transform 0.6s ease-in-out;
+ transition: transform 0.6s ease-in-out;
+ transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out; }
+ @media (prefers-reduced-motion: reduce) {
+ .carousel-item {
+ -webkit-transition: none;
+ -o-transition: none;
+ transition: none; } }
+
+.carousel-item.active,
+.carousel-item-next,
+.carousel-item-prev {
+ display: block; }
+
+.carousel-item-next:not(.carousel-item-left),
+.active.carousel-item-right {
+ -webkit-transform: translateX(100%);
+ -ms-transform: translateX(100%);
+ transform: translateX(100%); }
+
+.carousel-item-prev:not(.carousel-item-right),
+.active.carousel-item-left {
+ -webkit-transform: translateX(-100%);
+ -ms-transform: translateX(-100%);
+ transform: translateX(-100%); }
+
+.carousel-fade .carousel-item {
+ opacity: 0;
+ -webkit-transition-property: opacity;
+ -o-transition-property: opacity;
+ transition-property: opacity;
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none; }
+
+.carousel-fade .carousel-item.active,
+.carousel-fade .carousel-item-next.carousel-item-left,
+.carousel-fade .carousel-item-prev.carousel-item-right {
+ z-index: 1;
+ opacity: 1; }
+
+.carousel-fade .active.carousel-item-left,
+.carousel-fade .active.carousel-item-right {
+ z-index: 0;
+ opacity: 0;
+ -webkit-transition: 0s 0.6s opacity;
+ -o-transition: 0s 0.6s opacity;
+ transition: 0s 0.6s opacity; }
+ @media (prefers-reduced-motion: reduce) {
+ .carousel-fade .active.carousel-item-left,
+ .carousel-fade .active.carousel-item-right {
+ -webkit-transition: none;
+ -o-transition: none;
+ transition: none; } }
+
+.carousel-control-prev,
+.carousel-control-next {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ z-index: 1;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ width: 15%;
+ color: #fff;
+ text-align: center;
+ opacity: 0.5;
+ -webkit-transition: opacity 0.15s ease;
+ -o-transition: opacity 0.15s ease;
+ transition: opacity 0.15s ease; }
+ @media (prefers-reduced-motion: reduce) {
+ .carousel-control-prev,
+ .carousel-control-next {
+ -webkit-transition: none;
+ -o-transition: none;
+ transition: none; } }
+ .carousel-control-prev:hover, .carousel-control-prev:focus,
+ .carousel-control-next:hover,
+ .carousel-control-next:focus {
+ color: #fff;
+ text-decoration: none;
+ outline: 0;
+ opacity: 0.9; }
+
+.carousel-control-prev {
+ left: 0; }
+
+.carousel-control-next {
+ right: 0; }
+
+.carousel-control-prev-icon,
+.carousel-control-next-icon {
+ display: inline-block;
+ width: 20px;
+ height: 20px;
+ background: no-repeat 50% / 100% 100%; }
+
+.carousel-control-prev-icon {
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e"); }
+
+.carousel-control-next-icon {
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e"); }
+
+.carousel-indicators {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 15;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ padding-left: 0;
+ margin-right: 15%;
+ margin-left: 15%;
+ list-style: none; }
+ .carousel-indicators li {
+ -webkit-box-sizing: content-box;
+ box-sizing: content-box;
+ -webkit-box-flex: 0;
+ -ms-flex: 0 1 auto;
+ flex: 0 1 auto;
+ width: 30px;
+ height: 3px;
+ margin-right: 3px;
+ margin-left: 3px;
+ text-indent: -999px;
+ cursor: pointer;
+ background-color: #fff;
+ background-clip: padding-box;
+ border-top: 10px solid transparent;
+ border-bottom: 10px solid transparent;
+ opacity: .5;
+ -webkit-transition: opacity 0.6s ease;
+ -o-transition: opacity 0.6s ease;
+ transition: opacity 0.6s ease; }
+ @media (prefers-reduced-motion: reduce) {
+ .carousel-indicators li {
+ -webkit-transition: none;
+ -o-transition: none;
+ transition: none; } }
+ .carousel-indicators .active {
+ opacity: 1; }
+
+.carousel-caption {
+ position: absolute;
+ right: 15%;
+ bottom: 20px;
+ left: 15%;
+ z-index: 10;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ color: #fff;
+ text-align: center; }
+
+@-webkit-keyframes spinner-border {
+ to {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg); } }
+
+@keyframes spinner-border {
+ to {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg); } }
+
+.spinner-border {
+ display: inline-block;
+ width: 2rem;
+ height: 2rem;
+ vertical-align: text-bottom;
+ border: 0.25em solid currentColor;
+ border-right-color: transparent;
+ border-radius: 50%;
+ -webkit-animation: spinner-border .75s linear infinite;
+ animation: spinner-border .75s linear infinite; }
+
+.spinner-border-sm {
+ width: 1rem;
+ height: 1rem;
+ border-width: 0.2em; }
+
+@-webkit-keyframes spinner-grow {
+ 0% {
+ -webkit-transform: scale(0);
+ transform: scale(0); }
+ 50% {
+ opacity: 1; } }
+
+@keyframes spinner-grow {
+ 0% {
+ -webkit-transform: scale(0);
+ transform: scale(0); }
+ 50% {
+ opacity: 1; } }
+
+.spinner-grow {
+ display: inline-block;
+ width: 2rem;
+ height: 2rem;
+ vertical-align: text-bottom;
+ background-color: currentColor;
+ border-radius: 50%;
+ opacity: 0;
+ -webkit-animation: spinner-grow .75s linear infinite;
+ animation: spinner-grow .75s linear infinite; }
+
+.spinner-grow-sm {
+ width: 1rem;
+ height: 1rem; }
+
+.align-baseline {
+ vertical-align: baseline !important; }
+
+.align-top {
+ vertical-align: top !important; }
+
+.align-middle {
+ vertical-align: middle !important; }
+
+.align-bottom {
+ vertical-align: bottom !important; }
+
+.align-text-bottom {
+ vertical-align: text-bottom !important; }
+
+.align-text-top {
+ vertical-align: text-top !important; }
+
+.bg-primary {
+ background-color: #007bff !important; }
+
+a.bg-primary:hover, a.bg-primary:focus,
+button.bg-primary:hover,
+button.bg-primary:focus {
+ background-color: #0062cc !important; }
+
+.bg-secondary {
+ background-color: #6c757d !important; }
+
+a.bg-secondary:hover, a.bg-secondary:focus,
+button.bg-secondary:hover,
+button.bg-secondary:focus {
+ background-color: #545b62 !important; }
+
+.bg-success {
+ background-color: #28a745 !important; }
+
+a.bg-success:hover, a.bg-success:focus,
+button.bg-success:hover,
+button.bg-success:focus {
+ background-color: #1e7e34 !important; }
+
+.bg-info {
+ background-color: #17a2b8 !important; }
+
+a.bg-info:hover, a.bg-info:focus,
+button.bg-info:hover,
+button.bg-info:focus {
+ background-color: #117a8b !important; }
+
+.bg-warning {
+ background-color: #ffc107 !important; }
+
+a.bg-warning:hover, a.bg-warning:focus,
+button.bg-warning:hover,
+button.bg-warning:focus {
+ background-color: #d39e00 !important; }
+
+.bg-danger {
+ background-color: #dc3545 !important; }
+
+a.bg-danger:hover, a.bg-danger:focus,
+button.bg-danger:hover,
+button.bg-danger:focus {
+ background-color: #bd2130 !important; }
+
+.bg-light {
+ background-color: #f8f9fa !important; }
+
+a.bg-light:hover, a.bg-light:focus,
+button.bg-light:hover,
+button.bg-light:focus {
+ background-color: #dae0e5 !important; }
+
+.bg-dark {
+ background-color: #343a40 !important; }
+
+a.bg-dark:hover, a.bg-dark:focus,
+button.bg-dark:hover,
+button.bg-dark:focus {
+ background-color: #1d2124 !important; }
+
+.bg-white {
+ background-color: #fff !important; }
+
+.bg-transparent {
+ background-color: transparent !important; }
+
+.border {
+ border: 1px solid #dee2e6 !important; }
+
+.border-top {
+ border-top: 1px solid #dee2e6 !important; }
+
+.border-right {
+ border-right: 1px solid #dee2e6 !important; }
+
+.border-bottom {
+ border-bottom: 1px solid #dee2e6 !important; }
+
+.border-left {
+ border-left: 1px solid #dee2e6 !important; }
+
+.border-0 {
+ border: 0 !important; }
+
+.border-top-0 {
+ border-top: 0 !important; }
+
+.border-right-0 {
+ border-right: 0 !important; }
+
+.border-bottom-0 {
+ border-bottom: 0 !important; }
+
+.border-left-0 {
+ border-left: 0 !important; }
+
+.border-primary {
+ border-color: #007bff !important; }
+
+.border-secondary {
+ border-color: #6c757d !important; }
+
+.border-success {
+ border-color: #28a745 !important; }
+
+.border-info {
+ border-color: #17a2b8 !important; }
+
+.border-warning {
+ border-color: #ffc107 !important; }
+
+.border-danger {
+ border-color: #dc3545 !important; }
+
+.border-light {
+ border-color: #f8f9fa !important; }
+
+.border-dark {
+ border-color: #343a40 !important; }
+
+.border-white {
+ border-color: #fff !important; }
+
+.rounded-sm {
+ border-radius: 0.2rem !important; }
+
+.rounded {
+ border-radius: 0.25rem !important; }
+
+.rounded-top {
+ border-top-left-radius: 0.25rem !important;
+ border-top-right-radius: 0.25rem !important; }
+
+.rounded-right {
+ border-top-right-radius: 0.25rem !important;
+ border-bottom-right-radius: 0.25rem !important; }
+
+.rounded-bottom {
+ border-bottom-right-radius: 0.25rem !important;
+ border-bottom-left-radius: 0.25rem !important; }
+
+.rounded-left {
+ border-top-left-radius: 0.25rem !important;
+ border-bottom-left-radius: 0.25rem !important; }
+
+.rounded-lg {
+ border-radius: 0.3rem !important; }
+
+.rounded-circle {
+ border-radius: 50% !important; }
+
+.rounded-pill {
+ border-radius: 50rem !important; }
+
+.rounded-0 {
+ border-radius: 0 !important; }
+
+.clearfix::after {
+ display: block;
+ clear: both;
+ content: ""; }
+
+.d-none {
+ display: none !important; }
+
+.d-inline {
+ display: inline !important; }
+
+.d-inline-block {
+ display: inline-block !important; }
+
+.d-block {
+ display: block !important; }
+
+.d-table {
+ display: table !important; }
+
+.d-table-row {
+ display: table-row !important; }
+
+.d-table-cell {
+ display: table-cell !important; }
+
+.d-flex {
+ display: -webkit-box !important;
+ display: -ms-flexbox !important;
+ display: flex !important; }
+
+.d-inline-flex {
+ display: -webkit-inline-box !important;
+ display: -ms-inline-flexbox !important;
+ display: inline-flex !important; }
+
+@media (min-width: 576px) {
+ .d-sm-none {
+ display: none !important; }
+ .d-sm-inline {
+ display: inline !important; }
+ .d-sm-inline-block {
+ display: inline-block !important; }
+ .d-sm-block {
+ display: block !important; }
+ .d-sm-table {
+ display: table !important; }
+ .d-sm-table-row {
+ display: table-row !important; }
+ .d-sm-table-cell {
+ display: table-cell !important; }
+ .d-sm-flex {
+ display: -webkit-box !important;
+ display: -ms-flexbox !important;
+ display: flex !important; }
+ .d-sm-inline-flex {
+ display: -webkit-inline-box !important;
+ display: -ms-inline-flexbox !important;
+ display: inline-flex !important; } }
+
+@media (min-width: 768px) {
+ .d-md-none {
+ display: none !important; }
+ .d-md-inline {
+ display: inline !important; }
+ .d-md-inline-block {
+ display: inline-block !important; }
+ .d-md-block {
+ display: block !important; }
+ .d-md-table {
+ display: table !important; }
+ .d-md-table-row {
+ display: table-row !important; }
+ .d-md-table-cell {
+ display: table-cell !important; }
+ .d-md-flex {
+ display: -webkit-box !important;
+ display: -ms-flexbox !important;
+ display: flex !important; }
+ .d-md-inline-flex {
+ display: -webkit-inline-box !important;
+ display: -ms-inline-flexbox !important;
+ display: inline-flex !important; } }
+
+@media (min-width: 992px) {
+ .d-lg-none {
+ display: none !important; }
+ .d-lg-inline {
+ display: inline !important; }
+ .d-lg-inline-block {
+ display: inline-block !important; }
+ .d-lg-block {
+ display: block !important; }
+ .d-lg-table {
+ display: table !important; }
+ .d-lg-table-row {
+ display: table-row !important; }
+ .d-lg-table-cell {
+ display: table-cell !important; }
+ .d-lg-flex {
+ display: -webkit-box !important;
+ display: -ms-flexbox !important;
+ display: flex !important; }
+ .d-lg-inline-flex {
+ display: -webkit-inline-box !important;
+ display: -ms-inline-flexbox !important;
+ display: inline-flex !important; } }
+
+@media (min-width: 1200px) {
+ .d-xl-none {
+ display: none !important; }
+ .d-xl-inline {
+ display: inline !important; }
+ .d-xl-inline-block {
+ display: inline-block !important; }
+ .d-xl-block {
+ display: block !important; }
+ .d-xl-table {
+ display: table !important; }
+ .d-xl-table-row {
+ display: table-row !important; }
+ .d-xl-table-cell {
+ display: table-cell !important; }
+ .d-xl-flex {
+ display: -webkit-box !important;
+ display: -ms-flexbox !important;
+ display: flex !important; }
+ .d-xl-inline-flex {
+ display: -webkit-inline-box !important;
+ display: -ms-inline-flexbox !important;
+ display: inline-flex !important; } }
+
+@media print {
+ .d-print-none {
+ display: none !important; }
+ .d-print-inline {
+ display: inline !important; }
+ .d-print-inline-block {
+ display: inline-block !important; }
+ .d-print-block {
+ display: block !important; }
+ .d-print-table {
+ display: table !important; }
+ .d-print-table-row {
+ display: table-row !important; }
+ .d-print-table-cell {
+ display: table-cell !important; }
+ .d-print-flex {
+ display: -webkit-box !important;
+ display: -ms-flexbox !important;
+ display: flex !important; }
+ .d-print-inline-flex {
+ display: -webkit-inline-box !important;
+ display: -ms-inline-flexbox !important;
+ display: inline-flex !important; } }
+
+.embed-responsive {
+ position: relative;
+ display: block;
+ width: 100%;
+ padding: 0;
+ overflow: hidden; }
+ .embed-responsive::before {
+ display: block;
+ content: ""; }
+ .embed-responsive .embed-responsive-item,
+ .embed-responsive iframe,
+ .embed-responsive embed,
+ .embed-responsive object,
+ .embed-responsive video {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border: 0; }
+
+.embed-responsive-21by9::before {
+ padding-top: 42.85714%; }
+
+.embed-responsive-16by9::before {
+ padding-top: 56.25%; }
+
+.embed-responsive-4by3::before {
+ padding-top: 75%; }
+
+.embed-responsive-1by1::before {
+ padding-top: 100%; }
+
+.flex-row {
+ -webkit-box-orient: horizontal !important;
+ -webkit-box-direction: normal !important;
+ -ms-flex-direction: row !important;
+ flex-direction: row !important; }
+
+.flex-column {
+ -webkit-box-orient: vertical !important;
+ -webkit-box-direction: normal !important;
+ -ms-flex-direction: column !important;
+ flex-direction: column !important; }
+
+.flex-row-reverse {
+ -webkit-box-orient: horizontal !important;
+ -webkit-box-direction: reverse !important;
+ -ms-flex-direction: row-reverse !important;
+ flex-direction: row-reverse !important; }
+
+.flex-column-reverse {
+ -webkit-box-orient: vertical !important;
+ -webkit-box-direction: reverse !important;
+ -ms-flex-direction: column-reverse !important;
+ flex-direction: column-reverse !important; }
+
+.flex-wrap {
+ -ms-flex-wrap: wrap !important;
+ flex-wrap: wrap !important; }
+
+.flex-nowrap {
+ -ms-flex-wrap: nowrap !important;
+ flex-wrap: nowrap !important; }
+
+.flex-wrap-reverse {
+ -ms-flex-wrap: wrap-reverse !important;
+ flex-wrap: wrap-reverse !important; }
+
+.flex-fill {
+ -webkit-box-flex: 1 !important;
+ -ms-flex: 1 1 auto !important;
+ flex: 1 1 auto !important; }
+
+.flex-grow-0 {
+ -webkit-box-flex: 0 !important;
+ -ms-flex-positive: 0 !important;
+ flex-grow: 0 !important; }
+
+.flex-grow-1 {
+ -webkit-box-flex: 1 !important;
+ -ms-flex-positive: 1 !important;
+ flex-grow: 1 !important; }
+
+.flex-shrink-0 {
+ -ms-flex-negative: 0 !important;
+ flex-shrink: 0 !important; }
+
+.flex-shrink-1 {
+ -ms-flex-negative: 1 !important;
+ flex-shrink: 1 !important; }
+
+.justify-content-start {
+ -webkit-box-pack: start !important;
+ -ms-flex-pack: start !important;
+ justify-content: flex-start !important; }
+
+.justify-content-end {
+ -webkit-box-pack: end !important;
+ -ms-flex-pack: end !important;
+ justify-content: flex-end !important; }
+
+.justify-content-center {
+ -webkit-box-pack: center !important;
+ -ms-flex-pack: center !important;
+ justify-content: center !important; }
+
+.justify-content-between {
+ -webkit-box-pack: justify !important;
+ -ms-flex-pack: justify !important;
+ justify-content: space-between !important; }
+
+.justify-content-around {
+ -ms-flex-pack: distribute !important;
+ justify-content: space-around !important; }
+
+.align-items-start {
+ -webkit-box-align: start !important;
+ -ms-flex-align: start !important;
+ align-items: flex-start !important; }
+
+.align-items-end {
+ -webkit-box-align: end !important;
+ -ms-flex-align: end !important;
+ align-items: flex-end !important; }
+
+.align-items-center {
+ -webkit-box-align: center !important;
+ -ms-flex-align: center !important;
+ align-items: center !important; }
+
+.align-items-baseline {
+ -webkit-box-align: baseline !important;
+ -ms-flex-align: baseline !important;
+ align-items: baseline !important; }
+
+.align-items-stretch {
+ -webkit-box-align: stretch !important;
+ -ms-flex-align: stretch !important;
+ align-items: stretch !important; }
+
+.align-content-start {
+ -ms-flex-line-pack: start !important;
+ align-content: flex-start !important; }
+
+.align-content-end {
+ -ms-flex-line-pack: end !important;
+ align-content: flex-end !important; }
+
+.align-content-center {
+ -ms-flex-line-pack: center !important;
+ align-content: center !important; }
+
+.align-content-between {
+ -ms-flex-line-pack: justify !important;
+ align-content: space-between !important; }
+
+.align-content-around {
+ -ms-flex-line-pack: distribute !important;
+ align-content: space-around !important; }
+
+.align-content-stretch {
+ -ms-flex-line-pack: stretch !important;
+ align-content: stretch !important; }
+
+.align-self-auto {
+ -ms-flex-item-align: auto !important;
+ -ms-grid-row-align: auto !important;
+ align-self: auto !important; }
+
+.align-self-start {
+ -ms-flex-item-align: start !important;
+ align-self: flex-start !important; }
+
+.align-self-end {
+ -ms-flex-item-align: end !important;
+ align-self: flex-end !important; }
+
+.align-self-center {
+ -ms-flex-item-align: center !important;
+ -ms-grid-row-align: center !important;
+ align-self: center !important; }
+
+.align-self-baseline {
+ -ms-flex-item-align: baseline !important;
+ align-self: baseline !important; }
+
+.align-self-stretch {
+ -ms-flex-item-align: stretch !important;
+ -ms-grid-row-align: stretch !important;
+ align-self: stretch !important; }
+
+@media (min-width: 576px) {
+ .flex-sm-row {
+ -webkit-box-orient: horizontal !important;
+ -webkit-box-direction: normal !important;
+ -ms-flex-direction: row !important;
+ flex-direction: row !important; }
+ .flex-sm-column {
+ -webkit-box-orient: vertical !important;
+ -webkit-box-direction: normal !important;
+ -ms-flex-direction: column !important;
+ flex-direction: column !important; }
+ .flex-sm-row-reverse {
+ -webkit-box-orient: horizontal !important;
+ -webkit-box-direction: reverse !important;
+ -ms-flex-direction: row-reverse !important;
+ flex-direction: row-reverse !important; }
+ .flex-sm-column-reverse {
+ -webkit-box-orient: vertical !important;
+ -webkit-box-direction: reverse !important;
+ -ms-flex-direction: column-reverse !important;
+ flex-direction: column-reverse !important; }
+ .flex-sm-wrap {
+ -ms-flex-wrap: wrap !important;
+ flex-wrap: wrap !important; }
+ .flex-sm-nowrap {
+ -ms-flex-wrap: nowrap !important;
+ flex-wrap: nowrap !important; }
+ .flex-sm-wrap-reverse {
+ -ms-flex-wrap: wrap-reverse !important;
+ flex-wrap: wrap-reverse !important; }
+ .flex-sm-fill {
+ -webkit-box-flex: 1 !important;
+ -ms-flex: 1 1 auto !important;
+ flex: 1 1 auto !important; }
+ .flex-sm-grow-0 {
+ -webkit-box-flex: 0 !important;
+ -ms-flex-positive: 0 !important;
+ flex-grow: 0 !important; }
+ .flex-sm-grow-1 {
+ -webkit-box-flex: 1 !important;
+ -ms-flex-positive: 1 !important;
+ flex-grow: 1 !important; }
+ .flex-sm-shrink-0 {
+ -ms-flex-negative: 0 !important;
+ flex-shrink: 0 !important; }
+ .flex-sm-shrink-1 {
+ -ms-flex-negative: 1 !important;
+ flex-shrink: 1 !important; }
+ .justify-content-sm-start {
+ -webkit-box-pack: start !important;
+ -ms-flex-pack: start !important;
+ justify-content: flex-start !important; }
+ .justify-content-sm-end {
+ -webkit-box-pack: end !important;
+ -ms-flex-pack: end !important;
+ justify-content: flex-end !important; }
+ .justify-content-sm-center {
+ -webkit-box-pack: center !important;
+ -ms-flex-pack: center !important;
+ justify-content: center !important; }
+ .justify-content-sm-between {
+ -webkit-box-pack: justify !important;
+ -ms-flex-pack: justify !important;
+ justify-content: space-between !important; }
+ .justify-content-sm-around {
+ -ms-flex-pack: distribute !important;
+ justify-content: space-around !important; }
+ .align-items-sm-start {
+ -webkit-box-align: start !important;
+ -ms-flex-align: start !important;
+ align-items: flex-start !important; }
+ .align-items-sm-end {
+ -webkit-box-align: end !important;
+ -ms-flex-align: end !important;
+ align-items: flex-end !important; }
+ .align-items-sm-center {
+ -webkit-box-align: center !important;
+ -ms-flex-align: center !important;
+ align-items: center !important; }
+ .align-items-sm-baseline {
+ -webkit-box-align: baseline !important;
+ -ms-flex-align: baseline !important;
+ align-items: baseline !important; }
+ .align-items-sm-stretch {
+ -webkit-box-align: stretch !important;
+ -ms-flex-align: stretch !important;
+ align-items: stretch !important; }
+ .align-content-sm-start {
+ -ms-flex-line-pack: start !important;
+ align-content: flex-start !important; }
+ .align-content-sm-end {
+ -ms-flex-line-pack: end !important;
+ align-content: flex-end !important; }
+ .align-content-sm-center {
+ -ms-flex-line-pack: center !important;
+ align-content: center !important; }
+ .align-content-sm-between {
+ -ms-flex-line-pack: justify !important;
+ align-content: space-between !important; }
+ .align-content-sm-around {
+ -ms-flex-line-pack: distribute !important;
+ align-content: space-around !important; }
+ .align-content-sm-stretch {
+ -ms-flex-line-pack: stretch !important;
+ align-content: stretch !important; }
+ .align-self-sm-auto {
+ -ms-flex-item-align: auto !important;
+ -ms-grid-row-align: auto !important;
+ align-self: auto !important; }
+ .align-self-sm-start {
+ -ms-flex-item-align: start !important;
+ align-self: flex-start !important; }
+ .align-self-sm-end {
+ -ms-flex-item-align: end !important;
+ align-self: flex-end !important; }
+ .align-self-sm-center {
+ -ms-flex-item-align: center !important;
+ -ms-grid-row-align: center !important;
+ align-self: center !important; }
+ .align-self-sm-baseline {
+ -ms-flex-item-align: baseline !important;
+ align-self: baseline !important; }
+ .align-self-sm-stretch {
+ -ms-flex-item-align: stretch !important;
+ -ms-grid-row-align: stretch !important;
+ align-self: stretch !important; } }
+
+@media (min-width: 768px) {
+ .flex-md-row {
+ -webkit-box-orient: horizontal !important;
+ -webkit-box-direction: normal !important;
+ -ms-flex-direction: row !important;
+ flex-direction: row !important; }
+ .flex-md-column {
+ -webkit-box-orient: vertical !important;
+ -webkit-box-direction: normal !important;
+ -ms-flex-direction: column !important;
+ flex-direction: column !important; }
+ .flex-md-row-reverse {
+ -webkit-box-orient: horizontal !important;
+ -webkit-box-direction: reverse !important;
+ -ms-flex-direction: row-reverse !important;
+ flex-direction: row-reverse !important; }
+ .flex-md-column-reverse {
+ -webkit-box-orient: vertical !important;
+ -webkit-box-direction: reverse !important;
+ -ms-flex-direction: column-reverse !important;
+ flex-direction: column-reverse !important; }
+ .flex-md-wrap {
+ -ms-flex-wrap: wrap !important;
+ flex-wrap: wrap !important; }
+ .flex-md-nowrap {
+ -ms-flex-wrap: nowrap !important;
+ flex-wrap: nowrap !important; }
+ .flex-md-wrap-reverse {
+ -ms-flex-wrap: wrap-reverse !important;
+ flex-wrap: wrap-reverse !important; }
+ .flex-md-fill {
+ -webkit-box-flex: 1 !important;
+ -ms-flex: 1 1 auto !important;
+ flex: 1 1 auto !important; }
+ .flex-md-grow-0 {
+ -webkit-box-flex: 0 !important;
+ -ms-flex-positive: 0 !important;
+ flex-grow: 0 !important; }
+ .flex-md-grow-1 {
+ -webkit-box-flex: 1 !important;
+ -ms-flex-positive: 1 !important;
+ flex-grow: 1 !important; }
+ .flex-md-shrink-0 {
+ -ms-flex-negative: 0 !important;
+ flex-shrink: 0 !important; }
+ .flex-md-shrink-1 {
+ -ms-flex-negative: 1 !important;
+ flex-shrink: 1 !important; }
+ .justify-content-md-start {
+ -webkit-box-pack: start !important;
+ -ms-flex-pack: start !important;
+ justify-content: flex-start !important; }
+ .justify-content-md-end {
+ -webkit-box-pack: end !important;
+ -ms-flex-pack: end !important;
+ justify-content: flex-end !important; }
+ .justify-content-md-center {
+ -webkit-box-pack: center !important;
+ -ms-flex-pack: center !important;
+ justify-content: center !important; }
+ .justify-content-md-between {
+ -webkit-box-pack: justify !important;
+ -ms-flex-pack: justify !important;
+ justify-content: space-between !important; }
+ .justify-content-md-around {
+ -ms-flex-pack: distribute !important;
+ justify-content: space-around !important; }
+ .align-items-md-start {
+ -webkit-box-align: start !important;
+ -ms-flex-align: start !important;
+ align-items: flex-start !important; }
+ .align-items-md-end {
+ -webkit-box-align: end !important;
+ -ms-flex-align: end !important;
+ align-items: flex-end !important; }
+ .align-items-md-center {
+ -webkit-box-align: center !important;
+ -ms-flex-align: center !important;
+ align-items: center !important; }
+ .align-items-md-baseline {
+ -webkit-box-align: baseline !important;
+ -ms-flex-align: baseline !important;
+ align-items: baseline !important; }
+ .align-items-md-stretch {
+ -webkit-box-align: stretch !important;
+ -ms-flex-align: stretch !important;
+ align-items: stretch !important; }
+ .align-content-md-start {
+ -ms-flex-line-pack: start !important;
+ align-content: flex-start !important; }
+ .align-content-md-end {
+ -ms-flex-line-pack: end !important;
+ align-content: flex-end !important; }
+ .align-content-md-center {
+ -ms-flex-line-pack: center !important;
+ align-content: center !important; }
+ .align-content-md-between {
+ -ms-flex-line-pack: justify !important;
+ align-content: space-between !important; }
+ .align-content-md-around {
+ -ms-flex-line-pack: distribute !important;
+ align-content: space-around !important; }
+ .align-content-md-stretch {
+ -ms-flex-line-pack: stretch !important;
+ align-content: stretch !important; }
+ .align-self-md-auto {
+ -ms-flex-item-align: auto !important;
+ -ms-grid-row-align: auto !important;
+ align-self: auto !important; }
+ .align-self-md-start {
+ -ms-flex-item-align: start !important;
+ align-self: flex-start !important; }
+ .align-self-md-end {
+ -ms-flex-item-align: end !important;
+ align-self: flex-end !important; }
+ .align-self-md-center {
+ -ms-flex-item-align: center !important;
+ -ms-grid-row-align: center !important;
+ align-self: center !important; }
+ .align-self-md-baseline {
+ -ms-flex-item-align: baseline !important;
+ align-self: baseline !important; }
+ .align-self-md-stretch {
+ -ms-flex-item-align: stretch !important;
+ -ms-grid-row-align: stretch !important;
+ align-self: stretch !important; } }
+
+@media (min-width: 992px) {
+ .flex-lg-row {
+ -webkit-box-orient: horizontal !important;
+ -webkit-box-direction: normal !important;
+ -ms-flex-direction: row !important;
+ flex-direction: row !important; }
+ .flex-lg-column {
+ -webkit-box-orient: vertical !important;
+ -webkit-box-direction: normal !important;
+ -ms-flex-direction: column !important;
+ flex-direction: column !important; }
+ .flex-lg-row-reverse {
+ -webkit-box-orient: horizontal !important;
+ -webkit-box-direction: reverse !important;
+ -ms-flex-direction: row-reverse !important;
+ flex-direction: row-reverse !important; }
+ .flex-lg-column-reverse {
+ -webkit-box-orient: vertical !important;
+ -webkit-box-direction: reverse !important;
+ -ms-flex-direction: column-reverse !important;
+ flex-direction: column-reverse !important; }
+ .flex-lg-wrap {
+ -ms-flex-wrap: wrap !important;
+ flex-wrap: wrap !important; }
+ .flex-lg-nowrap {
+ -ms-flex-wrap: nowrap !important;
+ flex-wrap: nowrap !important; }
+ .flex-lg-wrap-reverse {
+ -ms-flex-wrap: wrap-reverse !important;
+ flex-wrap: wrap-reverse !important; }
+ .flex-lg-fill {
+ -webkit-box-flex: 1 !important;
+ -ms-flex: 1 1 auto !important;
+ flex: 1 1 auto !important; }
+ .flex-lg-grow-0 {
+ -webkit-box-flex: 0 !important;
+ -ms-flex-positive: 0 !important;
+ flex-grow: 0 !important; }
+ .flex-lg-grow-1 {
+ -webkit-box-flex: 1 !important;
+ -ms-flex-positive: 1 !important;
+ flex-grow: 1 !important; }
+ .flex-lg-shrink-0 {
+ -ms-flex-negative: 0 !important;
+ flex-shrink: 0 !important; }
+ .flex-lg-shrink-1 {
+ -ms-flex-negative: 1 !important;
+ flex-shrink: 1 !important; }
+ .justify-content-lg-start {
+ -webkit-box-pack: start !important;
+ -ms-flex-pack: start !important;
+ justify-content: flex-start !important; }
+ .justify-content-lg-end {
+ -webkit-box-pack: end !important;
+ -ms-flex-pack: end !important;
+ justify-content: flex-end !important; }
+ .justify-content-lg-center {
+ -webkit-box-pack: center !important;
+ -ms-flex-pack: center !important;
+ justify-content: center !important; }
+ .justify-content-lg-between {
+ -webkit-box-pack: justify !important;
+ -ms-flex-pack: justify !important;
+ justify-content: space-between !important; }
+ .justify-content-lg-around {
+ -ms-flex-pack: distribute !important;
+ justify-content: space-around !important; }
+ .align-items-lg-start {
+ -webkit-box-align: start !important;
+ -ms-flex-align: start !important;
+ align-items: flex-start !important; }
+ .align-items-lg-end {
+ -webkit-box-align: end !important;
+ -ms-flex-align: end !important;
+ align-items: flex-end !important; }
+ .align-items-lg-center {
+ -webkit-box-align: center !important;
+ -ms-flex-align: center !important;
+ align-items: center !important; }
+ .align-items-lg-baseline {
+ -webkit-box-align: baseline !important;
+ -ms-flex-align: baseline !important;
+ align-items: baseline !important; }
+ .align-items-lg-stretch {
+ -webkit-box-align: stretch !important;
+ -ms-flex-align: stretch !important;
+ align-items: stretch !important; }
+ .align-content-lg-start {
+ -ms-flex-line-pack: start !important;
+ align-content: flex-start !important; }
+ .align-content-lg-end {
+ -ms-flex-line-pack: end !important;
+ align-content: flex-end !important; }
+ .align-content-lg-center {
+ -ms-flex-line-pack: center !important;
+ align-content: center !important; }
+ .align-content-lg-between {
+ -ms-flex-line-pack: justify !important;
+ align-content: space-between !important; }
+ .align-content-lg-around {
+ -ms-flex-line-pack: distribute !important;
+ align-content: space-around !important; }
+ .align-content-lg-stretch {
+ -ms-flex-line-pack: stretch !important;
+ align-content: stretch !important; }
+ .align-self-lg-auto {
+ -ms-flex-item-align: auto !important;
+ -ms-grid-row-align: auto !important;
+ align-self: auto !important; }
+ .align-self-lg-start {
+ -ms-flex-item-align: start !important;
+ align-self: flex-start !important; }
+ .align-self-lg-end {
+ -ms-flex-item-align: end !important;
+ align-self: flex-end !important; }
+ .align-self-lg-center {
+ -ms-flex-item-align: center !important;
+ -ms-grid-row-align: center !important;
+ align-self: center !important; }
+ .align-self-lg-baseline {
+ -ms-flex-item-align: baseline !important;
+ align-self: baseline !important; }
+ .align-self-lg-stretch {
+ -ms-flex-item-align: stretch !important;
+ -ms-grid-row-align: stretch !important;
+ align-self: stretch !important; } }
+
+@media (min-width: 1200px) {
+ .flex-xl-row {
+ -webkit-box-orient: horizontal !important;
+ -webkit-box-direction: normal !important;
+ -ms-flex-direction: row !important;
+ flex-direction: row !important; }
+ .flex-xl-column {
+ -webkit-box-orient: vertical !important;
+ -webkit-box-direction: normal !important;
+ -ms-flex-direction: column !important;
+ flex-direction: column !important; }
+ .flex-xl-row-reverse {
+ -webkit-box-orient: horizontal !important;
+ -webkit-box-direction: reverse !important;
+ -ms-flex-direction: row-reverse !important;
+ flex-direction: row-reverse !important; }
+ .flex-xl-column-reverse {
+ -webkit-box-orient: vertical !important;
+ -webkit-box-direction: reverse !important;
+ -ms-flex-direction: column-reverse !important;
+ flex-direction: column-reverse !important; }
+ .flex-xl-wrap {
+ -ms-flex-wrap: wrap !important;
+ flex-wrap: wrap !important; }
+ .flex-xl-nowrap {
+ -ms-flex-wrap: nowrap !important;
+ flex-wrap: nowrap !important; }
+ .flex-xl-wrap-reverse {
+ -ms-flex-wrap: wrap-reverse !important;
+ flex-wrap: wrap-reverse !important; }
+ .flex-xl-fill {
+ -webkit-box-flex: 1 !important;
+ -ms-flex: 1 1 auto !important;
+ flex: 1 1 auto !important; }
+ .flex-xl-grow-0 {
+ -webkit-box-flex: 0 !important;
+ -ms-flex-positive: 0 !important;
+ flex-grow: 0 !important; }
+ .flex-xl-grow-1 {
+ -webkit-box-flex: 1 !important;
+ -ms-flex-positive: 1 !important;
+ flex-grow: 1 !important; }
+ .flex-xl-shrink-0 {
+ -ms-flex-negative: 0 !important;
+ flex-shrink: 0 !important; }
+ .flex-xl-shrink-1 {
+ -ms-flex-negative: 1 !important;
+ flex-shrink: 1 !important; }
+ .justify-content-xl-start {
+ -webkit-box-pack: start !important;
+ -ms-flex-pack: start !important;
+ justify-content: flex-start !important; }
+ .justify-content-xl-end {
+ -webkit-box-pack: end !important;
+ -ms-flex-pack: end !important;
+ justify-content: flex-end !important; }
+ .justify-content-xl-center {
+ -webkit-box-pack: center !important;
+ -ms-flex-pack: center !important;
+ justify-content: center !important; }
+ .justify-content-xl-between {
+ -webkit-box-pack: justify !important;
+ -ms-flex-pack: justify !important;
+ justify-content: space-between !important; }
+ .justify-content-xl-around {
+ -ms-flex-pack: distribute !important;
+ justify-content: space-around !important; }
+ .align-items-xl-start {
+ -webkit-box-align: start !important;
+ -ms-flex-align: start !important;
+ align-items: flex-start !important; }
+ .align-items-xl-end {
+ -webkit-box-align: end !important;
+ -ms-flex-align: end !important;
+ align-items: flex-end !important; }
+ .align-items-xl-center {
+ -webkit-box-align: center !important;
+ -ms-flex-align: center !important;
+ align-items: center !important; }
+ .align-items-xl-baseline {
+ -webkit-box-align: baseline !important;
+ -ms-flex-align: baseline !important;
+ align-items: baseline !important; }
+ .align-items-xl-stretch {
+ -webkit-box-align: stretch !important;
+ -ms-flex-align: stretch !important;
+ align-items: stretch !important; }
+ .align-content-xl-start {
+ -ms-flex-line-pack: start !important;
+ align-content: flex-start !important; }
+ .align-content-xl-end {
+ -ms-flex-line-pack: end !important;
+ align-content: flex-end !important; }
+ .align-content-xl-center {
+ -ms-flex-line-pack: center !important;
+ align-content: center !important; }
+ .align-content-xl-between {
+ -ms-flex-line-pack: justify !important;
+ align-content: space-between !important; }
+ .align-content-xl-around {
+ -ms-flex-line-pack: distribute !important;
+ align-content: space-around !important; }
+ .align-content-xl-stretch {
+ -ms-flex-line-pack: stretch !important;
+ align-content: stretch !important; }
+ .align-self-xl-auto {
+ -ms-flex-item-align: auto !important;
+ -ms-grid-row-align: auto !important;
+ align-self: auto !important; }
+ .align-self-xl-start {
+ -ms-flex-item-align: start !important;
+ align-self: flex-start !important; }
+ .align-self-xl-end {
+ -ms-flex-item-align: end !important;
+ align-self: flex-end !important; }
+ .align-self-xl-center {
+ -ms-flex-item-align: center !important;
+ -ms-grid-row-align: center !important;
+ align-self: center !important; }
+ .align-self-xl-baseline {
+ -ms-flex-item-align: baseline !important;
+ align-self: baseline !important; }
+ .align-self-xl-stretch {
+ -ms-flex-item-align: stretch !important;
+ -ms-grid-row-align: stretch !important;
+ align-self: stretch !important; } }
+
+.float-left {
+ float: left !important; }
+
+.float-right {
+ float: right !important; }
+
+.float-none {
+ float: none !important; }
+
+@media (min-width: 576px) {
+ .float-sm-left {
+ float: left !important; }
+ .float-sm-right {
+ float: right !important; }
+ .float-sm-none {
+ float: none !important; } }
+
+@media (min-width: 768px) {
+ .float-md-left {
+ float: left !important; }
+ .float-md-right {
+ float: right !important; }
+ .float-md-none {
+ float: none !important; } }
+
+@media (min-width: 992px) {
+ .float-lg-left {
+ float: left !important; }
+ .float-lg-right {
+ float: right !important; }
+ .float-lg-none {
+ float: none !important; } }
+
+@media (min-width: 1200px) {
+ .float-xl-left {
+ float: left !important; }
+ .float-xl-right {
+ float: right !important; }
+ .float-xl-none {
+ float: none !important; } }
+
+.overflow-auto {
+ overflow: auto !important; }
+
+.overflow-hidden {
+ overflow: hidden !important; }
+
+.position-static {
+ position: static !important; }
+
+.position-relative {
+ position: relative !important; }
+
+.position-absolute {
+ position: absolute !important; }
+
+.position-fixed {
+ position: fixed !important; }
+
+.position-sticky {
+ position: -webkit-sticky !important;
+ position: sticky !important; }
+
+.fixed-top {
+ position: fixed;
+ top: 0;
+ right: 0;
+ left: 0;
+ z-index: 1030; }
+
+.fixed-bottom {
+ position: fixed;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1030; }
+
+@supports ((position: -webkit-sticky) or (position: sticky)) {
+ .sticky-top {
+ position: -webkit-sticky;
+ position: sticky;
+ top: 0;
+ z-index: 1020; } }
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ white-space: nowrap;
+ border: 0; }
+
+.sr-only-focusable:active, .sr-only-focusable:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ overflow: visible;
+ clip: auto;
+ white-space: normal; }
+
+.shadow-sm {
+ -webkit-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;
+ box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; }
+
+.shadow {
+ -webkit-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
+ box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; }
+
+.shadow-lg {
+ -webkit-box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;
+ box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; }
+
+.shadow-none {
+ -webkit-box-shadow: none !important;
+ box-shadow: none !important; }
+
+.w-25 {
+ width: 25% !important; }
+
+.w-50 {
+ width: 50% !important; }
+
+.w-75 {
+ width: 75% !important; }
+
+.w-100 {
+ width: 100% !important; }
+
+.w-auto {
+ width: auto !important; }
+
+.h-25 {
+ height: 25% !important; }
+
+.h-50 {
+ height: 50% !important; }
+
+.h-75 {
+ height: 75% !important; }
+
+.h-100 {
+ height: 100% !important; }
+
+.h-auto {
+ height: auto !important; }
+
+.mw-100 {
+ max-width: 100% !important; }
+
+.mh-100 {
+ max-height: 100% !important; }
+
+.min-vw-100 {
+ min-width: 100vw !important; }
+
+.min-vh-100 {
+ min-height: 100vh !important; }
+
+.vw-100 {
+ width: 100vw !important; }
+
+.vh-100 {
+ height: 100vh !important; }
+
+.stretched-link::after {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1;
+ pointer-events: auto;
+ content: "";
+ background-color: rgba(0, 0, 0, 0); }
+
+.m-0 {
+ margin: 0 !important; }
+
+.mt-0,
+.my-0 {
+ margin-top: 0 !important; }
+
+.mr-0,
+.mx-0 {
+ margin-right: 0 !important; }
+
+.mb-0,
+.my-0 {
+ margin-bottom: 0 !important; }
+
+.ml-0,
+.mx-0 {
+ margin-left: 0 !important; }
+
+.m-1 {
+ margin: 0.25rem !important; }
+
+.mt-1,
+.my-1 {
+ margin-top: 0.25rem !important; }
+
+.mr-1,
+.mx-1 {
+ margin-right: 0.25rem !important; }
+
+.mb-1,
+.my-1 {
+ margin-bottom: 0.25rem !important; }
+
+.ml-1,
+.mx-1 {
+ margin-left: 0.25rem !important; }
+
+.m-2 {
+ margin: 0.5rem !important; }
+
+.mt-2,
+.my-2 {
+ margin-top: 0.5rem !important; }
+
+.mr-2,
+.mx-2 {
+ margin-right: 0.5rem !important; }
+
+.mb-2,
+.my-2 {
+ margin-bottom: 0.5rem !important; }
+
+.ml-2,
+.mx-2 {
+ margin-left: 0.5rem !important; }
+
+.m-3 {
+ margin: 1rem !important; }
+
+.mt-3,
+.my-3 {
+ margin-top: 1rem !important; }
+
+.mr-3,
+.mx-3 {
+ margin-right: 1rem !important; }
+
+.mb-3,
+.my-3 {
+ margin-bottom: 1rem !important; }
+
+.ml-3,
+.mx-3 {
+ margin-left: 1rem !important; }
+
+.m-4 {
+ margin: 1.5rem !important; }
+
+.mt-4,
+.my-4 {
+ margin-top: 1.5rem !important; }
+
+.mr-4,
+.mx-4 {
+ margin-right: 1.5rem !important; }
+
+.mb-4,
+.my-4 {
+ margin-bottom: 1.5rem !important; }
+
+.ml-4,
+.mx-4 {
+ margin-left: 1.5rem !important; }
+
+.m-5 {
+ margin: 3rem !important; }
+
+.mt-5,
+.my-5 {
+ margin-top: 3rem !important; }
+
+.mr-5,
+.mx-5 {
+ margin-right: 3rem !important; }
+
+.mb-5,
+.my-5 {
+ margin-bottom: 3rem !important; }
+
+.ml-5,
+.mx-5 {
+ margin-left: 3rem !important; }
+
+.p-0 {
+ padding: 0 !important; }
+
+.pt-0,
+.py-0 {
+ padding-top: 0 !important; }
+
+.pr-0,
+.px-0 {
+ padding-right: 0 !important; }
+
+.pb-0,
+.py-0 {
+ padding-bottom: 0 !important; }
+
+.pl-0,
+.px-0 {
+ padding-left: 0 !important; }
+
+.p-1 {
+ padding: 0.25rem !important; }
+
+.pt-1,
+.py-1 {
+ padding-top: 0.25rem !important; }
+
+.pr-1,
+.px-1 {
+ padding-right: 0.25rem !important; }
+
+.pb-1,
+.py-1 {
+ padding-bottom: 0.25rem !important; }
+
+.pl-1,
+.px-1 {
+ padding-left: 0.25rem !important; }
+
+.p-2 {
+ padding: 0.5rem !important; }
+
+.pt-2,
+.py-2 {
+ padding-top: 0.5rem !important; }
+
+.pr-2,
+.px-2 {
+ padding-right: 0.5rem !important; }
+
+.pb-2,
+.py-2 {
+ padding-bottom: 0.5rem !important; }
+
+.pl-2,
+.px-2 {
+ padding-left: 0.5rem !important; }
+
+.p-3 {
+ padding: 1rem !important; }
+
+.pt-3,
+.py-3 {
+ padding-top: 1rem !important; }
+
+.pr-3,
+.px-3 {
+ padding-right: 1rem !important; }
+
+.pb-3,
+.py-3 {
+ padding-bottom: 1rem !important; }
+
+.pl-3,
+.px-3 {
+ padding-left: 1rem !important; }
+
+.p-4 {
+ padding: 1.5rem !important; }
+
+.pt-4,
+.py-4 {
+ padding-top: 1.5rem !important; }
+
+.pr-4,
+.px-4 {
+ padding-right: 1.5rem !important; }
+
+.pb-4,
+.py-4 {
+ padding-bottom: 1.5rem !important; }
+
+.pl-4,
+.px-4 {
+ padding-left: 1.5rem !important; }
+
+.p-5 {
+ padding: 3rem !important; }
+
+.pt-5,
+.py-5 {
+ padding-top: 3rem !important; }
+
+.pr-5,
+.px-5 {
+ padding-right: 3rem !important; }
+
+.pb-5,
+.py-5 {
+ padding-bottom: 3rem !important; }
+
+.pl-5,
+.px-5 {
+ padding-left: 3rem !important; }
+
+.m-n1 {
+ margin: -0.25rem !important; }
+
+.mt-n1,
+.my-n1 {
+ margin-top: -0.25rem !important; }
+
+.mr-n1,
+.mx-n1 {
+ margin-right: -0.25rem !important; }
+
+.mb-n1,
+.my-n1 {
+ margin-bottom: -0.25rem !important; }
+
+.ml-n1,
+.mx-n1 {
+ margin-left: -0.25rem !important; }
+
+.m-n2 {
+ margin: -0.5rem !important; }
+
+.mt-n2,
+.my-n2 {
+ margin-top: -0.5rem !important; }
+
+.mr-n2,
+.mx-n2 {
+ margin-right: -0.5rem !important; }
+
+.mb-n2,
+.my-n2 {
+ margin-bottom: -0.5rem !important; }
+
+.ml-n2,
+.mx-n2 {
+ margin-left: -0.5rem !important; }
+
+.m-n3 {
+ margin: -1rem !important; }
+
+.mt-n3,
+.my-n3 {
+ margin-top: -1rem !important; }
+
+.mr-n3,
+.mx-n3 {
+ margin-right: -1rem !important; }
+
+.mb-n3,
+.my-n3 {
+ margin-bottom: -1rem !important; }
+
+.ml-n3,
+.mx-n3 {
+ margin-left: -1rem !important; }
+
+.m-n4 {
+ margin: -1.5rem !important; }
+
+.mt-n4,
+.my-n4 {
+ margin-top: -1.5rem !important; }
+
+.mr-n4,
+.mx-n4 {
+ margin-right: -1.5rem !important; }
+
+.mb-n4,
+.my-n4 {
+ margin-bottom: -1.5rem !important; }
+
+.ml-n4,
+.mx-n4 {
+ margin-left: -1.5rem !important; }
+
+.m-n5 {
+ margin: -3rem !important; }
+
+.mt-n5,
+.my-n5 {
+ margin-top: -3rem !important; }
+
+.mr-n5,
+.mx-n5 {
+ margin-right: -3rem !important; }
+
+.mb-n5,
+.my-n5 {
+ margin-bottom: -3rem !important; }
+
+.ml-n5,
+.mx-n5 {
+ margin-left: -3rem !important; }
+
+.m-auto {
+ margin: auto !important; }
+
+.mt-auto,
+.my-auto {
+ margin-top: auto !important; }
+
+.mr-auto,
+.mx-auto {
+ margin-right: auto !important; }
+
+.mb-auto,
+.my-auto {
+ margin-bottom: auto !important; }
+
+.ml-auto,
+.mx-auto {
+ margin-left: auto !important; }
+
+@media (min-width: 576px) {
+ .m-sm-0 {
+ margin: 0 !important; }
+ .mt-sm-0,
+ .my-sm-0 {
+ margin-top: 0 !important; }
+ .mr-sm-0,
+ .mx-sm-0 {
+ margin-right: 0 !important; }
+ .mb-sm-0,
+ .my-sm-0 {
+ margin-bottom: 0 !important; }
+ .ml-sm-0,
+ .mx-sm-0 {
+ margin-left: 0 !important; }
+ .m-sm-1 {
+ margin: 0.25rem !important; }
+ .mt-sm-1,
+ .my-sm-1 {
+ margin-top: 0.25rem !important; }
+ .mr-sm-1,
+ .mx-sm-1 {
+ margin-right: 0.25rem !important; }
+ .mb-sm-1,
+ .my-sm-1 {
+ margin-bottom: 0.25rem !important; }
+ .ml-sm-1,
+ .mx-sm-1 {
+ margin-left: 0.25rem !important; }
+ .m-sm-2 {
+ margin: 0.5rem !important; }
+ .mt-sm-2,
+ .my-sm-2 {
+ margin-top: 0.5rem !important; }
+ .mr-sm-2,
+ .mx-sm-2 {
+ margin-right: 0.5rem !important; }
+ .mb-sm-2,
+ .my-sm-2 {
+ margin-bottom: 0.5rem !important; }
+ .ml-sm-2,
+ .mx-sm-2 {
+ margin-left: 0.5rem !important; }
+ .m-sm-3 {
+ margin: 1rem !important; }
+ .mt-sm-3,
+ .my-sm-3 {
+ margin-top: 1rem !important; }
+ .mr-sm-3,
+ .mx-sm-3 {
+ margin-right: 1rem !important; }
+ .mb-sm-3,
+ .my-sm-3 {
+ margin-bottom: 1rem !important; }
+ .ml-sm-3,
+ .mx-sm-3 {
+ margin-left: 1rem !important; }
+ .m-sm-4 {
+ margin: 1.5rem !important; }
+ .mt-sm-4,
+ .my-sm-4 {
+ margin-top: 1.5rem !important; }
+ .mr-sm-4,
+ .mx-sm-4 {
+ margin-right: 1.5rem !important; }
+ .mb-sm-4,
+ .my-sm-4 {
+ margin-bottom: 1.5rem !important; }
+ .ml-sm-4,
+ .mx-sm-4 {
+ margin-left: 1.5rem !important; }
+ .m-sm-5 {
+ margin: 3rem !important; }
+ .mt-sm-5,
+ .my-sm-5 {
+ margin-top: 3rem !important; }
+ .mr-sm-5,
+ .mx-sm-5 {
+ margin-right: 3rem !important; }
+ .mb-sm-5,
+ .my-sm-5 {
+ margin-bottom: 3rem !important; }
+ .ml-sm-5,
+ .mx-sm-5 {
+ margin-left: 3rem !important; }
+ .p-sm-0 {
+ padding: 0 !important; }
+ .pt-sm-0,
+ .py-sm-0 {
+ padding-top: 0 !important; }
+ .pr-sm-0,
+ .px-sm-0 {
+ padding-right: 0 !important; }
+ .pb-sm-0,
+ .py-sm-0 {
+ padding-bottom: 0 !important; }
+ .pl-sm-0,
+ .px-sm-0 {
+ padding-left: 0 !important; }
+ .p-sm-1 {
+ padding: 0.25rem !important; }
+ .pt-sm-1,
+ .py-sm-1 {
+ padding-top: 0.25rem !important; }
+ .pr-sm-1,
+ .px-sm-1 {
+ padding-right: 0.25rem !important; }
+ .pb-sm-1,
+ .py-sm-1 {
+ padding-bottom: 0.25rem !important; }
+ .pl-sm-1,
+ .px-sm-1 {
+ padding-left: 0.25rem !important; }
+ .p-sm-2 {
+ padding: 0.5rem !important; }
+ .pt-sm-2,
+ .py-sm-2 {
+ padding-top: 0.5rem !important; }
+ .pr-sm-2,
+ .px-sm-2 {
+ padding-right: 0.5rem !important; }
+ .pb-sm-2,
+ .py-sm-2 {
+ padding-bottom: 0.5rem !important; }
+ .pl-sm-2,
+ .px-sm-2 {
+ padding-left: 0.5rem !important; }
+ .p-sm-3 {
+ padding: 1rem !important; }
+ .pt-sm-3,
+ .py-sm-3 {
+ padding-top: 1rem !important; }
+ .pr-sm-3,
+ .px-sm-3 {
+ padding-right: 1rem !important; }
+ .pb-sm-3,
+ .py-sm-3 {
+ padding-bottom: 1rem !important; }
+ .pl-sm-3,
+ .px-sm-3 {
+ padding-left: 1rem !important; }
+ .p-sm-4 {
+ padding: 1.5rem !important; }
+ .pt-sm-4,
+ .py-sm-4 {
+ padding-top: 1.5rem !important; }
+ .pr-sm-4,
+ .px-sm-4 {
+ padding-right: 1.5rem !important; }
+ .pb-sm-4,
+ .py-sm-4 {
+ padding-bottom: 1.5rem !important; }
+ .pl-sm-4,
+ .px-sm-4 {
+ padding-left: 1.5rem !important; }
+ .p-sm-5 {
+ padding: 3rem !important; }
+ .pt-sm-5,
+ .py-sm-5 {
+ padding-top: 3rem !important; }
+ .pr-sm-5,
+ .px-sm-5 {
+ padding-right: 3rem !important; }
+ .pb-sm-5,
+ .py-sm-5 {
+ padding-bottom: 3rem !important; }
+ .pl-sm-5,
+ .px-sm-5 {
+ padding-left: 3rem !important; }
+ .m-sm-n1 {
+ margin: -0.25rem !important; }
+ .mt-sm-n1,
+ .my-sm-n1 {
+ margin-top: -0.25rem !important; }
+ .mr-sm-n1,
+ .mx-sm-n1 {
+ margin-right: -0.25rem !important; }
+ .mb-sm-n1,
+ .my-sm-n1 {
+ margin-bottom: -0.25rem !important; }
+ .ml-sm-n1,
+ .mx-sm-n1 {
+ margin-left: -0.25rem !important; }
+ .m-sm-n2 {
+ margin: -0.5rem !important; }
+ .mt-sm-n2,
+ .my-sm-n2 {
+ margin-top: -0.5rem !important; }
+ .mr-sm-n2,
+ .mx-sm-n2 {
+ margin-right: -0.5rem !important; }
+ .mb-sm-n2,
+ .my-sm-n2 {
+ margin-bottom: -0.5rem !important; }
+ .ml-sm-n2,
+ .mx-sm-n2 {
+ margin-left: -0.5rem !important; }
+ .m-sm-n3 {
+ margin: -1rem !important; }
+ .mt-sm-n3,
+ .my-sm-n3 {
+ margin-top: -1rem !important; }
+ .mr-sm-n3,
+ .mx-sm-n3 {
+ margin-right: -1rem !important; }
+ .mb-sm-n3,
+ .my-sm-n3 {
+ margin-bottom: -1rem !important; }
+ .ml-sm-n3,
+ .mx-sm-n3 {
+ margin-left: -1rem !important; }
+ .m-sm-n4 {
+ margin: -1.5rem !important; }
+ .mt-sm-n4,
+ .my-sm-n4 {
+ margin-top: -1.5rem !important; }
+ .mr-sm-n4,
+ .mx-sm-n4 {
+ margin-right: -1.5rem !important; }
+ .mb-sm-n4,
+ .my-sm-n4 {
+ margin-bottom: -1.5rem !important; }
+ .ml-sm-n4,
+ .mx-sm-n4 {
+ margin-left: -1.5rem !important; }
+ .m-sm-n5 {
+ margin: -3rem !important; }
+ .mt-sm-n5,
+ .my-sm-n5 {
+ margin-top: -3rem !important; }
+ .mr-sm-n5,
+ .mx-sm-n5 {
+ margin-right: -3rem !important; }
+ .mb-sm-n5,
+ .my-sm-n5 {
+ margin-bottom: -3rem !important; }
+ .ml-sm-n5,
+ .mx-sm-n5 {
+ margin-left: -3rem !important; }
+ .m-sm-auto {
+ margin: auto !important; }
+ .mt-sm-auto,
+ .my-sm-auto {
+ margin-top: auto !important; }
+ .mr-sm-auto,
+ .mx-sm-auto {
+ margin-right: auto !important; }
+ .mb-sm-auto,
+ .my-sm-auto {
+ margin-bottom: auto !important; }
+ .ml-sm-auto,
+ .mx-sm-auto {
+ margin-left: auto !important; } }
+
+@media (min-width: 768px) {
+ .m-md-0 {
+ margin: 0 !important; }
+ .mt-md-0,
+ .my-md-0 {
+ margin-top: 0 !important; }
+ .mr-md-0,
+ .mx-md-0 {
+ margin-right: 0 !important; }
+ .mb-md-0,
+ .my-md-0 {
+ margin-bottom: 0 !important; }
+ .ml-md-0,
+ .mx-md-0 {
+ margin-left: 0 !important; }
+ .m-md-1 {
+ margin: 0.25rem !important; }
+ .mt-md-1,
+ .my-md-1 {
+ margin-top: 0.25rem !important; }
+ .mr-md-1,
+ .mx-md-1 {
+ margin-right: 0.25rem !important; }
+ .mb-md-1,
+ .my-md-1 {
+ margin-bottom: 0.25rem !important; }
+ .ml-md-1,
+ .mx-md-1 {
+ margin-left: 0.25rem !important; }
+ .m-md-2 {
+ margin: 0.5rem !important; }
+ .mt-md-2,
+ .my-md-2 {
+ margin-top: 0.5rem !important; }
+ .mr-md-2,
+ .mx-md-2 {
+ margin-right: 0.5rem !important; }
+ .mb-md-2,
+ .my-md-2 {
+ margin-bottom: 0.5rem !important; }
+ .ml-md-2,
+ .mx-md-2 {
+ margin-left: 0.5rem !important; }
+ .m-md-3 {
+ margin: 1rem !important; }
+ .mt-md-3,
+ .my-md-3 {
+ margin-top: 1rem !important; }
+ .mr-md-3,
+ .mx-md-3 {
+ margin-right: 1rem !important; }
+ .mb-md-3,
+ .my-md-3 {
+ margin-bottom: 1rem !important; }
+ .ml-md-3,
+ .mx-md-3 {
+ margin-left: 1rem !important; }
+ .m-md-4 {
+ margin: 1.5rem !important; }
+ .mt-md-4,
+ .my-md-4 {
+ margin-top: 1.5rem !important; }
+ .mr-md-4,
+ .mx-md-4 {
+ margin-right: 1.5rem !important; }
+ .mb-md-4,
+ .my-md-4 {
+ margin-bottom: 1.5rem !important; }
+ .ml-md-4,
+ .mx-md-4 {
+ margin-left: 1.5rem !important; }
+ .m-md-5 {
+ margin: 3rem !important; }
+ .mt-md-5,
+ .my-md-5 {
+ margin-top: 3rem !important; }
+ .mr-md-5,
+ .mx-md-5 {
+ margin-right: 3rem !important; }
+ .mb-md-5,
+ .my-md-5 {
+ margin-bottom: 3rem !important; }
+ .ml-md-5,
+ .mx-md-5 {
+ margin-left: 3rem !important; }
+ .p-md-0 {
+ padding: 0 !important; }
+ .pt-md-0,
+ .py-md-0 {
+ padding-top: 0 !important; }
+ .pr-md-0,
+ .px-md-0 {
+ padding-right: 0 !important; }
+ .pb-md-0,
+ .py-md-0 {
+ padding-bottom: 0 !important; }
+ .pl-md-0,
+ .px-md-0 {
+ padding-left: 0 !important; }
+ .p-md-1 {
+ padding: 0.25rem !important; }
+ .pt-md-1,
+ .py-md-1 {
+ padding-top: 0.25rem !important; }
+ .pr-md-1,
+ .px-md-1 {
+ padding-right: 0.25rem !important; }
+ .pb-md-1,
+ .py-md-1 {
+ padding-bottom: 0.25rem !important; }
+ .pl-md-1,
+ .px-md-1 {
+ padding-left: 0.25rem !important; }
+ .p-md-2 {
+ padding: 0.5rem !important; }
+ .pt-md-2,
+ .py-md-2 {
+ padding-top: 0.5rem !important; }
+ .pr-md-2,
+ .px-md-2 {
+ padding-right: 0.5rem !important; }
+ .pb-md-2,
+ .py-md-2 {
+ padding-bottom: 0.5rem !important; }
+ .pl-md-2,
+ .px-md-2 {
+ padding-left: 0.5rem !important; }
+ .p-md-3 {
+ padding: 1rem !important; }
+ .pt-md-3,
+ .py-md-3 {
+ padding-top: 1rem !important; }
+ .pr-md-3,
+ .px-md-3 {
+ padding-right: 1rem !important; }
+ .pb-md-3,
+ .py-md-3 {
+ padding-bottom: 1rem !important; }
+ .pl-md-3,
+ .px-md-3 {
+ padding-left: 1rem !important; }
+ .p-md-4 {
+ padding: 1.5rem !important; }
+ .pt-md-4,
+ .py-md-4 {
+ padding-top: 1.5rem !important; }
+ .pr-md-4,
+ .px-md-4 {
+ padding-right: 1.5rem !important; }
+ .pb-md-4,
+ .py-md-4 {
+ padding-bottom: 1.5rem !important; }
+ .pl-md-4,
+ .px-md-4 {
+ padding-left: 1.5rem !important; }
+ .p-md-5 {
+ padding: 3rem !important; }
+ .pt-md-5,
+ .py-md-5 {
+ padding-top: 3rem !important; }
+ .pr-md-5,
+ .px-md-5 {
+ padding-right: 3rem !important; }
+ .pb-md-5,
+ .py-md-5 {
+ padding-bottom: 3rem !important; }
+ .pl-md-5,
+ .px-md-5 {
+ padding-left: 3rem !important; }
+ .m-md-n1 {
+ margin: -0.25rem !important; }
+ .mt-md-n1,
+ .my-md-n1 {
+ margin-top: -0.25rem !important; }
+ .mr-md-n1,
+ .mx-md-n1 {
+ margin-right: -0.25rem !important; }
+ .mb-md-n1,
+ .my-md-n1 {
+ margin-bottom: -0.25rem !important; }
+ .ml-md-n1,
+ .mx-md-n1 {
+ margin-left: -0.25rem !important; }
+ .m-md-n2 {
+ margin: -0.5rem !important; }
+ .mt-md-n2,
+ .my-md-n2 {
+ margin-top: -0.5rem !important; }
+ .mr-md-n2,
+ .mx-md-n2 {
+ margin-right: -0.5rem !important; }
+ .mb-md-n2,
+ .my-md-n2 {
+ margin-bottom: -0.5rem !important; }
+ .ml-md-n2,
+ .mx-md-n2 {
+ margin-left: -0.5rem !important; }
+ .m-md-n3 {
+ margin: -1rem !important; }
+ .mt-md-n3,
+ .my-md-n3 {
+ margin-top: -1rem !important; }
+ .mr-md-n3,
+ .mx-md-n3 {
+ margin-right: -1rem !important; }
+ .mb-md-n3,
+ .my-md-n3 {
+ margin-bottom: -1rem !important; }
+ .ml-md-n3,
+ .mx-md-n3 {
+ margin-left: -1rem !important; }
+ .m-md-n4 {
+ margin: -1.5rem !important; }
+ .mt-md-n4,
+ .my-md-n4 {
+ margin-top: -1.5rem !important; }
+ .mr-md-n4,
+ .mx-md-n4 {
+ margin-right: -1.5rem !important; }
+ .mb-md-n4,
+ .my-md-n4 {
+ margin-bottom: -1.5rem !important; }
+ .ml-md-n4,
+ .mx-md-n4 {
+ margin-left: -1.5rem !important; }
+ .m-md-n5 {
+ margin: -3rem !important; }
+ .mt-md-n5,
+ .my-md-n5 {
+ margin-top: -3rem !important; }
+ .mr-md-n5,
+ .mx-md-n5 {
+ margin-right: -3rem !important; }
+ .mb-md-n5,
+ .my-md-n5 {
+ margin-bottom: -3rem !important; }
+ .ml-md-n5,
+ .mx-md-n5 {
+ margin-left: -3rem !important; }
+ .m-md-auto {
+ margin: auto !important; }
+ .mt-md-auto,
+ .my-md-auto {
+ margin-top: auto !important; }
+ .mr-md-auto,
+ .mx-md-auto {
+ margin-right: auto !important; }
+ .mb-md-auto,
+ .my-md-auto {
+ margin-bottom: auto !important; }
+ .ml-md-auto,
+ .mx-md-auto {
+ margin-left: auto !important; } }
+
+@media (min-width: 992px) {
+ .m-lg-0 {
+ margin: 0 !important; }
+ .mt-lg-0,
+ .my-lg-0 {
+ margin-top: 0 !important; }
+ .mr-lg-0,
+ .mx-lg-0 {
+ margin-right: 0 !important; }
+ .mb-lg-0,
+ .my-lg-0 {
+ margin-bottom: 0 !important; }
+ .ml-lg-0,
+ .mx-lg-0 {
+ margin-left: 0 !important; }
+ .m-lg-1 {
+ margin: 0.25rem !important; }
+ .mt-lg-1,
+ .my-lg-1 {
+ margin-top: 0.25rem !important; }
+ .mr-lg-1,
+ .mx-lg-1 {
+ margin-right: 0.25rem !important; }
+ .mb-lg-1,
+ .my-lg-1 {
+ margin-bottom: 0.25rem !important; }
+ .ml-lg-1,
+ .mx-lg-1 {
+ margin-left: 0.25rem !important; }
+ .m-lg-2 {
+ margin: 0.5rem !important; }
+ .mt-lg-2,
+ .my-lg-2 {
+ margin-top: 0.5rem !important; }
+ .mr-lg-2,
+ .mx-lg-2 {
+ margin-right: 0.5rem !important; }
+ .mb-lg-2,
+ .my-lg-2 {
+ margin-bottom: 0.5rem !important; }
+ .ml-lg-2,
+ .mx-lg-2 {
+ margin-left: 0.5rem !important; }
+ .m-lg-3 {
+ margin: 1rem !important; }
+ .mt-lg-3,
+ .my-lg-3 {
+ margin-top: 1rem !important; }
+ .mr-lg-3,
+ .mx-lg-3 {
+ margin-right: 1rem !important; }
+ .mb-lg-3,
+ .my-lg-3 {
+ margin-bottom: 1rem !important; }
+ .ml-lg-3,
+ .mx-lg-3 {
+ margin-left: 1rem !important; }
+ .m-lg-4 {
+ margin: 1.5rem !important; }
+ .mt-lg-4,
+ .my-lg-4 {
+ margin-top: 1.5rem !important; }
+ .mr-lg-4,
+ .mx-lg-4 {
+ margin-right: 1.5rem !important; }
+ .mb-lg-4,
+ .my-lg-4 {
+ margin-bottom: 1.5rem !important; }
+ .ml-lg-4,
+ .mx-lg-4 {
+ margin-left: 1.5rem !important; }
+ .m-lg-5 {
+ margin: 3rem !important; }
+ .mt-lg-5,
+ .my-lg-5 {
+ margin-top: 3rem !important; }
+ .mr-lg-5,
+ .mx-lg-5 {
+ margin-right: 3rem !important; }
+ .mb-lg-5,
+ .my-lg-5 {
+ margin-bottom: 3rem !important; }
+ .ml-lg-5,
+ .mx-lg-5 {
+ margin-left: 3rem !important; }
+ .p-lg-0 {
+ padding: 0 !important; }
+ .pt-lg-0,
+ .py-lg-0 {
+ padding-top: 0 !important; }
+ .pr-lg-0,
+ .px-lg-0 {
+ padding-right: 0 !important; }
+ .pb-lg-0,
+ .py-lg-0 {
+ padding-bottom: 0 !important; }
+ .pl-lg-0,
+ .px-lg-0 {
+ padding-left: 0 !important; }
+ .p-lg-1 {
+ padding: 0.25rem !important; }
+ .pt-lg-1,
+ .py-lg-1 {
+ padding-top: 0.25rem !important; }
+ .pr-lg-1,
+ .px-lg-1 {
+ padding-right: 0.25rem !important; }
+ .pb-lg-1,
+ .py-lg-1 {
+ padding-bottom: 0.25rem !important; }
+ .pl-lg-1,
+ .px-lg-1 {
+ padding-left: 0.25rem !important; }
+ .p-lg-2 {
+ padding: 0.5rem !important; }
+ .pt-lg-2,
+ .py-lg-2 {
+ padding-top: 0.5rem !important; }
+ .pr-lg-2,
+ .px-lg-2 {
+ padding-right: 0.5rem !important; }
+ .pb-lg-2,
+ .py-lg-2 {
+ padding-bottom: 0.5rem !important; }
+ .pl-lg-2,
+ .px-lg-2 {
+ padding-left: 0.5rem !important; }
+ .p-lg-3 {
+ padding: 1rem !important; }
+ .pt-lg-3,
+ .py-lg-3 {
+ padding-top: 1rem !important; }
+ .pr-lg-3,
+ .px-lg-3 {
+ padding-right: 1rem !important; }
+ .pb-lg-3,
+ .py-lg-3 {
+ padding-bottom: 1rem !important; }
+ .pl-lg-3,
+ .px-lg-3 {
+ padding-left: 1rem !important; }
+ .p-lg-4 {
+ padding: 1.5rem !important; }
+ .pt-lg-4,
+ .py-lg-4 {
+ padding-top: 1.5rem !important; }
+ .pr-lg-4,
+ .px-lg-4 {
+ padding-right: 1.5rem !important; }
+ .pb-lg-4,
+ .py-lg-4 {
+ padding-bottom: 1.5rem !important; }
+ .pl-lg-4,
+ .px-lg-4 {
+ padding-left: 1.5rem !important; }
+ .p-lg-5 {
+ padding: 3rem !important; }
+ .pt-lg-5,
+ .py-lg-5 {
+ padding-top: 3rem !important; }
+ .pr-lg-5,
+ .px-lg-5 {
+ padding-right: 3rem !important; }
+ .pb-lg-5,
+ .py-lg-5 {
+ padding-bottom: 3rem !important; }
+ .pl-lg-5,
+ .px-lg-5 {
+ padding-left: 3rem !important; }
+ .m-lg-n1 {
+ margin: -0.25rem !important; }
+ .mt-lg-n1,
+ .my-lg-n1 {
+ margin-top: -0.25rem !important; }
+ .mr-lg-n1,
+ .mx-lg-n1 {
+ margin-right: -0.25rem !important; }
+ .mb-lg-n1,
+ .my-lg-n1 {
+ margin-bottom: -0.25rem !important; }
+ .ml-lg-n1,
+ .mx-lg-n1 {
+ margin-left: -0.25rem !important; }
+ .m-lg-n2 {
+ margin: -0.5rem !important; }
+ .mt-lg-n2,
+ .my-lg-n2 {
+ margin-top: -0.5rem !important; }
+ .mr-lg-n2,
+ .mx-lg-n2 {
+ margin-right: -0.5rem !important; }
+ .mb-lg-n2,
+ .my-lg-n2 {
+ margin-bottom: -0.5rem !important; }
+ .ml-lg-n2,
+ .mx-lg-n2 {
+ margin-left: -0.5rem !important; }
+ .m-lg-n3 {
+ margin: -1rem !important; }
+ .mt-lg-n3,
+ .my-lg-n3 {
+ margin-top: -1rem !important; }
+ .mr-lg-n3,
+ .mx-lg-n3 {
+ margin-right: -1rem !important; }
+ .mb-lg-n3,
+ .my-lg-n3 {
+ margin-bottom: -1rem !important; }
+ .ml-lg-n3,
+ .mx-lg-n3 {
+ margin-left: -1rem !important; }
+ .m-lg-n4 {
+ margin: -1.5rem !important; }
+ .mt-lg-n4,
+ .my-lg-n4 {
+ margin-top: -1.5rem !important; }
+ .mr-lg-n4,
+ .mx-lg-n4 {
+ margin-right: -1.5rem !important; }
+ .mb-lg-n4,
+ .my-lg-n4 {
+ margin-bottom: -1.5rem !important; }
+ .ml-lg-n4,
+ .mx-lg-n4 {
+ margin-left: -1.5rem !important; }
+ .m-lg-n5 {
+ margin: -3rem !important; }
+ .mt-lg-n5,
+ .my-lg-n5 {
+ margin-top: -3rem !important; }
+ .mr-lg-n5,
+ .mx-lg-n5 {
+ margin-right: -3rem !important; }
+ .mb-lg-n5,
+ .my-lg-n5 {
+ margin-bottom: -3rem !important; }
+ .ml-lg-n5,
+ .mx-lg-n5 {
+ margin-left: -3rem !important; }
+ .m-lg-auto {
+ margin: auto !important; }
+ .mt-lg-auto,
+ .my-lg-auto {
+ margin-top: auto !important; }
+ .mr-lg-auto,
+ .mx-lg-auto {
+ margin-right: auto !important; }
+ .mb-lg-auto,
+ .my-lg-auto {
+ margin-bottom: auto !important; }
+ .ml-lg-auto,
+ .mx-lg-auto {
+ margin-left: auto !important; } }
+
+@media (min-width: 1200px) {
+ .m-xl-0 {
+ margin: 0 !important; }
+ .mt-xl-0,
+ .my-xl-0 {
+ margin-top: 0 !important; }
+ .mr-xl-0,
+ .mx-xl-0 {
+ margin-right: 0 !important; }
+ .mb-xl-0,
+ .my-xl-0 {
+ margin-bottom: 0 !important; }
+ .ml-xl-0,
+ .mx-xl-0 {
+ margin-left: 0 !important; }
+ .m-xl-1 {
+ margin: 0.25rem !important; }
+ .mt-xl-1,
+ .my-xl-1 {
+ margin-top: 0.25rem !important; }
+ .mr-xl-1,
+ .mx-xl-1 {
+ margin-right: 0.25rem !important; }
+ .mb-xl-1,
+ .my-xl-1 {
+ margin-bottom: 0.25rem !important; }
+ .ml-xl-1,
+ .mx-xl-1 {
+ margin-left: 0.25rem !important; }
+ .m-xl-2 {
+ margin: 0.5rem !important; }
+ .mt-xl-2,
+ .my-xl-2 {
+ margin-top: 0.5rem !important; }
+ .mr-xl-2,
+ .mx-xl-2 {
+ margin-right: 0.5rem !important; }
+ .mb-xl-2,
+ .my-xl-2 {
+ margin-bottom: 0.5rem !important; }
+ .ml-xl-2,
+ .mx-xl-2 {
+ margin-left: 0.5rem !important; }
+ .m-xl-3 {
+ margin: 1rem !important; }
+ .mt-xl-3,
+ .my-xl-3 {
+ margin-top: 1rem !important; }
+ .mr-xl-3,
+ .mx-xl-3 {
+ margin-right: 1rem !important; }
+ .mb-xl-3,
+ .my-xl-3 {
+ margin-bottom: 1rem !important; }
+ .ml-xl-3,
+ .mx-xl-3 {
+ margin-left: 1rem !important; }
+ .m-xl-4 {
+ margin: 1.5rem !important; }
+ .mt-xl-4,
+ .my-xl-4 {
+ margin-top: 1.5rem !important; }
+ .mr-xl-4,
+ .mx-xl-4 {
+ margin-right: 1.5rem !important; }
+ .mb-xl-4,
+ .my-xl-4 {
+ margin-bottom: 1.5rem !important; }
+ .ml-xl-4,
+ .mx-xl-4 {
+ margin-left: 1.5rem !important; }
+ .m-xl-5 {
+ margin: 3rem !important; }
+ .mt-xl-5,
+ .my-xl-5 {
+ margin-top: 3rem !important; }
+ .mr-xl-5,
+ .mx-xl-5 {
+ margin-right: 3rem !important; }
+ .mb-xl-5,
+ .my-xl-5 {
+ margin-bottom: 3rem !important; }
+ .ml-xl-5,
+ .mx-xl-5 {
+ margin-left: 3rem !important; }
+ .p-xl-0 {
+ padding: 0 !important; }
+ .pt-xl-0,
+ .py-xl-0 {
+ padding-top: 0 !important; }
+ .pr-xl-0,
+ .px-xl-0 {
+ padding-right: 0 !important; }
+ .pb-xl-0,
+ .py-xl-0 {
+ padding-bottom: 0 !important; }
+ .pl-xl-0,
+ .px-xl-0 {
+ padding-left: 0 !important; }
+ .p-xl-1 {
+ padding: 0.25rem !important; }
+ .pt-xl-1,
+ .py-xl-1 {
+ padding-top: 0.25rem !important; }
+ .pr-xl-1,
+ .px-xl-1 {
+ padding-right: 0.25rem !important; }
+ .pb-xl-1,
+ .py-xl-1 {
+ padding-bottom: 0.25rem !important; }
+ .pl-xl-1,
+ .px-xl-1 {
+ padding-left: 0.25rem !important; }
+ .p-xl-2 {
+ padding: 0.5rem !important; }
+ .pt-xl-2,
+ .py-xl-2 {
+ padding-top: 0.5rem !important; }
+ .pr-xl-2,
+ .px-xl-2 {
+ padding-right: 0.5rem !important; }
+ .pb-xl-2,
+ .py-xl-2 {
+ padding-bottom: 0.5rem !important; }
+ .pl-xl-2,
+ .px-xl-2 {
+ padding-left: 0.5rem !important; }
+ .p-xl-3 {
+ padding: 1rem !important; }
+ .pt-xl-3,
+ .py-xl-3 {
+ padding-top: 1rem !important; }
+ .pr-xl-3,
+ .px-xl-3 {
+ padding-right: 1rem !important; }
+ .pb-xl-3,
+ .py-xl-3 {
+ padding-bottom: 1rem !important; }
+ .pl-xl-3,
+ .px-xl-3 {
+ padding-left: 1rem !important; }
+ .p-xl-4 {
+ padding: 1.5rem !important; }
+ .pt-xl-4,
+ .py-xl-4 {
+ padding-top: 1.5rem !important; }
+ .pr-xl-4,
+ .px-xl-4 {
+ padding-right: 1.5rem !important; }
+ .pb-xl-4,
+ .py-xl-4 {
+ padding-bottom: 1.5rem !important; }
+ .pl-xl-4,
+ .px-xl-4 {
+ padding-left: 1.5rem !important; }
+ .p-xl-5 {
+ padding: 3rem !important; }
+ .pt-xl-5,
+ .py-xl-5 {
+ padding-top: 3rem !important; }
+ .pr-xl-5,
+ .px-xl-5 {
+ padding-right: 3rem !important; }
+ .pb-xl-5,
+ .py-xl-5 {
+ padding-bottom: 3rem !important; }
+ .pl-xl-5,
+ .px-xl-5 {
+ padding-left: 3rem !important; }
+ .m-xl-n1 {
+ margin: -0.25rem !important; }
+ .mt-xl-n1,
+ .my-xl-n1 {
+ margin-top: -0.25rem !important; }
+ .mr-xl-n1,
+ .mx-xl-n1 {
+ margin-right: -0.25rem !important; }
+ .mb-xl-n1,
+ .my-xl-n1 {
+ margin-bottom: -0.25rem !important; }
+ .ml-xl-n1,
+ .mx-xl-n1 {
+ margin-left: -0.25rem !important; }
+ .m-xl-n2 {
+ margin: -0.5rem !important; }
+ .mt-xl-n2,
+ .my-xl-n2 {
+ margin-top: -0.5rem !important; }
+ .mr-xl-n2,
+ .mx-xl-n2 {
+ margin-right: -0.5rem !important; }
+ .mb-xl-n2,
+ .my-xl-n2 {
+ margin-bottom: -0.5rem !important; }
+ .ml-xl-n2,
+ .mx-xl-n2 {
+ margin-left: -0.5rem !important; }
+ .m-xl-n3 {
+ margin: -1rem !important; }
+ .mt-xl-n3,
+ .my-xl-n3 {
+ margin-top: -1rem !important; }
+ .mr-xl-n3,
+ .mx-xl-n3 {
+ margin-right: -1rem !important; }
+ .mb-xl-n3,
+ .my-xl-n3 {
+ margin-bottom: -1rem !important; }
+ .ml-xl-n3,
+ .mx-xl-n3 {
+ margin-left: -1rem !important; }
+ .m-xl-n4 {
+ margin: -1.5rem !important; }
+ .mt-xl-n4,
+ .my-xl-n4 {
+ margin-top: -1.5rem !important; }
+ .mr-xl-n4,
+ .mx-xl-n4 {
+ margin-right: -1.5rem !important; }
+ .mb-xl-n4,
+ .my-xl-n4 {
+ margin-bottom: -1.5rem !important; }
+ .ml-xl-n4,
+ .mx-xl-n4 {
+ margin-left: -1.5rem !important; }
+ .m-xl-n5 {
+ margin: -3rem !important; }
+ .mt-xl-n5,
+ .my-xl-n5 {
+ margin-top: -3rem !important; }
+ .mr-xl-n5,
+ .mx-xl-n5 {
+ margin-right: -3rem !important; }
+ .mb-xl-n5,
+ .my-xl-n5 {
+ margin-bottom: -3rem !important; }
+ .ml-xl-n5,
+ .mx-xl-n5 {
+ margin-left: -3rem !important; }
+ .m-xl-auto {
+ margin: auto !important; }
+ .mt-xl-auto,
+ .my-xl-auto {
+ margin-top: auto !important; }
+ .mr-xl-auto,
+ .mx-xl-auto {
+ margin-right: auto !important; }
+ .mb-xl-auto,
+ .my-xl-auto {
+ margin-bottom: auto !important; }
+ .ml-xl-auto,
+ .mx-xl-auto {
+ margin-left: auto !important; } }
+
+.text-monospace {
+ font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important; }
+
+.text-justify {
+ text-align: justify !important; }
+
+.text-wrap {
+ white-space: normal !important; }
+
+.text-nowrap {
+ white-space: nowrap !important; }
+
+.text-truncate {
+ overflow: hidden;
+ -o-text-overflow: ellipsis;
+ text-overflow: ellipsis;
+ white-space: nowrap; }
+
+.text-left {
+ text-align: left !important; }
+
+.text-right {
+ text-align: right !important; }
+
+.text-center {
+ text-align: center !important; }
+
+@media (min-width: 576px) {
+ .text-sm-left {
+ text-align: left !important; }
+ .text-sm-right {
+ text-align: right !important; }
+ .text-sm-center {
+ text-align: center !important; } }
+
+@media (min-width: 768px) {
+ .text-md-left {
+ text-align: left !important; }
+ .text-md-right {
+ text-align: right !important; }
+ .text-md-center {
+ text-align: center !important; } }
+
+@media (min-width: 992px) {
+ .text-lg-left {
+ text-align: left !important; }
+ .text-lg-right {
+ text-align: right !important; }
+ .text-lg-center {
+ text-align: center !important; } }
+
+@media (min-width: 1200px) {
+ .text-xl-left {
+ text-align: left !important; }
+ .text-xl-right {
+ text-align: right !important; }
+ .text-xl-center {
+ text-align: center !important; } }
+
+.text-lowercase {
+ text-transform: lowercase !important; }
+
+.text-uppercase {
+ text-transform: uppercase !important; }
+
+.text-capitalize {
+ text-transform: capitalize !important; }
+
+.font-weight-light {
+ font-weight: 300 !important; }
+
+.font-weight-lighter {
+ font-weight: lighter !important; }
+
+.font-weight-normal {
+ font-weight: 400 !important; }
+
+.font-weight-bold {
+ font-weight: 700 !important; }
+
+.font-weight-bolder {
+ font-weight: bolder !important; }
+
+.font-italic {
+ font-style: italic !important; }
+
+.text-white {
+ color: #fff !important; }
+
+.text-primary {
+ color: #007bff !important; }
+
+a.text-primary:hover, a.text-primary:focus {
+ color: #0056b3 !important; }
+
+.text-secondary {
+ color: #6c757d !important; }
+
+a.text-secondary:hover, a.text-secondary:focus {
+ color: #494f54 !important; }
+
+.text-success {
+ color: #28a745 !important; }
+
+a.text-success:hover, a.text-success:focus {
+ color: #19692c !important; }
+
+.text-info {
+ color: #17a2b8 !important; }
+
+a.text-info:hover, a.text-info:focus {
+ color: #0f6674 !important; }
+
+.text-warning {
+ color: #ffc107 !important; }
+
+a.text-warning:hover, a.text-warning:focus {
+ color: #ba8b00 !important; }
+
+.text-danger {
+ color: #dc3545 !important; }
+
+a.text-danger:hover, a.text-danger:focus {
+ color: #a71d2a !important; }
+
+.text-light {
+ color: #f8f9fa !important; }
+
+a.text-light:hover, a.text-light:focus {
+ color: #cbd3da !important; }
+
+.text-dark {
+ color: #343a40 !important; }
+
+a.text-dark:hover, a.text-dark:focus {
+ color: #121416 !important; }
+
+.text-body {
+ color: #212529 !important; }
+
+.text-muted {
+ color: #6c757d !important; }
+
+.text-black-50 {
+ color: rgba(0, 0, 0, 0.5) !important; }
+
+.text-white-50 {
+ color: rgba(255, 255, 255, 0.5) !important; }
+
+.text-hide {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0; }
+
+.text-decoration-none {
+ text-decoration: none !important; }
+
+.text-break {
+ word-break: break-word !important;
+ overflow-wrap: break-word !important; }
+
+.text-reset {
+ color: inherit !important; }
+
+.visible {
+ visibility: visible !important; }
+
+.invisible {
+ visibility: hidden !important; }
+
+@media print {
+ *,
+ *::before,
+ *::after {
+ text-shadow: none !important;
+ -webkit-box-shadow: none !important;
+ box-shadow: none !important; }
+ a:not(.btn) {
+ text-decoration: underline; }
+ abbr[title]::after {
+ content: " (" attr(title) ")"; }
+ pre {
+ white-space: pre-wrap !important; }
+ pre,
+ blockquote {
+ border: 1px solid #adb5bd;
+ page-break-inside: avoid; }
+ thead {
+ display: table-header-group; }
+ tr,
+ img {
+ page-break-inside: avoid; }
+ p,
+ h2,
+ h3 {
+ orphans: 3;
+ widows: 3; }
+ h2,
+ h3 {
+ page-break-after: avoid; }
+ @page {
+ size: a3; }
+ body {
+ min-width: 992px !important; }
+ .container {
+ min-width: 992px !important; }
+ .navbar {
+ display: none; }
+ .badge {
+ border: 1px solid #000; }
+ .table {
+ border-collapse: collapse !important; }
+ .table td,
+ .table th {
+ background-color: #fff !important; }
+ .table-bordered th,
+ .table-bordered td {
+ border: 1px solid #dee2e6 !important; }
+ .table-dark {
+ color: inherit; }
+ .table-dark th,
+ .table-dark td,
+ .table-dark thead th,
+ .table-dark tbody + tbody {
+ border-color: #dee2e6; }
+ .table .thead-dark th {
+ color: inherit;
+ border-color: #dee2e6; } }
+
+body {
+ font-family: "Lato", Arial, sans-serif;
+ font-size: 16px;
+ line-height: 1.8;
+ font-weight: normal;
+ background: #f8f9fd;
+ color: gray; }
+
+a {
+ -webkit-transition: .3s all ease;
+ -o-transition: .3s all ease;
+ transition: .3s all ease;
+ color: #c62f3d; }
+ a:hover, a:focus {
+ text-decoration: none !important;
+ outline: none !important;
+ -webkit-box-shadow: none;
+ box-shadow: none; }
+ a:hover, a:active, a:focus {
+ color: #c62f3d;
+ outline: none !important;
+ text-decoration: none !important; }
+
+h1, h2, h3, h4, h5,
+.h1, .h2, .h3, .h4, .h5 {
+ line-height: 1.5;
+ font-weight: 400;
+ font-family: "Lato", Arial, sans-serif;
+ color: #000; }
+
+.bg-primary {
+ background: #c62f3d !important; }
+
+.ftco-section {
+ padding: 7em 0; }
+
+.ftco-no-pt {
+ padding-top: 0; }
+
+.ftco-no-pb {
+ padding-bottom: 0; }
+
+.heading-section {
+ font-size: 28px;
+ color: #000; }
+
+.img {
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-position: center center; }
+
+.wrap {
+ width: 100%;
+ overflow: hidden;
+ background: #fff;
+ border-radius: 5px;
+ -webkit-box-shadow: 0px 10px 34px -15px rgba(0, 0, 0, 0.24);
+ -moz-box-shadow: 0px 10px 34px -15px rgba(0, 0, 0, 0.24);
+ box-shadow: 0px 10px 34px -15px rgba(0, 0, 0, 0.24); }
+ .wrap .img {
+ height: 200px; }
+
+.login-wrap {
+ position: relative; }
+ .login-wrap h3 {
+ font-weight: 300; }
+
+.form-group {
+ position: relative;
+ z-index: 0;
+ margin-bottom: 20px !important; }
+ .form-group a {
+ color: gray; }
+
+.form-control {
+ height: 48px;
+ background: #fff;
+ color: #000;
+ font-size: 16px;
+ border-radius: 5px;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ border: 1px solid rgba(0, 0, 0, 0.1); }
+ .form-control::-webkit-input-placeholder {
+ /* Chrome/Opera/Safari */
+ color: rgba(0, 0, 0, 0.2) !important; }
+ .form-control::-moz-placeholder {
+ /* Firefox 19+ */
+ color: rgba(0, 0, 0, 0.2) !important; }
+ .form-control:-ms-input-placeholder {
+ /* IE 10+ */
+ color: rgba(0, 0, 0, 0.2) !important; }
+ .form-control:-moz-placeholder {
+ /* Firefox 18- */
+ color: rgba(0, 0, 0, 0.2) !important; }
+ .form-control:focus, .form-control:active {
+ outline: none !important;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ border: 1px solid #c62f3d; }
+
+.field-icon {
+ position: absolute;
+ top: 50%;
+ right: 15px;
+ -webkit-transform: translateY(-50%);
+ -ms-transform: translateY(-50%);
+ transform: translateY(-50%);
+ color: rgba(0, 0, 0, 0.3); }
+
+.form-control-placeholder {
+ position: absolute;
+ top: 2px;
+ padding: 7px 0 0 15px;
+ -webkit-transition: all 400ms;
+ -o-transition: all 400ms;
+ transition: all 400ms;
+ opacity: .6; }
+
+.form-control:focus + .form-control-placeholder,
+.form-control:valid + .form-control-placeholder {
+ -webkit-transform: translate3d(0, -120%, 0);
+ transform: translate3d(0, -120%, 0);
+ padding: 7px 0 0 0;
+ opacity: 1;
+ text-transform: uppercase;
+ font-size: 12px;
+ letter-spacing: 1px;
+ color: #c62f3d;
+ font-weight: 700; }
+
+.social-media {
+ position: relative;
+ width: 100%; }
+ .social-media .social-icon {
+ display: block;
+ width: 40px;
+ height: 40px;
+ background: transparent;
+ border: 1px solid rgba(0, 0, 0, 0.05);
+ font-size: 16px;
+ margin-right: 5px;
+ border-radius: 50%; }
+ .social-media .social-icon span {
+ color: #999999; }
+ .social-media .social-icon:hover, .social-media .social-icon:focus {
+ background: #c62f3d; }
+ .social-media .social-icon:hover span, .social-media .social-icon:focus span {
+ color: #fff; }
+
+.checkbox-wrap {
+ display: block;
+ position: relative;
+ padding-left: 30px;
+ margin-bottom: 12px;
+ cursor: pointer;
+ font-size: 16px;
+ font-weight: 500;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none; }
+
+/* Hide the browser's default checkbox */
+.checkbox-wrap input {
+ position: absolute;
+ opacity: 0;
+ cursor: pointer;
+ height: 0;
+ width: 0; }
+
+/* Create a custom checkbox */
+.checkmark {
+ position: absolute;
+ top: 0;
+ left: 0; }
+
+/* Create the checkmark/indicator (hidden when not checked) */
+.checkmark:after {
+ content: "\f0c8";
+ font-family: "FontAwesome";
+ position: absolute;
+ color: rgba(0, 0, 0, 0.1);
+ font-size: 20px;
+ margin-top: -4px;
+ -webkit-transition: 0.3s;
+ -o-transition: 0.3s;
+ transition: 0.3s; }
+ @media (prefers-reduced-motion: reduce) {
+ .checkmark:after {
+ -webkit-transition: none;
+ -o-transition: none;
+ transition: none; } }
+
+/* Show the checkmark when checked */
+.checkbox-wrap input:checked ~ .checkmark:after {
+ display: block;
+ content: "\f14a";
+ font-family: "FontAwesome";
+ color: rgba(0, 0, 0, 0.2); }
+
+/* Style the checkmark/indicator */
+.checkbox-primary {
+ color: #c62f3d; }
+ .checkbox-primary input:checked ~ .checkmark:after {
+ color: #c62f3d; }
+
+.btn {
+ cursor: pointer;
+ -webkit-box-shadow: none !important;
+ box-shadow: none !important;
+ font-size: 15px;
+ padding: 10px 20px; }
+ .btn:hover, .btn:active, .btn:focus {
+ outline: none; }
+ .btn.btn-primary {
+ background: #c62f3d !important;
+ border: 1px solid #c62f3d !important;
+ color: #fff !important; }
+ .btn.btn-primary:hover {
+ border: 1px solid #c62f3d;
+ background: transparent;
+ color: #c62f3d; }
+ .btn.btn-primary.btn-outline-primary {
+ border: 1px solid #c62f3d;
+ background: transparent;
+ color: #c62f3d; }
+ .btn.btn-primary.btn-outline-primary:hover {
+ border: 1px solid transparent;
+ background: #c62f3d;
+ color: #fff; }
diff --git a/src/app/login/login.component.html b/src/app/login/login.component.html
new file mode 100644
index 000000000..1b25bfb2c
--- /dev/null
+++ b/src/app/login/login.component.html
@@ -0,0 +1,58 @@
+
+
+
+
Login 05
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/login/login.component.spec.ts b/src/app/login/login.component.spec.ts
new file mode 100644
index 000000000..b39696d88
--- /dev/null
+++ b/src/app/login/login.component.spec.ts
@@ -0,0 +1,27 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { By } from '@angular/platform-browser';
+import { DebugElement } from '@angular/core';
+
+import { LoginComponent } from './login.component';
+
+describe('LoginComponent', () => {
+ let component: LoginComponent;
+ let fixture: ComponentFixture
;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ LoginComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(LoginComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/login/login.component.ts b/src/app/login/login.component.ts
new file mode 100644
index 000000000..2043cae77
--- /dev/null
+++ b/src/app/login/login.component.ts
@@ -0,0 +1,36 @@
+import { Component, OnInit } from '@angular/core';
+import { AuthService } from '../services/auth.service';
+import { Router } from '@angular/router';
+
+@Component({
+ selector: 'app-login',
+ templateUrl: './login.component.html',
+ styleUrls: ['./login.component.css']
+})
+export class LoginComponent implements OnInit {
+
+ email: string;
+ password: string;
+ username: string;
+
+ constructor(public authService: AuthService, public router: Router) {}
+ ngOnInit() {
+ localStorage.removeItem('jwt');
+ localStorage.removeItem('userId');
+
+ }
+ async login(username: string, password: string) {
+ try {
+
+ await this.authService.login(username, password).toPromise();
+
+ // navegar al componente de la página principal si la respuesta es exitosa
+
+ } catch (error) {
+ console.error(error);
+ }
+ }
+
+
+
+}
diff --git a/src/app/maps/maps.component.css b/src/app/maps/maps.component.css
index e69de29bb..24e57642f 100644
--- a/src/app/maps/maps.component.css
+++ b/src/app/maps/maps.component.css
@@ -0,0 +1,18 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 300px;
+ }
+ .boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 300px;
+ }
\ No newline at end of file
diff --git a/src/app/maps/maps.component.html b/src/app/maps/maps.component.html
index f37bd2dea..b9bab9ed6 100644
--- a/src/app/maps/maps.component.html
+++ b/src/app/maps/maps.component.html
@@ -1,9 +1,2 @@
-
-
-
-
-
diff --git a/src/app/notifications/notifications.component.css b/src/app/notifications/notifications.component.css
index e69de29bb..24e57642f 100644
--- a/src/app/notifications/notifications.component.css
+++ b/src/app/notifications/notifications.component.css
@@ -0,0 +1,18 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 300px;
+ }
+ .boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 300px;
+ }
\ No newline at end of file
diff --git a/src/app/notifications/notifications.component.html b/src/app/notifications/notifications.component.html
index 09bb55ee5..1ed8c8813 100644
--- a/src/app/notifications/notifications.component.html
+++ b/src/app/notifications/notifications.component.html
@@ -1,86 +1,9 @@
-
-
-
-
-
-
-
-
Notifications Style
-
- This is a plain notification
-
-
- ×
- This is a notification with close button.
-
-
- ×
-
- This is a notification with close button and icon.
-
-
- ×
-
- This is a notification with close button and icon and have many lines. You can see that the icon and the close button are always vertically aligned. This is a beautiful notification. So you don't have to worry about the style.
-
-
-
-
Notification states
-
- ×
- Info - This is a regular notification made with ".alert-info"
-
-
- ×
- Success - This is a regular notification made with ".alert-success"
-
-
- ×
- Warning - This is a regular notification made with ".alert-warning"
-
-
- ×
- Danger - This is a regular notification made with ".alert-danger"
-
-
-
-
-
-
-
-
+
diff --git a/src/app/pagination/pagination.component.html b/src/app/pagination/pagination.component.html
new file mode 100644
index 000000000..52afa9352
--- /dev/null
+++ b/src/app/pagination/pagination.component.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/tables/tables.component.css b/src/app/pagination/pagination.component.scss
similarity index 100%
rename from src/app/tables/tables.component.css
rename to src/app/pagination/pagination.component.scss
diff --git a/src/app/pagination/pagination.component.spec.ts b/src/app/pagination/pagination.component.spec.ts
new file mode 100644
index 000000000..88519bdc1
--- /dev/null
+++ b/src/app/pagination/pagination.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { PaginationComponent } from './pagination.component';
+
+describe('PaginationComponent', () => {
+ let component: PaginationComponent;
+ let fixture: ComponentFixture
;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ PaginationComponent ]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(PaginationComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/pagination/pagination.component.ts b/src/app/pagination/pagination.component.ts
new file mode 100644
index 000000000..43a411e47
--- /dev/null
+++ b/src/app/pagination/pagination.component.ts
@@ -0,0 +1,52 @@
+ import { Component, OnInit } from '@angular/core';
+
+ @Component({
+ selector: 'app-pagination',
+ templateUrl: './pagination.component.html',
+ styleUrls: ['./pagination.component.scss']
+ })
+ export class PaginationComponent implements OnInit {
+
+ data: any; // variable para almacenar los datos obtenidos de la llamada
+ httpOptions: any;
+ token: any;
+ response: any;
+ currentPage = 1;
+ pageSize = 5;
+ totalPages: number;
+ pages: number[];
+ tableData1: any;
+
+ constructor() { }
+
+ ngOnInit(): void {
+ // Calcular el número total de páginas
+ this.totalPages = Math.ceil(this.data.length / this.pageSize);
+
+ // Generar un array con las páginas
+ this.pages = Array.from({ length: this.totalPages }, (_, i) => i + 1);
+
+ // Actualizar los datos de la página actual
+ this.calculatePageData();
+ }
+ setCurrentPage(page: number) {
+ this.currentPage = page;
+ const start = (page - 1) * 5;
+ const end = start + 5;
+ this.tableData1.dataRows = this.data.slice(start, end).map(item => {
+ return {
+ id: item.id,
+ numFDS : item.numFDS,
+ numMatrinoniosVivieron : item.numMatrinoniosVivieron,
+ fechaCreacion: new Date(new Date(item.fechaCreacion).getTime() + 86400000).toLocaleDateString('es-ES', {year: 'numeric', month: '2-digit', day: '2-digit'}).split('/').join('-'),
+ numSacerdotesVivieron: item.numSacerdotesVivieron,
+ numReligiososVivieron: item.numReligiososVivieron
+ }
+ });
+ }
+ calculatePageData() {
+ const start = (this.currentPage - 1) * this.pageSize;
+ const end = start + this.pageSize;
+ this.tableData1.dataRows = this.data.slice(start, end);
+ }
+ }
diff --git a/src/app/perfil/perfil.component.css b/src/app/perfil/perfil.component.css
new file mode 100644
index 000000000..201d955e3
--- /dev/null
+++ b/src/app/perfil/perfil.component.css
@@ -0,0 +1,18 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 300px;
+}
+.boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 300px;
+ }
\ No newline at end of file
diff --git a/src/app/perfil/perfil.component.html b/src/app/perfil/perfil.component.html
new file mode 100644
index 000000000..b16cb40cc
--- /dev/null
+++ b/src/app/perfil/perfil.component.html
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/perfil/perfil.component.spec.ts b/src/app/perfil/perfil.component.spec.ts
new file mode 100644
index 000000000..c427ac98a
--- /dev/null
+++ b/src/app/perfil/perfil.component.spec.ts
@@ -0,0 +1,26 @@
+/* tslint:disable:no-unused-variable */
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { By } from '@angular/platform-browser';
+import { PerfilComponent } from './perfil.component';
+
+describe('PerfilComponent', () => {
+ let component: PerfilComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ PerfilComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(PerfilComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/perfil/perfil.component.ts b/src/app/perfil/perfil.component.ts
new file mode 100644
index 000000000..f3fea51c6
--- /dev/null
+++ b/src/app/perfil/perfil.component.ts
@@ -0,0 +1,263 @@
+import { ChangeDetectionStrategy, Component, ElementRef, OnInit, ViewChild } from '@angular/core';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { Router } from '@angular/router';
+import { Observable, catchError, map } from 'rxjs';
+import { ActivatedRoute } from '@angular/router';
+import { FormBuilder, FormGroup, Validators} from '@angular/forms';
+import { DatePipe } from '@angular/common';
+import { MatDialog } from '@angular/material/dialog';
+import { ConfirmDialogComponent } from 'app/shared/confirm-dialog/confirm-dialog.component';
+
+@Component({
+ selector: 'app-perfil',
+ templateUrl: './perfil.component.html',
+ styleUrls: ['./perfil.component.css'],
+ changeDetection: ChangeDetectionStrategy.OnPush
+
+})
+export class PerfilComponent implements OnInit {
+
+ perfilForm: FormGroup;
+ httpOptions: any;
+ token: any;
+ response: any;
+ datosCargados: boolean;
+ @ViewChild('fechaInput') fechaInput: ElementRef;
+ ciudades: any[]; // Declarar la propiedad 'ciudades'
+ paises: any[]; // Declarar la propiedad 'paises'
+ roles: any[] = [];
+ selectedCiudad: string;
+ selectedPais: string;
+ data: any;
+ pais: any; // cambia a tipo any
+ creationDate: string;
+
+ constructor(private http: HttpClient, private router: Router, public dialog: MatDialog,
+ private activatedRoute: ActivatedRoute, private formBuilder: FormBuilder) {
+ this.perfilForm = this.formBuilder.group({
+ id: [null],
+ name: [null, Validators.required],
+ creationDate: [null, Validators.required],
+ lastname: [null, Validators.required],
+ username: [null, Validators.required],
+ password: [null, Validators.required],
+ document: [null, Validators.required],
+ state: [null, Validators.required],
+ email: [null, Validators.required],
+ telefono: [null, Validators.required],
+ 'select-rol': ['', Validators.required],
+ 'select-pais': ['', Validators.required],
+ 'select-ciudad': ['', Validators.required]
+ });
+ }
+ ngOnInit() {
+
+ let token = localStorage.getItem('jwt');
+
+
+ this.httpOptions = {
+ headers: new HttpHeaders({
+ 'Authorization': 'Bearer ' + token,
+ 'Content-Type': 'application/json'
+ })
+ };
+ let userId = localStorage.getItem('userId');
+
+ this.obtenerDatosUsuario(userId).subscribe(data => {
+ // Asignar los datos del elemento al formulario utilizando setValue()
+ let fecha = new Date(data.response.creationDate);
+ let fechaFormateada = fecha.toISOString().substring(0, 10);
+ this.perfilForm.controls['creationDate'].setValue(fechaFormateada);
+ this.perfilForm.controls['name'].setValue(data.response.name);
+ this.perfilForm.controls['lastname'].setValue(data.response.lastname);
+ this.perfilForm.controls['username'].setValue(data.response.username);
+ this.perfilForm.controls['password'].setValue(data.response.password);
+ this.perfilForm.controls['document'].setValue(data.response.document);
+ this.perfilForm.controls['email'].setValue(data.response.email);
+ this.perfilForm.controls['telefono'].setValue(data.response.telefono);
+
+
+ // Gestion de paises
+ const pais = data.response.ciudad.pais;
+ const ciudad = data.response.ciudad;
+ const rol = data.response.roles[0].id;
+
+ this.perfilForm.controls['select-pais'].setValue(pais.id);
+
+ this.obtenerDatosPais(pais.id).subscribe((data: any) => {
+ const paises = data.response;
+ const selectPais = document.getElementById('select-pais') as HTMLSelectElement;
+
+ selectPais.innerHTML = '';
+
+ paises.forEach((pais: any) => {
+ const option = document.createElement('option');
+ option.value = pais.id;
+ option.text = pais.name;
+ selectPais.appendChild(option);
+ });
+
+ // Establecemos el país seleccionado en el select del país
+ this.perfilForm.controls['select-pais'].setValue(pais.id);
+ });
+
+ this.obtenerDatosCiudad(pais.id).subscribe((data: any) => {
+ const ciudades = data.response;
+ const selectCiudad = document.getElementById('select-ciudad') as HTMLSelectElement;
+
+ selectCiudad.innerHTML = '';
+
+ ciudades.forEach((ciudad: any) => {
+ const option = document.createElement('option');
+ option.value = ciudad.id;
+ option.text = ciudad.name;
+ selectCiudad.appendChild(option);
+ });
+ selectCiudad.disabled = false;
+
+ // Establecemos la ciudad seleccionada en el select de la ciudad
+ this.perfilForm.controls['select-ciudad'].setValue(ciudad.id);
+ });
+
+ this.obtenerDatosRol().subscribe((data: any) => {
+ const roles = data.response;
+ const selectRol = document.getElementById('select-rol') as HTMLSelectElement;
+
+ selectRol.innerHTML = '';
+
+ roles.forEach((rol: any) => {
+ const option = document.createElement('option');
+ option.value = rol.id;
+ option.text = rol.name;
+ selectRol.appendChild(option);
+ });
+ this.perfilForm.controls['select-rol'].setValue(rol);
+ });
+
+ });
+ }
+ obtenerDatosUsuario(id: string): Observable {
+ const params = { id: id };
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/user/get?id=${params.id}`;
+ const response = this.http.get(url, this.httpOptions);
+ return response.pipe(
+ map((data: any) => {
+ console.log(data); // aquí puedes imprimir la respuesta si lo deseas
+ return data;
+ }),
+ catchError(error => {
+ console.error(error);
+ throw error;
+ })
+ );
+ }
+
+ openDialog():void{
+ const dialogRef = this.dialog.open(ConfirmDialogComponent,{
+ data: "¿Estás seguro que la informacion ingresada es correcta?"
+ });
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ this.editarUsuario();
+ }
+ })
+ }
+ editarUsuario() {
+ const id = localStorage.getItem('userId');
+ const name = (document.getElementById('name')).value;
+ const fecha = (document.getElementById("fechaCreacion") as HTMLInputElement).value;
+ const fechaObjeto = new Date(fecha);
+ const creationDate = fechaObjeto.toISOString();
+ const lastname = (document.getElementById('lastname')).value;
+ const username = (document.getElementById('username')).value;
+ const password = (document.getElementById('password')).value;
+ const doc = (document.getElementById('document')).value;
+ const email = (document.getElementById('email')).value;
+ const telefono = (document.getElementById('telefono')).value;
+
+ const ciudadSeleccionada = parseInt((document.getElementById('select-ciudad')).value, 10);
+ const state = true;
+ const rolSeleccionado = parseInt((document.getElementById('select-rol')).value, 10);
+
+
+ const jsonUsuario = {
+ id,
+ name,
+ creationDate,
+ lastname,
+ username,
+ password,
+ document: doc,
+ state,
+ email,
+ telefono,
+ roles: [
+ {
+ id: rolSeleccionado,
+ }
+ ],
+ ciudad: {
+ id: ciudadSeleccionada
+ },
+ };
+ console.log(jsonUsuario);
+
+ const nuevoUsuario = JSON.stringify(jsonUsuario); // Convertir el objeto en una cadena JSON
+
+ if (this.httpOptions) {
+ this.http.post('https://encuentro-matrimonial-backend.herokuapp.com/user/updateUsuario', nuevoUsuario, this.httpOptions)
+ .subscribe(data => {
+ alert('Usuario Actualizado exitosamente');
+ this.router.navigate(['/usuariosGrid']);
+ }, error => {
+ console.error(error);
+ });
+ } else {
+ alert('httpOptions no está definido, intente iniciar sesion nuevamente');
+ }
+ }
+ onSelectPais(idPais: string) {
+ this.obtenerDatosCiudad(idPais).subscribe((data: any) => {
+ const ciudades = data.response;
+ const selectCiudad = document.getElementById('select-ciudad') as HTMLSelectElement;
+
+ selectCiudad.innerHTML = '';
+
+ ciudades.forEach((ciudad: any) => {
+ const option = document.createElement('option');
+ option.value = ciudad.id;
+ option.text = ciudad.name;
+ selectCiudad.appendChild(option);
+ });
+ selectCiudad.disabled = false;
+
+ // reiniciar el selector de ciudades
+ this.perfilForm.controls['select-ciudad'].reset();
+
+ });
+ }
+
+ obtenerDatosCiudad(id: string) {
+ const params = { id: id };
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/ubicacion/getCiudadPaises?id=${userId}`;
+ const response = this.http.get(url, this.httpOptions);
+ return response
+ }
+
+ obtenerDatosPais(id: string){
+ const params = { id: id };
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/ubicacion/getPaises?id=${userId}`;
+ const response = this.http.get(url, this.httpOptions);
+
+ return response
+ }
+ obtenerDatosRol(){
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/rol/getRoles?id=${userId}`;
+ const response = this.http.get(url, this.httpOptions);
+ return response
+ }
+}
diff --git a/src/app/pilares/cuartoPilarGrid/cuartoPilarGrid.component.css b/src/app/pilares/cuartoPilarGrid/cuartoPilarGrid.component.css
new file mode 100644
index 000000000..74d772980
--- /dev/null
+++ b/src/app/pilares/cuartoPilarGrid/cuartoPilarGrid.component.css
@@ -0,0 +1,44 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+}
+.boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+ }
+
+ .pagination {
+ display: flex;
+ padding-left: 0px;
+ list-style: none;
+ border-radius: 0.25rem;
+ justify-content: center;
+
+}
+
+.pagination .page-link {
+ color: #000000 !important;
+ background-color: white !important;
+ border-color: white !important;
+}
+
+.pagination .page-item.active .page-link {
+ color: white !important;
+ background-color: #cd4042 !important;
+ border-color: white !important;
+}
+
+.table-responsive.table-full-width th {
+ color: black;
+ font-weight: bold;
+}
\ No newline at end of file
diff --git a/src/app/pilares/cuartoPilarGrid/cuartoPilarGrid.component.html b/src/app/pilares/cuartoPilarGrid/cuartoPilarGrid.component.html
new file mode 100644
index 000000000..01f0abc78
--- /dev/null
+++ b/src/app/pilares/cuartoPilarGrid/cuartoPilarGrid.component.html
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+ Fecha
+ #Serv. Post-Encuentro activos
+ #FDS Serv. Post-Encuentro P.
+ #Matrim. Vivi. Serv. Post-Encuentro
+ #Comuni. de apoyo
+ Acciones
+
+
+
+
+ {{row.fechaCreacion}}
+ {{row.numServidoresPostActivos}}
+ {{row.numFdsPostPeriodo}}
+ {{row.numMatrimoiosComunidad}}
+ {{row.numComunidadApoyo}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Nombre
+ Realizado
+ Proyectado
+
+
+
+
+ {{row.key}}
+ {{row.value}}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/pilares/cuartoPilarGrid/cuartoPilarGrid.component.spec.ts b/src/app/pilares/cuartoPilarGrid/cuartoPilarGrid.component.spec.ts
new file mode 100644
index 000000000..bad35b0e4
--- /dev/null
+++ b/src/app/pilares/cuartoPilarGrid/cuartoPilarGrid.component.spec.ts
@@ -0,0 +1,28 @@
+/* tslint:disable:no-unused-variable */
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { By } from '@angular/platform-browser';
+import { DebugElement } from '@angular/core';
+
+import { CuartoPilarGridComponent } from './cuartoPilarGrid.component';
+
+describe('CuartoPilarGridComponent', () => {
+ let component: CuartoPilarGridComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ CuartoPilarGridComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(CuartoPilarGridComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/pilares/cuartoPilarGrid/cuartoPilarGrid.component.ts b/src/app/pilares/cuartoPilarGrid/cuartoPilarGrid.component.ts
new file mode 100644
index 000000000..094d1b657
--- /dev/null
+++ b/src/app/pilares/cuartoPilarGrid/cuartoPilarGrid.component.ts
@@ -0,0 +1,320 @@
+import { Component, OnInit } from '@angular/core';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { Router } from '@angular/router';
+import * as XLSX from 'xlsx';
+import { MatDialog } from '@angular/material/dialog';
+import { ConfirmDownloadDialogComponent } from 'app/shared/confirm-download-dialog/confirm-download-dialog.component';
+import { ConfirmDeleteComponent } from 'app/shared/confirm-delete/confirm-delete.component';
+
+declare interface TableData {
+ headerRow: string[];
+ dataRows: string[][];
+}
+
+@Component({
+ selector: 'app-cuartoPilarGrid',
+ templateUrl: './cuartoPilarGrid.component.html',
+ styleUrls: ['./cuartoPilarGrid.component.css']
+})
+
+export class CuartoPilarGridComponent implements OnInit {
+ public tableData1: TableData;
+ public tableData2: TableData;
+ data: any; // variable para almacenar los datos obtenidos de la llamada
+ httpOptions: any;
+ currentPage = 1;
+ pageSize = 5; // Tamaño de página deseado
+ totalRecords = 20; // Número total de registros
+ // Calcula el número total de páginas
+ totalPages = Math.ceil(this.totalRecords / this.pageSize);
+ // Genera el array de páginas
+ pages = Array(this.totalPages).fill(0).map((x, i) => i + 1);
+
+ constructor(private http: HttpClient, private router: Router, public dialog: MatDialog) {
+ this.tableData1 = { headerRow: [], dataRows: [] };
+ this.tableData2 = { headerRow: [], dataRows: [] };
+ }
+ ngOnInit() {
+ let token = localStorage.getItem('jwt');
+ let userId = localStorage.getItem('userId');
+
+ console.log(token);
+
+ this.httpOptions = {
+ headers: new HttpHeaders({
+ 'Authorization': 'Bearer ' + token,
+ 'Content-Type': 'application/json'
+ })
+ };
+
+
+
+ this.http.get(`https://encuentro-matrimonial-backend.herokuapp.com/pilar/cuartoPilar/getAll?id=${userId}`, this.httpOptions)
+ .subscribe(response => {
+ console.log(response); // ver los datos obtenidos en la consola
+ const responseData = response['response']; // acceder al array 'response' dentro de la respuesta
+ if (responseData) {
+
+ this.tableData1.dataRows = responseData.slice(0, 5).map(item => {
+ return {
+ id: item.id,
+ numComunidadApoyo : item.numComunidadApoyo,
+ numFdsPostPeriodo : item.numFdsPostPeriodo,
+ fechaCreacion: new Date(new Date(item.fechaCreacion).getTime() + 86400000).toLocaleDateString('es-ES', {year: 'numeric', month: '2-digit', day: '2-digit'}).split('/').join('-'),
+ numMatrimoiosComunidad: item.numMatrimoiosComunidad,
+ numMatrimonioVivieron: item.numMatrimonioVivieron,
+ numSacerdotesComunidad: item.numSacerdotesComunidad,
+ numServiciosComunidad: item.numServiciosComunidad,
+ numServidoresPostActivos: item.numServidoresPostActivos,
+
+ }
+ });
+
+ const responseData2 = response['totalResponse']; // acceder al array 'response' dentro de la respuesta
+ this.tableData2.dataRows = responseData2.slice(0, 5).map(item => {
+ return {
+ key: item.key,
+ value : item.value,
+ }
+ });
+
+
+ this.data = responseData;
+ // Calcular el número total de páginas
+ this.totalPages = Math.ceil(this.data.length / this.pageSize);
+
+ // Generar un array con las páginas
+ this.pages = Array.from({ length: this.totalPages }, (_, i) => i + 1);
+
+ // Actualizar los datos de la página actual
+ this.setCurrentPage(1);
+ }
+ });
+
+ }
+ setCurrentPage(page: number) {
+ this.currentPage = page;
+ const start = (page - 1) * 5;
+ const end = start + 5;
+ this.tableData1.dataRows = this.data.slice(start, end).map(item => {
+ return {
+ id: item.id,
+ numComunidadApoyo : item.numComunidadApoyo,
+ numFdsPostPeriodo : item.numFdsPostPeriodo,
+ fechaCreacion: new Date(new Date(item.fechaCreacion).getTime() + 86400000).toLocaleDateString('es-ES', {year: 'numeric', month: '2-digit', day: '2-digit'}).split('/').join('-'),
+ numMatrimoiosComunidad: item.numMatrimoiosComunidad,
+ numMatrimonioVivieron: item.numMatrimonioVivieron,
+ numSacerdotesComunidad: item.numSacerdotesComunidad,
+ numServiciosComunidad: item.numServiciosComunidad,
+ numServidoresPostActivos: item.numServidoresPostActivos,
+ }
+ });
+ }
+ calculatePageData() {
+ const start = (this.currentPage - 1) * this.pageSize;
+ const end = start + this.pageSize;
+ this.tableData1.dataRows = this.data.slice(start, end);
+ }
+ editRow(row) {
+ const elementId = row.id;
+ console.log(elementId);
+ this.router.navigate(['/editarCuartoPilar', elementId]);
+
+ }
+ openDialogDelete(row):void{
+ const dialogRef = this.dialog.open(ConfirmDeleteComponent,{
+ });
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ this.deleteRow(row);
+ }
+ })
+ }
+ public deleteRow(row) {
+ const params = { id: row.id };
+ console.log(this.httpOptions);
+ const token = localStorage.getItem('jwt');
+ const httpOptions = {
+ headers: new HttpHeaders({
+ 'Content-Type': 'application/json',
+ 'Authorization': `Bearer ${token}`
+ })
+ };
+ const response = this.http.post(`https://encuentro-matrimonial-backend.herokuapp.com/pilar/cuartoPilar/delete?id=${params.id}`, {}, httpOptions);
+
+ response.subscribe((result: any) => {
+
+ // Actualizar la tabla llamando la función getTableData()
+ this.getTableData();
+ this.getTableData2();
+ });
+ }
+
+ public getTableData() {
+ let userId = localStorage.getItem('userId');
+ this.http.get(`https://encuentro-matrimonial-backend.herokuapp.com/pilar/cuartoPilar/getAll?id=${userId}`, this.httpOptions)
+ .subscribe(response => {
+ console.log(response); // ver los datos obtenidos en la consola
+ const responseData = response['response']; // acceder al array 'response' dentro de la respuesta
+ this.tableData1.dataRows = responseData.map(item => {
+ return {
+ id: item.id,
+ numComunidadApoyo : item.numComunidadApoyo,
+ numFdsPostPeriodo : item.numFdsPostPeriodo,
+ fechaCreacion: new Date(new Date(item.fechaCreacion).getTime() + 86400000).toLocaleDateString('es-ES', {year: 'numeric', month: '2-digit', day: '2-digit'}).split('/').join('-'),
+ numMatrimoiosComunidad: item.numMatrimoiosComunidad,
+ numMatrimonioVivieron: item.numMatrimonioVivieron,
+ numSacerdotesComunidad: item.numSacerdotesComunidad,
+ numServiciosComunidad: item.numServiciosComunidad,
+ numServidoresPostActivos: item.numServidoresPostActivos,
+ }
+ });
+
+ this.data = responseData;
+ });
+ }
+
+ public getTableData2() {
+ let userId = localStorage.getItem('userId');
+ this.http.get(`https://encuentro-matrimonial-backend.herokuapp.com/pilar/primerPilar/getAll?id=${userId}`, this.httpOptions)
+ .subscribe(response => {
+ console.log(response); // ver los datos obtenidos en la consola
+ const responseData = response['totalResponse']; // acceder al array 'response' dentro de la respuesta
+ this.tableData2.dataRows = responseData.map(item => {
+ return {
+ key: item.key,
+ value : item.value,
+ }
+ });
+
+ this.data = responseData;
+ });
+ }
+
+ openDialog():void{
+ const dialogRef = this.dialog.open(ConfirmDownloadDialogComponent,{
+ });
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ this.generateExcel();
+ }
+ })
+ }
+
+ generateExcel(){
+ let userId = localStorage.getItem('userId');
+ // Realizar la consulta y obtener los datos en un arreglo
+ this.http.get(`https://encuentro-matrimonial-backend.herokuapp.com/pilar/segundoPilar/?id=${userId}`, this.httpOptions)
+ .subscribe(data => {
+ const rows = [];
+
+ // Agregar los encabezados como primera fila
+ const headers = [
+ 'Fecha de Creación',
+ 'Num. Servidores Post Activos',
+ 'Num. FDS Post Periodo',
+ 'Num. Matrimonios Vivieron',
+ 'Num. Comunidad Apoyo',
+ 'Num. Servicios Comunidad',
+ 'Num. Matrimonios Comunidad',
+ 'Num. Sacerdotes Comunidad',
+ 'Num. Religiosos Comunidad'
+ ];
+
+ rows.push(headers);
+ console.log(data)
+ const responseData = data['response']; // acceder al array 'response' dentro de la respuesta
+
+ responseData.forEach(item => {
+ const row = [
+ item.id,
+ new Date(item.fechaCreacion).toLocaleDateString('es-ES'),
+ item.numServidoresPostActivos,
+ item.numFdsPostPeriodo,
+ item.numMatrimonioVivieron,
+ item.numComunidadApoyo,
+ item.numServiciosComunidad,
+ item.numMatrimoiosComunidad,
+ item.numSacerdotesComunidad,
+ item.numReligiososComunidad
+ ];
+ rows.push(row);
+ });
+ // Crear una nueva hoja de cálculo de Excel
+ const worksheet = XLSX.utils.aoa_to_sheet(rows);
+
+ // Crear un libro de Excel y agregar la hoja de cálculo
+ const workbook = XLSX.utils.book_new();
+ XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
+
+ // Convertir el libro de Excel a un archivo binario y descargarlo
+ const file = XLSX.write(workbook, { type: 'binary', bookType: 'xlsx' });
+ const blob = new Blob([this.s2ab(file)], { type: 'application/octet-stream' });
+ const url = window.URL.createObjectURL(blob);
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = 'CuartoPilar.xlsx';
+ link.click();
+ })
+ }
+ // Función para convertir una cadena a un arreglo de bytes
+ s2ab(s: string) {
+ const buf = new ArrayBuffer(s.length);
+ const view = new Uint8Array(buf);
+ for (let i = 0; i < s.length; i++) {
+ view[i] = s.charCodeAt(i) & 0xff;
+ }
+ return buf;
+ }
+ filterByDate(selectedDate: string) {
+ const selectedDateObj = new Date(selectedDate);
+ const selectedYear = selectedDateObj.getFullYear();
+ const selectedMonth = selectedDateObj.getMonth() + 1; // Los meses en JavaScript van de 0 a 11
+ const selectedDay = selectedDateObj.getDate();
+
+ const filteredData = this.data.filter(item => {
+ const itemDate = new Date(item.fechaCreacion);
+ const itemYear = itemDate.getFullYear();
+ const itemMonth = itemDate.getMonth() + 1; // Los meses en JavaScript van de 0 a 11
+ const itemDay = itemDate.getDate();
+
+ return itemYear === selectedYear && itemMonth === selectedMonth && itemDay === selectedDay;
+ });
+
+ this.totalPages = Math.ceil(filteredData.length / this.pageSize); // Actualizar el número total de páginas
+
+ // Verificar si la página actual es mayor al nuevo número total de páginas y ajustarla si es necesario
+ if (this.currentPage > this.totalPages) {
+ this.currentPage = this.totalPages;
+ }
+
+ const start = (this.currentPage - 1) * this.pageSize;
+ const end = start + this.pageSize;
+
+ this.tableData1.dataRows = filteredData.slice(start, end).map(item => {
+ const fechaCreacion = new Date(item.fechaCreacion);
+ fechaCreacion.setDate(fechaCreacion.getDate() + 1);
+
+ return {
+ id: item.id,
+ numComunidadApoyo : item.numComunidadApoyo,
+ numFdsPostPeriodo : item.numFdsPostPeriodo,
+ fechaCreacion: fechaCreacion
+ .toLocaleDateString('es-ES', { year: 'numeric', month: '2-digit', day: '2-digit' })
+ .split('/')
+ .join('-'), numMatrimoiosComunidad: item.numMatrimoiosComunidad,
+ numMatrimonioVivieron: item.numMatrimonioVivieron,
+ numSacerdotesComunidad: item.numSacerdotesComunidad,
+ numServiciosComunidad: item.numServiciosComunidad,
+ numServidoresPostActivos: item.numServidoresPostActivos,
+
+
+
+ };
+ });
+ }
+ }
+
+
diff --git a/src/app/pilares/cuartoPilarGrid/editarCuartoPilar/editarCuartoPilar.component.css b/src/app/pilares/cuartoPilarGrid/editarCuartoPilar/editarCuartoPilar.component.css
new file mode 100644
index 000000000..53d51aa1c
--- /dev/null
+++ b/src/app/pilares/cuartoPilarGrid/editarCuartoPilar/editarCuartoPilar.component.css
@@ -0,0 +1,21 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+}
+.boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+ }
+ .letra{
+ color: black;
+ }
\ No newline at end of file
diff --git a/src/app/pilares/cuartoPilarGrid/editarCuartoPilar/editarCuartoPilar.component.html b/src/app/pilares/cuartoPilarGrid/editarCuartoPilar/editarCuartoPilar.component.html
new file mode 100644
index 000000000..e178342a6
--- /dev/null
+++ b/src/app/pilares/cuartoPilarGrid/editarCuartoPilar/editarCuartoPilar.component.html
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/pilares/cuartoPilarGrid/editarCuartoPilar/editarCuartoPilar.component.spec.ts b/src/app/pilares/cuartoPilarGrid/editarCuartoPilar/editarCuartoPilar.component.spec.ts
new file mode 100644
index 000000000..4410b9fea
--- /dev/null
+++ b/src/app/pilares/cuartoPilarGrid/editarCuartoPilar/editarCuartoPilar.component.spec.ts
@@ -0,0 +1,27 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { By } from '@angular/platform-browser';
+import { DebugElement } from '@angular/core';
+
+import { EditarCuartoPilarComponent } from './editarCuartoPilar.component';
+
+describe('EditarCuartoPilarComponent', () => {
+ let component: EditarCuartoPilarComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ EditarCuartoPilarComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(EditarCuartoPilarComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/pilares/cuartoPilarGrid/editarCuartoPilar/editarCuartoPilar.component.ts b/src/app/pilares/cuartoPilarGrid/editarCuartoPilar/editarCuartoPilar.component.ts
new file mode 100644
index 000000000..e767fdec4
--- /dev/null
+++ b/src/app/pilares/cuartoPilarGrid/editarCuartoPilar/editarCuartoPilar.component.ts
@@ -0,0 +1,258 @@
+import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { Router } from '@angular/router';
+import { Observable } from 'rxjs';
+import { ActivatedRoute } from '@angular/router';
+import { FormBuilder, FormGroup, Validators} from '@angular/forms';
+import { MatDialog } from '@angular/material/dialog';
+import { ConfirmDialogComponent } from 'app/shared/confirm-dialog/confirm-dialog.component';
+import { ConfirmCreationComponent } from 'app/shared/confirm-creation/confirm-creation.component';
+
+
+@Component({
+ selector: 'app-editarCuartoPilar',
+ templateUrl: './editarCuartoPilar.component.html',
+ styleUrls: ['./editarCuartoPilar.component.css']
+})
+export class EditarCuartoPilarComponent implements OnInit {
+
+ editarCuartoPilarForm: FormGroup;
+ httpOptions: any;
+ token: any;
+ response: any;
+ datosCargados: boolean;
+ @ViewChild('fechaInput') fechaInput: ElementRef;
+ ciudades: any[]; // Declarar la propiedad 'ciudades'
+ paises: any[]; // Declarar la propiedad 'paises'
+ selectedCiudad: string;
+ selectedPais: string;
+ data: any;
+ pais: any; // cambia a tipo any
+ fechaCreacion: string;
+ rolId: number;
+ mostrarBotonGuardar: boolean = false;
+
+ constructor(private http: HttpClient, private router: Router, public dialog: MatDialog,
+ private activatedRoute: ActivatedRoute, private formBuilder: FormBuilder) {
+ this.editarCuartoPilarForm = this.formBuilder.group({
+ id: [null],
+ fechaCreacion: [null, Validators.required],
+ numServidoresPostActivos: [null, Validators.required],
+ numFdsPostPeriodo: [null, Validators.required],
+ numMatrimonioVivieron: [null, Validators.required],
+ numComunidadApoyo: [null, Validators.required],
+ numServiciosComunidad: [null, Validators.required],
+ numMatrimoiosComunidad: [null, Validators.required],
+ numSacerdotesComunidad: [null, Validators.required],
+ numReligiososComunidad: [null, Validators.required],
+ 'select-pais': ['', Validators.required],
+ 'select-ciudad': ['', Validators.required]
+
+
+ });
+ }
+ ngOnInit() {
+
+
+ let token = localStorage.getItem('jwt');
+ let rolIdString = localStorage.getItem('rolId');
+ this.rolId = parseInt(rolIdString, 10);
+ this.mostrarBotonGuardar = this.actualizarMostrarBotonGuardar(this.rolId);
+
+ this.httpOptions = {
+ headers: new HttpHeaders({
+ 'Authorization': 'Bearer ' + token,
+ 'Content-Type': 'application/json'
+ })
+ };
+
+ const elementId = this.activatedRoute.snapshot.paramMap.get('id');
+
+ this.obtenerDatosDelPilar(elementId).subscribe(data => {
+ // Asignar los datos del elemento al formulario utilizando setValue()
+
+ let fecha = new Date(data.response.fechaCreacion);
+ let fechaFormateada = fecha.toISOString().substring(0, 10);
+ this.editarCuartoPilarForm.controls['fechaCreacion'].setValue(fechaFormateada);
+ this.editarCuartoPilarForm.controls['numServidoresPostActivos'].setValue(data.response.numServidoresPostActivos);
+ this.editarCuartoPilarForm.controls['numFdsPostPeriodo'].setValue(data.response.numFdsPostPeriodo);
+ this.editarCuartoPilarForm.controls['numMatrimonioVivieron'].setValue(data.response.numMatrimonioVivieron);
+ this.editarCuartoPilarForm.controls['numComunidadApoyo'].setValue(data.response.numComunidadApoyo);
+ this.editarCuartoPilarForm.controls['numServiciosComunidad'].setValue(data.response.numServiciosComunidad);
+ this.editarCuartoPilarForm.controls['numMatrimoiosComunidad'].setValue(data.response.numMatrimoiosComunidad);
+ this.editarCuartoPilarForm.controls['numSacerdotesComunidad'].setValue(data.response.numSacerdotesComunidad);
+ this.editarCuartoPilarForm.controls['numReligiososComunidad'].setValue(data.response.numReligiososComunidad);
+ const pais = data.response.ciudad.pais;
+ const ciudad = data.response.ciudad;
+
+ console.log(pais.id)
+ this.editarCuartoPilarForm.controls['select-pais'].setValue(pais.id);
+
+ this.obtenerDatosPais(pais.id).subscribe((data: any) => {
+ const paises = data.response;
+ const selectPais = document.getElementById('select-pais') as HTMLSelectElement;
+
+ selectPais.innerHTML = '';
+
+ paises.forEach((pais: any) => {
+ const option = document.createElement('option');
+ option.value = pais.id;
+ option.text = pais.name;
+ selectPais.appendChild(option);
+ });
+
+ // Establecemos el país seleccionado en el select del país
+ this.editarCuartoPilarForm.controls['select-pais'].setValue(pais.id);
+ });
+
+ this.obtenerDatosCiudad(pais.id).subscribe((data: any) => {
+ const ciudades = data.response;
+ console.log(ciudades);
+ const selectCiudad = document.getElementById('select-ciudad') as HTMLSelectElement;
+
+ selectCiudad.innerHTML = '';
+
+ ciudades.forEach((ciudad: any) => {
+ const option = document.createElement('option');
+ option.value = ciudad.id;
+ option.text = ciudad.name;
+ selectCiudad.appendChild(option);
+ });
+ selectCiudad.disabled = false;
+
+ // Establecemos la ciudad seleccionada en el select de la ciudad
+ this.editarCuartoPilarForm.controls['select-ciudad'].setValue(ciudad.id);
+ });
+
+ console.log(data.response);
+
+ this.datosCargados = true;
+ console.log(this.datosCargados);
+ });
+
+
+ }
+ actualizarMostrarBotonGuardar(rol: number): boolean {
+ console.log(rol);
+ const mostrarBoton = rol !== 1;
+ console.log(mostrarBoton);
+ return mostrarBoton;
+ }
+ obtenerDatosDelPilar(id: string): Observable {
+ const params = { id: id };
+ console.log(this.token);
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/pilar/cuartoPilar/get?id=${params.id}`;
+ const response = this.http.get(url, this.httpOptions);
+
+ return response
+ }
+
+
+ openDialog():void{
+ const dialogRef = this.dialog.open(ConfirmDialogComponent,{
+ data: "¿Estás seguro que la informacion ingresada es correcta?"
+ });
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ this.editarPilar();
+ }
+ })
+ }
+ openDialogConfirm():void{
+ const dialogRef = this.dialog.open(ConfirmCreationComponent,{
+ data: ""
+ });
+
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ close;
+ }
+ })
+ }
+
+ editarPilar() {
+ const id = this.activatedRoute.snapshot.paramMap.get('id');
+ const fecha = (document.getElementById("fechaCreacion") as HTMLInputElement).value;
+ const fechaObjeto = new Date(fecha);
+ const fechaCreacion = fechaObjeto.toISOString();
+ const numServidoresPostActivos = (document.getElementById('numServidoresPostActivos')).value;
+ const numFdsPostPeriodo = (document.getElementById('numFdsPostPeriodo')).value;
+ const numMatrimonioVivieron = (document.getElementById('numMatrimonioVivieron')).value;
+ const numComunidadApoyo = (document.getElementById('numComunidadApoyo')).value;
+ const numServiciosComunidad = (document.getElementById('numServiciosComunidad')).value;
+ const numMatrimoiosComunidad = (document.getElementById('numMatrimoiosComunidad')).value;
+ const numSacerdotesComunidad = (document.getElementById('numSacerdotesComunidad')).value;
+ const numReligiososComunidad = (document.getElementById('numReligiososComunidad')).value;
+ const ciudadSeleccionada = (document.getElementById('select-ciudad')).value;
+
+ const editCuartoPilar = {
+ id,
+ fechaCreacion,
+ numServidoresPostActivos,
+ numFdsPostPeriodo,
+ numMatrimonioVivieron,
+ numComunidadApoyo,
+ numServiciosComunidad,
+ numMatrimoiosComunidad,
+ numSacerdotesComunidad,
+ numReligiososComunidad,
+ ciudad: {
+ id: ciudadSeleccionada
+ },
+ };
+ const jsonCuartoPilar = JSON.stringify(editCuartoPilar); // Convertir el objeto en una cadena JSON
+ console.log(jsonCuartoPilar);
+ console.log(this.httpOptions);
+
+ if (this.httpOptions) {
+ this.http.post('https://encuentro-matrimonial-backend.herokuapp.com/pilar/cuartoPilar/update', jsonCuartoPilar, this.httpOptions)
+ .subscribe(data => {
+ console.log(data);
+ this.openDialogConfirm();
+ this.router.navigate(['/cuartoPilarGrid']);
+ }, error => {
+ console.error(error);
+ });
+ } else {
+ alert('httpOptions no está definido, intente iniciar sesion nuevamente');
+ }
+ }
+ onSelectPais(idPais: string) {
+ this.obtenerDatosCiudad(idPais).subscribe((data: any) => {
+ const ciudades = data.response;
+ const selectCiudad = document.getElementById('select-ciudad') as HTMLSelectElement;
+
+ selectCiudad.innerHTML = '';
+
+ ciudades.forEach((ciudad: any) => {
+ const option = document.createElement('option');
+ option.value = ciudad.id;
+ option.text = ciudad.name;
+ selectCiudad.appendChild(option);
+ });
+ selectCiudad.disabled = false;
+
+ // reiniciar el selector de ciudades
+ this.editarCuartoPilarForm.controls['select-ciudad'].reset();
+
+ });
+ }
+ obtenerDatosCiudad(id: string) {
+ const params = { id: id };
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/ubicacion/getCiudadPaises?id=${userId}`;
+ const response = this.http.get(url, this.httpOptions);
+ return response
+ }
+
+ obtenerDatosPais(id: string){
+ const params = { id: id };
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/ubicacion/getPaises?id=${userId}`;
+ const response = this.http.get(url, this.httpOptions);
+
+ return response
+ }
+}
\ No newline at end of file
diff --git a/src/app/pilares/cuartoPilarGrid/nuevoCuartoPilar/nuevoCuartoPilar.component.css b/src/app/pilares/cuartoPilarGrid/nuevoCuartoPilar/nuevoCuartoPilar.component.css
new file mode 100644
index 000000000..53d51aa1c
--- /dev/null
+++ b/src/app/pilares/cuartoPilarGrid/nuevoCuartoPilar/nuevoCuartoPilar.component.css
@@ -0,0 +1,21 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+}
+.boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+ }
+ .letra{
+ color: black;
+ }
\ No newline at end of file
diff --git a/src/app/pilares/cuartoPilarGrid/nuevoCuartoPilar/nuevoCuartoPilar.component.html b/src/app/pilares/cuartoPilarGrid/nuevoCuartoPilar/nuevoCuartoPilar.component.html
new file mode 100644
index 000000000..c3a227f2c
--- /dev/null
+++ b/src/app/pilares/cuartoPilarGrid/nuevoCuartoPilar/nuevoCuartoPilar.component.html
@@ -0,0 +1,125 @@
+
diff --git a/src/app/pilares/cuartoPilarGrid/nuevoCuartoPilar/nuevoCuartoPilar.component.spec.ts b/src/app/pilares/cuartoPilarGrid/nuevoCuartoPilar/nuevoCuartoPilar.component.spec.ts
new file mode 100644
index 000000000..618651cbf
--- /dev/null
+++ b/src/app/pilares/cuartoPilarGrid/nuevoCuartoPilar/nuevoCuartoPilar.component.spec.ts
@@ -0,0 +1,27 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { By } from '@angular/platform-browser';
+import { DebugElement } from '@angular/core';
+
+import { NuevoCuartoPilarComponent } from './nuevoCuartoPilar.component';
+
+describe('NuevoPrimerPilarComponent', () => {
+ let component: NuevoCuartoPilarComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ NuevoCuartoPilarComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(NuevoCuartoPilarComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/pilares/cuartoPilarGrid/nuevoCuartoPilar/nuevoCuartoPilar.component.ts b/src/app/pilares/cuartoPilarGrid/nuevoCuartoPilar/nuevoCuartoPilar.component.ts
new file mode 100644
index 000000000..013228de5
--- /dev/null
+++ b/src/app/pilares/cuartoPilarGrid/nuevoCuartoPilar/nuevoCuartoPilar.component.ts
@@ -0,0 +1,159 @@
+import { Component, OnInit } from '@angular/core';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { Router } from '@angular/router';
+import { Observable } from 'rxjs';
+import { MatDialog } from '@angular/material/dialog';
+import { ConfirmDialogComponent } from 'app/shared/confirm-dialog/confirm-dialog.component';
+import { ConfirmCreationComponent } from 'app/shared/confirm-creation/confirm-creation.component';
+
+
+@Component({
+ selector: 'app-nuevoCuartoPilar',
+ templateUrl: './nuevoCuartoPilar.component.html',
+ styleUrls: ['./nuevoCuartoPilar.component.css']
+})
+export class NuevoCuartoPilarComponent implements OnInit {
+
+ httpOptions: any;
+ token: any;
+ ciudades: any[]; // Declarar la propiedad 'ciudades'
+ paises: any[]; // Declarar la propiedad 'paises'
+ selectedCiudad: string;
+ selectedPais: string;
+
+ constructor(private http: HttpClient, private router: Router, public dialog: MatDialog) {}
+
+ ngOnInit() {
+ let token = localStorage.getItem('jwt');
+ console.log(token);
+
+ this.httpOptions = {
+ headers: new HttpHeaders({
+ 'Authorization': 'Bearer ' + token,
+ 'Content-Type': 'application/json'
+ })
+ };
+ // Obtener los datos del país
+ this.obtenerDatosPais().subscribe((data) => {
+ // Obtener la respuesta del JSON
+ const response = data.response;
+ // Obtener el select del HTML
+ const selectPais = document.getElementById('select-pais') as HTMLSelectElement;
+
+ // Crear un option por cada país en la respuesta del JSON
+ response.forEach((pais: any) => {
+ const option = document.createElement('option');
+ option.value = pais.id;
+ option.text = pais.name;
+ selectPais.appendChild(option);
+ });
+ });
+ }
+
+
+ openDialog():void{
+ const dialogRef = this.dialog.open(ConfirmDialogComponent,{
+ data: "¿Estás seguro que la informacion ingresada es correcta?"
+ });
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ this.newPilar();
+ }
+ })
+ }
+
+ openDialogConfirm():void{
+ const dialogRef = this.dialog.open(ConfirmCreationComponent,{
+ data: ""
+ });
+
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ close;
+ }
+ })
+ }
+
+ newPilar() {
+ const fecha = (document.getElementById("fecha") as HTMLInputElement).value;
+ const fechaObjeto = new Date(fecha);
+ const fechaCreacion = fechaObjeto.toISOString();
+ const numServidoresPostActivos = (document.getElementById('numServidoresPostActivos')).value;
+ const numFdsPostPeriodo = (document.getElementById('numFdsPostPeriodo')).value;
+ const numMatrimonioVivieron = (document.getElementById('numMatrimonioVivieron')).value;
+ const numComunidadApoyo = (document.getElementById('numComunidadApoyo')).value;
+ const numServiciosComunidad = (document.getElementById('numServiciosComunidad')).value;
+ const numMatrimoiosComunidad = (document.getElementById('numMatrimoiosComunidad')).value;
+ const numSacerdotesComunidad = (document.getElementById('numSacerdotesComunidad')).value;
+ const numReligiososComunidad = (document.getElementById('numReligiososComunidad')).value;
+ const ciudadSeleccionada = (document.getElementById('select-ciudad')).value;
+
+ const jsonCuartoPilar = {
+ fechaCreacion,
+ numServidoresPostActivos,
+ numFdsPostPeriodo,
+ numMatrimonioVivieron,
+ numComunidadApoyo,
+ numServiciosComunidad,
+ numMatrimoiosComunidad,
+ numSacerdotesComunidad,
+ numReligiososComunidad,
+ ciudad: {
+ id: ciudadSeleccionada
+ },
+ };
+
+ const jsonSegundoPilar = JSON.stringify(jsonCuartoPilar); // Convertir el objeto en una cadena JSON
+ console.log(jsonSegundoPilar);
+
+ if (this.httpOptions) {
+ this.http.post('https://encuentro-matrimonial-backend.herokuapp.com/pilar/cuartoPilar/create', jsonSegundoPilar, this.httpOptions)
+ .subscribe(data => {
+ console.log(data);
+ this.openDialogConfirm();
+ this.router.navigate(['/cuartoPilarGrid']);
+ }, error => {
+ console.error(error);
+ });
+ } else {
+ alert('httpOptions no está definido, intente iniciar sesion nuevamente');
+ console.log('httpOptions no está definido');
+ }
+ }
+ onSelectPais(idPais: string) {
+ this.obtenerDatosCiudad(idPais).subscribe((data: any) => {
+ const ciudades = data.response;
+ const selectCiudad = document.getElementById('select-ciudad') as HTMLSelectElement;
+
+ // Limpiar el select de ciudades
+ selectCiudad.innerHTML = '';
+
+ // Crear un option por cada ciudad en la respuesta del JSON
+ ciudades.forEach((ciudad: any) => {
+ const option = document.createElement('option');
+ option.value = ciudad.id;
+ option.text = ciudad.name;
+ selectCiudad.appendChild(option);
+ });
+ selectCiudad.disabled = false;
+
+ });
+ }
+
+ obtenerDatosCiudad(id: string) {
+ const params = { id: id };
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/ubicacion/getCiudadPaises?id=${userId}`;
+ const response = this.http.get(url, this.httpOptions);
+ return response
+ }
+
+ obtenerDatosPais(): Observable {
+ console.log(this.token);
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/ubicacion/getPaises?id=${userId}`;
+ return this.http.get(url, this.httpOptions);
+ }
+}
diff --git a/src/app/pilares/primerPilarGrid/editarPrimerPilar/editarPrimerPilar.component.css b/src/app/pilares/primerPilarGrid/editarPrimerPilar/editarPrimerPilar.component.css
new file mode 100644
index 000000000..53d51aa1c
--- /dev/null
+++ b/src/app/pilares/primerPilarGrid/editarPrimerPilar/editarPrimerPilar.component.css
@@ -0,0 +1,21 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+}
+.boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+ }
+ .letra{
+ color: black;
+ }
\ No newline at end of file
diff --git a/src/app/pilares/primerPilarGrid/editarPrimerPilar/editarPrimerPilar.component.html b/src/app/pilares/primerPilarGrid/editarPrimerPilar/editarPrimerPilar.component.html
new file mode 100644
index 000000000..2c59fcfcd
--- /dev/null
+++ b/src/app/pilares/primerPilarGrid/editarPrimerPilar/editarPrimerPilar.component.html
@@ -0,0 +1,92 @@
+
+
+
diff --git a/src/app/pilares/primerPilarGrid/editarPrimerPilar/editarPrimerPilar.component.spec.ts b/src/app/pilares/primerPilarGrid/editarPrimerPilar/editarPrimerPilar.component.spec.ts
new file mode 100644
index 000000000..42a9410f4
--- /dev/null
+++ b/src/app/pilares/primerPilarGrid/editarPrimerPilar/editarPrimerPilar.component.spec.ts
@@ -0,0 +1,27 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { By } from '@angular/platform-browser';
+import { DebugElement } from '@angular/core';
+
+import { EditarPrimerPilarComponent } from './editarPrimerPilar.component';
+
+describe('EditarPrimerPilarComponent', () => {
+ let component: EditarPrimerPilarComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ EditarPrimerPilarComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(EditarPrimerPilarComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/pilares/primerPilarGrid/editarPrimerPilar/editarPrimerPilar.component.ts b/src/app/pilares/primerPilarGrid/editarPrimerPilar/editarPrimerPilar.component.ts
new file mode 100644
index 000000000..d38724cf6
--- /dev/null
+++ b/src/app/pilares/primerPilarGrid/editarPrimerPilar/editarPrimerPilar.component.ts
@@ -0,0 +1,234 @@
+import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { Router } from '@angular/router';
+import { Observable } from 'rxjs';
+import { ActivatedRoute } from '@angular/router';
+import {FormBuilder, FormControl, FormGroup, NgForm , Validators} from '@angular/forms';
+import { DatePipe } from '@angular/common';
+import { MatDialog } from '@angular/material/dialog';
+import { ConfirmDialogComponent } from 'app/shared/confirm-dialog/confirm-dialog.component';
+import { ConfirmCreationComponent } from 'app/shared/confirm-creation/confirm-creation.component';
+
+@Component({
+ selector: 'app-editarPrimerPilar',
+ templateUrl: './editarPrimerPilar.component.html',
+ styleUrls: ['./editarPrimerPilar.component.css']
+})
+export class EditarPrimerPilarComponent implements OnInit {
+
+ editarPrimerPilarForm: FormGroup;
+ httpOptions: any;
+ token: any;
+ response: any;
+ datosCargados: boolean;
+ @ViewChild('fechaInput') fechaInput: ElementRef;
+ ciudades: any[]; // Declarar la propiedad 'ciudades'
+ paises: any[]; // Declarar la propiedad 'paises'
+ selectedCiudad: string;
+ selectedPais: string;
+ data: any;
+ pais: any; // cambia a tipo any
+ fechaCreacion: string;
+ rolId: number;
+ mostrarBotonGuardar: boolean = false;
+
+
+ constructor(private http: HttpClient, private router: Router, public dialog: MatDialog,
+ private activatedRoute: ActivatedRoute, private formBuilder: FormBuilder) {
+ this.editarPrimerPilarForm = this.formBuilder.group({
+ id: [null],
+ fechaCreacion: [null, Validators.required],
+ numFDS: [null, Validators.required],
+ numMatrinoniosVivieron: [null, Validators.required],
+ numSacerdotesVivieron: [null, Validators.required],
+ numReligiososVivieron: [null, Validators.required],
+
+ 'select-pais': ['', Validators.required],
+ 'select-ciudad': ['', Validators.required]
+ });
+ }
+ ngOnInit() {
+ let token = localStorage.getItem('jwt');
+ let rolIdString = localStorage.getItem('rolId');
+ this.rolId = parseInt(rolIdString, 10);
+ this.mostrarBotonGuardar = this.actualizarMostrarBotonGuardar(this.rolId);
+
+ this.httpOptions = {
+ headers: new HttpHeaders({
+ 'Authorization': 'Bearer ' + token,
+ 'Content-Type': 'application/json'
+ })
+ };
+
+ const elementId = this.activatedRoute.snapshot.paramMap.get('id');
+
+ this.obtenerDatosDelPilar(elementId).subscribe(data => {
+ let fecha = new Date(data.response.fechaCreacion);
+ let fechaFormateada = fecha.toISOString().substring(0, 10);
+ this.editarPrimerPilarForm.controls['fechaCreacion'].setValue(fechaFormateada);
+ this.editarPrimerPilarForm.controls['numFDS'].setValue(data.response.numMatrinoniosVivieron);
+ this.editarPrimerPilarForm.controls['numMatrinoniosVivieron'].setValue(data.response.numMatrinoniosVivieron);
+ this.editarPrimerPilarForm.controls['numSacerdotesVivieron'].setValue(data.response.numSacerdotesVivieron);
+ this.editarPrimerPilarForm.controls['numReligiososVivieron'].setValue(data.response.numReligiososVivieron);
+
+ const pais = data.response.ciudad.pais;
+ const ciudad = data.response.ciudad;
+
+ this.editarPrimerPilarForm.controls['select-pais'].setValue(pais.id);
+
+ this.obtenerDatosPais(pais.id).subscribe((data: any) => {
+ const paises = data.response;
+ const selectPais = document.getElementById('select-pais') as HTMLSelectElement;
+
+ selectPais.innerHTML = '';
+
+ paises.forEach((pais: any) => {
+ const option = document.createElement('option');
+ option.value = pais.id;
+ option.text = pais.name;
+ selectPais.appendChild(option);
+ });
+
+ // Establecemos el país seleccionado en el select del país
+ this.editarPrimerPilarForm.controls['select-pais'].setValue(pais.id);
+ });
+
+ this.obtenerDatosCiudad(pais.id).subscribe((data: any) => {
+ const ciudades = data.response;
+ console.log(ciudades);
+ const selectCiudad = document.getElementById('select-ciudad') as HTMLSelectElement;
+
+ selectCiudad.innerHTML = '';
+
+ ciudades.forEach((ciudad: any) => {
+ const option = document.createElement('option');
+ option.value = ciudad.id;
+ option.text = ciudad.name;
+ selectCiudad.appendChild(option);
+ });
+ selectCiudad.disabled = false;
+
+ // Establecemos la ciudad seleccionada en el select de la ciudad
+ this.editarPrimerPilarForm.controls['select-ciudad'].setValue(ciudad.id);
+ });
+
+ });
+ }
+ actualizarMostrarBotonGuardar(rol: number): boolean {
+ console.log(rol);
+ const mostrarBoton = rol !== 1;
+ console.log(mostrarBoton);
+ return mostrarBoton;
+ }
+ obtenerDatosDelPilar(id: string): Observable {
+ const params = { id: id };
+ console.log(this.token);
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/pilar/primerPilar/get?id=${params.id}`;
+ const response = this.http.get(url, this.httpOptions);
+
+ return response
+ }
+
+ openDialog():void{
+ const dialogRef = this.dialog.open(ConfirmDialogComponent,{
+ data: "¿Estás seguro que la informacion ingresada es correcta?"
+ });
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ this.editarPilar();
+ }
+ })
+ }
+
+ openDialogConfirm():void{
+ const dialogRef = this.dialog.open(ConfirmCreationComponent,{
+ data: ""
+ });
+
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ close;
+ }
+ })
+ }
+
+ editarPilar() {
+ const id = this.activatedRoute.snapshot.paramMap.get('id');
+ const fecha = (document.getElementById("fechaCreacion") as HTMLInputElement).value;
+ const fechaObjeto = new Date(fecha);
+ const fechaCreacion = fechaObjeto.toISOString();
+ const numFDS = (document.getElementById('numFDS')).value;
+ const numMatrinoniosVivieron = (document.getElementById('numMatrinoniosVivieron')).value;
+ const numSacerdotesVivieron = (document.getElementById('numSacerdotesVivieron')).value;
+ const numReligiososVivieron = (document.getElementById('numReligiososVivieron')).value;
+ const ciudadSeleccionada = (document.getElementById('select-ciudad')).value;
+
+ const editPrimerPilar = {
+ id,
+ fechaCreacion,
+ numFDS,
+ numMatrinoniosVivieron,
+ numSacerdotesVivieron,
+ numReligiososVivieron,
+ ciudad: {
+ id: ciudadSeleccionada
+ },
+ };
+ const jsonPrimerPilar = JSON.stringify(editPrimerPilar); // Convertir el objeto en una cadena JSON
+ console.log(jsonPrimerPilar);
+ console.log(this.httpOptions);
+
+ if (this.httpOptions) {
+ this.http.post('https://encuentro-matrimonial-backend.herokuapp.com/pilar/primerPilar/create', jsonPrimerPilar, this.httpOptions)
+ .subscribe(data => {
+ console.log(data);
+ this.openDialogConfirm();
+ this.router.navigate(['/primerPilarGrid']);
+ }, error => {
+ console.error(error);
+ });
+ } else {
+ alert('httpOptions no está definido, intente iniciar sesion nuevamente');
+ }
+ }
+
+ onSelectPais(idPais: string) {
+ this.obtenerDatosCiudad(idPais).subscribe((data: any) => {
+ const ciudades = data.response;
+ const selectCiudad = document.getElementById('select-ciudad') as HTMLSelectElement;
+
+ selectCiudad.innerHTML = '';
+
+ ciudades.forEach((ciudad: any) => {
+ const option = document.createElement('option');
+ option.value = ciudad.id;
+ option.text = ciudad.name;
+ selectCiudad.appendChild(option);
+ });
+ selectCiudad.disabled = false;
+
+ // reiniciar el selector de ciudades
+ this.editarPrimerPilarForm.controls['select-ciudad'].reset();
+
+ });
+ }
+
+ obtenerDatosCiudad(id: string) {
+ const params = { id: id };
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/ubicacion/getCiudadPaises?id=${userId}`;
+ const response = this.http.get(url, this.httpOptions);
+ return response
+ }
+
+ obtenerDatosPais(id: string){
+ const params = { id: id };
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/ubicacion/getPaises?id=${userId}`;
+ const response = this.http.get(url, this.httpOptions);
+
+ return response
+ }
+}
\ No newline at end of file
diff --git a/src/app/pilares/primerPilarGrid/nuevoPrimerPilar/nuevoPrimerPilar.component.css b/src/app/pilares/primerPilarGrid/nuevoPrimerPilar/nuevoPrimerPilar.component.css
new file mode 100644
index 000000000..bb35bd300
--- /dev/null
+++ b/src/app/pilares/primerPilarGrid/nuevoPrimerPilar/nuevoPrimerPilar.component.css
@@ -0,0 +1,22 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+}
+.boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+ }
+
+ .letra{
+ color: black;
+ }
\ No newline at end of file
diff --git a/src/app/pilares/primerPilarGrid/nuevoPrimerPilar/nuevoPrimerPilar.component.html b/src/app/pilares/primerPilarGrid/nuevoPrimerPilar/nuevoPrimerPilar.component.html
new file mode 100644
index 000000000..bf0eed38d
--- /dev/null
+++ b/src/app/pilares/primerPilarGrid/nuevoPrimerPilar/nuevoPrimerPilar.component.html
@@ -0,0 +1,94 @@
+
+
+
diff --git a/src/app/pilares/primerPilarGrid/nuevoPrimerPilar/nuevoPrimerPilar.component.spec.ts b/src/app/pilares/primerPilarGrid/nuevoPrimerPilar/nuevoPrimerPilar.component.spec.ts
new file mode 100644
index 000000000..3052bdf23
--- /dev/null
+++ b/src/app/pilares/primerPilarGrid/nuevoPrimerPilar/nuevoPrimerPilar.component.spec.ts
@@ -0,0 +1,27 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { By } from '@angular/platform-browser';
+import { DebugElement } from '@angular/core';
+
+import { NuevoPrimerPilarComponent } from './nuevoPrimerPilar.component';
+
+describe('NuevoPrimerPilarComponent', () => {
+ let component: NuevoPrimerPilarComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ NuevoPrimerPilarComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(NuevoPrimerPilarComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/pilares/primerPilarGrid/nuevoPrimerPilar/nuevoPrimerPilar.component.ts b/src/app/pilares/primerPilarGrid/nuevoPrimerPilar/nuevoPrimerPilar.component.ts
new file mode 100644
index 000000000..2886b9287
--- /dev/null
+++ b/src/app/pilares/primerPilarGrid/nuevoPrimerPilar/nuevoPrimerPilar.component.ts
@@ -0,0 +1,153 @@
+import { Component, OnInit } from '@angular/core';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { Router } from '@angular/router';
+import { Observable } from 'rxjs';
+import { MatDialog } from '@angular/material/dialog';
+import { ConfirmDialogComponent } from 'app/shared/confirm-dialog/confirm-dialog.component';
+import { ConfirmCreationComponent } from 'app/shared/confirm-creation/confirm-creation.component';
+
+
+@Component({
+ selector: 'app-nuevoPrimerPilar',
+ templateUrl: './nuevoPrimerPilar.component.html',
+ styleUrls: ['./nuevoPrimerPilar.component.css']
+})
+export class NuevoPrimerPilarComponent implements OnInit {
+
+ httpOptions: any;
+ token: any;
+ ciudades: any[]; // Declarar la propiedad 'ciudades'
+ paises: any[]; // Declarar la propiedad 'paises'
+ selectedCiudad: string;
+ selectedPais: string;
+
+ constructor(private http: HttpClient, private router: Router, public dialog: MatDialog) {}
+
+
+
+ ngOnInit() {
+ let token = localStorage.getItem('jwt');
+ console.log(token);
+
+ this.httpOptions = {
+ headers: new HttpHeaders({
+ 'Authorization': 'Bearer ' + token,
+ 'Content-Type': 'application/json'
+ })
+ };
+ // Obtener los datos del país
+ this.obtenerDatosPais().subscribe((data) => {
+ // Obtener la respuesta del JSON
+ const response = data.response;
+ // Obtener el select del HTML
+ const selectPais = document.getElementById('select-pais') as HTMLSelectElement;
+
+ // Crear un option por cada país en la respuesta del JSON
+ response.forEach((pais: any) => {
+ const option = document.createElement('option');
+ option.value = pais.id;
+ option.text = pais.name;
+ selectPais.appendChild(option);
+ });
+ });
+ }
+
+ openDialog():void{
+ const dialogRef = this.dialog.open(ConfirmDialogComponent,{
+ data: "¿Estás seguro que la informacion ingresada es correcta?"
+ });
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ this.newPilar();
+ }
+ })
+ }
+
+ openDialogConfirm():void{
+ const dialogRef = this.dialog.open(ConfirmCreationComponent,{
+ data: ""
+ });
+
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ close;
+ }
+ })
+ }
+
+ newPilar() {
+ const fecha = (document.getElementById("fechaCreacion") as HTMLInputElement).value;
+ const fechaObjeto = new Date(fecha);
+ const fechaCreacion = fechaObjeto.toISOString();
+ const numFDS = (document.getElementById('numFDS')).value;
+ const numMatrinoniosVivieron = (document.getElementById('numMatrinoniosVivieron')).value;
+ const numSacerdotesVivieron = (document.getElementById('numSacerdotesVivieron')).value;
+ const numReligiososVivieron = (document.getElementById('numReligiososVivieron')).value;
+ const ciudadSeleccionada = (document.getElementById('select-ciudad')).value;
+
+ const newPrimerPilar = {
+ fechaCreacion,
+ numFDS,
+ numMatrinoniosVivieron,
+ numSacerdotesVivieron,
+ numReligiososVivieron,
+ ciudadSeleccionada,
+ ciudad: {
+ id: ciudadSeleccionada
+ },
+ };
+ const jsonPrimerPilar = JSON.stringify(newPrimerPilar); // Convertir el objeto en una cadena JSON
+ console.log(jsonPrimerPilar);
+ console.log(this.httpOptions);
+
+ if (this.httpOptions) {
+ this.http.post('https://encuentro-matrimonial-backend.herokuapp.com/pilar/primerPilar/create', jsonPrimerPilar, this.httpOptions)
+ .subscribe(data => {
+ console.log(data);
+ this.openDialogConfirm();
+ this.router.navigate(['/primerPilarGrid']);
+ }, error => {
+ console.error(error);
+ });
+ } else {
+ alert('httpOptions no está definido, intente iniciar sesion nuevamente');
+ }
+ }
+ onSelectPais(idPais: string) {
+ this.obtenerDatosCiudad(idPais).subscribe((data: any) => {
+ const ciudades = data.response;
+ const selectCiudad = document.getElementById('select-ciudad') as HTMLSelectElement;
+
+ // Limpiar el select de ciudades
+ selectCiudad.innerHTML = '';
+
+ // Crear un option por cada ciudad en la respuesta del JSON
+ ciudades.forEach((ciudad: any) => {
+ const option = document.createElement('option');
+ option.value = ciudad.id;
+ option.text = ciudad.name;
+ selectCiudad.appendChild(option);
+ });
+ selectCiudad.disabled = false;
+
+ });
+ }
+
+ obtenerDatosCiudad(id: string) {
+ const params = { id: id };
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/ubicacion/getCiudadPaises?id=${userId}`;
+ const response = this.http.get(url, this.httpOptions);
+ return response
+ }
+
+ obtenerDatosPais(): Observable {
+ console.log(this.token);
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/ubicacion/getPaises?id=${userId}`;
+ return this.http.get(url, this.httpOptions);
+ }
+
+}
\ No newline at end of file
diff --git a/src/app/pilares/primerPilarGrid/primerPilarGrid.component.css b/src/app/pilares/primerPilarGrid/primerPilarGrid.component.css
new file mode 100644
index 000000000..74d772980
--- /dev/null
+++ b/src/app/pilares/primerPilarGrid/primerPilarGrid.component.css
@@ -0,0 +1,44 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+}
+.boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+ }
+
+ .pagination {
+ display: flex;
+ padding-left: 0px;
+ list-style: none;
+ border-radius: 0.25rem;
+ justify-content: center;
+
+}
+
+.pagination .page-link {
+ color: #000000 !important;
+ background-color: white !important;
+ border-color: white !important;
+}
+
+.pagination .page-item.active .page-link {
+ color: white !important;
+ background-color: #cd4042 !important;
+ border-color: white !important;
+}
+
+.table-responsive.table-full-width th {
+ color: black;
+ font-weight: bold;
+}
\ No newline at end of file
diff --git a/src/app/pilares/primerPilarGrid/primerPilarGrid.component.html b/src/app/pilares/primerPilarGrid/primerPilarGrid.component.html
new file mode 100644
index 000000000..a71b92748
--- /dev/null
+++ b/src/app/pilares/primerPilarGrid/primerPilarGrid.component.html
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+
+ Fecha
+ Número de FDS
+ Número de matrimonios vivieron
+ Número de sacerdotes vivieron
+ Acciones
+
+
+
+
+ {{row.fechaCreacion}}
+ {{row.numFDS}}
+ {{row.numMatrinoniosVivieron}}
+ {{row.numSacerdotesVivieron}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Nombre
+ Realizado
+ Proyectado
+
+
+
+
+ {{row.key}}
+ {{row.value}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/pilares/primerPilarGrid/primerPilarGrid.component.spec.ts b/src/app/pilares/primerPilarGrid/primerPilarGrid.component.spec.ts
new file mode 100644
index 000000000..87d567e79
--- /dev/null
+++ b/src/app/pilares/primerPilarGrid/primerPilarGrid.component.spec.ts
@@ -0,0 +1,28 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import {Router} from '@angular/router';
+import { By } from '@angular/platform-browser';
+import { DebugElement } from '@angular/core';
+
+import { PrimerPilarGridComponent } from './primerPilarGrid.component';
+
+describe('PrimerPilarGridComponent', () => {
+ let component: PrimerPilarGridComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ PrimerPilarGridComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(PrimerPilarGridComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/pilares/primerPilarGrid/primerPilarGrid.component.ts b/src/app/pilares/primerPilarGrid/primerPilarGrid.component.ts
new file mode 100644
index 000000000..f3bd554d4
--- /dev/null
+++ b/src/app/pilares/primerPilarGrid/primerPilarGrid.component.ts
@@ -0,0 +1,310 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { Router } from '@angular/router';
+import * as XLSX from 'xlsx';
+import { MatPaginator, PageEvent } from '@angular/material/paginator';
+import { MatDialog } from '@angular/material/dialog';
+import { ConfirmDownloadDialogComponent } from 'app/shared/confirm-download-dialog/confirm-download-dialog.component';
+import { ConfirmDeleteComponent } from 'app/shared/confirm-delete/confirm-delete.component';
+
+declare interface TableData {
+ headerRow: string[];
+ dataRows: string[][];
+}
+
+@Component({
+ selector: 'app-primerPilarGrid',
+ templateUrl: './primerPilarGrid.component.html',
+ styleUrls: ['./primerPilarGrid.component.css'],
+})
+
+export class PrimerPilarGridComponent implements OnInit {
+ public tableData1: TableData;
+ public tableData2: TableData;
+ data: any; // variable para almacenar los datos obtenidos de la llamada
+ @ViewChild('row') row: any;
+ httpOptions: any;
+ token: any;
+ response: any;
+
+ currentPage = 1;
+ pageSize = 5; // Tamaño de página deseado
+ totalRecords = 20; // Número total de registros
+
+ // Calcula el número total de páginas
+ totalPages = Math.ceil(this.totalRecords / this.pageSize);
+
+ // Genera el array de páginas
+ pages = Array(this.totalPages).fill(0).map((x, i) => i + 1);
+
+
+ constructor(private http: HttpClient, private router: Router, public dialog: MatDialog) {
+ this.tableData1 = { headerRow: [], dataRows: [] };
+ this.tableData2 = { headerRow: [], dataRows: [] };
+
+ }
+
+ ngOnInit() {
+ let token = localStorage.getItem('jwt');
+ let userId = localStorage.getItem('userId');
+
+ this.httpOptions = {
+ headers: new HttpHeaders({
+ 'Content-Type': 'application/json',
+ 'Authorization': `Bearer ${token}`
+ })
+ };
+
+ this.http.get(`https://encuentro-matrimonial-backend.herokuapp.com/pilar/primerPilar/getAll?id=${userId}`, this.httpOptions)
+ .subscribe(response => {
+ console.log(response); // ver los datos obtenidos en la consola
+ const responseData = response['response']; // acceder al array 'response' dentro de la respuesta
+ this.tableData1.dataRows = responseData.slice(0, 5).map(item => {
+ return {
+ id: item.id,
+ numFDS : item.numFDS,
+ numMatrinoniosVivieron : item.numMatrinoniosVivieron,
+ fechaCreacion: new Date(new Date(item.fechaCreacion).getTime() + 86400000).toLocaleDateString('es-ES', { year: 'numeric', month: '2-digit', day: '2-digit' }).split('/').join('-'),
+ numSacerdotesVivieron: item.numSacerdotesVivieron,
+ numReligiososVivieron: item.numReligiososVivieron,
+
+ }
+ });
+
+ const responseData2 = response['totalResponse']; // acceder al array 'response' dentro de la respuesta
+ this.tableData2.dataRows = responseData2.slice(0, 5).map(item => {
+ return {
+ key: item.key,
+ value : item.value,
+ }
+
+ });
+
+ this.data = responseData;
+ // Calcular el número total de páginas
+ this.totalPages = Math.ceil(this.data.length / this.pageSize);
+
+ // Generar un array con las páginas
+ this.pages = Array.from({ length: this.totalPages }, (_, i) => i + 1);
+
+ // Actualizar los datos de la página actual
+ this.setCurrentPage(1);
+ });
+
+
+ }
+ setCurrentPage(page: number) {
+ this.currentPage = page;
+ const start = (page - 1) * 5;
+ const end = start + 5;
+ this.tableData1.dataRows = this.data.slice(start, end).map(item => {
+ return {
+ id: item.id,
+ numFDS : item.numFDS,
+ numMatrinoniosVivieron : item.numMatrinoniosVivieron,
+ fechaCreacion: new Date(new Date(item.fechaCreacion).getTime() + 86400000).toLocaleDateString('es-ES', {year: 'numeric', month: '2-digit', day: '2-digit'}).split('/').join('-'),
+ numSacerdotesVivieron: item.numSacerdotesVivieron,
+ numReligiososVivieron: item.numReligiososVivieron
+ }
+ });
+ }
+ calculatePageData() {
+ const start = (this.currentPage - 1) * this.pageSize;
+ const end = start + this.pageSize;
+ this.tableData1.dataRows = this.data.slice(start, end);
+ }
+
+ openDialogDelete(row):void{
+ const dialogRef = this.dialog.open(ConfirmDeleteComponent,{
+ });
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ this.deleteRow(row);
+ }
+ })
+ }
+ public deleteRow(row) {
+ const params = { id: row.id };
+ console.log(this.httpOptions);
+ const token = localStorage.getItem('jwt');
+ const httpOptions = {
+ headers: new HttpHeaders({
+ 'Content-Type': 'application/json',
+ 'Authorization': `Bearer ${token}`
+ })
+ };
+ const response = this.http.post(`https://encuentro-matrimonial-backend.herokuapp.com/pilar/primerPilar/delete?id=${params.id}`, {}, httpOptions);
+
+ response.subscribe((result: any) => {
+ // Actualizar la tabla llamando la función getTableData()
+ this.getTableData();
+ this.getTableData2();
+ this.setCurrentPage(1);
+ });
+ }
+
+
+ editRow(row) {
+ const elementId = row.id;
+ console.log(elementId);
+ this.router.navigate(['/editarPrimerPilar', elementId]);
+
+ }
+
+ public getTableData() {
+ let userId = localStorage.getItem('userId');
+ this.http.get(`https://encuentro-matrimonial-backend.herokuapp.com/pilar/primerPilar/getAll?id=${userId}`, this.httpOptions)
+ .subscribe(response => {
+ console.log(response); // ver los datos obtenidos en la consola
+ const responseData = response['response']; // acceder al array 'response' dentro de la respuesta
+ this.tableData1.dataRows = responseData.map(item => {
+ return {
+ id: item.id,
+ numFDS : item.numFDS,
+ numMatrinoniosVivieron : item.numMatrinoniosVivieron,
+ fechaCreacion: new Date(new Date(item.fechaCreacion).getTime() + 86400000).toLocaleDateString('es-ES', {year: 'numeric', month: '2-digit', day: '2-digit'}).split('/').join('-'),
+ numSacerdotesVivieron: item.numSacerdotesVivieron,
+ numReligiososVivieron: item.numReligiososVivieron
+ }
+ });
+
+ this.data = responseData;
+ });
+ }
+
+ public getTableData2() {
+ let userId = localStorage.getItem('userId');
+ this.http.get(`https://encuentro-matrimonial-backend.herokuapp.com/pilar/primerPilar/getAll?id=${userId}`, this.httpOptions)
+ .subscribe(response => {
+ console.log(response); // ver los datos obtenidos en la consola
+ const responseData = response['totalResponse']; // acceder al array 'response' dentro de la respuesta
+ this.tableData2.dataRows = responseData.map(item => {
+ return {
+ key: item.key,
+ value : item.value,
+ }
+ });
+
+ this.data = responseData;
+ });
+ }
+
+ openDialog():void{
+ const dialogRef = this.dialog.open(ConfirmDownloadDialogComponent,{
+ });
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ this.generateExcel();
+ }
+ })
+ }
+
+ // Función para generar el archivo Excel
+ generateExcel() {
+ let userId = localStorage.getItem('userId');
+
+ // Realizar la consulta y obtener los datos en un arreglo
+ this.http.get(`https://encuentro-matrimonial-backend.herokuapp.com/pilar/primerPilar/getAll?id=${userId}`, this.httpOptions)
+ .subscribe(data => {
+ const rows = [];
+
+ // Agregar los encabezados como primera fila
+ const headers = ['ID', 'Fecha de Creación', 'Num. FDS', 'Num. Matrimonios Vivieron', 'Num. Sacerdotes Vivieron', 'Num. Religiosos/as Vivieron'];
+ rows.push(headers);
+ console.log(data)
+ const responseData = data['response']; // acceder al array 'response' dentro de la respuesta
+ const responseData2 = data['totalResponse']; // acceder al array 'response' dentro de la respuesta
+
+ responseData.forEach(item => {
+ const row = [
+ item.id,
+ new Date(item.fechaCreacion).toLocaleDateString('es-ES'),
+ item.numFDS,
+ item.numMatrinoniosVivieron,
+ item.numSacerdotesVivieron,
+ item.numReligiososVivieron
+ ];
+ rows.push(row);
+ });
+ responseData2.forEach(item => {
+ const row = [
+ item.key,
+ item.value,
+
+ ];
+ rows.push(row);
+ });
+ // Crear una nueva hoja de cálculo de Excel
+ const worksheet = XLSX.utils.aoa_to_sheet(rows);
+
+ // Crear un libro de Excel y agregar la hoja de cálculo
+ const workbook = XLSX.utils.book_new();
+ XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
+
+ // Convertir el libro de Excel a un archivo binario y descargarlo
+ const file = XLSX.write(workbook, { type: 'binary', bookType: 'xlsx' });
+ const blob = new Blob([this.s2ab(file)], { type: 'application/octet-stream' });
+ const url = window.URL.createObjectURL(blob);
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = 'Primer Pilar.xlsx';
+ link.click();
+ });
+ }
+
+ // Función para convertir una cadena a un arreglo de bytes
+ s2ab(s: string) {
+ const buf = new ArrayBuffer(s.length);
+ const view = new Uint8Array(buf);
+ for (let i = 0; i < s.length; i++) {
+ view[i] = s.charCodeAt(i) & 0xff;
+ }
+ return buf;
+ }
+ filterByDate(selectedDate: string) {
+ const selectedDateObj = new Date(selectedDate);
+ const selectedYear = selectedDateObj.getFullYear();
+ const selectedMonth = selectedDateObj.getMonth() + 1; // Los meses en JavaScript van de 0 a 11
+ const selectedDay = selectedDateObj.getDate();
+
+ const filteredData = this.data.filter(item => {
+ const itemDate = new Date(item.fechaCreacion);
+ const itemYear = itemDate.getFullYear();
+ const itemMonth = itemDate.getMonth() + 1; // Los meses en JavaScript van de 0 a 11
+ const itemDay = itemDate.getDate();
+
+ return itemYear === selectedYear && itemMonth === selectedMonth && itemDay === selectedDay;
+ });
+
+ this.totalPages = Math.ceil(filteredData.length / this.pageSize); // Actualizar el número total de páginas
+
+ // Verificar si la página actual es mayor al nuevo número total de páginas y ajustarla si es necesario
+ if (this.currentPage > this.totalPages) {
+ this.currentPage = this.totalPages;
+ }
+
+ const start = (this.currentPage - 1) * this.pageSize;
+ const end = start + this.pageSize;
+
+ this.tableData1.dataRows = filteredData.slice(start, end).map(item => {
+ const fechaCreacion = new Date(item.fechaCreacion);
+ fechaCreacion.setDate(fechaCreacion.getDate() + 1);
+
+ return {
+ id: item.id,
+ numFDS: item.numFDS,
+ numMatrinoniosVivieron: item.numMatrinoniosVivieron,
+ fechaCreacion: fechaCreacion
+ .toLocaleDateString('es-ES', { year: 'numeric', month: '2-digit', day: '2-digit' })
+ .split('/')
+ .join('-'),
+ numSacerdotesVivieron: item.numSacerdotesVivieron,
+ numReligiososVivieron: item.numReligiososVivieron,
+ isVisible: true
+ };
+ });
+ }
+
+}
\ No newline at end of file
diff --git a/src/app/pilares/segundoPilarGrid/editarSegundoPilar/editarSegundoPilar.component.css b/src/app/pilares/segundoPilarGrid/editarSegundoPilar/editarSegundoPilar.component.css
new file mode 100644
index 000000000..53d51aa1c
--- /dev/null
+++ b/src/app/pilares/segundoPilarGrid/editarSegundoPilar/editarSegundoPilar.component.css
@@ -0,0 +1,21 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+}
+.boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+ }
+ .letra{
+ color: black;
+ }
\ No newline at end of file
diff --git a/src/app/pilares/segundoPilarGrid/editarSegundoPilar/editarSegundoPilar.component.html b/src/app/pilares/segundoPilarGrid/editarSegundoPilar/editarSegundoPilar.component.html
new file mode 100644
index 000000000..b1d4df6dc
--- /dev/null
+++ b/src/app/pilares/segundoPilarGrid/editarSegundoPilar/editarSegundoPilar.component.html
@@ -0,0 +1,133 @@
+
+
+
diff --git a/src/app/pilares/segundoPilarGrid/editarSegundoPilar/editarSegundoPilar.component.spec.ts b/src/app/pilares/segundoPilarGrid/editarSegundoPilar/editarSegundoPilar.component.spec.ts
new file mode 100644
index 000000000..569b9d6a8
--- /dev/null
+++ b/src/app/pilares/segundoPilarGrid/editarSegundoPilar/editarSegundoPilar.component.spec.ts
@@ -0,0 +1,27 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { By } from '@angular/platform-browser';
+import { DebugElement } from '@angular/core';
+
+import { EditarSegundoPilarComponent } from './editarSegundoPilar.component';
+
+describe('EditarSegundoPilarComponent', () => {
+ let component: EditarSegundoPilarComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ EditarSegundoPilarComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(EditarSegundoPilarComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/pilares/segundoPilarGrid/editarSegundoPilar/editarSegundoPilar.component.ts b/src/app/pilares/segundoPilarGrid/editarSegundoPilar/editarSegundoPilar.component.ts
new file mode 100644
index 000000000..8ccd2fbff
--- /dev/null
+++ b/src/app/pilares/segundoPilarGrid/editarSegundoPilar/editarSegundoPilar.component.ts
@@ -0,0 +1,263 @@
+import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { Router } from '@angular/router';
+import { Observable } from 'rxjs';
+import { ActivatedRoute } from '@angular/router';
+import { FormBuilder, FormGroup, Validators} from '@angular/forms';
+import { MatDialog } from '@angular/material/dialog';
+import { ConfirmDialogComponent } from 'app/shared/confirm-dialog/confirm-dialog.component';
+import { ConfirmCreationComponent } from 'app/shared/confirm-creation/confirm-creation.component';
+
+
+
+@Component({
+ selector: 'app-editarSegundoPilar',
+ templateUrl: './editarSegundoPilar.component.html',
+ styleUrls: ['./editarSegundoPilar.component.css']
+})
+export class EditarSegundoPilarComponent implements OnInit {
+
+ editarSegundoPilarForm: FormGroup;
+ httpOptions: any;
+ token: any;
+ response: any;
+ datosCargados: boolean;
+ @ViewChild('fechaInput') fechaInput: ElementRef;
+ ciudades: any[]; // Declarar la propiedad 'ciudades'
+ paises: any[]; // Declarar la propiedad 'paises'
+ selectedCiudad: string;
+ selectedPais: string;
+ data: any;
+ pais: any; // cambia a tipo any
+ fechaCreacion: string;
+ rolId: number;
+ mostrarBotonGuardar: boolean = false;
+
+
+ constructor(private http: HttpClient, private router: Router, public dialog: MatDialog,
+ private activatedRoute: ActivatedRoute, private formBuilder: FormBuilder) {
+ this.editarSegundoPilarForm = this.formBuilder.group({
+ id: [null],
+ fechaCreacion: [null, Validators.required],
+ numMatrimosServidoresActivos: [null, Validators.required],
+ numSacerdotesServidoresActivos: [null, Validators.required],
+ numMatrimosServidoresProfundoActivos: [null, Validators.required],
+ numSacerdotesServidoresprofundoActivos: [null, Validators.required],
+ numFdsProfundosPeriodo: [null, Validators.required],
+ numReligiosasVivieron: [null, Validators.required],
+ numMatrimosVivieronProfundo: [null, Validators.required],
+ numSacerdotesVivieronProfundo: [null, Validators.required],
+ numMatrimosDebutaronProfundo: [null, Validators.required],
+ numSacerdotesDebutaronProfundo: [null, Validators.required],
+
+ 'select-pais': ['', Validators.required],
+ 'select-ciudad': ['', Validators.required]
+ });
+ }
+ ngOnInit() {
+
+
+ let token = localStorage.getItem('jwt');
+ let rolIdString = localStorage.getItem('rolId');
+ this.rolId = parseInt(rolIdString, 10);
+ this.mostrarBotonGuardar = this.actualizarMostrarBotonGuardar(this.rolId);
+
+ this.httpOptions = {
+ headers: new HttpHeaders({
+ 'Authorization': 'Bearer ' + token,
+ 'Content-Type': 'application/json'
+ })
+ };
+ const elementId = this.activatedRoute.snapshot.paramMap.get('id');
+
+ this.obtenerDatosDelPilar(elementId).subscribe(data => {
+ // Asignar los datos del elemento al formulario utilizando setValue()
+
+ let fecha = new Date(data.response.fechaCreacion);
+ let fechaFormateada = fecha.toISOString().substring(0, 10);
+ this.editarSegundoPilarForm.controls['fechaCreacion'].setValue(fechaFormateada);
+ this.editarSegundoPilarForm.controls['numMatrimosServidoresActivos'].setValue(data.response.numMatrimosServidoresActivos);
+ this.editarSegundoPilarForm.controls['numSacerdotesServidoresActivos'].setValue(data.response.numSacerdotesServidoresActivos);
+ this.editarSegundoPilarForm.controls['numMatrimosServidoresProfundoActivos'].setValue(data.response.numMatrimosServidoresProfundoActivos);
+ this.editarSegundoPilarForm.controls['numSacerdotesServidoresprofundoActivos'].setValue(data.response.numSacerdotesServidoresprofundoActivos);
+ this.editarSegundoPilarForm.controls['numFdsProfundosPeriodo'].setValue(data.response.numFdsProfundosPeriodo);
+ this.editarSegundoPilarForm.controls['numMatrimosVivieronProfundo'].setValue(data.response.numMatrimosVivieronProfundo);
+ this.editarSegundoPilarForm.controls['numSacerdotesVivieronProfundo'].setValue(data.response.numSacerdotesVivieronProfundo);
+ this.editarSegundoPilarForm.controls['numMatrimosDebutaronProfundo'].setValue(data.response.numMatrimosDebutaronProfundo);
+ this.editarSegundoPilarForm.controls['numSacerdotesDebutaronProfundo'].setValue(data.response.numSacerdotesDebutaronProfundo);
+ const pais = data.response.ciudad.pais;
+ const ciudad = data.response.ciudad;
+
+ console.log(pais.id)
+ this.editarSegundoPilarForm.controls['select-pais'].setValue(pais.id);
+
+ this.obtenerDatosPais(pais.id).subscribe((data: any) => {
+ const paises = data.response;
+ const selectPais = document.getElementById('select-pais') as HTMLSelectElement;
+
+ selectPais.innerHTML = '';
+
+ paises.forEach((pais: any) => {
+ const option = document.createElement('option');
+ option.value = pais.id;
+ option.text = pais.name;
+ selectPais.appendChild(option);
+ });
+
+ // Establecemos el país seleccionado en el select del país
+ this.editarSegundoPilarForm.controls['select-pais'].setValue(pais.id);
+ });
+
+ this.obtenerDatosCiudad(pais.id).subscribe((data: any) => {
+ const ciudades = data.response;
+ console.log(ciudades);
+ const selectCiudad = document.getElementById('select-ciudad') as HTMLSelectElement;
+
+ selectCiudad.innerHTML = '';
+
+ ciudades.forEach((ciudad: any) => {
+ const option = document.createElement('option');
+ option.value = ciudad.id;
+ option.text = ciudad.name;
+ selectCiudad.appendChild(option);
+ });
+ selectCiudad.disabled = false;
+
+ // Establecemos la ciudad seleccionada en el select de la ciudad
+ this.editarSegundoPilarForm.controls['select-ciudad'].setValue(ciudad.id);
+ });
+
+ console.log(data.response);
+
+ this.datosCargados = true;
+ console.log(this.datosCargados);
+ });
+
+ }
+ actualizarMostrarBotonGuardar(rol: number): boolean {
+ console.log(rol);
+ const mostrarBoton = rol !== 1;
+ console.log(mostrarBoton);
+ return mostrarBoton;
+ }
+ obtenerDatosDelPilar(id: string): Observable {
+ const params = { id: id };
+ console.log(this.token);
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/pilar/segundoPilar/get?id=${params.id}`;
+ const response = this.http.get(url, this.httpOptions);
+
+ return response
+ }
+ openDialog():void{
+ const dialogRef = this.dialog.open(ConfirmDialogComponent,{
+ data: "¿Estás seguro que la informacion ingresada es correcta?"
+ });
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ this.editarPilar();
+ }
+ })
+ }
+
+ openDialogConfirm():void{
+ const dialogRef = this.dialog.open(ConfirmCreationComponent,{
+ data: ""
+ });
+
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ close;
+ }
+ })
+ }
+
+ editarPilar() {
+ const id = this.activatedRoute.snapshot.paramMap.get('id');
+ const fecha = (document.getElementById("fechaCreacion") as HTMLInputElement).value;
+ const fechaObjeto = new Date(fecha);
+ const fechaCreacion = fechaObjeto.toISOString();
+ const numMatrimosServidoresActivos = (document.getElementById('numMatrimosServidoresActivos')).value;
+ const numSacerdotesServidoresActivos = (document.getElementById('numSacerdotesServidoresActivos')).value;
+ const numMatrimosServidoresProfundoActivos = (document.getElementById('numMatrimosServidoresProfundoActivos')).value;
+ const numSacerdotesServidoresprofundoActivos = (document.getElementById('numSacerdotesServidoresprofundoActivos')).value;
+ const numFdsProfundosPeriodo = (document.getElementById('numFdsProfundosPeriodo')).value;
+ const numMatrimosVivieronProfundo = (document.getElementById('numMatrimosVivieronProfundo')).value;
+ const numSacerdotesVivieronProfundo = (document.getElementById('numSacerdotesVivieronProfundo')).value;
+ const numMatrimosDebutaronProfundo = (document.getElementById('numMatrimosDebutaronProfundo')).value;
+ const numSacerdotesDebutaronProfundo = (document.getElementById('numSacerdotesDebutaronProfundo')).value;
+ const ciudadSeleccionada = (document.getElementById('select-ciudad')).value;
+
+
+ const newSegundoPilar = {
+ id,
+ fechaCreacion,
+ numMatrimosServidoresActivos,
+ numSacerdotesServidoresActivos,
+ numMatrimosServidoresProfundoActivos,
+ numSacerdotesServidoresprofundoActivos,
+ numFdsProfundosPeriodo,
+ numMatrimosVivieronProfundo,
+ numSacerdotesVivieronProfundo,
+ numMatrimosDebutaronProfundo,
+ numSacerdotesDebutaronProfundo,
+ ciudad: {
+ id: ciudadSeleccionada
+ },
+ };
+
+ const jsonSegundoPilar = JSON.stringify(newSegundoPilar); // Convertir el objeto en una cadena JSON
+ console.log(jsonSegundoPilar);
+
+ if (this.httpOptions) {
+ this.http.post('https://encuentro-matrimonial-backend.herokuapp.com/pilar/segundoPilar/create', jsonSegundoPilar, this.httpOptions)
+ .subscribe(data => {
+ console.log(data);
+ this.openDialogConfirm();
+ this.router.navigate(['/segundoPilarGrid']);
+ }, error => {
+ console.error(error);
+ });
+ } else {
+ alert('httpOptions no está definido, intente iniciar sesion nuevamente');
+ console.log('httpOptions no está definido');
+ }
+ }
+ onSelectPais(idPais: string) {
+ this.obtenerDatosCiudad(idPais).subscribe((data: any) => {
+ const ciudades = data.response;
+ const selectCiudad = document.getElementById('select-ciudad') as HTMLSelectElement;
+
+ selectCiudad.innerHTML = '';
+
+ ciudades.forEach((ciudad: any) => {
+ const option = document.createElement('option');
+ option.value = ciudad.id;
+ option.text = ciudad.name;
+ selectCiudad.appendChild(option);
+ });
+ selectCiudad.disabled = false;
+
+ // reiniciar el selector de ciudades
+ this.editarSegundoPilarForm.controls['select-ciudad'].reset();
+
+ });
+ }
+ obtenerDatosCiudad(id: string) {
+ const params = { id: id };
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/ubicacion/getCiudadPaises?id=${userId}`;
+ const response = this.http.get(url, this.httpOptions);
+ return response
+ }
+
+ obtenerDatosPais(id: string){
+ const params = { id: id };
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/ubicacion/getPaises?id=${userId}`;
+ const response = this.http.get(url, this.httpOptions);
+
+ return response
+ }
+}
\ No newline at end of file
diff --git a/src/app/pilares/segundoPilarGrid/nuevoSegundoPilar/nuevoSegundoPilar.component.css b/src/app/pilares/segundoPilarGrid/nuevoSegundoPilar/nuevoSegundoPilar.component.css
new file mode 100644
index 000000000..53d51aa1c
--- /dev/null
+++ b/src/app/pilares/segundoPilarGrid/nuevoSegundoPilar/nuevoSegundoPilar.component.css
@@ -0,0 +1,21 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+}
+.boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+ }
+ .letra{
+ color: black;
+ }
\ No newline at end of file
diff --git a/src/app/pilares/segundoPilarGrid/nuevoSegundoPilar/nuevoSegundoPilar.component.html b/src/app/pilares/segundoPilarGrid/nuevoSegundoPilar/nuevoSegundoPilar.component.html
new file mode 100644
index 000000000..670228387
--- /dev/null
+++ b/src/app/pilares/segundoPilarGrid/nuevoSegundoPilar/nuevoSegundoPilar.component.html
@@ -0,0 +1,132 @@
+
diff --git a/src/app/pilares/segundoPilarGrid/nuevoSegundoPilar/nuevoSegundoPilar.component.spec.ts b/src/app/pilares/segundoPilarGrid/nuevoSegundoPilar/nuevoSegundoPilar.component.spec.ts
new file mode 100644
index 000000000..86437afb3
--- /dev/null
+++ b/src/app/pilares/segundoPilarGrid/nuevoSegundoPilar/nuevoSegundoPilar.component.spec.ts
@@ -0,0 +1,27 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { By } from '@angular/platform-browser';
+import { DebugElement } from '@angular/core';
+
+import { NuevoSegundoPilarComponent } from './nuevoSegundoPilar.component';
+
+describe('NuevoPrimerPilarComponent', () => {
+ let component: NuevoSegundoPilarComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ NuevoSegundoPilarComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(NuevoSegundoPilarComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/pilares/segundoPilarGrid/nuevoSegundoPilar/nuevoSegundoPilar.component.ts b/src/app/pilares/segundoPilarGrid/nuevoSegundoPilar/nuevoSegundoPilar.component.ts
new file mode 100644
index 000000000..d71e3174b
--- /dev/null
+++ b/src/app/pilares/segundoPilarGrid/nuevoSegundoPilar/nuevoSegundoPilar.component.ts
@@ -0,0 +1,160 @@
+import { Component, OnInit } from '@angular/core';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { Router } from '@angular/router';
+import { Observable } from 'rxjs';
+import { MatDialog } from '@angular/material/dialog';
+import { ConfirmDialogComponent } from 'app/shared/confirm-dialog/confirm-dialog.component';
+import { ConfirmCreationComponent } from 'app/shared/confirm-creation/confirm-creation.component';
+
+
+@Component({
+ selector: 'app-nuevoSegundoPilar',
+ templateUrl: './nuevoSegundoPilar.component.html',
+ styleUrls: ['./nuevoSegundoPilar.component.css']
+})
+export class NuevoSegundoPilarComponent implements OnInit {
+
+ httpOptions: any;
+ token: any;
+ ciudades: any[]; // Declarar la propiedad 'ciudades'
+ paises: any[]; // Declarar la propiedad 'paises'
+ selectedCiudad: string;
+ selectedPais: string;
+
+ constructor(private http: HttpClient, private router: Router, public dialog: MatDialog) {}
+
+ ngOnInit() {
+ let token = localStorage.getItem('jwt');
+ console.log(token);
+
+ this.httpOptions = {
+ headers: new HttpHeaders({
+ 'Authorization': 'Bearer ' + token,
+ 'Content-Type': 'application/json'
+ })
+ };
+ // Obtener los datos del país
+ this.obtenerDatosPais().subscribe((data) => {
+ // Obtener la respuesta del JSON
+ const response = data.response;
+ // Obtener el select del HTML
+ const selectPais = document.getElementById('select-pais') as HTMLSelectElement;
+
+ // Crear un option por cada país en la respuesta del JSON
+ response.forEach((pais: any) => {
+ const option = document.createElement('option');
+ option.value = pais.id;
+ option.text = pais.name;
+ selectPais.appendChild(option);
+ });
+ });
+ }
+ openDialog():void{
+ const dialogRef = this.dialog.open(ConfirmDialogComponent,{
+ data: "¿Estás seguro que la informacion ingresada es correcta?"
+ });
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ this.newPilar();
+ }
+ })
+ }
+
+ openDialogConfirm():void{
+ const dialogRef = this.dialog.open(ConfirmCreationComponent,{
+ data: ""
+ });
+
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ close;
+ }
+ })
+ }
+
+ newPilar() {
+ const fecha = (document.getElementById("fecha") as HTMLInputElement).value;
+ const fechaObjeto = new Date(fecha);
+ const fechaCreacion = fechaObjeto.toISOString();
+ const numMatrimosServidoresActivos = (document.getElementById('MatrimoniosServidores')).value;
+ const numSacerdotesServidoresActivos = (document.getElementById('SacerdotesServidores')).value;
+ const numMatrimosServidoresProfundoActivos = (document.getElementById('MatrimoniosProfundosServidores')).value;
+ const numSacerdotesServidoresprofundoActivos = (document.getElementById('SacerdotesProfundosServidores')).value;
+ const numFdsProfundosPeriodo = (document.getElementById('FdSProfundosPeriodo')).value;
+ const numMatrimosVivieronProfundo = (document.getElementById('MatrimoniosProfundosVividos')).value;
+ const numSacerdotesVivieronProfundo = (document.getElementById('SacerdotesProfundosVividos')).value;
+ const numMatrimosDebutaronProfundo = (document.getElementById('MatrimoniosProfundosDebutados')).value;
+ const numSacerdotesDebutaronProfundo = (document.getElementById('SacerdotesProfundosDebutados')).value;
+ const ciudadSeleccionada = (document.getElementById('select-ciudad')).value;
+
+ const newSegundoPilar = {
+ fechaCreacion,
+ numMatrimosServidoresActivos,
+ numSacerdotesServidoresActivos,
+ numMatrimosServidoresProfundoActivos,
+ numSacerdotesServidoresprofundoActivos,
+ numFdsProfundosPeriodo,
+ numMatrimosVivieronProfundo,
+ numSacerdotesVivieronProfundo,
+ numMatrimosDebutaronProfundo,
+ numSacerdotesDebutaronProfundo,
+ ciudad: {
+ id: ciudadSeleccionada
+ },
+ };
+
+ const jsonSegundoPilar = JSON.stringify(newSegundoPilar); // Convertir el objeto en una cadena JSON
+ console.log(jsonSegundoPilar);
+
+ if (this.httpOptions) {
+ this.http.post('https://encuentro-matrimonial-backend.herokuapp.com/pilar/segundoPilar/create', jsonSegundoPilar, this.httpOptions)
+ .subscribe(data => {
+ console.log(data);
+ this.openDialogConfirm();
+ this.router.navigate(['/segundoPilarGrid']);
+ }, error => {
+ console.error(error);
+ });
+ } else {
+ alert('httpOptions no está definido, intente iniciar sesion nuevamente');
+ console.log('httpOptions no está definido');
+ }
+ }
+ onSelectPais(idPais: string) {
+ this.obtenerDatosCiudad(idPais).subscribe((data: any) => {
+ const ciudades = data.response;
+ const selectCiudad = document.getElementById('select-ciudad') as HTMLSelectElement;
+
+ // Limpiar el select de ciudades
+ selectCiudad.innerHTML = '';
+
+ // Crear un option por cada ciudad en la respuesta del JSON
+ ciudades.forEach((ciudad: any) => {
+ const option = document.createElement('option');
+ option.value = ciudad.id;
+ option.text = ciudad.name;
+ selectCiudad.appendChild(option);
+ });
+ selectCiudad.disabled = false;
+
+ });
+ }
+
+
+ obtenerDatosCiudad(id: string) {
+ const params = { id: id };
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/ubicacion/getCiudadPaises?id=${userId}`;
+ const response = this.http.get(url, this.httpOptions);
+ return response
+ }
+
+ obtenerDatosPais(): Observable {
+ console.log(this.token);
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/ubicacion/getPaises?id=${userId}`;
+ return this.http.get(url, this.httpOptions);
+ }
+}
diff --git a/src/app/pilares/segundoPilarGrid/segundoPilarGrid.component.css b/src/app/pilares/segundoPilarGrid/segundoPilarGrid.component.css
new file mode 100644
index 000000000..74d772980
--- /dev/null
+++ b/src/app/pilares/segundoPilarGrid/segundoPilarGrid.component.css
@@ -0,0 +1,44 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+}
+.boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+ }
+
+ .pagination {
+ display: flex;
+ padding-left: 0px;
+ list-style: none;
+ border-radius: 0.25rem;
+ justify-content: center;
+
+}
+
+.pagination .page-link {
+ color: #000000 !important;
+ background-color: white !important;
+ border-color: white !important;
+}
+
+.pagination .page-item.active .page-link {
+ color: white !important;
+ background-color: #cd4042 !important;
+ border-color: white !important;
+}
+
+.table-responsive.table-full-width th {
+ color: black;
+ font-weight: bold;
+}
\ No newline at end of file
diff --git a/src/app/pilares/segundoPilarGrid/segundoPilarGrid.component.html b/src/app/pilares/segundoPilarGrid/segundoPilarGrid.component.html
new file mode 100644
index 000000000..ca6db0814
--- /dev/null
+++ b/src/app/pilares/segundoPilarGrid/segundoPilarGrid.component.html
@@ -0,0 +1,115 @@
+
+
+
+
+
+
+
+
+
+
+ Fecha
+ #Matrim. FdS Activo
+ #Sacer. FdS Activo
+ #Matrim. FdSP Activo
+ #Sacer. FdSP Activo
+ #FdSP
+ #Matrim. Vivi FdSP
+ #Sacer. Vivi FdSP
+ #Matrim. Debut. Después FdSP
+ '#Sacer. Debut. Después FdSP
+ Acciones
+
+
+
+
+ {{row.fechaCreacion}}
+ {{row.numFdsProfundosPeriodo}}
+ {{row.numMatrimosDebutaronProfundo}}
+ {{row.numMatrimosServidoresActivos}}
+ {{row.numMatrimosServidoresProfundoActivos}}
+ {{row.numMatrimosVivieronProfundo}}
+ {{row.numSacerdotesDebutaronProfundo}}
+ {{row.numMatrimosServidoresProfundoActivos}}
+ {{row.numSacerdotesServidoresActivos}}
+ {{row.numSacerdotesServidoresprofundoActivos}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Nombre
+ Realizado
+ Proyectado
+
+
+
+
+ {{row.key}}
+ {{row.value}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/pilares/segundoPilarGrid/segundoPilarGrid.component.spec.ts b/src/app/pilares/segundoPilarGrid/segundoPilarGrid.component.spec.ts
new file mode 100644
index 000000000..211fd426d
--- /dev/null
+++ b/src/app/pilares/segundoPilarGrid/segundoPilarGrid.component.spec.ts
@@ -0,0 +1,28 @@
+/* tslint:disable:no-unused-variable */
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { By } from '@angular/platform-browser';
+import { DebugElement } from '@angular/core';
+
+import { SegundoPilarGridComponent } from './segundoPilarGrid.component';
+
+describe('PrimerPilarGridComponent', () => {
+ let component: SegundoPilarGridComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ SegundoPilarGridComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(SegundoPilarGridComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/pilares/segundoPilarGrid/segundoPilarGrid.component.ts b/src/app/pilares/segundoPilarGrid/segundoPilarGrid.component.ts
new file mode 100644
index 000000000..1aa424802
--- /dev/null
+++ b/src/app/pilares/segundoPilarGrid/segundoPilarGrid.component.ts
@@ -0,0 +1,344 @@
+import { Component, OnInit } from '@angular/core';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { Router } from '@angular/router';
+import * as XLSX from 'xlsx';
+import { MatDialog } from '@angular/material/dialog';
+import { ConfirmDownloadDialogComponent } from 'app/shared/confirm-download-dialog/confirm-download-dialog.component';
+import { ConfirmDeleteComponent } from 'app/shared/confirm-delete/confirm-delete.component';
+
+declare interface TableData {
+ headerRow: string[];
+ dataRows: string[][];
+}
+
+@Component({
+ selector: 'app-segundoPilarGrid',
+ templateUrl: './segundoPilarGrid.component.html',
+ styleUrls: ['./segundoPilarGrid.component.css']
+})
+
+export class SegundoPilarGridComponent implements OnInit {
+ public tableData1: TableData;
+ public tableData2: TableData;
+ data: any; // variable para almacenar los datos obtenidos de la llamada
+ httpOptions: any;
+ currentPage = 1;
+ pageSize = 5; // Tamaño de página deseado
+ totalRecords = 20; // Número total de registros
+
+ // Calcula el número total de páginas
+ totalPages = Math.ceil(this.totalRecords / this.pageSize);
+
+ // Genera el array de páginas
+ pages = Array(this.totalPages).fill(0).map((x, i) => i + 1);
+
+
+ constructor(private http: HttpClient, private router: Router, public dialog: MatDialog) {
+ this.tableData1 = { headerRow: [], dataRows: [] };
+ this.tableData2 = { headerRow: [], dataRows: [] };
+ }
+
+ ngOnInit() {
+ let token = localStorage.getItem('jwt');
+ let userId = localStorage.getItem('userId');
+
+
+ console.log(token);
+
+ this.httpOptions = {
+ headers: new HttpHeaders({
+ 'Authorization': 'Bearer ' + token,
+ 'Content-Type': 'application/json'
+ })
+ };
+
+
+ this.http.get(`https://encuentro-matrimonial-backend.herokuapp.com/pilar/segundoPilar/getAll?id=${userId}`, this.httpOptions)
+ .subscribe(response => {
+ console.log(response); // ver los datos obtenidos en la consola
+ const responseData = response['response']; // acceder al array 'response' dentro de la respuesta
+ if (responseData) {
+ this.tableData1.dataRows = responseData.slice(0, 5).map(item => {
+ return {
+ id: item.id,
+ fechaCreacion: new Date(new Date(item.fechaCreacion).getTime() + 86400000).toLocaleDateString('es-ES', {year: 'numeric', month: '2-digit', day: '2-digit'}).split('/').join('-'),
+ numFdsProfundosPeriodo: item.numFdsProfundosPeriodo,
+ numMatrimosDebutaronProfundo: item.numMatrimosDebutaronProfundo,
+ numMatrimosServidoresActivos: item.numMatrimosServidoresActivos,
+ numMatrimosServidoresProfundoActivos: item.numMatrimosServidoresProfundoActivos,
+ numMatrimosVivieronProfundo: item.numMatrimosVivieronProfundo,
+ numSacerdotesDebutaronProfundo: item.numSacerdotesDebutaronProfundo,
+ numSacerdotesServidoresActivos: item.numSacerdotesServidoresActivos,
+ numSacerdotesServidoresprofundoActivos: item.numSacerdotesServidoresprofundoActivos,
+ numSacerdotesVivieronProfundo: item.numSacerdotesVivieronProfundo
+ }
+ });
+ }
+
+ const responseData2 = response['totalResponse']; // acceder al array 'response' dentro de la respuesta
+ this.tableData2.dataRows = responseData2.slice(0, 5).map(item => {
+ return {
+ key: item.key,
+ value : item.value,
+ }
+ });
+
+ this.data = responseData;
+ // Calcular el número total de páginas
+ this.totalPages = Math.ceil(this.data.length / this.pageSize);
+
+ // Generar un array con las páginas
+ this.pages = Array.from({ length: this.totalPages }, (_, i) => i + 1);
+ // Actualizar los datos de la página actual
+ this.setCurrentPage(1);
+ });
+
+ }
+
+ actualizarMostrarBotonGuardar(rol: number): boolean {
+ console.log(rol);
+ const mostrarBoton = rol !== 1;
+ console.log(mostrarBoton);
+ return mostrarBoton;
+ }
+
+ setCurrentPage(page: number) {
+ this.currentPage = page;
+ const start = (page - 1) * 5;
+ const end = start + 5;
+ this.tableData1.dataRows = this.data.slice(start, end).map(item => {
+ return {
+ id: item.id,
+ fechaCreacion: new Date(new Date(item.fechaCreacion).getTime() + 86400000).toLocaleDateString('es-ES', {year: 'numeric', month: '2-digit', day: '2-digit'}).split('/').join('-'),
+ numFdsProfundosPeriodo: item.numFdsProfundosPeriodo,
+ numMatrimosDebutaronProfundo: item.numMatrimosDebutaronProfundo,
+ numMatrimosServidoresActivos: item.numMatrimosServidoresActivos,
+ numMatrimosServidoresProfundoActivos: item.numMatrimosServidoresProfundoActivos,
+ numMatrimosVivieronProfundo: item.numMatrimosVivieronProfundo,
+ numSacerdotesDebutaronProfundo: item.numSacerdotesDebutaronProfundo,
+ numSacerdotesServidoresActivos: item.numSacerdotesServidoresActivos,
+ numSacerdotesServidoresprofundoActivos: item.numSacerdotesServidoresprofundoActivos,
+ numSacerdotesVivieronProfundo: item.numSacerdotesVivieronProfundo,
+ isVisible: true
+
+ }
+ });
+ }
+ calculatePageData() {
+ const start = (this.currentPage - 1) * this.pageSize;
+ const end = start + this.pageSize;
+ this.tableData1.dataRows = this.data.slice(start, end);
+ }
+ editRow(row) {
+ const elementId = row.id;
+ console.log(elementId);
+ // Navegar a la página de edición del primer pilar, pasando el ID como parámetro
+ this.router.navigate(['/editarSegundoPilar', elementId]);
+ }
+ openDialogDelete(row):void{
+ const dialogRef = this.dialog.open(ConfirmDeleteComponent,{
+ });
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ this.deleteRow(row);
+ }
+ })
+ }
+ public deleteRow(row) {
+ const params = { id: row.id };
+ console.log(this.httpOptions);
+ const token = localStorage.getItem('jwt');
+ const httpOptions = {
+ headers: new HttpHeaders({
+ 'Content-Type': 'application/json',
+ 'Authorization': `Bearer ${token}`
+ })
+ };
+ const response = this.http.post(`https://encuentro-matrimonial-backend.herokuapp.com/pilar/segundoPilar/delete?id=${params.id}`, {}, httpOptions);
+
+ response.subscribe((result: any) => {
+
+ // Actualizar la tabla llamando la función getTableData()
+ this.getTableData();
+ this.getTableData2();
+ this.setCurrentPage(1);
+
+ });
+ }
+
+ public getTableData() {
+ let userId = localStorage.getItem('userId');
+ this.http.get(`https://encuentro-matrimonial-backend.herokuapp.com/pilar/segundoPilar/getAll?id=${userId}`, this.httpOptions)
+ .subscribe(response => {
+ console.log(response); // ver los datos obtenidos en la consola
+ const responseData = response['response']; // acceder al array 'response' dentro de la respuesta
+ if (responseData) {
+
+ this.tableData1.dataRows = responseData.map(item => {
+ return {
+ id: item.id,
+ fechaCreacion: new Date(new Date(item.fechaCreacion).getTime() + 86400000).toLocaleDateString('es-ES', {year: 'numeric', month: '2-digit', day: '2-digit'}).split('/').join('-'),
+ numFdsProfundosPeriodo: item.numFdsProfundosPeriodo,
+ numMatrimosDebutaronProfundo: item.numMatrimosDebutaronProfundo,
+ numMatrimosServidoresActivos: item.numMatrimosServidoresActivos,
+ numMatrimosServidoresProfundoActivos: item.numMatrimosServidoresProfundoActivos,
+ numMatrimosVivieronProfundo: item.numMatrimosVivieronProfundo,
+ numSacerdotesDebutaronProfundo: item.numSacerdotesDebutaronProfundo,
+ numSacerdotesServidoresActivos: item.numSacerdotesServidoresActivos,
+ numSacerdotesServidoresprofundoActivos: item.numSacerdotesServidoresprofundoActivos,
+ numSacerdotesVivieronProfundo: item.numSacerdotesVivieronProfundo
+ }
+ });
+ }
+ this.data = responseData;
+ });
+ }
+
+ public getTableData2() {
+ let userId = localStorage.getItem('userId');
+ this.http.get(`https://encuentro-matrimonial-backend.herokuapp.com/pilar/primerPilar/getAll?id=${userId}`, this.httpOptions)
+ .subscribe(response => {
+ console.log(response); // ver los datos obtenidos en la consola
+ const responseData = response['totalResponse']; // acceder al array 'response' dentro de la respuesta
+ this.tableData2.dataRows = responseData.map(item => {
+ return {
+ key: item.key,
+ value : item.value,
+ }
+ });
+
+ this.data = responseData;
+ });
+ }
+
+ openDialog():void{
+ const dialogRef = this.dialog.open(ConfirmDownloadDialogComponent,{
+ });
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ this.generateExcel();
+ }
+ })
+ }
+
+ generateExcel(){
+ let userId = localStorage.getItem('userId');
+ // Realizar la consulta y obtener los datos en un arreglo
+ this.http.get(`https://encuentro-matrimonial-backend.herokuapp.com/pilar/segundoPilar/getAll?id=${userId}`, this.httpOptions)
+ .subscribe(data => {
+ const rows = [];
+
+ // Agregar los encabezados como primera fila
+ const headers = [
+ 'ID',
+ 'Fecha de Creación',
+ 'Num. Matrimos Servidores Activos',
+ 'Num. Sacerdotes Servidores Activos',
+ 'Num. Matrimos Servidores Profundo Activos',
+ 'Num. Sacerdotes Servidores Profundo Activos',
+ 'Num. FDS Profundos en el Periodo',
+ 'Num. Matrimos Vivieron Profundo',
+ 'Num. Sacerdotes Vivieron Profundo',
+ 'Num. Matrimos Debutaron Profundo',
+ 'Num. Sacerdotes Debutaron Profundo'
+ ];
+
+ rows.push(headers);
+ console.log(data)
+ const responseData = data['response']; // acceder al array 'response' dentro de la respuesta
+
+ responseData.forEach(item => {
+ const row = [
+ item.id,
+ new Date(item.fechaCreacion).toLocaleDateString('es-ES'),
+ item.numMatrimosServidoresActivos,
+ item.numSacerdotesServidoresActivos,
+ item.numMatrimosServidoresProfundoActivos,
+ item.numSacerdotesServidoresprofundoActivos,
+ item.numFdsProfundosPeriodo,
+ item.numMatrimosVivieronProfundo,
+ item.numSacerdotesVivieronProfundo,
+ item.numMatrimosDebutaronProfundo,
+ item.numSacerdotesDebutaronProfundo,
+ ];
+ rows.push(row);
+ });
+ // Crear una nueva hoja de cálculo de Excel
+ const worksheet = XLSX.utils.aoa_to_sheet(rows);
+
+ // Crear un libro de Excel y agregar la hoja de cálculo
+ const workbook = XLSX.utils.book_new();
+ XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
+
+ // Convertir el libro de Excel a un archivo binario y descargarlo
+ const file = XLSX.write(workbook, { type: 'binary', bookType: 'xlsx' });
+ const blob = new Blob([this.s2ab(file)], { type: 'application/octet-stream' });
+ const url = window.URL.createObjectURL(blob);
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = 'SegundoPilar.xlsx';
+ link.click();
+ })
+ }
+ // Función para convertir una cadena a un arreglo de bytes
+ s2ab(s: string) {
+ const buf = new ArrayBuffer(s.length);
+ const view = new Uint8Array(buf);
+ for (let i = 0; i < s.length; i++) {
+ view[i] = s.charCodeAt(i) & 0xff;
+ }
+ return buf;
+ }
+
+ filterByDate(selectedDate: string) {
+ const selectedDateObj = new Date(selectedDate);
+ const selectedYear = selectedDateObj.getFullYear();
+ const selectedMonth = selectedDateObj.getMonth() + 1; // Los meses en JavaScript van de 0 a 11
+ const selectedDay = selectedDateObj.getDate();
+
+ const filteredData = this.data.filter(item => {
+ const itemDate = new Date(item.fechaCreacion);
+ const itemYear = itemDate.getFullYear();
+ const itemMonth = itemDate.getMonth() + 1; // Los meses en JavaScript van de 0 a 11
+ const itemDay = itemDate.getDate();
+
+ return itemYear === selectedYear && itemMonth === selectedMonth && itemDay === selectedDay;
+ });
+
+ this.totalPages = Math.ceil(filteredData.length / this.pageSize); // Actualizar el número total de páginas
+
+ // Verificar si la página actual es mayor al nuevo número total de páginas y ajustarla si es necesario
+ if (this.currentPage > this.totalPages) {
+ this.currentPage = this.totalPages;
+ }
+
+ const start = (this.currentPage - 1) * this.pageSize;
+ const end = start + this.pageSize;
+
+ this.tableData1.dataRows = filteredData.slice(start, end).map(item => {
+ const fechaCreacion = new Date(item.fechaCreacion);
+ fechaCreacion.setDate(fechaCreacion.getDate() + 1);
+
+ return {
+ id: item.id,
+ fechaCreacion: fechaCreacion
+ .toLocaleDateString('es-ES', { year: 'numeric', month: '2-digit', day: '2-digit' })
+ .split('/')
+ .join('-'),
+ numFdsProfundosPeriodo: item.numFdsProfundosPeriodo,
+ numMatrimosDebutaronProfundo: item.numMatrimosDebutaronProfundo,
+ numMatrimosServidoresActivos: item.numMatrimosServidoresActivos,
+ numMatrimosServidoresProfundoActivos: item.numMatrimosServidoresProfundoActivos,
+ numMatrimosVivieronProfundo: item.numMatrimosVivieronProfundo,
+ numSacerdotesDebutaronProfundo: item.numSacerdotesDebutaronProfundo,
+ numSacerdotesServidoresActivos: item.numSacerdotesServidoresActivos,
+ numSacerdotesServidoresprofundoActivos: item.numSacerdotesServidoresprofundoActivos,
+ numSacerdotesVivieronProfundo: item.numSacerdotesVivieronProfundo,
+
+ };
+ });
+ }
+
+}
diff --git a/src/app/pilares/tercerPilarGrid/editarTercerPilar/editarTercerPilar.component.css b/src/app/pilares/tercerPilarGrid/editarTercerPilar/editarTercerPilar.component.css
new file mode 100644
index 000000000..53d51aa1c
--- /dev/null
+++ b/src/app/pilares/tercerPilarGrid/editarTercerPilar/editarTercerPilar.component.css
@@ -0,0 +1,21 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+}
+.boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+ }
+ .letra{
+ color: black;
+ }
\ No newline at end of file
diff --git a/src/app/pilares/tercerPilarGrid/editarTercerPilar/editarTercerPilar.component.html b/src/app/pilares/tercerPilarGrid/editarTercerPilar/editarTercerPilar.component.html
new file mode 100644
index 000000000..1fcef9fa3
--- /dev/null
+++ b/src/app/pilares/tercerPilarGrid/editarTercerPilar/editarTercerPilar.component.html
@@ -0,0 +1,100 @@
+
+
+
diff --git a/src/app/pilares/tercerPilarGrid/editarTercerPilar/editarTercerPilar.component.spec.ts b/src/app/pilares/tercerPilarGrid/editarTercerPilar/editarTercerPilar.component.spec.ts
new file mode 100644
index 000000000..6729cc7d3
--- /dev/null
+++ b/src/app/pilares/tercerPilarGrid/editarTercerPilar/editarTercerPilar.component.spec.ts
@@ -0,0 +1,27 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { By } from '@angular/platform-browser';
+import { DebugElement } from '@angular/core';
+
+import { EditarTercerPilarComponent } from './editarTercerPilar.component';
+
+describe('EditarTercerPilarComponent', () => {
+ let component: EditarTercerPilarComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ EditarTercerPilarComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(EditarTercerPilarComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/pilares/tercerPilarGrid/editarTercerPilar/editarTercerPilar.component.ts b/src/app/pilares/tercerPilarGrid/editarTercerPilar/editarTercerPilar.component.ts
new file mode 100644
index 000000000..605a8c634
--- /dev/null
+++ b/src/app/pilares/tercerPilarGrid/editarTercerPilar/editarTercerPilar.component.ts
@@ -0,0 +1,240 @@
+import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { Router } from '@angular/router';
+import { Observable } from 'rxjs';
+import { ActivatedRoute } from '@angular/router';
+import { FormBuilder, FormGroup, Validators} from '@angular/forms';
+import { MatDialog } from '@angular/material/dialog';
+import { ConfirmDialogComponent } from 'app/shared/confirm-dialog/confirm-dialog.component';
+import { ConfirmCreationComponent } from 'app/shared/confirm-creation/confirm-creation.component';
+
+
+@Component({
+ selector: 'app-editarTercerPilar',
+ templateUrl: './editarTercerPilar.component.html',
+ styleUrls: ['./editarTercerPilar.component.css']
+})
+export class EditarTercerPilarComponent implements OnInit {
+
+ editarTercerPilarForm: FormGroup;
+ httpOptions: any;
+ token: any;
+ response: any;
+ datosCargados: boolean;
+ @ViewChild('fechaInput') fechaInput: ElementRef;
+ ciudades: any[]; // Declarar la propiedad 'ciudades'
+ paises: any[]; // Declarar la propiedad 'paises'
+ selectedCiudad: string;
+ selectedPais: string;
+ data: any;
+ pais: any; // cambia a tipo any
+ fechaCreacion: string;
+ rolId: number;
+ mostrarBotonGuardar: boolean = false;
+
+ constructor(private http: HttpClient, private router: Router, public dialog: MatDialog,
+ private activatedRoute: ActivatedRoute, private formBuilder: FormBuilder) {
+ this.editarTercerPilarForm = this.formBuilder.group({
+ id: [null],
+ fechaCreacion: [null, Validators.required],
+ numRegiones: [null, Validators.required],
+ numDiocesisEstablecidas: [null, Validators.required],
+ numDiocesisContacto: [null, Validators.required],
+ numDiocesisExpansion: [null, Validators.required],
+ numDiocesisEclisiastica: [null, Validators.required],
+ 'select-pais': ['', Validators.required],
+ 'select-ciudad': ['', Validators.required]
+ });
+ }
+ ngOnInit() {
+
+
+ let token = localStorage.getItem('jwt');
+ let rolIdString = localStorage.getItem('rolId');
+ this.rolId = parseInt(rolIdString, 10);
+ this.mostrarBotonGuardar = this.actualizarMostrarBotonGuardar(this.rolId);
+
+ this.httpOptions = {
+ headers: new HttpHeaders({
+ 'Authorization': 'Bearer ' + token,
+ 'Content-Type': 'application/json'
+ })
+ };
+ const elementId = this.activatedRoute.snapshot.paramMap.get('id');
+
+ this.obtenerDatosDelPilar(elementId).subscribe(data => {
+ // Asignar los datos del elemento al formulario utilizando setValue()
+
+ let fecha = new Date(data.response.fechaCreacion);
+ let fechaFormateada = fecha.toISOString().substring(0, 10);
+ this.editarTercerPilarForm.controls['fechaCreacion'].setValue(fechaFormateada);
+ this.editarTercerPilarForm.controls['numRegiones'].setValue(data.response.numRegiones);
+ this.editarTercerPilarForm.controls['numDiocesisEstablecidas'].setValue(data.response.numDiocesisEstablecidas);
+ this.editarTercerPilarForm.controls['numDiocesisContacto'].setValue(data.response.numDiocesisContacto);
+ this.editarTercerPilarForm.controls['numDiocesisExpansion'].setValue(data.response.numDiocesisExpansion);
+ this.editarTercerPilarForm.controls['numDiocesisEclisiastica'].setValue(data.response.numDiocesisEclisiastica);
+
+ const pais = data.response.ciudad.pais;
+ const ciudad = data.response.ciudad;
+
+ console.log(pais.id)
+ this.editarTercerPilarForm.controls['select-pais'].setValue(pais.id);
+
+ this.obtenerDatosPais(pais.id).subscribe((data: any) => {
+ const paises = data.response;
+ const selectPais = document.getElementById('select-pais') as HTMLSelectElement;
+
+ selectPais.innerHTML = '';
+
+ paises.forEach((pais: any) => {
+ const option = document.createElement('option');
+ option.value = pais.id;
+ option.text = pais.name;
+ selectPais.appendChild(option);
+ });
+
+ // Establecemos el país seleccionado en el select del país
+ this.editarTercerPilarForm.controls['select-pais'].setValue(pais.id);
+ });
+
+ this.obtenerDatosCiudad(pais.id).subscribe((data: any) => {
+ const ciudades = data.response;
+ console.log(ciudades);
+ const selectCiudad = document.getElementById('select-ciudad') as HTMLSelectElement;
+
+ selectCiudad.innerHTML = '';
+
+ ciudades.forEach((ciudad: any) => {
+ const option = document.createElement('option');
+ option.value = ciudad.id;
+ option.text = ciudad.name;
+ selectCiudad.appendChild(option);
+ });
+ selectCiudad.disabled = false;
+
+ // Establecemos la ciudad seleccionada en el select de la ciudad
+ this.editarTercerPilarForm.controls['select-ciudad'].setValue(ciudad.id);
+ });
+
+ });
+
+ }
+ actualizarMostrarBotonGuardar(rol: number): boolean {
+ console.log(rol);
+ const mostrarBoton = rol !== 1;
+ console.log(mostrarBoton);
+ return mostrarBoton;
+ }
+ obtenerDatosDelPilar(id: string): Observable {
+ const params = { id: id };
+ console.log(this.token);
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/pilar/tercerPilar/get?id=${params.id}`;
+ const response = this.http.get(url, this.httpOptions);
+
+ return response
+ }
+
+ openDialog():void{
+ const dialogRef = this.dialog.open(ConfirmDialogComponent,{
+ data: "¿Estás seguro que la informacion ingresada es correcta?"
+ });
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ this.editarPilar();
+ }
+ })
+ }
+
+ openDialogConfirm():void{
+ const dialogRef = this.dialog.open(ConfirmCreationComponent,{
+ data: ""
+ });
+
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ close;
+ }
+ })
+ }
+
+ editarPilar() {
+ const id = this.activatedRoute.snapshot.paramMap.get('id');
+ const fecha = (document.getElementById("fechaCreacion") as HTMLInputElement).value;
+ const fechaObjeto = new Date(fecha);
+ const fechaCreacion = fechaObjeto.toISOString();
+ const numRegiones = (document.getElementById('numRegiones')).value;
+ const numDiocesisEstablecidas = (document.getElementById('numDiocesisEstablecidas')).value;
+ const numDiocesisContacto = (document.getElementById('numDiocesisContacto')).value;
+ const numDiocesisExpansion = (document.getElementById('numDiocesisExpansion')).value;
+ const numDiocesisEclisiastica = (document.getElementById('numDiocesisEclisiastica')).value;
+ const ciudadSeleccionada = (document.getElementById('select-ciudad')).value;
+
+ const editTercerPilar = {
+ id,
+ fechaCreacion,
+ numRegiones,
+ numDiocesisEstablecidas,
+ numDiocesisContacto,
+ numDiocesisExpansion,
+ numDiocesisEclisiastica,
+ ciudad: {
+ id: ciudadSeleccionada
+ },
+ };
+ const jsonTrecerPilar = JSON.stringify(editTercerPilar); // Convertir el objeto en una cadena JSON
+ console.log(jsonTrecerPilar);
+ console.log(this.httpOptions);
+
+ if (this.httpOptions) {
+ this.http.post('https://encuentro-matrimonial-backend.herokuapp.com/pilar/tercerPilar/update', jsonTrecerPilar, this.httpOptions)
+ .subscribe(data => {
+ console.log(data);
+ this.openDialogConfirm();
+ this.router.navigate(['/tercerPilarGrid']);
+ }, error => {
+ console.error(error);
+ });
+ } else {
+ alert('httpOptions no está definido, intente iniciar sesion nuevamente');
+ }
+ }
+ onSelectPais(idPais: string) {
+ this.obtenerDatosCiudad(idPais).subscribe((data: any) => {
+ const ciudades = data.response;
+ const selectCiudad = document.getElementById('select-ciudad') as HTMLSelectElement;
+
+ selectCiudad.innerHTML = '';
+
+ ciudades.forEach((ciudad: any) => {
+ const option = document.createElement('option');
+ option.value = ciudad.id;
+ option.text = ciudad.name;
+ selectCiudad.appendChild(option);
+ });
+ selectCiudad.disabled = false;
+
+ // reiniciar el selector de ciudades
+ this.editarTercerPilarForm.controls['select-ciudad'].reset();
+
+ });
+ }
+
+ obtenerDatosCiudad(id: string) {
+ const params = { id: id };
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/ubicacion/getCiudadPaises?id=${userId}`;
+ const response = this.http.get(url, this.httpOptions);
+ return response
+ }
+
+ obtenerDatosPais(id: string){
+ const params = { id: id };
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/ubicacion/getPaises?id=${userId}`;
+ const response = this.http.get(url, this.httpOptions);
+
+ return response
+ }
+}
\ No newline at end of file
diff --git a/src/app/pilares/tercerPilarGrid/nuevoTercerPilar/nuevoTercerPilar.component.css b/src/app/pilares/tercerPilarGrid/nuevoTercerPilar/nuevoTercerPilar.component.css
new file mode 100644
index 000000000..53d51aa1c
--- /dev/null
+++ b/src/app/pilares/tercerPilarGrid/nuevoTercerPilar/nuevoTercerPilar.component.css
@@ -0,0 +1,21 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+}
+.boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+ }
+ .letra{
+ color: black;
+ }
\ No newline at end of file
diff --git a/src/app/pilares/tercerPilarGrid/nuevoTercerPilar/nuevoTercerPilar.component.html b/src/app/pilares/tercerPilarGrid/nuevoTercerPilar/nuevoTercerPilar.component.html
new file mode 100644
index 000000000..3489cdfc5
--- /dev/null
+++ b/src/app/pilares/tercerPilarGrid/nuevoTercerPilar/nuevoTercerPilar.component.html
@@ -0,0 +1,99 @@
+
diff --git a/src/app/pilares/tercerPilarGrid/nuevoTercerPilar/nuevoTercerPilar.component.spec.ts b/src/app/pilares/tercerPilarGrid/nuevoTercerPilar/nuevoTercerPilar.component.spec.ts
new file mode 100644
index 000000000..faf45c975
--- /dev/null
+++ b/src/app/pilares/tercerPilarGrid/nuevoTercerPilar/nuevoTercerPilar.component.spec.ts
@@ -0,0 +1,27 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { By } from '@angular/platform-browser';
+import { DebugElement } from '@angular/core';
+
+import { NuevoTercerPilarComponent } from './nuevoTercerPilar.component';
+
+describe('NuevoTercerPilarComponent', () => {
+ let component: NuevoTercerPilarComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ NuevoTercerPilarComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(NuevoTercerPilarComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/pilares/tercerPilarGrid/nuevoTercerPilar/nuevoTercerPilar.component.ts b/src/app/pilares/tercerPilarGrid/nuevoTercerPilar/nuevoTercerPilar.component.ts
new file mode 100644
index 000000000..cbbc3c386
--- /dev/null
+++ b/src/app/pilares/tercerPilarGrid/nuevoTercerPilar/nuevoTercerPilar.component.ts
@@ -0,0 +1,152 @@
+import { Component, OnInit } from '@angular/core';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { Router } from '@angular/router';
+import { Observable } from 'rxjs';
+import { MatDialog } from '@angular/material/dialog';
+import { ConfirmDialogComponent } from 'app/shared/confirm-dialog/confirm-dialog.component';
+import { ConfirmCreationComponent } from 'app/shared/confirm-creation/confirm-creation.component';
+
+
+@Component({
+ selector: 'app-nuevoTercerPilar',
+ templateUrl: './nuevoTercerPilar.component.html',
+ styleUrls: ['./nuevoTercerPilar.component.css']
+})
+export class NuevoTercerPilarComponent implements OnInit {
+
+ httpOptions: any;
+ token: any;
+ ciudades: any[]; // Declarar la propiedad 'ciudades'
+ paises: any[]; // Declarar la propiedad 'paises'
+ selectedCiudad: string;
+ selectedPais: string;
+ constructor(private http: HttpClient, private router: Router, public dialog: MatDialog,) {}
+
+ ngOnInit() {
+ let token = localStorage.getItem('jwt');
+ console.log(token);
+
+ this.httpOptions = {
+ headers: new HttpHeaders({
+ 'Authorization': 'Bearer ' + token,
+ 'Content-Type': 'application/json'
+ })
+ };
+ // Obtener los datos del país
+ this.obtenerDatosPais().subscribe((data) => {
+ // Obtener la respuesta del JSON
+ const response = data.response;
+ // Obtener el select del HTML
+ const selectPais = document.getElementById('select-pais') as HTMLSelectElement;
+
+ // Crear un option por cada país en la respuesta del JSON
+ response.forEach((pais: any) => {
+ const option = document.createElement('option');
+ option.value = pais.id;
+ option.text = pais.name;
+ selectPais.appendChild(option);
+ });
+ });
+ }
+
+ openDialog():void{
+ const dialogRef = this.dialog.open(ConfirmDialogComponent,{
+ data: "¿Estás seguro que la informacion ingresada es correcta?"
+ });
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ this.newPilar();
+ }
+ })
+ }
+
+ openDialogConfirm():void{
+ const dialogRef = this.dialog.open(ConfirmCreationComponent,{
+ data: ""
+ });
+
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ close;
+ }
+ })
+ }
+
+ newPilar() {
+ const fecha = (document.getElementById("fecha") as HTMLInputElement).value;
+ const fechaObjeto = new Date(fecha);
+ const fechaCreacion = fechaObjeto.toISOString();
+ const numRegiones = (document.getElementById('numRegiones')).value;
+ const numDiocesisEstablecidas = (document.getElementById('numDiocesisEstablecidas')).value;
+ const numDiocesisContacto = (document.getElementById('numDiocesisContacto')).value;
+ const numDiocesisExpansion = (document.getElementById('numDiocesisExpansion')).value;
+ const numDiocesisEclisiastica = (document.getElementById('numDiocesisEclisiastica')).value;
+ const ciudadSeleccionada = (document.getElementById('select-ciudad')).value;
+
+ const newTercerPilar = {
+ fechaCreacion,
+ numRegiones,
+ numDiocesisEstablecidas,
+ numDiocesisContacto,
+ numDiocesisExpansion,
+ numDiocesisEclisiastica,
+ ciudad: {
+ id: ciudadSeleccionada
+ },
+ };
+
+ const jsonSegundoPilar = JSON.stringify(newTercerPilar); // Convertir el objeto en una cadena JSON
+ console.log(jsonSegundoPilar);
+
+ if (this.httpOptions) {
+ this.http.post('https://encuentro-matrimonial-backend.herokuapp.com/pilar/tercerPilar/create', jsonSegundoPilar, this.httpOptions)
+ .subscribe(data => {
+ console.log(data);
+ this.openDialogConfirm();
+ this.router.navigate(['/tercerPilarGrid']);
+ }, error => {
+ console.error(error);
+ });
+ } else {
+ alert('httpOptions no está definido, intente iniciar sesion nuevamente');
+ console.log('httpOptions no está definido');
+ }
+ }
+ onSelectPais(idPais: string) {
+ this.obtenerDatosCiudad(idPais).subscribe((data: any) => {
+ const ciudades = data.response;
+ const selectCiudad = document.getElementById('select-ciudad') as HTMLSelectElement;
+
+ // Limpiar el select de ciudades
+ selectCiudad.innerHTML = '';
+
+ // Crear un option por cada ciudad en la respuesta del JSON
+ ciudades.forEach((ciudad: any) => {
+ const option = document.createElement('option');
+ option.value = ciudad.id;
+ option.text = ciudad.name;
+ selectCiudad.appendChild(option);
+ });
+ selectCiudad.disabled = false;
+
+ });
+ }
+
+
+ obtenerDatosCiudad(id: string) {
+ const params = { id: id };
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/ubicacion/getCiudadPaises?id=${userId}`;
+ const response = this.http.get(url, this.httpOptions);
+ return response
+ }
+
+ obtenerDatosPais(): Observable {
+ console.log(this.token);
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/ubicacion/getPaises?id=${userId}`;
+ return this.http.get(url, this.httpOptions);
+ }
+}
diff --git a/src/app/pilares/tercerPilarGrid/tercerPilarGrid.component.css b/src/app/pilares/tercerPilarGrid/tercerPilarGrid.component.css
new file mode 100644
index 000000000..bec64574a
--- /dev/null
+++ b/src/app/pilares/tercerPilarGrid/tercerPilarGrid.component.css
@@ -0,0 +1,54 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+}
+.boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+ }
+
+ .boton-rojo2{
+ background-color: #ff0000; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+ }
+
+ .pagination {
+ display: flex;
+ padding-left: 0px;
+ list-style: none;
+ border-radius: 0.25rem;
+ justify-content: center;
+
+ }
+
+ .pagination .page-link {
+ color: #000000 !important;
+ background-color: white !important;
+ border-color: white !important;
+ }
+
+ .pagination .page-item.active .page-link {
+ color: white !important;
+ background-color: #cd4042 !important;
+ border-color: white !important;
+ }
+
+ .table-responsive.table-full-width th {
+ color: black;
+ font-weight: bold;
+ }
\ No newline at end of file
diff --git a/src/app/pilares/tercerPilarGrid/tercerPilarGrid.component.html b/src/app/pilares/tercerPilarGrid/tercerPilarGrid.component.html
new file mode 100644
index 000000000..54c2a3009
--- /dev/null
+++ b/src/app/pilares/tercerPilarGrid/tercerPilarGrid.component.html
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+ Fecha
+ #Regiones
+ #Diócesis Establecidas
+ #Diócesis de Contacto
+ #Diócesis de Expansion
+ Acciones
+
+
+
+
+
+ {{row.fechaCreacion}}
+ {{row.numRegiones}}
+ {{row.numDiocesisEstablecidas}}
+ {{row.numDiocesisContacto}}
+ {{row.numDiocesisExpansion}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Nombre
+ Realizado
+ Proyectado
+
+
+
+
+ {{row.key}}
+ {{row.value}}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/pilares/tercerPilarGrid/tercerPilarGrid.component.spec.ts b/src/app/pilares/tercerPilarGrid/tercerPilarGrid.component.spec.ts
new file mode 100644
index 000000000..5360d1d4a
--- /dev/null
+++ b/src/app/pilares/tercerPilarGrid/tercerPilarGrid.component.spec.ts
@@ -0,0 +1,28 @@
+/* tslint:disable:no-unused-variable */
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { By } from '@angular/platform-browser';
+import { DebugElement } from '@angular/core';
+
+import { TercerPilarGridComponent } from './tercerPilarGrid.component';
+
+describe('TercerPilarGridComponent', () => {
+ let component: TercerPilarGridComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ TercerPilarGridComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(TercerPilarGridComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/pilares/tercerPilarGrid/tercerPilarGrid.component.ts b/src/app/pilares/tercerPilarGrid/tercerPilarGrid.component.ts
new file mode 100644
index 000000000..65b4b6790
--- /dev/null
+++ b/src/app/pilares/tercerPilarGrid/tercerPilarGrid.component.ts
@@ -0,0 +1,305 @@
+import { Component, OnInit } from '@angular/core';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { Router } from '@angular/router';
+import * as XLSX from 'xlsx';
+import { MatDialog } from '@angular/material/dialog';
+import { ConfirmDownloadDialogComponent } from 'app/shared/confirm-download-dialog/confirm-download-dialog.component';
+import { ConfirmDeleteComponent } from 'app/shared/confirm-delete/confirm-delete.component';
+
+declare interface TableData {
+ headerRow: string[];
+ dataRows: string[][];
+}
+
+@Component({
+ selector: 'app-tercerPilarGrid',
+ templateUrl: './tercerPilarGrid.component.html',
+ styleUrls: ['./tercerPilarGrid.component.css']
+})
+
+export class TercerPilarGridComponent implements OnInit {
+ public tableData1: TableData;
+ public tableData2: TableData;
+ data: any; // variable para almacenar los datos obtenidos de la llamada
+ httpOptions: any;
+ currentPage = 1;
+ pageSize = 5; // Tamaño de página deseado
+ totalRecords = 20; // Número total de registros
+ // Calcula el número total de páginas
+ totalPages = Math.ceil(this.totalRecords / this.pageSize);
+ // Genera el array de páginas
+ pages = Array(this.totalPages).fill(0).map((x, i) => i + 1);
+
+ constructor(private http: HttpClient, private router: Router, public dialog: MatDialog) {
+ this.tableData1 = { headerRow: [], dataRows: [] };
+ this.tableData2 = { headerRow: [], dataRows: [] };
+ }
+
+ ngOnInit() {
+
+ let token = localStorage.getItem('jwt');
+ let userId = localStorage.getItem('userId');
+
+ this.httpOptions = {
+ headers: new HttpHeaders({
+ 'Authorization': 'Bearer ' + token,
+ 'Content-Type': 'application/json'
+ })
+ };
+
+ this.http.get(`https://encuentro-matrimonial-backend.herokuapp.com/pilar/tercerPilar/getAll?id=${userId}`, this.httpOptions)
+ .subscribe(response => {
+ console.log(response); // ver los datos obtenidos en la consola
+ const responseData = response['response']; // acceder al array 'response' dentro de la respuesta
+ if (responseData) {
+ this.tableData1.dataRows = responseData.slice(0, 5).map(item => {
+ return {
+ id: item.id,
+ numDiocesisContacto : item.numDiocesisContacto,
+ numDiocesisEclisiastica : item.numDiocesisEclisiastica,
+ fechaCreacion: new Date(new Date(item.fechaCreacion).getTime() + 86400000).toLocaleDateString('es-ES', {year: 'numeric', month: '2-digit', day: '2-digit'}).split('/').join('-'),
+ numDiocesisEstablecidas: item.numDiocesisEstablecidas,
+ numDiocesisExpansion: item.numDiocesisExpansion,
+ numRegiones: item.numDiocesisExpansion,
+ }
+ });
+
+ this.data = responseData;
+ // Calcular el número total de páginas
+ this.totalPages = Math.ceil(this.data.length / this.pageSize);
+
+ // Generar un array con las páginas
+ this.pages = Array.from({ length: this.totalPages }, (_, i) => i + 1);
+
+ // Actualizar los datos de la página actual
+ this.setCurrentPage(1);
+ }
+
+ const responseData2 = response['totalResponse']; // acceder al array 'response' dentro de la respuesta
+ this.tableData2.dataRows = responseData2.slice(0, 5).map(item => {
+ return {
+ key: item.key,
+ value : item.value,
+ }
+ });
+
+ });
+ }
+ setCurrentPage(page: number) {
+ this.currentPage = page;
+ const start = (page - 1) * 5;
+ const end = start + 5;
+ this.tableData1.dataRows = this.data.slice(start, end).map(item => {
+ return {
+ id: item.id,
+ numDiocesisContacto : item.numDiocesisContacto,
+ numDiocesisEclisiastica : item.numDiocesisEclisiastica,
+ fechaCreacion: new Date(new Date(item.fechaCreacion).getTime() + 86400000).toLocaleDateString('es-ES', {year: 'numeric', month: '2-digit', day: '2-digit'}).split('/').join('-'),
+ numDiocesisEstablecidas: item.numDiocesisEstablecidas,
+ numDiocesisExpansion: item.numDiocesisExpansion,
+ numRegiones: item.numDiocesisExpansion
+ }
+ });
+ }
+ calculatePageData() {
+ const start = (this.currentPage - 1) * this.pageSize;
+ const end = start + this.pageSize;
+ this.tableData1.dataRows = this.data.slice(start, end);
+ }
+ editRow(row) {
+ const elementId = row.id;
+ console.log(elementId);
+ this.router.navigate(['/editarTercerPilar', elementId]);
+
+ }
+ openDialogDelete(row):void{
+ const dialogRef = this.dialog.open(ConfirmDeleteComponent,{
+ });
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ this.deleteRow(row);
+ }
+ })
+ }
+ public deleteRow(row) {
+ const params = { id: row.id };
+ console.log(this.httpOptions);
+ const token = localStorage.getItem('jwt');
+ const httpOptions = {
+ headers: new HttpHeaders({
+ 'Content-Type': 'application/json',
+ 'Authorization': `Bearer ${token}`
+ })
+ };
+ const response = this.http.post(`https://encuentro-matrimonial-backend.herokuapp.com/pilar/tercerPilar/delete?id=${params.id}`, {}, httpOptions);
+
+ response.subscribe((result: any) => {
+
+ // Actualizar la tabla llamando la función getTableData()
+ this.getTableData();
+ this.getTableData2();
+ this.setCurrentPage(1);
+ });
+ }
+
+ public getTableData() {
+ let userId = localStorage.getItem('userId');
+
+ this.http.get(`https://encuentro-matrimonial-backend.herokuapp.com/pilar/tercerPilar/getAll?id=${userId}`, this.httpOptions)
+ .subscribe(response => {
+ console.log(response); // ver los datos obtenidos en la consola
+ const responseData = response['response']; // acceder al array 'response' dentro de la respuesta
+ this.tableData1.dataRows = responseData.map(item => {
+ return {
+ id: item.id,
+ numDiocesisContacto : item.numDiocesisContacto,
+ numDiocesisEclisiastica : item.numDiocesisEclisiastica,
+ fechaCreacion: new Date(new Date(item.fechaCreacion).getTime() + 86400000).toLocaleDateString('es-ES', {year: 'numeric', month: '2-digit', day: '2-digit'}).split('/').join('-'),
+ numDiocesisEstablecidas: item.numDiocesisEstablecidas,
+ numDiocesisExpansion: item.numDiocesisExpansion,
+ numRegiones: item.numDiocesisExpansion
+ }
+ });
+
+ this.data = responseData;
+ });
+ }
+
+ public getTableData2() {
+ let userId = localStorage.getItem('userId');
+ this.http.get(`https://encuentro-matrimonial-backend.herokuapp.com/pilar/primerPilar/getAll?id=${userId}`, this.httpOptions)
+ .subscribe(response => {
+ console.log(response); // ver los datos obtenidos en la consola
+ const responseData = response['totalResponse']; // acceder al array 'response' dentro de la respuesta
+ this.tableData2.dataRows = responseData.map(item => {
+ return {
+ key: item.key,
+ value : item.value,
+ }
+ });
+
+ this.data = responseData;
+ });
+ }
+
+ openDialog():void{
+ const dialogRef = this.dialog.open(ConfirmDownloadDialogComponent,{
+ });
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ this.generateExcel();
+ }
+ })
+ }
+ // Función para generar el archivo Excel
+ generateExcel() {
+ let userId = localStorage.getItem('userId');
+
+ // Realizar la consulta y obtener los datos en un arreglo
+ this.http.get(`https://encuentro-matrimonial-backend.herokuapp.com/pilar/tercerPilar/getAll?id=${userId}`, this.httpOptions)
+ .subscribe(data => {
+ const rows = [];
+
+ // Agregar los encabezados como primera fila
+ const headers = [
+ 'ID' ,
+ 'Número de diócesis de contacto',
+ 'Número de diócesis eclesiásticas',
+ 'Fecha de creación',
+ 'Número de diócesis establecidas',
+ 'Número de diócesis en expansión',
+ 'Número de regiones'
+ ]
+ rows.push(headers);
+ console.log(data)
+ const responseData = data['response']; // acceder al array 'response' dentro de la respuesta
+
+ responseData.forEach(item => {
+ const row = [
+ item.id,
+ item.numDiocesisContacto,
+ item.numDiocesisEclisiastica,
+ new Date(item.fechaCreacion).toLocaleDateString('es-ES'),
+ item.numDiocesisEstablecidas,
+ item.numDiocesisExpansion,
+ item.numRegiones
+ ];
+ rows.push(row);
+ });
+ // Crear una nueva hoja de cálculo de Excel
+ const worksheet = XLSX.utils.aoa_to_sheet(rows);
+
+ // Crear un libro de Excel y agregar la hoja de cálculo
+ const workbook = XLSX.utils.book_new();
+ XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
+
+ // Convertir el libro de Excel a un archivo binario y descargarlo
+ const file = XLSX.write(workbook, { type: 'binary', bookType: 'xlsx' });
+ const blob = new Blob([this.s2ab(file)], { type: 'application/octet-stream' });
+ const url = window.URL.createObjectURL(blob);
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = 'TercerPilar.xlsx';
+ link.click();
+ });
+}
+
+// Función para convertir una cadena a un arreglo de bytes
+s2ab(s: string) {
+ const buf = new ArrayBuffer(s.length);
+ const view = new Uint8Array(buf);
+ for (let i = 0; i < s.length; i++) {
+ view[i] = s.charCodeAt(i) & 0xff;
+ }
+ return buf;
+}
+filterByDate(selectedDate: string) {
+ const selectedDateObj = new Date(selectedDate);
+ const selectedYear = selectedDateObj.getFullYear();
+ const selectedMonth = selectedDateObj.getMonth() + 1; // Los meses en JavaScript van de 0 a 11
+ const selectedDay = selectedDateObj.getDate();
+
+ const filteredData = this.data.filter(item => {
+ const itemDate = new Date(item.fechaCreacion);
+ const itemYear = itemDate.getFullYear();
+ const itemMonth = itemDate.getMonth() + 1; // Los meses en JavaScript van de 0 a 11
+ const itemDay = itemDate.getDate();
+
+ return itemYear === selectedYear && itemMonth === selectedMonth && itemDay === selectedDay;
+ });
+
+ this.totalPages = Math.ceil(filteredData.length / this.pageSize); // Actualizar el número total de páginas
+
+ // Verificar si la página actual es mayor al nuevo número total de páginas y ajustarla si es necesario
+ if (this.currentPage > this.totalPages) {
+ this.currentPage = this.totalPages;
+ }
+
+ const start = (this.currentPage - 1) * this.pageSize;
+ const end = start + this.pageSize;
+
+ this.tableData1.dataRows = filteredData.slice(start, end).map(item => {
+ const fechaCreacion = new Date(item.fechaCreacion);
+ fechaCreacion.setDate(fechaCreacion.getDate() + 1);
+
+ return {
+
+ id: item.id,
+ numDiocesisContacto : item.numDiocesisContacto,
+ numDiocesisEclisiastica : item.numDiocesisEclisiastica,
+ fechaCreacion: fechaCreacion
+ .toLocaleDateString('es-ES', { year: 'numeric', month: '2-digit', day: '2-digit' })
+ .split('/')
+ .join('-'), numDiocesisEstablecidas: item.numDiocesisEstablecidas,
+ numDiocesisExpansion: item.numDiocesisExpansion,
+ numRegiones: item.numDiocesisExpansion,
+
+
+ };
+ });
+}
+
+
+}
diff --git a/src/app/register/register.component.css b/src/app/register/register.component.css
new file mode 100644
index 000000000..526c216a5
--- /dev/null
+++ b/src/app/register/register.component.css
@@ -0,0 +1,18 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+ }
+ .boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+ }
\ No newline at end of file
diff --git a/src/app/register/register.component.html b/src/app/register/register.component.html
new file mode 100644
index 000000000..4ece49096
--- /dev/null
+++ b/src/app/register/register.component.html
@@ -0,0 +1,130 @@
+
+
+
+
+
+
diff --git a/src/app/register/register.component.spec.ts b/src/app/register/register.component.spec.ts
new file mode 100644
index 000000000..2a64098d1
--- /dev/null
+++ b/src/app/register/register.component.spec.ts
@@ -0,0 +1,27 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { By } from '@angular/platform-browser';
+import { DebugElement } from '@angular/core';
+
+import { RegisterComponent } from './register.component';
+
+describe('RegisterComponent', () => {
+ let component: RegisterComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ RegisterComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(RegisterComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/register/register.component.ts b/src/app/register/register.component.ts
new file mode 100644
index 000000000..cd0be3bee
--- /dev/null
+++ b/src/app/register/register.component.ts
@@ -0,0 +1,23 @@
+import { Component, OnInit } from '@angular/core';
+import { Router } from '@angular/router';
+
+@Component({
+ selector: 'app-register',
+ templateUrl: './register.component.html',
+ styleUrls: ['./register.component.css']
+})
+export class RegisterComponent implements OnInit {
+
+ email: string;
+ password: string;
+ confirmPassword: string;
+
+ constructor() {}
+
+ register() {
+
+ }
+ ngOnInit() {
+ }
+
+}
diff --git a/src/app/services/auth.service.ts b/src/app/services/auth.service.ts
new file mode 100644
index 000000000..f9d3287a6
--- /dev/null
+++ b/src/app/services/auth.service.ts
@@ -0,0 +1,60 @@
+import { Injectable } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import { Observable, throwError, of } from 'rxjs';
+import { catchError, map } from 'rxjs/operators';
+import { Router } from '@angular/router';
+import { MatDialog } from '@angular/material/dialog';
+import { ConfimLoginErrorComponent } from 'app/shared/confim-login-error/confim-login-error.component';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class AuthService {
+ private baseUrl = 'https://encuentro-matrimonial-backend.herokuapp.com';
+ public isAuthenticated = false;
+
+ constructor(private http: HttpClient, private router: Router, public dialog: MatDialog) {}
+ openDialogCredenciales():void{
+ const dialogRef = this.dialog.open(ConfimLoginErrorComponent,{
+ data: ""
+ });
+
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ close;
+ }
+ })
+ }
+
+ login(username: string, password: string) {
+ return this.http.post(`${this.baseUrl}/login`, { username, password }).pipe(
+ map(response => {
+ // Guardar el token en local storage
+ if (response.code == "401"){
+ this.openDialogCredenciales();
+ }else {
+ this.router.navigate(['/dashboard']);
+
+ }
+ localStorage.setItem('jwt', response.jwt);
+ localStorage.setItem('userId', response.usuario.id);
+ localStorage.setItem('rolId', response.usuario.roles[0].id);
+ console.log(response.usuario.roles[0].id);
+ // Establecer isAuthenticated en true
+ this.isAuthenticated = true;
+ return this.isAuthenticated;
+ }),
+ catchError(error => {
+ if (error.status === 401) {
+ this.isAuthenticated = false;
+ return of(this.isAuthenticated);
+ }
+ return throwError(error);
+ })
+ )
+ }
+}
+
+ // Resto de métodos de la clase AuthService
+
\ No newline at end of file
diff --git a/src/app/shared/confim-login-error/confim-login-error.component.html b/src/app/shared/confim-login-error/confim-login-error.component.html
new file mode 100644
index 000000000..4c9d5d3ee
--- /dev/null
+++ b/src/app/shared/confim-login-error/confim-login-error.component.html
@@ -0,0 +1,7 @@
+{{message}}
+
+Credenciales incorrectas, por favor validar.
+
+
diff --git a/src/app/shared/confim-login-error/confim-login-error.component.scss b/src/app/shared/confim-login-error/confim-login-error.component.scss
new file mode 100644
index 000000000..27a8d8f4e
--- /dev/null
+++ b/src/app/shared/confim-login-error/confim-login-error.component.scss
@@ -0,0 +1,18 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 1px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 100%;
+ }
+ .boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 1px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 100%;
+ }
\ No newline at end of file
diff --git a/src/app/shared/confim-login-error/confim-login-error.component.spec.ts b/src/app/shared/confim-login-error/confim-login-error.component.spec.ts
new file mode 100644
index 000000000..161ed714b
--- /dev/null
+++ b/src/app/shared/confim-login-error/confim-login-error.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ConfimLoginErrorComponent } from './confim-login-error.component';
+
+describe('ConfimLoginErrorComponent', () => {
+ let component: ConfimLoginErrorComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ ConfimLoginErrorComponent ]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(ConfimLoginErrorComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/shared/confim-login-error/confim-login-error.component.ts b/src/app/shared/confim-login-error/confim-login-error.component.ts
new file mode 100644
index 000000000..eba0c6f72
--- /dev/null
+++ b/src/app/shared/confim-login-error/confim-login-error.component.ts
@@ -0,0 +1,21 @@
+import { Component, OnInit, Inject, INJECTOR } from '@angular/core';
+import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
+
+@Component({
+ selector: 'app-confim-login-error',
+ templateUrl: './confim-login-error.component.html',
+ styleUrls: ['./confim-login-error.component.scss']
+})
+export class ConfimLoginErrorComponent implements OnInit {
+
+ constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public message: string) { }
+
+ ngOnInit(): void {
+ }
+
+
+ onClickNo(): void {
+ this.dialogRef.close();
+
+ }
+}
diff --git a/src/app/shared/confirm-creation/confirm-creation.component.html b/src/app/shared/confirm-creation/confirm-creation.component.html
new file mode 100644
index 000000000..7c1266c73
--- /dev/null
+++ b/src/app/shared/confirm-creation/confirm-creation.component.html
@@ -0,0 +1,7 @@
+{{message}}
+
+Accion realizada correctamente.
+
+
diff --git a/src/app/shared/confirm-creation/confirm-creation.component.scss b/src/app/shared/confirm-creation/confirm-creation.component.scss
new file mode 100644
index 000000000..27a8d8f4e
--- /dev/null
+++ b/src/app/shared/confirm-creation/confirm-creation.component.scss
@@ -0,0 +1,18 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 1px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 100%;
+ }
+ .boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 1px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 100%;
+ }
\ No newline at end of file
diff --git a/src/app/shared/confirm-creation/confirm-creation.component.spec.ts b/src/app/shared/confirm-creation/confirm-creation.component.spec.ts
new file mode 100644
index 000000000..397006c90
--- /dev/null
+++ b/src/app/shared/confirm-creation/confirm-creation.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ConfirmCreationComponent } from './confirm-creation.component';
+
+describe('ConfirmCreationComponent', () => {
+ let component: ConfirmCreationComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ ConfirmCreationComponent ]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(ConfirmCreationComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/shared/confirm-creation/confirm-creation.component.ts b/src/app/shared/confirm-creation/confirm-creation.component.ts
new file mode 100644
index 000000000..d96c85e32
--- /dev/null
+++ b/src/app/shared/confirm-creation/confirm-creation.component.ts
@@ -0,0 +1,21 @@
+import { Component, OnInit, Inject, INJECTOR } from '@angular/core';
+import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
+
+@Component({
+ selector: 'app-confirm-creation',
+ templateUrl: './confirm-creation.component.html',
+ styleUrls: ['./confirm-creation.component.scss']
+})
+export class ConfirmCreationComponent implements OnInit {
+
+ constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public message: string) { }
+
+ ngOnInit(): void {
+ }
+
+ onClickNo(): void {
+ this.dialogRef.close();
+
+ }
+
+}
diff --git a/src/app/shared/confirm-delete/confirm-delete.component.html b/src/app/shared/confirm-delete/confirm-delete.component.html
new file mode 100644
index 000000000..d14d89b47
--- /dev/null
+++ b/src/app/shared/confirm-delete/confirm-delete.component.html
@@ -0,0 +1,9 @@
+{{message}}
+
+¿Deseas eliminar este elemento?
+
+
+
Confirmar
+
+
Cancelar
+
diff --git a/src/app/shared/confirm-delete/confirm-delete.component.scss b/src/app/shared/confirm-delete/confirm-delete.component.scss
new file mode 100644
index 000000000..27a8d8f4e
--- /dev/null
+++ b/src/app/shared/confirm-delete/confirm-delete.component.scss
@@ -0,0 +1,18 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 1px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 100%;
+ }
+ .boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 1px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 100%;
+ }
\ No newline at end of file
diff --git a/src/app/shared/confirm-delete/confirm-delete.component.spec.ts b/src/app/shared/confirm-delete/confirm-delete.component.spec.ts
new file mode 100644
index 000000000..b0e681eb9
--- /dev/null
+++ b/src/app/shared/confirm-delete/confirm-delete.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ConfirmDeleteComponent } from './confirm-delete.component';
+
+describe('ConfirmDeleteComponent', () => {
+ let component: ConfirmDeleteComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ ConfirmDeleteComponent ]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(ConfirmDeleteComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/shared/confirm-delete/confirm-delete.component.ts b/src/app/shared/confirm-delete/confirm-delete.component.ts
new file mode 100644
index 000000000..c050994e6
--- /dev/null
+++ b/src/app/shared/confirm-delete/confirm-delete.component.ts
@@ -0,0 +1,20 @@
+import { Component, OnInit, Inject, INJECTOR } from '@angular/core';
+import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
+
+@Component({
+ selector: 'app-confirm-delete',
+ templateUrl: './confirm-delete.component.html',
+ styleUrls: ['./confirm-delete.component.scss']
+})
+export class ConfirmDeleteComponent implements OnInit {
+
+ constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public message: string) { }
+
+ ngOnInit(): void {
+ }
+
+ onClickNo(): void {
+ this.dialogRef.close();
+
+ }
+}
diff --git a/src/app/shared/confirm-dialog/confirm-dialog.component.html b/src/app/shared/confirm-dialog/confirm-dialog.component.html
new file mode 100644
index 000000000..22ddba088
--- /dev/null
+++ b/src/app/shared/confirm-dialog/confirm-dialog.component.html
@@ -0,0 +1,9 @@
+{{message}}
+
+Si creas este registro, este sera visible para los demas miembros de la organización.
+
+
+
Confirmar
+
+
Cancelar
+
diff --git a/src/app/shared/confirm-dialog/confirm-dialog.component.scss b/src/app/shared/confirm-dialog/confirm-dialog.component.scss
new file mode 100644
index 000000000..e3dbc0e7a
--- /dev/null
+++ b/src/app/shared/confirm-dialog/confirm-dialog.component.scss
@@ -0,0 +1,18 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 1px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 100%;
+}
+.boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 1px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 100%;
+ }
\ No newline at end of file
diff --git a/src/app/shared/confirm-dialog/confirm-dialog.component.spec.ts b/src/app/shared/confirm-dialog/confirm-dialog.component.spec.ts
new file mode 100644
index 000000000..22434c50d
--- /dev/null
+++ b/src/app/shared/confirm-dialog/confirm-dialog.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ConfirmDialogComponent } from './confirm-dialog.component';
+
+describe('ConfirmDialogComponent', () => {
+ let component: ConfirmDialogComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ ConfirmDialogComponent ]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(ConfirmDialogComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/shared/confirm-dialog/confirm-dialog.component.ts b/src/app/shared/confirm-dialog/confirm-dialog.component.ts
new file mode 100644
index 000000000..67e429296
--- /dev/null
+++ b/src/app/shared/confirm-dialog/confirm-dialog.component.ts
@@ -0,0 +1,21 @@
+import { Component, OnInit, Inject, INJECTOR } from '@angular/core';
+import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
+
+@Component({
+ selector: 'app-confirm-dialog',
+ templateUrl: './confirm-dialog.component.html',
+ styleUrls: ['./confirm-dialog.component.scss']
+})
+export class ConfirmDialogComponent implements OnInit {
+
+ constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public message: string) { }
+
+ ngOnInit(): void {
+ }
+
+ onClickNo(): void {
+ this.dialogRef.close();
+
+ }
+
+}
diff --git a/src/app/shared/confirm-download-dialog/confirm-download-dialog.component.html b/src/app/shared/confirm-download-dialog/confirm-download-dialog.component.html
new file mode 100644
index 000000000..a037ff39f
--- /dev/null
+++ b/src/app/shared/confirm-download-dialog/confirm-download-dialog.component.html
@@ -0,0 +1,8 @@
+{{message}}
+
+Su archivo será descargado en un momento
+
+
\ No newline at end of file
diff --git a/src/app/shared/confirm-download-dialog/confirm-download-dialog.component.scss b/src/app/shared/confirm-download-dialog/confirm-download-dialog.component.scss
new file mode 100644
index 000000000..27a8d8f4e
--- /dev/null
+++ b/src/app/shared/confirm-download-dialog/confirm-download-dialog.component.scss
@@ -0,0 +1,18 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 1px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 100%;
+ }
+ .boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 1px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 100%;
+ }
\ No newline at end of file
diff --git a/src/app/shared/confirm-download-dialog/confirm-download-dialog.component.spec.ts b/src/app/shared/confirm-download-dialog/confirm-download-dialog.component.spec.ts
new file mode 100644
index 000000000..7cfdbb2de
--- /dev/null
+++ b/src/app/shared/confirm-download-dialog/confirm-download-dialog.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ConfirmDownloadDialogComponent } from './confirm-download-dialog.component';
+
+describe('ConfirmDownloadDialogComponent', () => {
+ let component: ConfirmDownloadDialogComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ ConfirmDownloadDialogComponent ]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(ConfirmDownloadDialogComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/shared/confirm-download-dialog/confirm-download-dialog.component.ts b/src/app/shared/confirm-download-dialog/confirm-download-dialog.component.ts
new file mode 100644
index 000000000..d97f53b0d
--- /dev/null
+++ b/src/app/shared/confirm-download-dialog/confirm-download-dialog.component.ts
@@ -0,0 +1,22 @@
+
+import { Component, OnInit, Inject, INJECTOR } from '@angular/core';
+import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
+
+@Component({
+ selector: 'app-confirm-download-dialog',
+ templateUrl: './confirm-download-dialog.component.html',
+ styleUrls: ['./confirm-download-dialog.component.scss']
+})
+export class ConfirmDownloadDialogComponent implements OnInit {
+
+ constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public message: string) { }
+
+ ngOnInit(): void {
+ }
+
+ onClickNo(): void {
+ this.dialogRef.close();
+
+ }
+
+}
diff --git a/src/app/shared/footer/footer.component.html b/src/app/shared/footer/footer.component.html
index 12fe1788b..75f34ec89 100644
--- a/src/app/shared/footer/footer.component.html
+++ b/src/app/shared/footer/footer.component.html
@@ -1,31 +1,5 @@
diff --git a/src/app/shared/navbar/navbar.component.html b/src/app/shared/navbar/navbar.component.html
index 6a5aca258..7ea88cac7 100644
--- a/src/app/shared/navbar/navbar.component.html
+++ b/src/app/shared/navbar/navbar.component.html
@@ -10,67 +10,7 @@
{{getTitle()}}
diff --git a/src/app/sidebar/sidebar.component.css b/src/app/sidebar/sidebar.component.css
new file mode 100644
index 000000000..0f0c6bdf3
--- /dev/null
+++ b/src/app/sidebar/sidebar.component.css
@@ -0,0 +1,25 @@
+/* Dropdown Content (Hidden by Default) */
+.dropdown-content {
+ display: none;
+ position: absolute;
+ margin-left: 12%;
+ background-color: #f1f1f1;
+ width: 200px;
+ box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
+ z-index: 1;
+ padding-bottom:12px;
+ }
+
+ /* Links inside the dropdown */
+ .dropdown-content a {
+ color: black;
+ text-decoration: none;
+ display: block;
+ font-size: 8px;
+ }
+
+ /* Change color of dropdown links on hover */
+ .dropdown-content a:hover {background-color: #dddddd00;}
+
+ /* Show the dropdown menu on hover */
+ .dropdown:hover .dropdown-content {display: block;}
\ No newline at end of file
diff --git a/src/app/sidebar/sidebar.component.html b/src/app/sidebar/sidebar.component.html
index 817b194c6..8d3dbd5ba 100644
--- a/src/app/sidebar/sidebar.component.html
+++ b/src/app/sidebar/sidebar.component.html
@@ -1,78 +1,22 @@
\ No newline at end of file
diff --git a/src/app/sidebar/sidebar.component.ts b/src/app/sidebar/sidebar.component.ts
index dec9a9c67..600d4ef43 100644
--- a/src/app/sidebar/sidebar.component.ts
+++ b/src/app/sidebar/sidebar.component.ts
@@ -1,22 +1,38 @@
-import { Component, OnInit } from '@angular/core';
+import { Component, OnInit, Injectable } from '@angular/core';
+import { BehaviorSubject } from 'rxjs';
declare const $: any;
declare interface RouteInfo {
- path: string;
+ path?: string;
title: string;
- icon: string;
+ icon?: string;
class: string;
+ tooltip?: string; // Tooltip text
+ type?: 'link' | 'dropDown' | 'icon' | 'separator' | 'extLink';
+ sub?: IChildItem[];
}
+
+interface IChildItem {
+ path?: string;
+ title: string;
+ icon: string;
+ class: string;
+ type?: string;
+ sub?: IChildItem[];
+}
+
export const ROUTES: RouteInfo[] = [
- { path: '/dashboard', title: 'Dashboard', icon: 'pe-7s-graph', class: '' },
- { path: '/user', title: 'User Profile', icon:'pe-7s-user', class: '' },
- { path: '/table', title: 'Table List', icon:'pe-7s-note2', class: '' },
- { path: '/typography', title: 'Typography', icon:'pe-7s-news-paper', class: '' },
- { path: '/icons', title: 'Icons', icon:'pe-7s-science', class: '' },
- { path: '/maps', title: 'Maps', icon:'pe-7s-map-marker', class: '' },
- { path: '/notifications', title: 'Notifications', icon:'pe-7s-bell', class: '' },
- { path: '/upgrade', title: 'Upgrade to PRO', icon:'pe-7s-rocket', class: 'active-pro' },
-];
+ { path: '/usuariosGrid', title: 'Lista usuarios', icon:'pe-7s-add-user', class: '', type:'link' },
+ { path: '/primerPilarGrid', title: 'Pilares', icon:'', class: '', type:'link', },
+ { path: '/primerPilarGrid', title: 'Primer pilar', icon:'pe-7s-plugin', class: '', type:'link' },
+ { path: '/segundoPilarGrid', title: 'Segundo pilar', icon:'pe-7s-plugin', class: '', type:'link' },
+ { path: '/tercerPilarGrid', title: 'Tercer pilar', icon:'pe-7s-plugin', class: '', type:'link' },
+ { path: '/cuartoPilarGrid', title: 'Cuarto pilar', icon:'pe-7s-plugin', class: '', type:'link' },
+ { path: '/matrimoniosGrid', title: 'Formación', icon:'', class: '', type:'link' },
+ { path: '/matrimoniosGrid', title: 'Matrimonios', icon:'pe-7s-leaf', class: '', type:'link' },
+ { path: '/sacerdotesGrid', title: 'Sacerdotes', icon:'pe-7s-id', class: '', type:'link' },
+ { path: '/login', title: 'Cerrar sesión', icon:'pe-7s-power', class: '', type:'link' },
+ ]
@Component({
selector: 'app-sidebar',
@@ -24,6 +40,7 @@ export const ROUTES: RouteInfo[] = [
})
export class SidebarComponent implements OnInit {
menuItems: any[];
+ openSidebar: boolean = true;
constructor() { }
diff --git a/src/app/sidebar/sidebar.module.ts b/src/app/sidebar/sidebar.module.ts
index 4db88fa7a..dfc21e8aa 100644
--- a/src/app/sidebar/sidebar.module.ts
+++ b/src/app/sidebar/sidebar.module.ts
@@ -7,6 +7,7 @@ import { SidebarComponent } from './sidebar.component';
imports: [ RouterModule, CommonModule ],
declarations: [ SidebarComponent ],
exports: [ SidebarComponent ]
+
})
export class SidebarModule {}
diff --git a/src/app/styles.css b/src/app/styles.css
new file mode 100644
index 000000000..b65fdb43f
--- /dev/null
+++ b/src/app/styles.css
@@ -0,0 +1,54 @@
+
+* {
+ box-sizing: border-box;
+ }
+ html,
+ body {
+ background: #ecf0f3;
+ }
+ h1 {
+ margin: 0;
+ padding: 0;
+ }
+ .custom-form {
+ min-width: 300px;
+ max-width: 60%;
+ margin: 0px auto;
+ background: rgba(255, 255, 255, 0.15);
+ padding: 2rem 3rem;
+ margin: auto;
+ border-radius: 2.5rem;
+ background-color: #ecf0f3;
+ box-shadow: 13px 13px 20px #cbced1, -13px -13px 20px #ffffff;
+ color: black;
+ margin-top: 10rem;
+ }
+ .custom-form input {
+ display: block;
+ margin: 2rem 0;
+ width: 100%;
+ border-radius: 0.5rem;
+ padding: 1rem;
+ border: none;
+ box-shadow: inset -5px -5px 15px rgba(255, 255, 255, 0.8), inset 5px 5px 10px
+ rgba(0, 0, 0, 0.1);
+ border: 0 none;
+ background: #ebf5fc;
+ }
+ .custom-form button {
+ text-transform: uppercase;
+ letter-spacing: 0.15em;
+ border: none;
+ font-size: 0.875rem;
+ color: #ffffff;
+ font-weight: bold;
+ background-color: #bcd8c1;
+ width: 100%;
+ display: block;
+ padding: 0.875rem 1rem;
+ border-radius: 1.5rem;
+ box-shadow: 3px 3px 8px #b1b1b1, -3px -3px 8px #ffffff;
+ cursor: pointer;
+ }
+
+ @import "@angular/material/prebuilt-themes/indigo-pink.css"
\ No newline at end of file
diff --git a/src/app/tables/tables.component.html b/src/app/tables/tables.component.html
index e596186b5..28772e5ec 100644
--- a/src/app/tables/tables.component.html
+++ b/src/app/tables/tables.component.html
@@ -4,8 +4,27 @@
@@ -24,28 +43,7 @@ Striped Table with Hover
-
-
-
-
-
-
-
- {{ cell }}
-
-
-
-
- {{cell}}
-
-
-
-
-
-
+
diff --git a/src/app/typography/typography.component.html b/src/app/typography/typography.component.html
deleted file mode 100644
index 7d6d835cd..000000000
--- a/src/app/typography/typography.component.html
+++ /dev/null
@@ -1,82 +0,0 @@
-
-
-
-
-
-
-
-
-
-
Header 1
Light Bootstrap Table Heading
-
-
-
-
Header 2
Light Bootstrap Table Heading
-
-
-
Header 3
Light Bootstrap Table Heading
-
-
-
Header 4
Light Bootstrap Table Heading
-
-
-
Header 5
Light Bootstrap Table Heading
-
-
-
Header 6
Light Bootstrap Table Heading
-
-
-
Paragraph Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam.
-
-
-
Quote
-
-
- Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam.
-
-
- Steve Jobs, CEO Apple
-
-
-
-
-
-
Muted Text
-
- Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet.
-
-
-
-
-
Coloured Text
-
-
- Text Primary - Light Bootstrap Table Heading and complex bootstrap dashboard you've ever seen on the internet.
-
-
- Text Info - Light Bootstrap Table Heading and complex bootstrap dashboard you've ever seen on the internet.
-
-
- Text Success - Light Bootstrap Table Heading and complex bootstrap dashboard you've ever seen on the internet.
-
-
- Text Warning - Light Bootstrap Table Heading and complex bootstrap dashboard you've ever seen on the internet.
-
-
- Text Danger - Light Bootstrap Table Heading and complex bootstrap dashboard you've ever seen on the internet.
-
-
-
-
Small Tag
Header with small subtitle
".small" is a tag for the headers
-
-
-
-
-
-
-
diff --git a/src/app/typography/typography.component.ts b/src/app/typography/typography.component.ts
deleted file mode 100644
index b2439d662..000000000
--- a/src/app/typography/typography.component.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Component, OnInit } from '@angular/core';
-
-@Component({
- selector: 'app-typography',
- templateUrl: './typography.component.html',
- styleUrls: ['./typography.component.css']
-})
-export class TypographyComponent implements OnInit {
-
- constructor() { }
-
- ngOnInit() {
- }
-
-}
diff --git a/src/app/upgrade/upgrade.component.css b/src/app/upgrade/upgrade.component.css
deleted file mode 100644
index e69de29bb..000000000
diff --git a/src/app/upgrade/upgrade.component.html b/src/app/upgrade/upgrade.component.html
deleted file mode 100644
index cd5be50ce..000000000
--- a/src/app/upgrade/upgrade.component.html
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- Free
- PRO
-
-
-
-
- Components
- 16
- 115+
-
-
- Plugins
- 4
- 14+
-
-
- Example Pages
- 4
- 22+
-
-
- Documentation
-
-
-
-
-
-
-
-
- SASS Files
-
-
-
-
- Login/Register/Lock Pages
-
-
-
-
- Premium Support
-
-
-
-
-
- Free
- Just $49
-
-
-
-
- Current Version
-
-
- Upgrade to PRO
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/app/upgrade/upgrade.component.ts b/src/app/upgrade/upgrade.component.ts
deleted file mode 100644
index 661f4cba0..000000000
--- a/src/app/upgrade/upgrade.component.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Component, OnInit } from '@angular/core';
-
-@Component({
- selector: 'app-upgrade',
- templateUrl: './upgrade.component.html',
- styleUrls: ['./upgrade.component.css']
-})
-export class UpgradeComponent implements OnInit {
-
- constructor() { }
-
- ngOnInit() {
- }
-
-}
diff --git a/src/app/typography/typography.component.css b/src/app/user tables/tables.component.css
similarity index 100%
rename from src/app/typography/typography.component.css
rename to src/app/user tables/tables.component.css
diff --git a/src/app/user tables/tables.component.html b/src/app/user tables/tables.component.html
new file mode 100644
index 000000000..98c7a5422
--- /dev/null
+++ b/src/app/user tables/tables.component.html
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+ {{ cell }}
+
+
+
+
+ {{cell}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/tables/tables.component.spec.ts b/src/app/user tables/tables.component.spec.ts
similarity index 100%
rename from src/app/tables/tables.component.spec.ts
rename to src/app/user tables/tables.component.spec.ts
diff --git a/src/app/tables/tables.component.ts b/src/app/user tables/tables.component.ts
similarity index 64%
rename from src/app/tables/tables.component.ts
rename to src/app/user tables/tables.component.ts
index f0f41c064..6bd6a384b 100644
--- a/src/app/tables/tables.component.ts
+++ b/src/app/user tables/tables.component.ts
@@ -8,7 +8,8 @@ declare interface TableData {
@Component({
selector: 'app-tables',
templateUrl: './tables.component.html',
- styleUrls: ['./tables.component.css']
+ styleUrls: ['./tables.component.css']
+
})
export class TablesComponent implements OnInit {
public tableData1: TableData;
@@ -18,14 +19,18 @@ export class TablesComponent implements OnInit {
ngOnInit() {
this.tableData1 = {
- headerRow: [ 'ID', 'Name', 'Country', 'City', 'Salary'],
+ headerRow: [ 'Fecha', '#FDS', '#Matrimonios', '#Sacerdotes', '#Religiosos', '#Religiosas'],
dataRows: [
- ['1', 'Dakota Rice', 'Niger', 'Oud-Turnhout', '$36,738'],
- ['2', 'Minerva Hooper', 'Curaçao', 'Sinaai-Waas', '$23,789'],
- ['3', 'Sage Rodriguez', 'Netherlands', 'Baileux', '$56,142'],
- ['4', 'Philip Chaney', 'Korea, South', 'Overland Park', '$38,735'],
- ['5', 'Doris Greene', 'Malawi', 'Feldkirchen in Kärnten', '$63,542'],
- ['6', 'Mason Porter', 'Chile', 'Gloucester', '$78,615']
+ ['00/0000', '110', '1', '1', '1', '2'],
+ ['00/0000', '210', '2', '2', '3', '3'],
+ ['00/0000', '410', '3', '3', '4', '4'],
+ ['00/0000', '500', '4', '5', '2', '5'],
+ ['00/0000', '610', '1', '3', '1', '3'],
+ ['00/0000', '810', '3', '1', '3', '4'],
+ ['00/0000', '910', '4', '1', '1', '5'],
+ ['00/0000', '718', '5', '3', '2', '1']
+
+
]
};
this.tableData2 = {
diff --git a/src/app/user/user.component.css b/src/app/user/user.component.css
deleted file mode 100644
index e69de29bb..000000000
diff --git a/src/app/user/user.component.ts b/src/app/user/user.component.ts
deleted file mode 100644
index 204ccd28e..000000000
--- a/src/app/user/user.component.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Component, OnInit } from '@angular/core';
-
-@Component({
- selector: 'app-user',
- templateUrl: './user.component.html',
- styleUrls: ['./user.component.css']
-})
-export class UserComponent implements OnInit {
-
- constructor() { }
-
- ngOnInit() {
- }
-
-}
diff --git a/src/app/usuarios/usuariosCrear/usuarios.component.css b/src/app/usuarios/usuariosCrear/usuarios.component.css
new file mode 100644
index 000000000..53d51aa1c
--- /dev/null
+++ b/src/app/usuarios/usuariosCrear/usuarios.component.css
@@ -0,0 +1,21 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+}
+.boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+ }
+ .letra{
+ color: black;
+ }
\ No newline at end of file
diff --git a/src/app/usuarios/usuariosCrear/usuarios.component.html b/src/app/usuarios/usuariosCrear/usuarios.component.html
new file mode 100644
index 000000000..22be53dd2
--- /dev/null
+++ b/src/app/usuarios/usuariosCrear/usuarios.component.html
@@ -0,0 +1,103 @@
+
diff --git a/src/app/user/user.component.spec.ts b/src/app/usuarios/usuariosCrear/usuarios.component.spec.ts
similarity index 63%
rename from src/app/user/user.component.spec.ts
rename to src/app/usuarios/usuariosCrear/usuarios.component.spec.ts
index ccba791de..1f93c412a 100644
--- a/src/app/user/user.component.spec.ts
+++ b/src/app/usuarios/usuariosCrear/usuarios.component.spec.ts
@@ -3,21 +3,21 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { DebugElement } from '@angular/core';
-import { UserComponent } from './user.component';
+import { UsuariosComponent } from './usuarios.component';
-describe('UserComponent', () => {
- let component: UserComponent;
- let fixture: ComponentFixture;
+describe('UsuariosComponent', () => {
+ let component: UsuariosComponent;
+ let fixture: ComponentFixture;
beforeEach(async(() => {
TestBed.configureTestingModule({
- declarations: [ UserComponent ]
+ declarations: [ UsuariosComponent ]
})
.compileComponents();
}));
beforeEach(() => {
- fixture = TestBed.createComponent(UserComponent);
+ fixture = TestBed.createComponent(UsuariosComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
diff --git a/src/app/usuarios/usuariosCrear/usuarios.component.ts b/src/app/usuarios/usuariosCrear/usuarios.component.ts
new file mode 100644
index 000000000..ec23572e3
--- /dev/null
+++ b/src/app/usuarios/usuariosCrear/usuarios.component.ts
@@ -0,0 +1,178 @@
+import { Component, OnInit } from '@angular/core';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { Router } from '@angular/router';
+import { Observable } from 'rxjs';
+import { MatDialog } from '@angular/material/dialog';
+import { ConfirmDialogComponent } from 'app/shared/confirm-dialog/confirm-dialog.component';
+import { ConfirmCreationComponent } from 'app/shared/confirm-creation/confirm-creation.component';
+
+
+@Component({
+ selector: 'app-usuarios',
+ templateUrl: './usuarios.component.html',
+ styleUrls: ['./usuarios.component.css']
+})
+export class UsuariosComponent implements OnInit {
+
+ httpOptions: any;
+ token: any;
+ ciudades: any[];
+ paises: any[];
+ selectedCiudad: string;
+ selectedPais: string;
+ roles: any[] = [];
+
+ constructor(private http: HttpClient, private router: Router, public dialog: MatDialog) {}
+
+ ngOnInit() {
+ let token = localStorage.getItem('jwt');
+ console.log(token);
+
+ this.httpOptions = {
+ headers: new HttpHeaders({
+ 'Authorization': 'Bearer ' + token,
+ 'Content-Type': 'application/json'
+ })
+ };
+ // Obtener los datos de roles
+ this.obtenerDatosRol().subscribe((data) => {
+ this.roles = data.response;
+ });
+ // Obtener los datos del país
+ this.obtenerDatosPais().subscribe((data) => {
+ // Obtener la respuesta del JSON
+ const response = data.response;
+ // Obtener el select del HTML
+ const selectPais = document.getElementById('select-pais') as HTMLSelectElement;
+
+ // Crear un option por cada país en la respuesta del JSON
+ response.forEach((pais: any) => {
+ const option = document.createElement('option');
+ option.value = pais.id;
+ option.text = pais.name;
+ selectPais.appendChild(option);
+ });
+ });
+ }
+ openDialog():void{
+ const dialogRef = this.dialog.open(ConfirmDialogComponent,{
+ data: "¿Estás seguro que la informacion ingresada es correcta?"
+ });
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ this.newUsuario();
+ }
+ })
+ }
+
+ openDialogConfirm():void{
+ const dialogRef = this.dialog.open(ConfirmCreationComponent,{
+ data: ""
+ });
+
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ close;
+ }
+ })
+ }
+
+ newUsuario() {
+ const currentDate = new Date();
+
+ const name = (document.getElementById('name')).value;
+ const lastname = (document.getElementById('lastname')).value;
+ const username = (document.getElementById('nombreUsuario')).value;
+ const password = (document.getElementById('password')).value;
+ const doc = (document.getElementById('document')).value;
+ currentDate.setDate(currentDate.getDate() - 1);
+ const creationDate = currentDate.toISOString();
+ const state = true;
+ const selectRol = document.getElementById('select-rol') as HTMLSelectElement;
+ const rolSelecionado = selectRol.value;;
+ const email = (document.getElementById('email')).value;
+ const telefono = (document.getElementById('telefono')).value;
+ const ciudadSeleccionada = (document.getElementById('select-ciudad')).value;
+
+ const jsonUsuario = {
+ name,
+ lastname,
+ username,
+ password,
+ document: doc,
+ creationDate,
+ state,
+ email,
+ telefono,
+ ciudad: {
+ id: ciudadSeleccionada
+ },
+ roles: [{
+ id: rolSelecionado,
+ }]
+ };
+
+ const nuevoUsuario = JSON.stringify(jsonUsuario); // Convertir el objeto en una cadena JSON
+ console.log(nuevoUsuario);
+
+ if (this.httpOptions) {
+ this.http.post('https://encuentro-matrimonial-backend.herokuapp.com/user/createUsuario', nuevoUsuario, this.httpOptions)
+ .subscribe(data => {
+ console.log(data);
+ this.openDialogConfirm();
+ this.router.navigate(['/usuariosGrid']);
+ }, error => {
+ console.error(error);
+ });
+ } else {
+ alert('httpOptions no está definido, intente iniciar sesion nuevamente');
+ console.log('httpOptions no está definido');
+ }
+ }
+
+ onSelectPais(idPais: string) {
+ this.obtenerDatosCiudad(idPais).subscribe((data: any) => {
+ const ciudades = data.response;
+ const selectCiudad = document.getElementById('select-ciudad') as HTMLSelectElement;
+
+ // Limpiar el select de ciudades
+ selectCiudad.innerHTML = '';
+
+ // Crear un option por cada ciudad en la respuesta del JSON
+ ciudades.forEach((ciudad: any) => {
+ const option = document.createElement('option');
+ option.value = ciudad.id;
+ option.text = ciudad.name;
+ selectCiudad.appendChild(option);
+ });
+ selectCiudad.disabled = false;
+
+ });
+ }
+
+ obtenerDatosCiudad(id: string) {
+ const params = { id: id };
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/ubicacion/getCiudadPaises?id=${userId}`;
+ const response = this.http.get(url, this.httpOptions);
+ return response
+ }
+
+ obtenerDatosPais(): Observable {
+ console.log(this.token);
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/ubicacion/getPaises?id=${userId}`;
+ return this.http.get(url, this.httpOptions);
+ }
+
+ obtenerDatosRol(): Observable {
+ console.log(this.token);
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/rol/getRoles?id=${userId}`;
+ return this.http.get(url, this.httpOptions);
+ }
+
+
+}
diff --git a/src/app/usuarios/usuariosEditar/usuariosEditar.component.css b/src/app/usuarios/usuariosEditar/usuariosEditar.component.css
new file mode 100644
index 000000000..53d51aa1c
--- /dev/null
+++ b/src/app/usuarios/usuariosEditar/usuariosEditar.component.css
@@ -0,0 +1,21 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+}
+.boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+ }
+ .letra{
+ color: black;
+ }
\ No newline at end of file
diff --git a/src/app/usuarios/usuariosEditar/usuariosEditar.component.html b/src/app/usuarios/usuariosEditar/usuariosEditar.component.html
new file mode 100644
index 000000000..fedfe8fe1
--- /dev/null
+++ b/src/app/usuarios/usuariosEditar/usuariosEditar.component.html
@@ -0,0 +1,120 @@
+
+
diff --git a/src/app/usuarios/usuariosEditar/usuariosEditar.component.spec.ts b/src/app/usuarios/usuariosEditar/usuariosEditar.component.spec.ts
new file mode 100644
index 000000000..0ae58b96e
--- /dev/null
+++ b/src/app/usuarios/usuariosEditar/usuariosEditar.component.spec.ts
@@ -0,0 +1,26 @@
+/* tslint:disable:no-unused-variable */
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { By } from '@angular/platform-browser';
+import { UsuariosEditarComponent } from './usuariosEditar.component';
+
+describe('UsuariosEditarComponent', () => {
+ let component: UsuariosEditarComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ UsuariosEditarComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(UsuariosEditarComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/usuarios/usuariosEditar/usuariosEditar.component.ts b/src/app/usuarios/usuariosEditar/usuariosEditar.component.ts
new file mode 100644
index 000000000..79a907a9d
--- /dev/null
+++ b/src/app/usuarios/usuariosEditar/usuariosEditar.component.ts
@@ -0,0 +1,276 @@
+import { ChangeDetectionStrategy, Component, ElementRef, OnInit, ViewChild } from '@angular/core';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { Router } from '@angular/router';
+import { Observable, catchError, map } from 'rxjs';
+import { ActivatedRoute } from '@angular/router';
+import { FormBuilder, FormGroup, Validators} from '@angular/forms';
+import { DatePipe } from '@angular/common';
+import { MatDialog } from '@angular/material/dialog';
+import { ConfirmDialogComponent } from 'app/shared/confirm-dialog/confirm-dialog.component';
+import { ConfirmCreationComponent } from 'app/shared/confirm-creation/confirm-creation.component';
+
+
+@Component({
+ selector: 'app-usuariosEditar',
+ templateUrl: './usuariosEditar.component.html',
+ styleUrls: ['./usuariosEditar.component.css'],
+ changeDetection: ChangeDetectionStrategy.OnPush
+
+})
+export class UsuariosEditarComponent implements OnInit {
+
+ usuariosEditarForm: FormGroup;
+ httpOptions: any;
+ token: any;
+ response: any;
+ datosCargados: boolean;
+ @ViewChild('fechaInput') fechaInput: ElementRef;
+
+ ciudades: any[]; // Declarar la propiedad 'ciudades'
+ paises: any[]; // Declarar la propiedad 'paises'
+ selectedCiudad: string;
+ selectedPais: string;
+ data: any;
+ pais: any; // cambia a tipo any
+ creationDate: string;
+ roles: any[] = [];
+
+
+ constructor(private http: HttpClient, private router: Router, public dialog: MatDialog,
+ private activatedRoute: ActivatedRoute, private formBuilder: FormBuilder) {
+ this.usuariosEditarForm = this.formBuilder.group({
+ id: [null],
+ name: [null, Validators.required],
+ creationDate: [null, Validators.required],
+ lastname: [null, Validators.required],
+ username: [null, Validators.required],
+ password: [null, Validators.required],
+ document: [null, Validators.required],
+ state: [null, Validators.required],
+ email: [null, Validators.required],
+ telefono: [null, Validators.required],
+ 'select-rol': ['', Validators.required],
+ 'select-pais': ['', Validators.required],
+ 'select-ciudad': ['', Validators.required]
+ });
+ }
+ ngOnInit() {
+
+ let token = localStorage.getItem('jwt');
+ let rolIdString = localStorage.getItem('rolId');
+
+ this.httpOptions = {
+ headers: new HttpHeaders({
+ 'Authorization': 'Bearer ' + token,
+ 'Content-Type': 'application/json'
+ })
+ };
+ const elementId = this.activatedRoute.snapshot.paramMap.get('id');
+
+ this.obtenerDatosUsuario(elementId).subscribe(data => {
+ // Asignar los datos del elemento al formulario utilizando setValue()
+ let fecha = new Date(data.response.creationDate);
+ fecha.setDate(fecha.getDate() - 1);
+ let fechaFormateada = fecha.toISOString().substring(0, 10);;
+ this.usuariosEditarForm.controls['creationDate'].setValue(fechaFormateada);
+ this.usuariosEditarForm.controls['name'].setValue(data.response.name);
+ this.usuariosEditarForm.controls['lastname'].setValue(data.response.lastname);
+ this.usuariosEditarForm.controls['username'].setValue(data.response.username);
+ this.usuariosEditarForm.controls['password'].setValue(data.response.password);
+ this.usuariosEditarForm.controls['document'].setValue(data.response.document);
+ this.usuariosEditarForm.controls['email'].setValue(data.response.email);
+ this.usuariosEditarForm.controls['telefono'].setValue(data.response.telefono);
+
+
+ // Gestion de paises y roles
+ const pais = data.response.ciudad.pais;
+ const ciudad = data.response.ciudad;
+ const rol = data.response.roles[0].id;
+
+ this.usuariosEditarForm.controls['select-pais'].setValue(pais.id);
+
+ this.obtenerDatosPais(pais.id).subscribe((data: any) => {
+ const paises = data.response;
+ const selectPais = document.getElementById('select-pais') as HTMLSelectElement;
+
+ selectPais.innerHTML = '';
+
+ paises.forEach((pais: any) => {
+ const option = document.createElement('option');
+ option.value = pais.id;
+ option.text = pais.name;
+ selectPais.appendChild(option);
+ });
+
+ // Establecemos el país seleccionado en el select del país
+ this.usuariosEditarForm.controls['select-pais'].setValue(pais.id);
+ });
+
+ this.obtenerDatosCiudad(pais.id).subscribe((data: any) => {
+ const ciudades = data.response;
+ const selectCiudad = document.getElementById('select-ciudad') as HTMLSelectElement;
+
+ selectCiudad.innerHTML = '';
+
+ ciudades.forEach((ciudad: any) => {
+ const option = document.createElement('option');
+ option.value = ciudad.id;
+ option.text = ciudad.name;
+ selectCiudad.appendChild(option);
+ });
+ selectCiudad.disabled = false;
+
+ // Establecemos la ciudad seleccionada en el select de la ciudad
+ this.usuariosEditarForm.controls['select-ciudad'].setValue(ciudad.id);
+ });
+
+ this.obtenerDatosRol().subscribe((data: any) => {
+ const roles = data.response;
+ const selectRol = document.getElementById('select-rol') as HTMLSelectElement;
+
+ selectRol.innerHTML = '';
+
+ roles.forEach((rol: any) => {
+ const option = document.createElement('option');
+ option.value = rol.id;
+ option.text = rol.name;
+ selectRol.appendChild(option);
+ });
+ this.usuariosEditarForm.controls['select-rol'].setValue(rol);
+ });
+
+ });
+ }
+ obtenerDatosUsuario(id: string): Observable {
+ const params = { id: id };
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/user/get?id=${params.id}`;
+ const response = this.http.get(url, this.httpOptions);
+ return response.pipe(
+ map((data: any) => {
+ return data;
+ }),
+ catchError(error => {
+ console.error(error);
+ throw error;
+ })
+ );
+ }
+
+ openDialog():void{
+ const dialogRef = this.dialog.open(ConfirmDialogComponent,{
+ data: "¿Estás seguro que la informacion ingresada es correcta?"
+ });
+ dialogRef.afterClosed().subscribe(res => {
+ if(res){
+ this.editarUsuario();
+ }
+ })
+ }
+
+ openDialogConfirm():void{
+ const dialogRef = this.dialog.open(ConfirmCreationComponent,{
+ data: ""
+ });
+
+ dialogRef.afterClosed().subscribe(res => {
+ console.log(res);
+ if(res){
+ close;
+ }
+ })
+ }
+
+ editarUsuario() {
+ const id = this.activatedRoute.snapshot.paramMap.get('id');
+ const name = (document.getElementById('name')).value;
+ const fecha = (document.getElementById("fechaCreacion") as HTMLInputElement).value;
+ const fechaObjeto = new Date(fecha);
+ const creationDate = fechaObjeto.toISOString();
+ const lastname = (document.getElementById('lastname')).value;
+ const username = (document.getElementById('username')).value;
+ const password = (document.getElementById('password')).value;
+ const doc = (document.getElementById('document')).value;
+ const email = (document.getElementById('email')).value;
+ const telefono = (document.getElementById('telefono')).value;
+
+ const ciudadSeleccionada = parseInt((document.getElementById('select-ciudad')).value, 10);
+ const state = true;
+ const rolSeleccionado = parseInt((document.getElementById('select-rol')).value, 10);
+
+ const jsonUsuario = {
+ id,
+ name,
+ lastname,
+ username,
+ creationDate,
+ password,
+ document: doc,
+ email,
+ telefono,
+ state,
+ roles: [
+ {
+ id: rolSeleccionado,
+ }
+ ],
+ ciudad: {
+ id: ciudadSeleccionada
+ },
+ };
+
+ const nuevoUsuario = JSON.stringify(jsonUsuario); // Convertir el objeto en una cadena JSON
+
+ if (this.httpOptions) {
+ this.http.post('https://encuentro-matrimonial-backend.herokuapp.com/user/updateUsuario', nuevoUsuario, this.httpOptions)
+ .subscribe(data => {
+ this.openDialogConfirm();
+ this.router.navigate(['/usuariosGrid']);
+ }, error => {
+ console.error(error);
+ });
+ } else {
+ alert('httpOptions no está definido, intente iniciar sesion nuevamente');
+ }
+ }
+ onSelectPais(idPais: string) {
+ this.obtenerDatosCiudad(idPais).subscribe((data: any) => {
+ const ciudades = data.response;
+ const selectCiudad = document.getElementById('select-ciudad') as HTMLSelectElement;
+
+ selectCiudad.innerHTML = '';
+
+ ciudades.forEach((ciudad: any) => {
+ const option = document.createElement('option');
+ option.value = ciudad.id;
+ option.text = ciudad.name;
+ selectCiudad.appendChild(option);
+ });
+ selectCiudad.disabled = false;
+
+ // reiniciar el selector de ciudades
+ this.usuariosEditarForm.controls['select-ciudad'].reset();
+
+ });
+ }
+
+ obtenerDatosCiudad(id: string) {
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/ubicacion/getCiudadPaises?id=${userId}`;
+ const response = this.http.get(url, this.httpOptions);
+ return response
+ }
+
+ obtenerDatosPais(id: string){
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/ubicacion/getPaises?id=${userId}`;
+ const response = this.http.get(url, this.httpOptions);
+ return response
+ }
+
+ obtenerDatosRol(){
+ let userId = localStorage.getItem('userId');
+ const url = `https://encuentro-matrimonial-backend.herokuapp.com/rol/getRoles?id=${userId}`;
+ const response = this.http.get(url, this.httpOptions);
+ return response
+ }
+}
diff --git a/src/app/usuarios/usuariosGrid.component.css b/src/app/usuarios/usuariosGrid.component.css
new file mode 100644
index 000000000..b0c37ef55
--- /dev/null
+++ b/src/app/usuarios/usuariosGrid.component.css
@@ -0,0 +1,61 @@
+.boton-rojo {
+ background-color: #cd4042; /* color rojo */
+ color: #ffffff; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+}
+.boton-gris {
+ background-color: #cccccc; /* color gris */
+ color: #020202; /* color de texto blanco */
+ border-radius: 18px; /* bordes redondeados */
+ padding: 10px 30px; /* espaciado interno del botón */
+ border: none; /* sin borde */
+ width: 100%;
+ max-width: 200px;
+ }
+
+ .btn-buscar {
+ background-color: white;
+ border: 2px solid #cd4042;
+ border-radius: 18px;
+ color: #cd4042;
+ /*font-size: 18px;*/
+ padding: 10px 30px;
+ max-width: 200px;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ }
+
+ .btn-buscar:hover {
+ background-color: #cd4042;
+ color: white;
+ }
+
+.pagination {
+ display: flex;
+ padding-left: 0px;
+ list-style: none;
+ border-radius: 0.25rem;
+ justify-content: center;
+
+}
+
+.pagination .page-link {
+ color: #000000 !important;
+ background-color: white !important;
+ border-color: white !important;
+}
+
+.pagination .page-item.active .page-link {
+ color: white !important;
+ background-color: #cd4042 !important;
+ border-color: white !important;
+}
+
+.table-responsive.table-full-width th {
+ color: black;
+ font-weight: bold;
+}
\ No newline at end of file
diff --git a/src/app/usuarios/usuariosGrid.component.html b/src/app/usuarios/usuariosGrid.component.html
new file mode 100644
index 000000000..fbc7d07bf
--- /dev/null
+++ b/src/app/usuarios/usuariosGrid.component.html
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+ Nombre
+ Documento
+ Pais
+ Ciudad
+ Acciones
+
+
+
+
+ {{row.name}}
+ {{row.document}}
+ {{row.ciudad }}
+ {{row.pais }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/usuarios/usuariosGrid.component.spec.ts b/src/app/usuarios/usuariosGrid.component.spec.ts
new file mode 100644
index 000000000..30ed7d043
--- /dev/null
+++ b/src/app/usuarios/usuariosGrid.component.spec.ts
@@ -0,0 +1,28 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import {Router} from '@angular/router';
+import { By } from '@angular/platform-browser';
+import { DebugElement } from '@angular/core';
+
+import { UsuariosGridComponent } from './usuariosGrid.component';
+
+describe('UsuariosGridComponent', () => {
+ let component: UsuariosGridComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ UsuariosGridComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(UsuariosGridComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/usuarios/usuariosGrid.component.ts b/src/app/usuarios/usuariosGrid.component.ts
new file mode 100644
index 000000000..3123595e7
--- /dev/null
+++ b/src/app/usuarios/usuariosGrid.component.ts
@@ -0,0 +1,174 @@
+import { Component, OnInit } from '@angular/core';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { Router } from '@angular/router';
+import { MatDialog } from '@angular/material/dialog';
+import { ConfirmDownloadDialogComponent } from 'app/shared/confirm-download-dialog/confirm-download-dialog.component';
+import { ConfirmDeleteComponent } from 'app/shared/confirm-delete/confirm-delete.component';
+
+declare interface TableData {
+ headerRow: string[];
+ dataRows: string[][];
+}
+
+@Component({
+ selector: 'app-usuariosGrid',
+ templateUrl: './usuariosGrid.component.html',
+ styleUrls: ['./usuariosGrid.component.css'],
+})
+
+export class UsuariosGridComponent implements OnInit {
+ public tableData1: TableData;
+ public tableData2: TableData;
+ data: any; // variable para almacenar los datos obtenidos de la llamada
+ httpOptions: any;
+ pageSize = 5; // Tamaño de página deseado
+ totalRecords = 20; // Número total de registros
+ // Calcula el número total de páginas
+ totalPages = Math.ceil(this.totalRecords / this.pageSize);
+ // Genera el array de páginas
+ pages = Array(this.totalPages).fill(0).map((x, i) => i + 1);
+ currentPage = 1;
+ searchText= "";
+
+ constructor(private http: HttpClient, private router: Router, public dialog: MatDialog) {
+ this.tableData1 = { headerRow: [], dataRows: [] };
+ }
+
+ ngOnInit() {
+ let token = localStorage.getItem('jwt');
+ let userId = localStorage.getItem('userId');
+
+ this.httpOptions = {
+ headers: new HttpHeaders({
+ 'Authorization': 'Bearer ' + token,
+ 'Content-Type': 'application/json'
+ })
+ };
+
+ this.http.get(`https://encuentro-matrimonial-backend.herokuapp.com/user/getUsuarios?id=${userId}`, this.httpOptions)
+ .subscribe(response => {
+ const responseData = response['response']; // acceder al array 'response' dentro de la respuesta
+
+ this.tableData1.dataRows = responseData.slice(0, 5).map(item => {
+ const currentDate = new Date(item.creationDate);
+ currentDate.setDate(currentDate.getDate() - 1);
+ const modifiedCreationDate = currentDate.toISOString();
+ return {
+ id : item.id,
+ name : item.name,
+ document : item.document,
+ ciudad: item.ciudad.name,
+ pais: item.ciudad.pais.name
+ }
+ });
+ console.log(this.tableData1.dataRows);
+ this.data = responseData;
+ // Calcular el número total de páginas
+ this.totalPages = Math.ceil(this.data.length / this.pageSize);
+
+ // Generar un array con las páginas
+ this.pages = Array.from({ length: this.totalPages }, (_, i) => i + 1);
+
+ // Actualizar los datos de la página actual
+ this.setCurrentPage(1);
+ });
+ }
+ setCurrentPage(page: number) {
+ this.currentPage = page;
+ const start = (page - 1) * 5;
+ const end = start + 5;
+
+ this.tableData1.dataRows = this.data.slice(start, end).map(item => {
+ const currentDate = new Date(item.creationDate);
+ currentDate.setDate(currentDate.getDate() - 1);
+ const modifiedCreationDate = currentDate.toISOString();
+ return {
+ id : item.id,
+ name : item.name,
+ document : item.document,
+ ciudad: item.ciudad.name,
+ pais: item.ciudad.pais.name
+ }
+ });
+ }
+ calculatePageData() {
+ const start = (this.currentPage - 1) * this.pageSize;
+ const end = start + this.pageSize;
+ this.tableData1.dataRows = this.data.slice(start, end);
+ }
+ editRow(row) {
+ const id = row.id;
+ this.router.navigate(['/usuariosEditar', id]);
+
+ }
+ openDialogDelete(row):void{
+ const dialogRef = this.dialog.open(ConfirmDeleteComponent,{
+ });
+ dialogRef.afterClosed().subscribe(res => {
+ if(res){
+ this.deleteRow(row);
+ }
+ })
+ }
+ public deleteRow(row) {
+ const params = { id: row.id };
+ const token = localStorage.getItem('jwt');
+ const httpOptions = {
+ headers: new HttpHeaders({
+ 'Content-Type': 'application/json',
+ 'Authorization': `Bearer ${token}`
+ })
+ };
+ const response = this.http.post(`https://encuentro-matrimonial-backend.herokuapp.com/user/deleteUsuario?id=${params.id}`, {}, httpOptions);
+
+ response.subscribe((result: any) => {
+ this.setCurrentPage(1);
+ this.getTableData();
+ });
+ }
+
+ public getTableData() {
+ let userId = localStorage.getItem('userId');
+
+ this.http.get(`https://encuentro-matrimonial-backend.herokuapp.com/user/getUsuarios?id=${userId}`, this.httpOptions)
+ .subscribe(response => {
+ const responseData = response['response']; // acceder al array 'response' dentro de la respuesta
+ this.tableData1.dataRows = responseData.map(item => {
+ return {
+ id : item.id,
+ name : item.name,
+ document : item.document,
+ ciudad: item.ciudad.name,
+ pais: item.ciudad.pais.name
+ }
+ });
+
+ this.data = responseData;
+ });
+ }
+ filterByUsername(searchText: string) {
+ this.searchText = searchText.trim().toLowerCase();
+
+ if (this.searchText === '') {
+ // Si el campo de búsqueda está vacío, mostrar todos los resultados
+ this.tableData1.dataRows = this.data.map(item => ({
+ id : item.id,
+ name : item.name,
+ document : item.document,
+ ciudad: item.ciudad.name,
+ pais: item.ciudad.pais.name
+ }));
+ } else {
+ // Realizar la búsqueda por username y filtrar los resultados
+ this.tableData1.dataRows = this.data.filter(item =>
+ item.name.toLowerCase().includes(this.searchText)
+ ).map(item => ({
+ id : item.id,
+ name : item.name,
+ document : item.document,
+ ciudad: item.ciudad.name,
+ pais: item.ciudad.pais.name
+ }));
+ }
+ }
+}
diff --git a/src/assets/css/demo.css b/src/assets/css/demo.css
index 0aa24c3d6..a11a4f35e 100644
--- a/src/assets/css/demo.css
+++ b/src/assets/css/demo.css
@@ -1,18 +1,4 @@
-/*!
- =========================================================
- * Light Bootstrap Dashboard Angular - v1.5.1
- =========================================================
-
- * Product Page: https://www.creative-tim.com/product/light-bootstrap-dashboard-angular2
- * Copyright 2016 Creative Tim (http://www.creative-tim.com)
- * Licensed under MIT
-
- =========================================================
-
- * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
- */
@media (min-width: 992px){
.typo-line{
padding-left: 140px;
@@ -68,7 +54,7 @@
bottom: 10px;
}
.sidebar .nav > li.active-pro a{
- background: rgba(255, 255, 255, 0.14);
+ background: rgba(255, 255, 255, 0.103);
opacity: 1;
color: #FFFFFF;
}
@@ -77,3 +63,8 @@
.table-upgrade td:nth-child(3){
text-align: center;
}
+
+.imagenem{
+ width: 5000;
+
+}
diff --git a/src/assets/css/pe-icon-7-stroke.css b/src/assets/css/pe-icon-7-stroke.css
index 44bcbaa63..31233068f 100644
--- a/src/assets/css/pe-icon-7-stroke.css
+++ b/src/assets/css/pe-icon-7-stroke.css
@@ -18,8 +18,6 @@
font-variant: normal;
text-transform: none;
line-height: 1;
-
- /* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
diff --git a/src/assets/img/sidebar-5.jpg b/src/assets/img/a.jpg
similarity index 100%
rename from src/assets/img/sidebar-5.jpg
rename to src/assets/img/a.jpg
diff --git a/src/assets/img/encuentro_logo.png b/src/assets/img/encuentro_logo.png
new file mode 100644
index 000000000..3bd9b1f3b
Binary files /dev/null and b/src/assets/img/encuentro_logo.png differ
diff --git a/src/assets/img/encuentro_logo2.png b/src/assets/img/encuentro_logo2.png
new file mode 100644
index 000000000..ab16fc842
Binary files /dev/null and b/src/assets/img/encuentro_logo2.png differ
diff --git a/src/assets/img/encuentro_logo3.png b/src/assets/img/encuentro_logo3.png
new file mode 100644
index 000000000..1b7fa970a
Binary files /dev/null and b/src/assets/img/encuentro_logo3.png differ
diff --git a/src/assets/img/encuentro_logo_login.png b/src/assets/img/encuentro_logo_login.png
new file mode 100644
index 000000000..85d0a6e4b
Binary files /dev/null and b/src/assets/img/encuentro_logo_login.png differ
diff --git a/src/assets/img/encuentro_logos3.png b/src/assets/img/encuentro_logos3.png
new file mode 100644
index 000000000..cb5d5853b
Binary files /dev/null and b/src/assets/img/encuentro_logos3.png differ
diff --git a/src/assets/img/favicon.png b/src/assets/img/favicon.png
new file mode 100644
index 000000000..5e7a488ee
Binary files /dev/null and b/src/assets/img/favicon.png differ
diff --git a/src/assets/img/loginFondo.PNG b/src/assets/img/loginFondo.PNG
new file mode 100644
index 000000000..c5e6db381
Binary files /dev/null and b/src/assets/img/loginFondo.PNG differ
diff --git a/src/assets/img/logo-inicio.jpg b/src/assets/img/logo-inicio.jpg
new file mode 100644
index 000000000..ea33a7a8b
Binary files /dev/null and b/src/assets/img/logo-inicio.jpg differ
diff --git a/src/assets/img/opt_lbd_angular_thumbnail.jpg b/src/assets/img/opt_lbd_angular_thumbnail.jpg
deleted file mode 100644
index 4a20ea4ae..000000000
Binary files a/src/assets/img/opt_lbd_angular_thumbnail.jpg and /dev/null differ
diff --git a/src/assets/img/sidebar-5.png b/src/assets/img/sidebar-5.png
new file mode 100644
index 000000000..122af40a3
Binary files /dev/null and b/src/assets/img/sidebar-5.png differ
diff --git a/src/assets/sass/lbd/_navbars.scss b/src/assets/sass/lbd/_navbars.scss
index 4041b6376..8f888cbeb 100644
--- a/src/assets/sass/lbd/_navbars.scss
+++ b/src/assets/sass/lbd/_navbars.scss
@@ -44,14 +44,14 @@
.notification{
position: absolute;
- background-color: #FB404B;
+ background-color: #cd4042;
text-align: center;
border-radius: 10px;
min-width: 18px;
padding: 0 5px;
height: 18px;
font-size: 12px;
- color: #FFFFFF;
+ color: #ffffff00;
font-weight: bold;
line-height: 18px;
top: 0px;
diff --git a/src/assets/sass/lbd/_sidebar-and-main-panel.scss b/src/assets/sass/lbd/_sidebar-and-main-panel.scss
index 67b9bb86b..872c92159 100644
--- a/src/assets/sass/lbd/_sidebar-and-main-panel.scss
+++ b/src/assets/sass/lbd/_sidebar-and-main-panel.scss
@@ -97,7 +97,7 @@
li{
> a{
- color: #FFFFFF;
+ color: #ffffff00;
margin: 5px 15px;
opacity: .86;
border-radius: 4px;
@@ -110,7 +110,7 @@
}
&.active > a{
- color: #FFFFFF;
+ color: #ffffff00;
opacity: 1;
background: rgba(255,255,255,0.23);
diff --git a/src/assets/sass/light-bootstrap-dashboard.scss b/src/assets/sass/light-bootstrap-dashboard.scss
index d14bfb7b4..3f8e28522 100644
--- a/src/assets/sass/light-bootstrap-dashboard.scss
+++ b/src/assets/sass/light-bootstrap-dashboard.scss
@@ -1,24 +1,9 @@
-/*!
- =========================================================
- * Light Bootstrap Dashboard Angular - v1.9.0
- =========================================================
-
- * Product Page: https://www.creative-tim.com/product/light-bootstrap-dashboard-angular2
- * Copyright 2020 Creative Tim (http://www.creative-tim.com)
- * Licensed under MIT
-
- =========================================================
-
- * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
- */
@import "lbd/variables";
@import "lbd/mixins";
@import "lbd/typography";
-// Core CSS
@import "lbd/misc";
@import "lbd/sidebar-and-main-panel";
@import "lbd/buttons";
@@ -31,7 +16,6 @@
@import "lbd/navbars";
@import "lbd/footers";
-// Fancy Stuff
@import "lbd/dropdown";
@import "lbd/cards";
@import "lbd/chartist";
diff --git a/src/environments/environment.ts b/src/environments/environment.ts
index 00313f166..ffe8aed76 100644
--- a/src/environments/environment.ts
+++ b/src/environments/environment.ts
@@ -1,8 +1,3 @@
-// The file contents for the current environment will overwrite these during build.
-// The build system defaults to the dev environment which uses `environment.ts`, but if you do
-// `ng build --env=prod` then `environment.prod.ts` will be used instead.
-// The list of which env maps to which file can be found in `angular-cli.json`.
-
export const environment = {
production: false
};
diff --git a/src/favicon.png b/src/favicon.png
new file mode 100644
index 000000000..5e7a488ee
Binary files /dev/null and b/src/favicon.png differ
diff --git a/src/index.html b/src/index.html
index e15526114..e2f177554 100644
--- a/src/index.html
+++ b/src/index.html
@@ -1,37 +1,24 @@
-
-
+
- Light Bootstrap Dashboard by Creative Tim
+ Encuentro Matrimonial Mundial
-
+
+
-
-
-
-
+
+
+
+
-
+
-
+
+
diff --git a/src/main.ts b/src/main.ts
index 5887852d3..a9ca1caf8 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -1,18 +1,3 @@
-/*!
-
- =========================================================
- * Light Bootstrap Dashboard Angular - v1.9.0
- =========================================================
-
- * Product Page: https://www.creative-tim.com/product/light-bootstrap-dashboard-angular2
- * Copyright 2020 Creative Tim (http://www.creative-tim.com)
- * Licensed under MIT
-
- =========================================================
-
- * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
- */
import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
diff --git a/src/polyfills.ts b/src/polyfills.ts
index d39747f58..a69f1e85f 100644
--- a/src/polyfills.ts
+++ b/src/polyfills.ts
@@ -1,23 +1,2 @@
-// This file includes polyfills needed by Angular and is loaded before the app.
-// You can add your own extra polyfills to this file.
import 'zone.js/dist/zone';
-
-// If you need to support the browsers/features below, uncomment the import
-// and run `npm install import-name-here';
-// Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html
-
-// Needed for: IE9
-// import 'classlist.js';
-
-// Animations
-// Needed for: All but Chrome and Firefox, Not supported in IE9
-// import 'web-animations-js';
-
-// Date, currency, decimal and percent pipes
-// Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10
-// import 'intl';
-
-// NgClass on SVG elements
-// Needed for: IE10, IE11
-// import 'classlist.js';
(window as any)['global'] = window;
diff --git a/src/styles.css b/src/styles.css
index 90d4ee007..17ae19c06 100644
--- a/src/styles.css
+++ b/src/styles.css
@@ -1 +1,51 @@
-/* You can add global styles to this file, and also import other style files */
+* {
+ box-sizing: border-box;
+ }
+ html,
+ body {
+ background: #ecf0f3;
+ }
+ h1 {
+ margin: 0;
+ padding: 0;
+ }
+ .custom-form {
+ min-width: 300px;
+ max-width: 60%;
+ margin: 0px auto;
+ background: rgba(255, 255, 255, 0.15);
+ padding: 2rem 3rem;
+ margin: auto;
+ border-radius: 2.5rem;
+ background-color: #ecf0f3;
+ box-shadow: 13px 13px 20px #cbced1, -13px -13px 20px #ffffff;
+ color: black;
+ margin-top: 10rem;
+ }
+ .custom-form input {
+ display: block;
+ margin: 2rem 0;
+ width: 100%;
+ border-radius: 0.5rem;
+ padding: 1rem;
+ border: none;
+ box-shadow: inset -5px -5px 15px rgba(255, 255, 255, 0.8), inset 5px 5px 10px
+ rgba(0, 0, 0, 0.1);
+ border: 0 none;
+ background: #ebf5fc;
+ }
+ .custom-form button {
+ text-transform: uppercase;
+ letter-spacing: 0.15em;
+ border: none;
+ font-size: 0.875rem;
+ color: #ffffff;
+ font-weight: bold;
+ background-color: #bcd8c1;
+ width: 100%;
+ display: block;
+ padding: 0.875rem 1rem;
+ border-radius: 1.5rem;
+ box-shadow: 3px 3px 8px #b1b1b1, -3px -3px 8px #ffffff;
+ cursor: pointer;
+ }
\ No newline at end of file
diff --git a/src/test.ts b/src/test.ts
index 9bf72267e..cf2924f5f 100644
--- a/src/test.ts
+++ b/src/test.ts
@@ -1,5 +1,3 @@
-// This file is required by karma.conf.js and loads recursively all the .spec and framework files
-
import 'zone.js/dist/long-stack-trace-zone';
import 'zone.js/dist/proxy.js';
import 'zone.js/dist/sync-test';
@@ -12,21 +10,15 @@ import {
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
-// Unfortunately there's no typing for the `__karma__` variable. Just declare it as any.
declare var __karma__: any;
declare var require: any;
-// Prevent Karma from running prematurely.
__karma__.loaded = function () {};
-// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting()
);
-// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
-// And load the modules.
context.keys().map(context);
-// Finally, start Karma to run the tests.
__karma__.start();